The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/8199
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === Fixes #7903.
From 78853e03434fcb0cb57abea641c88a5c67793d98 Mon Sep 17 00:00:00 2001 From: Kevin Turner <kevintur...@utexas.edu> Date: Sat, 28 Nov 2020 17:38:51 -0600 Subject: [PATCH] lxd/instance: Adds per-struct contextual logger. --- lxd/instance/drivers/driver_common.go | 2 + lxd/instance/drivers/driver_lxc.go | 214 +++++++++++++------------- lxd/instance/drivers/driver_qemu.go | 124 +++++++-------- 3 files changed, 173 insertions(+), 167 deletions(-) diff --git a/lxd/instance/drivers/driver_common.go b/lxd/instance/drivers/driver_common.go index ecb5d9bf55..d849b6b6c8 100644 --- a/lxd/instance/drivers/driver_common.go +++ b/lxd/instance/drivers/driver_common.go @@ -21,6 +21,7 @@ import ( storagePools "github.com/lxc/lxd/lxd/storage" "github.com/lxc/lxd/shared" "github.com/lxc/lxd/shared/api" + "github.com/lxc/lxd/shared/logger" ) // common provides structure common to all instance types. @@ -41,6 +42,7 @@ type common struct { lastUsedDate time.Time localConfig map[string]string localDevices deviceConfig.Devices + logger logger.Logger name string node string profiles []string diff --git a/lxd/instance/drivers/driver_lxc.go b/lxd/instance/drivers/driver_lxc.go index 35b353e588..6f0e93e5d3 100644 --- a/lxd/instance/drivers/driver_lxc.go +++ b/lxd/instance/drivers/driver_lxc.go @@ -155,6 +155,7 @@ func lxcCreate(s *state.State, args db.InstanceArgs) (instance.Instance, error) lastUsedDate: args.LastUsedDate, localConfig: args.Config, localDevices: args.Devices, + logger: logging.AddContext(logger.Log, log.Ctx{"instanceType": args.Type.String, "instanceName": args.Name}), name: args.Name, node: args.Node, profiles: args.Profiles, @@ -190,7 +191,7 @@ func lxcCreate(s *state.State, args db.InstanceArgs) (instance.Instance, error) "ephemeral": d.ephemeral, } - logger.Info("Creating container", ctxMap) + d.common.logger.Info("Creating container", ctxMap) // Load the config. err := d.init() @@ -327,7 +328,7 @@ func lxcCreate(s *state.State, args db.InstanceArgs) (instance.Instance, error) } } - logger.Info("Created container", ctxMap) + d.common.logger.Info("Created container", ctxMap) d.state.Events.SendLifecycle(d.project, "container-created", fmt.Sprintf("/1.0/containers/%s", d.name), nil) revert.Success() @@ -380,6 +381,7 @@ func lxcInstantiate(s *state.State, args db.InstanceArgs, expandedDevices device lastUsedDate: args.LastUsedDate, localConfig: args.Config, localDevices: args.Devices, + logger: logging.AddContext(logger.Log, log.Ctx{"instanceType": args.Type.String, "instanceName": args.Name}), name: args.Name, node: args.Node, profiles: args.Profiles, @@ -1289,14 +1291,14 @@ func (d *lxc) RegisterDevices() { } if err != nil { - logger.Error("Failed to load device to register", log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name}) + d.common.logger.Error("Failed to load device to register", log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name}) continue } // Check whether device wants to register for any events. err = dev.Register() if err != nil { - logger.Error("Failed to register device", log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name}) + d.common.logger.Error("Failed to register device", log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name}) continue } } @@ -1340,7 +1342,7 @@ func (d *lxc) deviceAdd(deviceName string, rawConfig deviceConfig.Device, instan // deviceStart loads a new device and calls its Start() function. func (d *lxc) deviceStart(deviceName string, rawConfig deviceConfig.Device, instanceRunning bool) (*deviceConfig.RunConfig, error) { - logger := logging.AddContext(logger.Log, log.Ctx{"device": deviceName, "type": rawConfig["type"], "project": d.Project(), "instance": d.Name()}) + logger := logging.AddContext(d.common.logger, log.Ctx{"device": deviceName, "type": rawConfig["type"], "project": d.Project(), "instance": d.Name()}) logger.Debug("Starting device") dev, configCopy, err := d.deviceLoad(deviceName, rawConfig) @@ -1505,7 +1507,7 @@ func (d *lxc) deviceUpdate(deviceName string, rawConfig deviceConfig.Device, old // Accepts a stopHookNetnsPath argument which is required when run from the onStopNS hook before the // container's network namespace is unmounted (which is required for NIC device cleanup). func (d *lxc) deviceStop(deviceName string, rawConfig deviceConfig.Device, instanceRunning bool, stopHookNetnsPath string) error { - logger := logging.AddContext(logger.Log, log.Ctx{"device": deviceName, "type": rawConfig["type"], "project": d.Project(), "instance": d.Name()}) + logger := logging.AddContext(d.common.logger, log.Ctx{"device": deviceName, "type": rawConfig["type"], "project": d.Project(), "instance": d.Name()}) logger.Debug("Stopping device") dev, configCopy, err := d.deviceLoad(deviceName, rawConfig) @@ -1631,7 +1633,7 @@ func (d *lxc) deviceDetachNIC(configCopy map[string]string, netIF []deviceConfig if err != nil { return errors.Wrapf(err, "Failed to detach interface: %q to %q", configCopy["name"], devName) } - logger.Debugf("Detached NIC device interface: %q to %q", configCopy["name"], devName) + d.common.logger.Debug(fmt.Sprintf("Detached NIC device interface: %q to %q", configCopy["name"], devName)) } } @@ -1677,7 +1679,7 @@ func (d *lxc) deviceHandleMounts(mounts []deviceConfig.MountEntryItem) error { // Only warn here and don't fail as removing a directory // mount may fail if there was already files inside // directory before it was mouted over preventing delete. - logger.Warnf("Could not remove the device path inside container: %s", err) + d.common.logger.Warn(fmt.Sprintf("Could not remove the device path inside container: %s", err)) } } } @@ -1688,7 +1690,7 @@ func (d *lxc) deviceHandleMounts(mounts []deviceConfig.MountEntryItem) error { // deviceRemove loads a new device and calls its Remove() function. func (d *lxc) deviceRemove(deviceName string, rawConfig deviceConfig.Device, instanceRunning bool) error { - logger := logging.AddContext(logger.Log, log.Ctx{"device": deviceName, "type": rawConfig["type"], "project": d.Project(), "instance": d.Name()}) + logger := logging.AddContext(d.common.logger, log.Ctx{"device": deviceName, "type": rawConfig["type"], "project": d.Project(), "instance": d.Name()}) dev, _, err := d.deviceLoad(deviceName, rawConfig) @@ -1895,7 +1897,7 @@ func (d *lxc) startCommon() (string, []func() error, error) { return "", nil, fmt.Errorf("Container is protected against filesystem shifting") } - logger.Debugf("Container idmap changed, remapping") + d.common.logger.Debug("Container idmap changed, remapping") d.updateProgress("Remapping container filesystem") storageType, err := d.getStorageType() @@ -2013,7 +2015,7 @@ func (d *lxc) startCommon() (string, []func() error, error) { revert.Add(func() { err := d.deviceStop(dev.Name, dev.Config, false, "") if err != nil { - logger.Errorf("Failed to cleanup device %q: %v", dev.Name, err) + d.common.logger.Error(fmt.Sprintf("Failed to cleanup device %q: %v", dev.Name, err)) } }) if runConf == nil { @@ -2253,7 +2255,7 @@ func (d *lxc) Start(stateful bool) error { "stateful": stateful} if op.Action() == "start" { - logger.Info("Starting container", ctxMap) + d.common.logger.Info("Starting container", ctxMap) } // If stateful, restore now @@ -2300,7 +2302,7 @@ func (d *lxc) Start(stateful bool) error { } if op.Action() == "start" { - logger.Info("Started container", ctxMap) + d.common.logger.Info("Started container", ctxMap) d.state.Events.SendLifecycle(d.project, "container-started", fmt.Sprintf("/1.0/containers/%s", d.name), nil) } @@ -2358,7 +2360,7 @@ func (d *lxc) Start(stateful bool) error { } } - logger.Error("Failed starting container", ctxMap) + d.common.logger.Error("Failed starting container", ctxMap) // Return the actual error op.Done(err) @@ -2376,7 +2378,7 @@ func (d *lxc) Start(stateful bool) error { } if op.Action() == "start" { - logger.Info("Started container", ctxMap) + d.common.logger.Info("Started container", ctxMap) d.state.Events.SendLifecycle(d.project, "container-started", fmt.Sprintf("/1.0/containers/%s", d.name), nil) } @@ -2442,7 +2444,7 @@ func (d *lxc) onStart(_ map[string]string) error { d.fromHook = false err := d.setNetworkPriority() if err != nil { - logger.Error("Failed to apply network priority", log.Ctx{"container": d.name, "err": err}) + d.common.logger.Error("Failed to apply network priority", log.Ctx{"container": d.name, "err": err}) } }(d) } @@ -2501,7 +2503,7 @@ func (d *lxc) Stop(stateful bool) error { "stateful": stateful} if op.Action() == "stop" { - logger.Info("Stopping container", ctxMap) + d.common.logger.Info("Stopping container", ctxMap) } // Handle stateful stop @@ -2541,11 +2543,11 @@ func (d *lxc) Stop(stateful bool) error { d.stateful = true err = d.state.Cluster.UpdateInstanceStatefulFlag(d.id, true) if err != nil { - logger.Error("Failed stopping container", ctxMap) + d.common.logger.Error("Failed stopping container", ctxMap) return err } - logger.Info("Stopped container", ctxMap) + d.common.logger.Info("Stopped container", ctxMap) d.state.Events.SendLifecycle(d.project, "container-stopped", fmt.Sprintf("/1.0/containers/%s", d.name), nil) @@ -2607,7 +2609,7 @@ func (d *lxc) Stop(stateful bool) error { } if op.Action() == "stop" { - logger.Info("Stopped container", ctxMap) + d.common.logger.Info("Stopped container", ctxMap) d.state.Events.SendLifecycle(d.project, "container-stopped", fmt.Sprintf("/1.0/containers/%s", d.name), nil) } @@ -2646,7 +2648,7 @@ func (d *lxc) Shutdown(timeout time.Duration) error { "timeout": timeout} if op.Action() == "stop" { - logger.Info("Shutting down container", ctxMap) + d.common.logger.Info("Shutting down container", ctxMap) } // Load the go-lxc struct @@ -2676,7 +2678,7 @@ func (d *lxc) Shutdown(timeout time.Duration) error { } if op.Action() == "stop" { - logger.Info("Shut down container", ctxMap) + d.common.logger.Info("Shut down container", ctxMap) d.state.Events.SendLifecycle(d.project, "container-shutdown", fmt.Sprintf("/1.0/containers/%s", d.name), nil) } @@ -2695,14 +2697,14 @@ func (d *lxc) Restart(timeout time.Duration) error { "used": d.lastUsedDate, "timeout": timeout} - logger.Info("Restarting container", ctxMap) + d.common.logger.Info("Restarting container", ctxMap) err := d.common.restart(d, timeout) if err != nil { return err } - logger.Info("Restarted container", ctxMap) + d.common.logger.Info("Restarted container", ctxMap) d.state.Events.SendLifecycle(d.project, "container-restarted", fmt.Sprintf("/1.0/containers/%s", d.name), nil) @@ -2717,7 +2719,7 @@ func (d *lxc) onStopNS(args map[string]string) error { // Validate target. if !shared.StringInSlice(target, []string{"stop", "reboot"}) { - logger.Error("Container sent invalid target to OnStopNS", log.Ctx{"container": d.Name(), "target": target}) + d.common.logger.Error("Container sent invalid target to OnStopNS", log.Ctx{"container": d.Name(), "target": target}) return fmt.Errorf("Invalid stop target %q", target) } @@ -2735,7 +2737,7 @@ func (d *lxc) onStop(args map[string]string) error { // Validate target if !shared.StringInSlice(target, []string{"stop", "reboot"}) { - logger.Error("Container sent invalid target to OnStop", log.Ctx{"container": d.Name(), "target": target}) + d.common.logger.Error("Container sent invalid target to OnStop", log.Ctx{"container": d.Name(), "target": target}) return fmt.Errorf("Invalid stop target: %s", target) } @@ -2766,7 +2768,7 @@ func (d *lxc) onStop(args map[string]string) error { "stateful": false} if op == nil { - logger.Debug(fmt.Sprintf("Container initiated %s", target), ctxMap) + d.common.logger.Debug(fmt.Sprintf("Container initiated %s", target), ctxMap) } // Record power state @@ -2786,7 +2788,7 @@ func (d *lxc) onStop(args map[string]string) error { // Wait for other post-stop actions to be done and the container actually stopping. d.IsRunning() - logger.Debug("Container stopped, cleaning up", log.Ctx{"container": d.Name()}) + d.common.logger.Debug("Container stopped, cleaning up", log.Ctx{"container": d.Name()}) // Clean up devices. d.cleanupDevices(false, "") @@ -2834,7 +2836,7 @@ func (d *lxc) onStop(args map[string]string) error { // Log and emit lifecycle if not user triggered if op == nil { - logger.Info("Shut down container", ctxMap) + d.common.logger.Info("Shut down container", ctxMap) d.state.Events.SendLifecycle(d.project, "container-shutdown", fmt.Sprintf("/1.0/containers/%s", d.name), nil) } @@ -2883,7 +2885,7 @@ func (d *lxc) cleanupDevices(instanceRunning bool, stopHookNetnsPath string) { if err == device.ErrUnsupportedDevType { continue } else if err != nil { - logger.Errorf("Failed to stop device %q: %v", dev.Name, err) + d.common.logger.Error(fmt.Sprintf("Failed to stop device %q: %v", dev.Name, err)) } } } @@ -2909,7 +2911,7 @@ func (d *lxc) Freeze() error { // Check if the CGroup is available if !d.state.OS.CGInfo.Supports(cgroup.Freezer, cg) { - logger.Info("Unable to freeze container (lack of kernel support)", ctxMap) + d.common.logger.Info("Unable to freeze container (lack of kernel support)", ctxMap) return nil } @@ -2918,24 +2920,24 @@ func (d *lxc) Freeze() error { return fmt.Errorf("The container is already frozen") } - logger.Info("Freezing container", ctxMap) + d.common.logger.Info("Freezing container", ctxMap) // Load the go-lxc struct err = d.initLXC(false) if err != nil { ctxMap["err"] = err - logger.Error("Failed freezing container", ctxMap) + d.common.logger.Error("Failed freezing container", ctxMap) return err } err = d.c.Freeze() if err != nil { ctxMap["err"] = err - logger.Error("Failed freezing container", ctxMap) + d.common.logger.Error("Failed freezing container", ctxMap) return err } - logger.Info("Froze container", ctxMap) + d.common.logger.Info("Froze container", ctxMap) d.state.Events.SendLifecycle(d.project, "container-paused", fmt.Sprintf("/1.0/containers/%s", d.name), nil) @@ -2963,7 +2965,7 @@ func (d *lxc) Unfreeze() error { // Check if the CGroup is available if !d.state.OS.CGInfo.Supports(cgroup.Freezer, cg) { - logger.Info("Unable to unfreeze container (lack of kernel support)", ctxMap) + d.common.logger.Info("Unable to unfreeze container (lack of kernel support)", ctxMap) return nil } @@ -2972,21 +2974,21 @@ func (d *lxc) Unfreeze() error { return fmt.Errorf("The container is already running") } - logger.Info("Unfreezing container", ctxMap) + d.common.logger.Info("Unfreezing container", ctxMap) // Load the go-lxc struct err = d.initLXC(false) if err != nil { - logger.Error("Failed unfreezing container", ctxMap) + d.common.logger.Error("Failed unfreezing container", ctxMap) return err } err = d.c.Unfreeze() if err != nil { - logger.Error("Failed unfreezing container", ctxMap) + d.common.logger.Error("Failed unfreezing container", ctxMap) } - logger.Info("Unfroze container", ctxMap) + d.common.logger.Info("Unfroze container", ctxMap) d.state.Events.SendLifecycle(d.project, "container-resumed", fmt.Sprintf("/1.0/containers/%s", d.name), nil) @@ -3234,7 +3236,7 @@ func (d *lxc) Restore(sourceContainer instance.Instance, stateful bool) error { "used": d.lastUsedDate, "source": sourceContainer.Name()} - logger.Info("Restoring container", ctxMap) + d.common.logger.Info("Restoring container", ctxMap) // Initialize storage interface for the container and mount the rootfs for criu state check. pool, err := storagePools.GetPoolByInstance(d.state, d) @@ -3280,7 +3282,7 @@ func (d *lxc) Restore(sourceContainer instance.Instance, stateful bool) error { // Don't pass as user-requested as there's no way to fix a bad config. err = d.Update(args, false) if err != nil { - logger.Error("Failed restoring container configuration", ctxMap) + d.common.logger.Error("Failed restoring container configuration", ctxMap) return err } @@ -3297,7 +3299,7 @@ func (d *lxc) Restore(sourceContainer instance.Instance, stateful bool) error { return fmt.Errorf("Stateful snapshot restore requested by snapshot is stateless") } - logger.Debug("Performing stateful restore", ctxMap) + d.common.logger.Debug("Performing stateful restore", ctxMap) d.stateful = true criuMigrationArgs := instance.CriuMigrationArgs{ @@ -3319,16 +3321,16 @@ func (d *lxc) Restore(sourceContainer instance.Instance, stateful bool) error { // Remove the state from the parent container; we only keep this in snapshots. err2 := os.RemoveAll(d.StatePath()) if err2 != nil { - logger.Error("Failed to delete snapshot state", log.Ctx{"path": d.StatePath(), "err": err2}) + d.common.logger.Error("Failed to delete snapshot state", log.Ctx{"path": d.StatePath(), "err": err2}) } if err != nil { - logger.Info("Failed restoring container", ctxMap) + d.common.logger.Info("Failed restoring container", ctxMap) return err } - logger.Debug("Performed stateful restore", ctxMap) - logger.Info("Restored container", ctxMap) + d.common.logger.Debug("Performed stateful restore", ctxMap) + d.common.logger.Info("Restored container", ctxMap) return nil } @@ -3339,11 +3341,11 @@ func (d *lxc) Restore(sourceContainer instance.Instance, stateful bool) error { // Restart the container. if wasRunning { - logger.Info("Restored container", ctxMap) + d.common.logger.Info("Restored container", ctxMap) return d.Start(false) } - logger.Info("Restored container", ctxMap) + d.common.logger.Info("Restored container", ctxMap) return nil } @@ -3372,11 +3374,11 @@ func (d *lxc) Delete(force bool) error { "ephemeral": d.ephemeral, "used": d.lastUsedDate} - logger.Info("Deleting container", ctxMap) + d.common.logger.Info("Deleting container", ctxMap) if !force && shared.IsTrue(d.expandedConfig["security.protection.delete"]) && !d.IsSnapshot() { err := fmt.Errorf("Container is protected") - logger.Warn("Failed to delete container", log.Ctx{"name": d.Name(), "err": err}) + d.common.logger.Warn("Failed to delete container", log.Ctx{"name": d.Name(), "err": err}) return err } @@ -3409,7 +3411,7 @@ func (d *lxc) Delete(force bool) error { // calling its Delete function. err := instance.DeleteSnapshots(d.state, d.Project(), d.Name()) if err != nil { - logger.Error("Failed to delete instance snapshots", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) + d.common.logger.Error("Failed to delete instance snapshots", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) return err } @@ -3441,7 +3443,7 @@ func (d *lxc) Delete(force bool) error { // Delete the MAAS entry. err = d.maasDelete() if err != nil { - logger.Error("Failed deleting container MAAS record", log.Ctx{"name": d.Name(), "err": err}) + d.common.logger.Error("Failed deleting container MAAS record", log.Ctx{"name": d.Name(), "err": err}) return err } @@ -3459,11 +3461,11 @@ func (d *lxc) Delete(force bool) error { // Remove the database record of the instance or snapshot instance. if err := d.state.Cluster.DeleteInstance(d.project, d.Name()); err != nil { - logger.Error("Failed deleting container entry", log.Ctx{"name": d.Name(), "err": err}) + d.common.logger.Error("Failed deleting container entry", log.Ctx{"name": d.Name(), "err": err}) return err } - logger.Info("Deleted container", ctxMap) + d.common.logger.Info("Deleted container", ctxMap) if d.IsSnapshot() { d.state.Events.SendLifecycle(d.project, "container-snapshot-deleted", @@ -3489,7 +3491,7 @@ func (d *lxc) Rename(newName string) error { "used": d.lastUsedDate, "newname": newName} - logger.Info("Renaming container", ctxMap) + d.common.logger.Info("Renaming container", ctxMap) // Sanity checks. err := instance.ValidName(newName, d.IsSnapshot()) @@ -3526,7 +3528,7 @@ func (d *lxc) Rename(newName string) error { // Rename all the instance snapshot database entries. results, err := d.state.Cluster.GetInstanceSnapshotsNames(d.project, oldName) if err != nil { - logger.Error("Failed to get container snapshots", ctxMap) + d.common.logger.Error("Failed to get container snapshots", ctxMap) return err } @@ -3538,7 +3540,7 @@ func (d *lxc) Rename(newName string) error { return tx.RenameInstanceSnapshot(d.project, oldName, oldSnapName, baseSnapName) }) if err != nil { - logger.Error("Failed renaming snapshot", ctxMap) + d.common.logger.Error("Failed renaming snapshot", ctxMap) return err } } @@ -3555,7 +3557,7 @@ func (d *lxc) Rename(newName string) error { return tx.RenameInstance(d.project, oldName, newName) }) if err != nil { - logger.Error("Failed renaming container", ctxMap) + d.common.logger.Error("Failed renaming container", ctxMap) return err } @@ -3565,7 +3567,7 @@ func (d *lxc) Rename(newName string) error { if shared.PathExists(d.LogPath()) { err := os.Rename(d.LogPath(), shared.LogPath(newFullName)) if err != nil { - logger.Error("Failed renaming container", ctxMap) + d.common.logger.Error("Failed renaming container", ctxMap) return err } } @@ -3621,7 +3623,7 @@ func (d *lxc) Rename(newName string) error { return err } - logger.Info("Renamed container", ctxMap) + d.common.logger.Info("Renamed container", ctxMap) if d.IsSnapshot() { d.state.Events.SendLifecycle(d.project, "container-snapshot-renamed", @@ -4410,7 +4412,7 @@ func (d *lxc) updateDevices(removeDevices deviceConfig.Devices, addDevices devic // If update is non-user requested (i.e from a snapshot restore), there's nothing we can // do to fix the config and we don't want to prevent the snapshot restore so log and allow. - logger.Error("Failed to add device, skipping as non-user requested", log.Ctx{"project": d.Project(), "instance": d.Name(), "device": dev.Name, "err": err}) + d.common.logger.Error("Failed to add device, skipping as non-user requested", log.Ctx{"project": d.Project(), "instance": d.Name(), "device": dev.Name, "err": err}) continue } @@ -4447,12 +4449,12 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada return meta, fmt.Errorf("Cannot export a running instance as an image") } - logger.Info("Exporting instance", ctxMap) + d.common.logger.Info("Exporting instance", ctxMap) // Start the storage. _, err := d.mount() if err != nil { - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } defer d.unmount() @@ -4460,7 +4462,7 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada // Get IDMap to unshift container as the tarball is created. idmap, err := d.DiskIdmap() if err != nil { - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } @@ -4480,7 +4482,7 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada err = tarWriter.WriteFile(path[offset:], path, fi, false) if err != nil { - logger.Debugf("Error tarring up %s: %s", path, err) + d.common.logger.Debug(fmt.Sprintf("Error tarring up %s: %s", path, err)) return err } return nil @@ -4493,7 +4495,7 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada tempDir, err := ioutil.TempDir("", "lxd_lxd_metadata_") if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } defer os.RemoveAll(tempDir) @@ -4505,7 +4507,7 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada parent, err := instance.LoadByProjectAndName(d.state, d.project, parentName) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } @@ -4517,7 +4519,7 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada if arch == "" { arch, err = osarch.ArchitectureName(d.state.OS.Architectures[0]) if err != nil { - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } } @@ -4530,7 +4532,7 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada data, err := yaml.Marshal(&meta) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } @@ -4539,22 +4541,22 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada err = ioutil.WriteFile(fnam, data, 0644) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } fi, err := os.Lstat(fnam) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } tmpOffset := len(path.Dir(fnam)) + 1 if err := tarWriter.WriteFile(fnam[tmpOffset:], fnam, fi, false); err != nil { tarWriter.Close() - logger.Debugf("Error writing to tarfile: %s", err) - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Debug(fmt.Sprintf("Error writing to tarfile: %s", err)) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } } else { @@ -4562,14 +4564,14 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada content, err := ioutil.ReadFile(fnam) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } err = yaml.Unmarshal(content, &meta) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } @@ -4580,7 +4582,7 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada tempDir, err := ioutil.TempDir("", "lxd_lxd_metadata_") if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } defer os.RemoveAll(tempDir) @@ -4588,7 +4590,7 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada data, err := yaml.Marshal(&meta) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } @@ -4597,7 +4599,7 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada err = ioutil.WriteFile(fnam, data, 0644) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } } @@ -4606,8 +4608,8 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada fi, err := os.Lstat(fnam) if err != nil { tarWriter.Close() - logger.Debugf("Error statting %s during export", fnam) - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Debug(fmt.Sprintf("Error statting %s during export", fnam)) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } @@ -4619,8 +4621,8 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada } if err != nil { tarWriter.Close() - logger.Debugf("Error writing to tarfile: %s", err) - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Debug(fmt.Sprintf("Error writing to tarfile: %s", err)) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } } @@ -4629,7 +4631,7 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada fnam = d.RootfsPath() err = filepath.Walk(fnam, writeToTar) if err != nil { - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } @@ -4638,18 +4640,18 @@ func (d *lxc) Export(w io.Writer, properties map[string]string) (api.ImageMetada if shared.PathExists(fnam) { err = filepath.Walk(fnam, writeToTar) if err != nil { - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } } err = tarWriter.Close() if err != nil { - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } - logger.Info("Exported instance", ctxMap) + d.common.logger.Info("Exported instance", ctxMap) return meta, nil } @@ -4698,7 +4700,7 @@ func (d *lxc) Migrate(args *instance.CriuMigrationArgs) error { return fmt.Errorf("Unable to perform container live migration. CRIU isn't installed") } - logger.Info("Migrating container", ctxMap) + d.common.logger.Info("Migrating container", ctxMap) prettyCmd := "" switch args.Cmd { @@ -4712,7 +4714,7 @@ func (d *lxc) Migrate(args *instance.CriuMigrationArgs) error { prettyCmd = "feature-check" default: prettyCmd = "unknown" - logger.Warn("Unknown migrate call", log.Ctx{"cmd": args.Cmd}) + d.common.logger.Warn("Unknown migrate call", log.Ctx{"cmd": args.Cmd}) } pool, err := d.getStoragePool() @@ -4807,7 +4809,7 @@ func (d *lxc) Migrate(args *instance.CriuMigrationArgs) error { } migrateErr = d.c.Migrate(args.Cmd, opts) if migrateErr != nil { - logger.Info("CRIU feature check failed", ctxMap) + d.common.logger.Info("CRIU feature check failed", ctxMap) return migrateErr } return nil @@ -4856,20 +4858,20 @@ func (d *lxc) Migrate(args *instance.CriuMigrationArgs) error { collectErr := collectCRIULogFile(d, finalStateDir, args.Function, prettyCmd) if collectErr != nil { - logger.Error("Error collecting checkpoint log file", log.Ctx{"err": collectErr}) + d.common.logger.Error("Error collecting checkpoint log file", log.Ctx{"err": collectErr}) } if migrateErr != nil { log, err2 := getCRIULogErrors(finalStateDir, prettyCmd) if err2 == nil { - logger.Info("Failed migrating container", ctxMap) + d.common.logger.Info("Failed migrating container", ctxMap) migrateErr = fmt.Errorf("%s %s failed\n%s", args.Function, prettyCmd, log) } return migrateErr } - logger.Info("Migrated container", ctxMap) + d.common.logger.Info("Migrated container", ctxMap) return nil } @@ -5075,7 +5077,7 @@ func (d *lxc) FileExists(path string) error { } for _, line := range strings.Split(strings.TrimRight(stderr, "\n"), "\n") { - logger.Debugf("forkcheckfile: %s", line) + d.common.logger.Debug(fmt.Sprintf("forkcheckfile: %s", line)) } } @@ -5187,7 +5189,7 @@ func (d *lxc) FilePull(srcpath string, dstpath string) (int64, int64, os.FileMod continue } - logger.Debugf("forkgetfile: %s", line) + d.common.logger.Debug(fmt.Sprintf("forkgetfile: %s", line)) } if err != nil { @@ -5507,10 +5509,10 @@ func (d *lxc) Exec(req api.InstanceExecPost, stdin *os.File, stdout *os.File, st attachedPid := shared.ReadPid(rStatus) if attachedPid <= 0 { - logger.Errorf("Failed to retrieve PID of executing child process") + d.common.logger.Error("Failed to retrieve PID of executing child process") return nil, fmt.Errorf("Failed to retrieve PID of executing child process") } - logger.Debugf("Retrieved PID %d of executing child process", attachedPid) + d.common.logger.Debug(fmt.Sprintf("Retrieved PID %d of executing child process", attachedPid)) instCmd := &lxcCmd{ cmd: &cmd, @@ -5557,28 +5559,28 @@ func (d *lxc) diskState() map[string]api.InstanceStateDisk { if dev.Config["path"] == "/" { pool, err := storagePools.GetPoolByInstance(d.state, d) if err != nil { - logger.Error("Error loading storage pool", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) + d.common.logger.Error("Error loading storage pool", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) continue } usage, err = pool.GetInstanceUsage(d) if err != nil { if err != storageDrivers.ErrNotSupported { - logger.Error("Error getting disk usage", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) + d.common.logger.Error("Error getting disk usage", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) } continue } } else if dev.Config["pool"] != "" { pool, err := storagePools.GetPoolByName(d.state, dev.Config["pool"]) if err != nil { - logger.Error("Error loading storage pool", log.Ctx{"project": d.Project(), "poolName": dev.Config["pool"], "err": err}) + d.common.logger.Error("Error loading storage pool", log.Ctx{"project": d.Project(), "poolName": dev.Config["pool"], "err": err}) continue } usage, err = pool.GetCustomVolumeUsage(d.Project(), dev.Config["source"]) if err != nil { if err != storageDrivers.ErrNotSupported { - logger.Error("Error getting volume usage", log.Ctx{"project": d.Project(), "volume": dev.Config["source"], "err": err}) + d.common.logger.Error("Error getting volume usage", log.Ctx{"project": d.Project(), "volume": dev.Config["source"], "err": err}) } continue } @@ -5651,7 +5653,7 @@ func (d *lxc) networkState() map[string]api.InstanceStateNetwork { nw, err := netutils.NetnsGetifaddrs(int32(pid)) if err != nil { couldUseNetnsGetifaddrs = false - logger.Error("Failed to retrieve network information via netlink", log.Ctx{"container": d.name, "pid": pid}) + d.common.logger.Error("Failed to retrieve network information via netlink", log.Ctx{"container": d.name, "pid": pid}) } else { result = nw } @@ -5676,7 +5678,7 @@ func (d *lxc) networkState() map[string]api.InstanceStateNetwork { // Process forkgetnet response if err != nil { - logger.Error("Error calling 'lxd forknet", log.Ctx{"container": d.name, "err": err, "pid": pid}) + d.common.logger.Error("Error calling 'lxd forknet", log.Ctx{"container": d.name, "err": err, "pid": pid}) return result } @@ -5688,7 +5690,7 @@ func (d *lxc) networkState() map[string]api.InstanceStateNetwork { nw := map[string]api.InstanceStateNetwork{} err = json.Unmarshal([]byte(out), &nw) if err != nil { - logger.Error("Failure to read forknet json", log.Ctx{"container": d.name, "err": err}) + d.common.logger.Error("Failure to read forknet json", log.Ctx{"container": d.name, "err": err}) return result } result = nw @@ -6072,7 +6074,7 @@ func (d *lxc) removeUnixDevices() error { devicePath := filepath.Join(d.DevicesPath(), f.Name()) err := os.Remove(devicePath) if err != nil { - logger.Error("Failed removing unix device", log.Ctx{"err": err, "path": devicePath}) + d.common.logger.Error("Failed removing unix device", log.Ctx{"err": err, "path": devicePath}) } } @@ -6271,7 +6273,7 @@ func (d *lxc) removeDiskDevices() error { diskPath := filepath.Join(d.DevicesPath(), f.Name()) err := os.Remove(diskPath) if err != nil { - logger.Error("Failed to remove disk device path", log.Ctx{"err": err, "path": diskPath}) + d.common.logger.Error("Failed to remove disk device path", log.Ctx{"err": err, "path": diskPath}) } } diff --git a/lxd/instance/drivers/driver_qemu.go b/lxd/instance/drivers/driver_qemu.go index 13bae74f7e..64001ae2ef 100644 --- a/lxd/instance/drivers/driver_qemu.go +++ b/lxd/instance/drivers/driver_qemu.go @@ -113,6 +113,7 @@ func qemuInstantiate(s *state.State, args db.InstanceArgs, expandedDevices devic lastUsedDate: args.LastUsedDate, localConfig: args.Config, localDevices: args.Devices, + logger: logging.AddContext(logger.Log, log.Ctx{"instanceType": args.Type.String, "instanceName": args.Name}), name: args.Name, node: args.Node, profiles: args.Profiles, @@ -166,6 +167,7 @@ func qemuCreate(s *state.State, args db.InstanceArgs) (instance.Instance, error) lastUsedDate: args.LastUsedDate, localConfig: args.Config, localDevices: args.Devices, + logger: logging.AddContext(logger.Log, log.Ctx{"instanceType": args.Type.String, "instanceName": args.Name}), name: args.Name, node: args.Node, profiles: args.Profiles, @@ -207,7 +209,7 @@ func qemuCreate(s *state.State, args db.InstanceArgs) (instance.Instance, error) "ephemeral": d.ephemeral, } - logger.Info("Creating instance", ctxMap) + d.common.logger.Info("Creating instance", ctxMap) // Load the config. err = d.init() @@ -290,7 +292,7 @@ func qemuCreate(s *state.State, args db.InstanceArgs) (instance.Instance, error) } } - logger.Info("Created instance", ctxMap) + d.common.logger.Info("Created instance", ctxMap) d.state.Events.SendLifecycle(d.project, "virtual-machine-created", fmt.Sprintf("/1.0/virtual-machines/%s", d.name), nil) revert.Success() @@ -358,7 +360,7 @@ func (d *qemu) getMonitorEventHandler() func(event string, data map[string]inter inst, err := instance.LoadByProjectAndName(state, projectName, instanceName) if err != nil { - logger.Error("Failed to load instance", "project", projectName, "instance", instanceName, "err", err) + d.common.logger.Error("Failed to load instance", "project", projectName, "instance", instanceName, "err", err) return } @@ -371,7 +373,7 @@ func (d *qemu) getMonitorEventHandler() func(event string, data map[string]inter err = inst.(*qemu).onStop(target) if err != nil { - logger.Error("Failed to cleanly stop instance", "project", projectName, "instance", instanceName, "err", err) + d.common.logger.Error("Failed to cleanly stop instance", "project", projectName, "instance", instanceName, "err", err) return } } @@ -790,7 +792,7 @@ func (d *qemu) Start(stateful bool) error { return err } } else { - logger.Warn("Unable to use virtio-fs for config drive, using 9p as a fallback: virtiofsd missing") + d.common.logger.Warn("Unable to use virtio-fs for config drive, using 9p as a fallback: virtiofsd missing") } // Generate UUID if not present. @@ -830,7 +832,7 @@ func (d *qemu) Start(stateful bool) error { revert.Add(func() { err := d.deviceStop(dev.Name, dev.Config, false) if err != nil { - logger.Errorf("Failed to cleanup device %q: %v", dev.Name, err) + d.common.logger.Error(fmt.Sprintf("Failed to cleanup device %q: %v", dev.Name, err)) } }) @@ -1017,7 +1019,7 @@ func (d *qemu) Start(stateful bool) error { pid, err := d.pid() if err != nil { - logger.Errorf(`Failed to get VM process ID "%d"`, pid) + d.common.logger.Error(fmt.Sprintf(`Failed to get VM process ID "%d"`, pid)) op.Done(err) return err } @@ -1025,13 +1027,13 @@ func (d *qemu) Start(stateful bool) error { revert.Add(func() { proc, err := os.FindProcess(pid) if err != nil { - logger.Errorf(`Failed to find VM process "%d"`, pid) + d.common.logger.Error(fmt.Sprintf(`Failed to find VM process "%d"`, pid)) return } proc.Kill() if err != nil { - logger.Errorf(`Failed to kill VM process "%d"`, pid) + d.common.logger.Error(fmt.Sprintf(`Failed to kill VM process "%d"`, pid)) } }) @@ -1216,14 +1218,14 @@ func (d *qemu) RegisterDevices() { } if err != nil { - logger.Error("Failed to load device to register", log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name}) + d.common.logger.Error("Failed to load device to register", log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name}) continue } // Check whether device wants to register for any events. err = dev.Register() if err != nil { - logger.Error("Failed to register device", log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name}) + d.common.logger.Error("Failed to register device", log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name}) continue } } @@ -1401,7 +1403,7 @@ func (d *qemu) generateConfigShare() error { // Add the VM agent. path, err := exec.LookPath("lxd-agent") if err != nil { - logger.Warnf("lxd-agent not found, skipping its inclusion in the VM config drive: %v", err) + d.common.logger.Warn(fmt.Sprintf("lxd-agent not found, skipping its inclusion in the VM config drive: %v", err)) } else { // Install agent into config drive dir if found. path, err = filepath.EvalSymlinks(path) @@ -2272,7 +2274,7 @@ func (d *qemu) addDriveConfig(sb *strings.Builder, bootIndexes map[string]int, d // If drive config indicates we need to use unsafe I/O then use it. if shared.StringInSlice(qemuUnsafeIO, driveConf.Opts) { - logger.Warnf("Using unsafe cache I/O with %s", driveConf.DevPath) + d.common.logger.Warn(fmt.Sprintf("Using unsafe cache I/O with %s", driveConf.DevPath)) aioMode = "threads" cacheMode = "unsafe" // Use host cache, but ignore all sync requests from guest. } else if shared.PathExists(driveConf.DevPath) && !shared.IsBlockdevPath(driveConf.DevPath) { @@ -2287,7 +2289,7 @@ func (d *qemu) addDriveConfig(sb *strings.Builder, bootIndexes map[string]int, d if fsType == "zfs" || fsType == "btrfs" { if driveConf.FSType != "iso9660" { // Only warn about using writeback cache if the drive image is writable. - logger.Warnf("Using writeback cache I/O with %q as backing filesystem is %q", driveConf.DevPath, fsType) + d.common.logger.Warn(fmt.Sprintf("Using writeback cache I/O with %q as backing filesystem is %q", driveConf.DevPath, fsType)) } aioMode = "threads" @@ -2683,7 +2685,7 @@ func (d *qemu) Restore(source instance.Instance, stateful bool) error { "used": d.lastUsedDate, "source": source.Name()} - logger.Info("Restoring instance", ctxMap) + d.common.logger.Info("Restoring instance", ctxMap) // Load the storage driver. pool, err := storagePools.GetPoolByInstance(d.state, d) @@ -2720,7 +2722,7 @@ func (d *qemu) Restore(source instance.Instance, stateful bool) error { // Don't pass as user-requested as there's no way to fix a bad config. err = d.Update(args, false) if err != nil { - logger.Error("Failed restoring instance configuration", ctxMap) + d.common.logger.Error("Failed restoring instance configuration", ctxMap) return err } @@ -2735,11 +2737,11 @@ func (d *qemu) Restore(source instance.Instance, stateful bool) error { // Restart the insance. if wasRunning { - logger.Info("Restored instance", ctxMap) + d.common.logger.Info("Restored instance", ctxMap) return d.Start(false) } - logger.Info("Restored instance", ctxMap) + d.common.logger.Info("Restored instance", ctxMap) return nil } @@ -2754,7 +2756,7 @@ func (d *qemu) Rename(newName string) error { "used": d.lastUsedDate, "newname": newName} - logger.Info("Renaming instance", ctxMap) + d.common.logger.Info("Renaming instance", ctxMap) // Sanity checks. err := instance.ValidName(newName, d.IsSnapshot()) @@ -2791,7 +2793,7 @@ func (d *qemu) Rename(newName string) error { // Rename all the instance snapshot database entries. results, err := d.state.Cluster.GetInstanceSnapshotsNames(d.project, oldName) if err != nil { - logger.Error("Failed to get instance snapshots", ctxMap) + d.common.logger.Error("Failed to get instance snapshots", ctxMap) return err } @@ -2803,7 +2805,7 @@ func (d *qemu) Rename(newName string) error { return tx.RenameInstanceSnapshot(d.project, oldName, oldSnapName, baseSnapName) }) if err != nil { - logger.Error("Failed renaming snapshot", ctxMap) + d.common.logger.Error("Failed renaming snapshot", ctxMap) return err } } @@ -2820,7 +2822,7 @@ func (d *qemu) Rename(newName string) error { return tx.RenameInstance(d.project, oldName, newName) }) if err != nil { - logger.Error("Failed renaming instance", ctxMap) + d.common.logger.Error("Failed renaming instance", ctxMap) return err } @@ -2830,7 +2832,7 @@ func (d *qemu) Rename(newName string) error { if shared.PathExists(d.LogPath()) { err := os.Rename(d.LogPath(), shared.LogPath(newFullName)) if err != nil { - logger.Error("Failed renaming instance", ctxMap) + d.common.logger.Error("Failed renaming instance", ctxMap) return err } } @@ -2878,7 +2880,7 @@ func (d *qemu) Rename(newName string) error { return err } - logger.Info("Renamed instance", ctxMap) + d.common.logger.Info("Renamed instance", ctxMap) if d.IsSnapshot() { d.state.Events.SendLifecycle(d.project, "virtual-machine-snapshot-renamed", @@ -3344,7 +3346,7 @@ func (d *qemu) updateDevices(removeDevices deviceConfig.Devices, addDevices devi // If update is non-user requested (i.e from a snapshot restore), there's nothing we can // do to fix the config and we don't want to prevent the snapshot restore so log and allow. - logger.Error("Failed to add device, skipping as non-user requested", log.Ctx{"project": d.Project(), "instance": d.Name(), "device": dev.Name, "err": err}) + d.common.logger.Error("Failed to add device, skipping as non-user requested", log.Ctx{"project": d.Project(), "instance": d.Name(), "device": dev.Name, "err": err}) continue } @@ -3452,7 +3454,7 @@ func (d *qemu) removeUnixDevices() error { devicePath := filepath.Join(d.DevicesPath(), f.Name()) err := os.Remove(devicePath) if err != nil { - logger.Error("Failed removing unix device", log.Ctx{"err": err, "path": devicePath}) + d.common.logger.Error("Failed removing unix device", log.Ctx{"err": err, "path": devicePath}) } } @@ -3485,7 +3487,7 @@ func (d *qemu) removeDiskDevices() error { diskPath := filepath.Join(d.DevicesPath(), f.Name()) err := os.Remove(diskPath) if err != nil { - logger.Error("Failed to remove disk device path", log.Ctx{"err": err, "path": diskPath}) + d.common.logger.Error("Failed to remove disk device path", log.Ctx{"err": err, "path": diskPath}) } } @@ -3515,7 +3517,7 @@ func (d *qemu) cleanupDevices() { if err == device.ErrUnsupportedDevType { continue } else if err != nil { - logger.Errorf("Failed to stop device '%s': %v", dev.Name, err) + d.common.logger.Error(fmt.Sprintf("Failed to stop device '%s': %v", dev.Name, err)) } } } @@ -3544,7 +3546,7 @@ func (d *qemu) Delete(force bool) error { "ephemeral": d.ephemeral, "used": d.lastUsedDate} - logger.Info("Deleting instance", ctxMap) + d.common.logger.Info("Deleting instance", ctxMap) // Check if instance is delete protected. if !force && shared.IsTrue(d.expandedConfig["security.protection.delete"]) && !d.IsSnapshot() { @@ -3604,7 +3606,7 @@ func (d *qemu) Delete(force bool) error { // Delete the MAAS entry. err = d.maasDelete() if err != nil { - logger.Error("Failed deleting instance MAAS record", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) + d.common.logger.Error("Failed deleting instance MAAS record", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) return err } @@ -3622,11 +3624,11 @@ func (d *qemu) Delete(force bool) error { // Remove the database record of the instance or snapshot instance. if err := d.state.Cluster.DeleteInstance(d.Project(), d.Name()); err != nil { - logger.Error("Failed deleting instance entry", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) + d.common.logger.Error("Failed deleting instance entry", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) return err } - logger.Info("Deleted instance", ctxMap) + d.common.logger.Info("Deleted instance", ctxMap) if d.IsSnapshot() { d.state.Events.SendLifecycle(d.project, "virtual-machine-snapshot-deleted", @@ -3698,12 +3700,12 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad return meta, fmt.Errorf("Cannot export a running instance as an image") } - logger.Info("Exporting instance", ctxMap) + d.common.logger.Info("Exporting instance", ctxMap) // Start the storage. mountInfo, err := d.mount() if err != nil { - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } defer d.unmount() @@ -3722,7 +3724,7 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad err = tarWriter.WriteFile(path[offset:], path, fi, false) if err != nil { - logger.Debugf("Error tarring up %s: %s", path, err) + d.common.logger.Debug(fmt.Sprintf("Error tarring up %s: %s", path, err)) return err } @@ -3736,7 +3738,7 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad tempDir, err := ioutil.TempDir("", "lxd_lxd_metadata_") if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } defer os.RemoveAll(tempDir) @@ -3748,7 +3750,7 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad parent, err := instance.LoadByProjectAndName(d.state, d.project, parentName) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } @@ -3760,7 +3762,7 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad if arch == "" { arch, err = osarch.ArchitectureName(d.state.OS.Architectures[0]) if err != nil { - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } } @@ -3773,7 +3775,7 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad data, err := yaml.Marshal(&meta) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } @@ -3782,21 +3784,21 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad err = ioutil.WriteFile(fnam, data, 0644) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } fi, err := os.Lstat(fnam) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } tmpOffset := len(filepath.Dir(fnam)) + 1 if err := tarWriter.WriteFile(fnam[tmpOffset:], fnam, fi, false); err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } } else { @@ -3804,14 +3806,14 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad content, err := ioutil.ReadFile(fnam) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } err = yaml.Unmarshal(content, &meta) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } @@ -3822,7 +3824,7 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad tempDir, err := ioutil.TempDir("", "lxd_lxd_metadata_") if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } defer os.RemoveAll(tempDir) @@ -3830,7 +3832,7 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad data, err := yaml.Marshal(&meta) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } @@ -3839,7 +3841,7 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad err = ioutil.WriteFile(fnam, data, 0644) if err != nil { tarWriter.Close() - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } } @@ -3848,8 +3850,8 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad fi, err := os.Lstat(fnam) if err != nil { tarWriter.Close() - logger.Debugf("Error statting %s during export", fnam) - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Debug(fmt.Sprintf("Error statting %s during export", fnam)) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } @@ -3861,8 +3863,8 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad } if err != nil { tarWriter.Close() - logger.Debugf("Error writing to tarfile: %s", err) - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Debug(fmt.Sprintf("Error writing to tarfile: %s", err)) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } } @@ -3900,18 +3902,18 @@ func (d *qemu) Export(w io.Writer, properties map[string]string) (api.ImageMetad if shared.PathExists(fnam) { err = filepath.Walk(fnam, writeToTar) if err != nil { - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } } err = tarWriter.Close() if err != nil { - logger.Error("Failed exporting instance", ctxMap) + d.common.logger.Error("Failed exporting instance", ctxMap) return meta, err } - logger.Info("Exported instance", ctxMap) + d.common.logger.Info("Exported instance", ctxMap) return meta, nil } @@ -3939,7 +3941,7 @@ func (d *qemu) FilePull(srcPath string, dstPath string) (int64, int64, os.FileMo agent, err := lxdClient.ConnectLXDHTTP(nil, client) if err != nil { - logger.Errorf("Failed to connect to lxd-agent on %s: %v", d.Name(), err) + d.common.logger.Error(fmt.Sprintf("Failed to connect to lxd-agent on %s: %v", d.Name(), err)) return 0, 0, 0, "", nil, fmt.Errorf("Failed to connect to lxd-agent") } defer agent.Disconnect() @@ -3983,7 +3985,7 @@ func (d *qemu) FilePush(fileType string, srcPath string, dstPath string, uid int agent, err := lxdClient.ConnectLXDHTTP(nil, client) if err != nil { - logger.Errorf("Failed to connect to lxd-agent on %s: %v", d.Name(), err) + d.common.logger.Error(fmt.Sprintf("Failed to connect to lxd-agent on %s: %v", d.Name(), err)) return fmt.Errorf("Failed to connect to lxd-agent") } defer agent.Disconnect() @@ -4124,7 +4126,7 @@ func (d *qemu) Exec(req api.InstanceExecPost, stdin *os.File, stdout *os.File, s agent, err := lxdClient.ConnectLXDHTTP(nil, client) if err != nil { - logger.Errorf("Failed to connect to lxd-agent on %s: %v", d.Name(), err) + d.common.logger.Error(fmt.Sprintf("Failed to connect to lxd-agent on %s: %v", d.Name(), err)) return nil, fmt.Errorf("Failed to connect to lxd-agent") } revert.Add(agent.Disconnect) @@ -4322,7 +4324,7 @@ func (d *qemu) RenderState() (*api.InstanceState, error) { status, err = d.agentGetState() if err != nil { if err != errQemuAgentOffline { - logger.Warn("Could not get VM state from agent", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) + d.common.logger.Warn("Could not get VM state from agent", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) } // Fallback data if agent is not reachable. @@ -4336,7 +4338,7 @@ func (d *qemu) RenderState() (*api.InstanceState, error) { dev, _, err := d.deviceLoad(k, m) if err != nil { - logger.Warn("Could not load device", log.Ctx{"project": d.Project(), "instance": d.Name(), "device": k, "err": err}) + d.common.logger.Warn("Could not load device", log.Ctx{"project": d.Project(), "instance": d.Name(), "device": k, "err": err}) continue } @@ -4390,7 +4392,7 @@ func (d *qemu) RenderState() (*api.InstanceState, error) { status.StatusCode = statusCode status.Disk, err = d.diskState() if err != nil && err != storageDrivers.ErrNotSupported { - logger.Warn("Error getting disk usage", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) + d.common.logger.Warn("Error getting disk usage", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err}) } return status, nil @@ -4931,7 +4933,7 @@ func (d *qemu) devlxdEventSend(eventType string, eventMessage interface{}) error agent, err := lxdClient.ConnectLXDHTTP(nil, client) if err != nil { - logger.Errorf("Failed to connect to lxd-agent on %s: %v", d.Name(), err) + d.common.logger.Error(fmt.Sprintf("Failed to connect to lxd-agent on %s: %v", d.Name(), err)) return fmt.Errorf("Failed to connect to lxd-agent") } defer agent.Disconnect()
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel