The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6217

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) ===

From b82739c0d0766ebd37cfeffe5ce423a498dc3e06 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 17 Sep 2019 09:47:47 +0200
Subject: [PATCH 1/6] lxd/storage/lvm: Properly return error messages
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/storage_lvm.go       | 24 +++++++--------
 lxd/storage_lvm_utils.go | 66 +++++++++++++++++++---------------------
 2 files changed, 44 insertions(+), 46 deletions(-)

diff --git a/lxd/storage_lvm.go b/lxd/storage_lvm.go
index 14963e48c9..2ccefa5834 100644
--- a/lxd/storage_lvm.go
+++ b/lxd/storage_lvm.go
@@ -49,7 +49,7 @@ func (s *storageLvm) StorageCoreInit() error {
 
        output, err := shared.RunCommand("lvm", "version")
        if err != nil {
-               return fmt.Errorf("Error getting LVM version: %v\noutput:'%s'", 
err, output)
+               return fmt.Errorf("Error getting LVM version: %v", err)
        }
        lines := strings.Split(output, "\n")
 
@@ -261,9 +261,9 @@ func (s *storageLvm) StoragePoolCreate() error {
                        logger.Errorf("No name for physical volume detected")
                }
 
-               output, err := shared.TryRunCommand("pvcreate", pvName)
+               _, err := shared.TryRunCommand("pvcreate", pvName)
                if err != nil {
-                       return fmt.Errorf("Failed to create the physical volume 
for the lvm storage pool: %s", output)
+                       return fmt.Errorf("Failed to create the physical volume 
for the lvm storage pool: %v", err)
                }
                defer func() {
                        if tryUndo {
@@ -313,9 +313,9 @@ func (s *storageLvm) StoragePoolCreate() error {
                        return fmt.Errorf(msg)
                }
        } else {
-               output, err := shared.TryRunCommand("vgcreate", poolName, 
pvName)
+               _, err := shared.TryRunCommand("vgcreate", poolName, pvName)
                if err != nil {
-                       return fmt.Errorf("failed to create the volume group 
for the lvm storage pool: %s", output)
+                       return fmt.Errorf("failed to create the volume group 
for the lvm storage pool: %v", err)
                }
        }
 
@@ -378,9 +378,9 @@ func (s *storageLvm) StoragePoolDelete() error {
 
        // Remove the volume group.
        if count == 0 && poolExists {
-               output, err := shared.TryRunCommand("vgremove", "-f", poolName)
+               _, err := shared.TryRunCommand("vgremove", "-f", poolName)
                if err != nil {
-                       logger.Errorf("Failed to destroy the volume group for 
the lvm storage pool: %s", output)
+                       logger.Errorf("Failed to destroy the volume group for 
the lvm storage pool: %v", err)
                        return err
                }
        }
@@ -824,7 +824,7 @@ func (s *storageLvm) StoragePoolVolumeUpdate(writable 
*api.StorageVolumePut,
                        bwlimit := s.pool.Config["rsync.bwlimit"]
                        output, err := rsyncLocalCopy(sourceVolumeMntPoint, 
targetVolumeMntPoint, bwlimit, true)
                        if err != nil {
-                               return fmt.Errorf("failed to rsync container: 
%s: %s", string(output), err)
+                               return fmt.Errorf("Failed to rsync container: 
%s: %s", string(output), err)
                        }
                }
 
@@ -1574,9 +1574,9 @@ func (s *storageLvm) ContainerSnapshotStart(container 
Instance) (bool, error) {
        }
 
        if !wasWritableAtCheck {
-               output, err := shared.TryRunCommand("lvchange", "-prw", 
fmt.Sprintf("%s/%s_%s", poolName, storagePoolVolumeAPIEndpointContainers, 
project.Prefix(container.Project(), containerLvmName)))
+               _, err := shared.TryRunCommand("lvchange", "-prw", 
fmt.Sprintf("%s/%s_%s", poolName, storagePoolVolumeAPIEndpointContainers, 
project.Prefix(container.Project(), containerLvmName)))
                if err != nil {
-                       logger.Errorf("Failed to make LVM snapshot \"%s\" 
read-write: %s", containerName, output)
+                       logger.Errorf("Failed to make LVM snapshot \"%s\" 
read-write: %v", containerName, err)
                        return false, err
                }
        }
@@ -1633,9 +1633,9 @@ func (s *storageLvm) ContainerSnapshotStop(container 
Instance) (bool, error) {
 
        if wasWritableAtCheck {
                containerLvmName := 
containerNameToLVName(project.Prefix(container.Project(), containerName))
-               output, err := shared.TryRunCommand("lvchange", "-pr", 
fmt.Sprintf("%s/%s_%s", poolName, storagePoolVolumeAPIEndpointContainers, 
containerLvmName))
+               _, err := shared.TryRunCommand("lvchange", "-pr", 
fmt.Sprintf("%s/%s_%s", poolName, storagePoolVolumeAPIEndpointContainers, 
containerLvmName))
                if err != nil {
-                       logger.Errorf("Failed to make LVM snapshot read-only: 
%s", output)
+                       logger.Errorf("Failed to make LVM snapshot read-only: 
%v", err)
                        return false, err
                }
        }
diff --git a/lxd/storage_lvm_utils.go b/lxd/storage_lvm_utils.go
index 6875df8335..65824f20d4 100644
--- a/lxd/storage_lvm_utils.go
+++ b/lxd/storage_lvm_utils.go
@@ -178,11 +178,11 @@ func (s *storageLvm) renameLVByPath(project, oldName 
string, newName string, vol
 
 func removeLV(project, vgName string, volumeType string, lvName string) error {
        lvmVolumePath := getLvmDevPath(project, vgName, volumeType, lvName)
-       output, err := shared.TryRunCommand("lvremove", "-f", lvmVolumePath)
 
+       _, err := shared.TryRunCommand("lvremove", "-f", lvmVolumePath)
        if err != nil {
-               logger.Errorf("Could not remove LV \"%s\": %s", lvName, output)
-               return fmt.Errorf("Could not remove LV named %s", lvName)
+               logger.Errorf("Could not remove LV \"%s\": %v", lvName, err)
+               return fmt.Errorf("Could not remove LV named %s: %v", lvName, 
err)
        }
 
        return nil
@@ -202,7 +202,6 @@ func (s *storageLvm) createSnapshotLV(project, vgName 
string, origLvName string,
        }
 
        lvmPoolVolumeName := getPrefixedLvName(project, volumeType, lvName)
-       var output string
        args := []string{"-n", lvmPoolVolumeName, "-s", sourceLvmVolumePath}
        if isRecent {
                args = append(args, "-kn")
@@ -236,10 +235,10 @@ func (s *storageLvm) createSnapshotLV(project, vgName 
string, origLvName string,
                args = append(args, "-prw")
        }
 
-       output, err = shared.TryRunCommand("lvcreate", args...)
+       _, err = shared.TryRunCommand("lvcreate", args...)
        if err != nil {
-               logger.Errorf("Could not create LV snapshot: %s to %s: %s", 
origLvName, lvName, output)
-               return "", fmt.Errorf("Could not create snapshot LV named %s", 
lvName)
+               logger.Errorf("Could not create LV snapshot: %s to %s: %v", 
origLvName, lvName, err)
+               return "", fmt.Errorf("Could not create snapshot LV named %s: 
%v", lvName, err)
        }
 
        targetLvmVolumePath := getLvmDevPath(project, vgName, volumeType, 
lvName)
@@ -429,15 +428,15 @@ func (s *storageLvm) copyContainerLv(target Instance, 
source Instance, readonly
        bwlimit := s.pool.Config["rsync.bwlimit"]
        output, err := rsyncLocalCopy(sourceContainerMntPoint, 
targetContainerMntPoint, bwlimit, true)
        if err != nil {
-               return fmt.Errorf("failed to rsync container: %s: %s", 
string(output), err)
+               return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
        }
 
        if readonly {
                targetLvmName := containerNameToLVName(targetName)
                poolName := s.getOnDiskPoolName()
-               output, err := shared.TryRunCommand("lvchange", "-pr", 
fmt.Sprintf("%s/%s_%s", poolName, storagePoolVolumeAPIEndpointContainers, 
targetLvmName))
+               _, err := shared.TryRunCommand("lvchange", "-pr", 
fmt.Sprintf("%s/%s_%s", poolName, storagePoolVolumeAPIEndpointContainers, 
targetLvmName))
                if err != nil {
-                       logger.Errorf("Failed to make LVM snapshot \"%s\" 
read-write: %s", targetName, output)
+                       logger.Errorf("Failed to make LVM snapshot \"%s\" 
read-write: %v", targetName, err)
                        return err
                }
        }
@@ -596,18 +595,18 @@ func lvmLvIsWritable(lvName string) (bool, error) {
 }
 
 func storageVGActivate(lvmVolumePath string) error {
-       output, err := shared.TryRunCommand("vgchange", "-ay", lvmVolumePath)
+       _, err := shared.TryRunCommand("vgchange", "-ay", lvmVolumePath)
        if err != nil {
-               return fmt.Errorf("could not activate volume group \"%s\": %s: 
%s", lvmVolumePath, output, err)
+               return fmt.Errorf("could not activate volume group \"%s\": %v", 
lvmVolumePath, err)
        }
 
        return nil
 }
 
 func storageLVActivate(lvmVolumePath string) error {
-       output, err := shared.TryRunCommand("lvchange", "-ay", lvmVolumePath)
+       _, err := shared.TryRunCommand("lvchange", "-ay", lvmVolumePath)
        if err != nil {
-               return fmt.Errorf("could not activate logival volume \"%s\": 
%s: %s", lvmVolumePath, output, err)
+               return fmt.Errorf("could not activate logival volume \"%s\": 
%v", lvmVolumePath, err)
        }
 
        return nil
@@ -784,18 +783,18 @@ func storageLVMValidateThinPoolName(s *state.State, 
vgName string, value string)
 }
 
 func lvmVGRename(oldName string, newName string) error {
-       output, err := shared.TryRunCommand("vgrename", oldName, newName)
+       _, err := shared.TryRunCommand("vgrename", oldName, newName)
        if err != nil {
-               return fmt.Errorf("could not rename volume group from \"%s\" to 
\"%s\": %s", oldName, newName, output)
+               return fmt.Errorf("could not rename volume group from \"%s\" to 
\"%s\": %v", oldName, newName, err)
        }
 
        return nil
 }
 
 func lvmLVRename(vgName string, oldName string, newName string) error {
-       output, err := shared.TryRunCommand("lvrename", vgName, oldName, 
newName)
+       _, err := shared.TryRunCommand("lvrename", vgName, oldName, newName)
        if err != nil {
-               return fmt.Errorf("could not rename volume group from \"%s\" to 
\"%s\": %s", oldName, newName, output)
+               return fmt.Errorf("could not rename volume group from \"%s\" to 
\"%s\": %v", oldName, newName, err)
        }
 
        return nil
@@ -844,21 +843,21 @@ func lvmCreateLv(projectName, vgName string, thinPoolName 
string, lvName string,
        lvmPoolVolumeName := getPrefixedLvName(projectName, volumeType, lvName)
        if makeThinLv {
                targetVg := fmt.Sprintf("%s/%s", vgName, thinPoolName)
-               output, err = shared.TryRunCommand("lvcreate", "-Wy", "--yes", 
"--thin", "-n", lvmPoolVolumeName, "--virtualsize", lvSizeString, targetVg)
+               _, err = shared.TryRunCommand("lvcreate", "-Wy", "--yes", 
"--thin", "-n", lvmPoolVolumeName, "--virtualsize", lvSizeString, targetVg)
        } else {
-               output, err = shared.TryRunCommand("lvcreate", "-Wy", "--yes", 
"-n", lvmPoolVolumeName, "--size", lvSizeString, vgName)
+               _, err = shared.TryRunCommand("lvcreate", "-Wy", "--yes", "-n", 
lvmPoolVolumeName, "--size", lvSizeString, vgName)
        }
        if err != nil {
-               logger.Errorf("Could not create LV \"%s\": %s", 
lvmPoolVolumeName, output)
-               return fmt.Errorf("Could not create thin LV named %s", 
lvmPoolVolumeName)
+               logger.Errorf("Could not create LV \"%s\": %v", 
lvmPoolVolumeName, err)
+               return fmt.Errorf("Could not create thin LV named %s: %v", 
lvmPoolVolumeName, err)
        }
 
        fsPath := getLvmDevPath(projectName, vgName, volumeType, lvName)
 
        output, err = driver.MakeFSType(fsPath, lvFsType, nil)
        if err != nil {
-               logger.Errorf("Filesystem creation failed: %s", output)
-               return fmt.Errorf("Error making filesystem on image LV: %v", 
err)
+               logger.Errorf("Filesystem creation failed: %s: %v", output, err)
+               return fmt.Errorf("Error making filesystem on image LV: %s: 
%v", output, err)
        }
 
        return nil
@@ -896,16 +895,15 @@ func createDefaultThinPool(sTypeVersion string, vgName 
string, thinPoolName stri
 
        // Create the thin pool
        lvmThinPool := fmt.Sprintf("%s/%s", vgName, thinPoolName)
-       var output string
        if isRecent {
-               output, err = shared.TryRunCommand(
+               _, err = shared.TryRunCommand(
                        "lvcreate",
                        "-Wy", "--yes",
                        "--poolmetadatasize", "1G",
                        "-l", "100%FREE",
                        "--thinpool", lvmThinPool)
        } else {
-               output, err = shared.TryRunCommand(
+               _, err = shared.TryRunCommand(
                        "lvcreate",
                        "-Wy", "--yes",
                        "--poolmetadatasize", "1G",
@@ -914,17 +912,17 @@ func createDefaultThinPool(sTypeVersion string, vgName 
string, thinPoolName stri
        }
 
        if err != nil {
-               logger.Errorf("Could not create thin pool \"%s\": %s", 
thinPoolName, string(output))
-               return fmt.Errorf("Could not create LVM thin pool named %s", 
thinPoolName)
+               logger.Errorf("Could not create thin pool \"%s\": %v", 
thinPoolName, err)
+               return fmt.Errorf("Could not create LVM thin pool named %s: 
%v", thinPoolName, err)
        }
 
        if !isRecent {
                // Grow it to the maximum VG size (two step process required by 
old LVM)
-               output, err = shared.TryRunCommand("lvextend", "--alloc", 
"anywhere", "-l", "100%FREE", lvmThinPool)
+               _, err = shared.TryRunCommand("lvextend", "--alloc", 
"anywhere", "-l", "100%FREE", lvmThinPool)
 
                if err != nil {
-                       logger.Errorf("Could not grow thin pool: \"%s\": %s", 
thinPoolName, string(output))
-                       return fmt.Errorf("Could not grow LVM thin pool named 
%s", thinPoolName)
+                       logger.Errorf("Could not grow thin pool: \"%s\": %v", 
thinPoolName, err)
+                       return fmt.Errorf("Could not grow LVM thin pool named 
%s: %v", thinPoolName, err)
                }
        }
 
@@ -1049,9 +1047,9 @@ func (s *storageLvm) copyVolumeLv(sourcePool string, 
source string, target strin
                targetLvmName := containerNameToLVName(target)
                poolName := s.getOnDiskPoolName()
 
-               output, err := shared.TryRunCommand("lvchange", "-pr", 
fmt.Sprintf("%s/%s_%s", poolName, storagePoolVolumeAPIEndpointCustom, 
targetLvmName))
+               _, err := shared.TryRunCommand("lvchange", "-pr", 
fmt.Sprintf("%s/%s_%s", poolName, storagePoolVolumeAPIEndpointCustom, 
targetLvmName))
                if err != nil {
-                       logger.Errorf("Failed to make LVM snapshot \"%s\" 
read-only: %s", s.volume.Name, output)
+                       logger.Errorf("Failed to make LVM snapshot \"%s\" 
read-only: %v", s.volume.Name, err)
                        return err
                }
        }

From 65c1a89c3f7ebe96a3519ed4016ddca5583f8f3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 17 Sep 2019 09:48:32 +0200
Subject: [PATCH 2/6] lxd/networks: Properly return error messages
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/networks.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lxd/networks.go b/lxd/networks.go
index 1e7607231d..04d5414ab3 100644
--- a/lxd/networks.go
+++ b/lxd/networks.go
@@ -1896,9 +1896,9 @@ func (n *network) Start() error {
                }
 
                // Start dnsmasq (occasionally races, try a few times)
-               output, err := shared.TryRunCommand(dnsmasqCmd[0], 
dnsmasqCmd[1:]...)
+               _, err = shared.TryRunCommand(dnsmasqCmd[0], dnsmasqCmd[1:]...)
                if err != nil {
-                       return fmt.Errorf("Failed to run: %s: %s", 
strings.Join(dnsmasqCmd, " "), strings.TrimSpace(output))
+                       return fmt.Errorf("Failed to run: %s: %v", 
strings.Join(dnsmasqCmd, " "), err)
                }
 
                // Update the static leases

From b110447b28d7a03061c9cfeb585a523ca87d6669 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 17 Sep 2019 09:53:34 +0200
Subject: [PATCH 3/6] lxd/storage/btrfs: Properly return error messages
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/storage_btrfs.go | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/lxd/storage_btrfs.go b/lxd/storage_btrfs.go
index a47205b80a..32f6ed28d0 100644
--- a/lxd/storage_btrfs.go
+++ b/lxd/storage_btrfs.go
@@ -2117,13 +2117,13 @@ func btrfsSubVolumeCreate(subvol string) error {
                }
        }
 
-       output, err := shared.RunCommand(
+       _, err := shared.RunCommand(
                "btrfs",
                "subvolume",
                "create",
                subvol)
        if err != nil {
-               logger.Errorf("Failed to create BTRFS subvolume \"%s\": %s", 
subvol, output)
+               logger.Errorf("Failed to create BTRFS subvolume \"%s\": %v", 
subvol, err)
                return err
        }
 
@@ -2710,9 +2710,9 @@ func (s *storageBtrfs) StorageEntitySetQuota(volumeType 
int, size int64, data in
                        // Enable quotas
                        poolMntPoint := 
driver.GetStoragePoolMountPoint(s.pool.Name)
 
-                       output, err = shared.RunCommand("btrfs", "quota", 
"enable", poolMntPoint)
+                       _, err = shared.RunCommand("btrfs", "quota", "enable", 
poolMntPoint)
                        if err != nil {
-                               return fmt.Errorf("Failed to enable quotas on 
BTRFS pool: %s", output)
+                               return fmt.Errorf("Failed to enable quotas on 
BTRFS pool: %v", err)
                        }
 
                        // Retry
@@ -2721,9 +2721,9 @@ func (s *storageBtrfs) StorageEntitySetQuota(volumeType 
int, size int64, data in
 
                if err == btrfsErrNoQGroup {
                        // Find the volume ID
-                       output, err = shared.RunCommand("btrfs", "subvolume", 
"show", subvol)
+                       _, err = shared.RunCommand("btrfs", "subvolume", 
"show", subvol)
                        if err != nil {
-                               return fmt.Errorf("Failed to get subvol 
information: %s", output)
+                               return fmt.Errorf("Failed to get subvol 
information: %v", err)
                        }
 
                        id := ""
@@ -2740,9 +2740,9 @@ func (s *storageBtrfs) StorageEntitySetQuota(volumeType 
int, size int64, data in
                        }
 
                        // Create qgroup
-                       output, err = shared.RunCommand("btrfs", "qgroup", 
"create", fmt.Sprintf("0/%s", id), subvol)
+                       _, err = shared.RunCommand("btrfs", "qgroup", "create", 
fmt.Sprintf("0/%s", id), subvol)
                        if err != nil {
-                               return fmt.Errorf("Failed to create missing 
qgroup: %s", output)
+                               return fmt.Errorf("Failed to create missing 
qgroup: %v", err)
                        }
 
                        // Retry
@@ -2757,7 +2757,7 @@ func (s *storageBtrfs) StorageEntitySetQuota(volumeType 
int, size int64, data in
        // Attempt to make the subvolume writable
        shared.RunCommand("btrfs", "property", "set", subvol, "ro", "false")
        if size > 0 {
-               output, err := shared.RunCommand(
+               _, err := shared.RunCommand(
                        "btrfs",
                        "qgroup",
                        "limit",
@@ -2765,10 +2765,10 @@ func (s *storageBtrfs) StorageEntitySetQuota(volumeType 
int, size int64, data in
                        subvol)
 
                if err != nil {
-                       return fmt.Errorf("Failed to set btrfs quota: %s", 
output)
+                       return fmt.Errorf("Failed to set btrfs quota: %v", err)
                }
        } else if qgroup != "" {
-               output, err := shared.RunCommand(
+               _, err := shared.RunCommand(
                        "btrfs",
                        "qgroup",
                        "destroy",
@@ -2776,7 +2776,7 @@ func (s *storageBtrfs) StorageEntitySetQuota(volumeType 
int, size int64, data in
                        subvol)
 
                if err != nil {
-                       return fmt.Errorf("Failed to set btrfs quota: %s", 
output)
+                       return fmt.Errorf("Failed to set btrfs quota: %v", err)
                }
        }
 

From f50161eaf2f3c9d07cff596d7eb8fbe69c9c60af Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 17 Sep 2019 09:53:47 +0200
Subject: [PATCH 4/6] lxd/patches: Properly return error messages
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/patches.go | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lxd/patches.go b/lxd/patches.go
index d4b759b2b7..e5253902b4 100644
--- a/lxd/patches.go
+++ b/lxd/patches.go
@@ -505,9 +505,9 @@ func upgradeFromStorageTypeBtrfs(name string, d *Daemon, 
defaultPoolName string,
                                        return err
                                }
 
-                               output, err := 
rsyncLocalCopy(oldContainerMntPoint, newContainerMntPoint, "", true)
+                               _, err = rsyncLocalCopy(oldContainerMntPoint, 
newContainerMntPoint, "", true)
                                if err != nil {
-                                       logger.Errorf("Failed to rsync: %s: 
%s", output, err)
+                                       logger.Errorf("Failed to rsync: %v", 
err)
                                        return err
                                }
 
@@ -3469,9 +3469,9 @@ func patchUpdateFromV15(tx *sql.Tx) error {
 
                logger.Debug("About to rename cName in lv upgrade", 
log.Ctx{"lvLinkPath": lvLinkPath, "cName": cName, "newLVName": newLVName})
 
-               output, err := shared.RunCommand("lvrename", vgName, cName, 
newLVName)
+               _, err := shared.RunCommand("lvrename", vgName, cName, 
newLVName)
                if err != nil {
-                       return fmt.Errorf("Could not rename LV '%s' to '%s': 
%v\noutput:%s", cName, newLVName, err, output)
+                       return fmt.Errorf("Could not rename LV '%s' to '%s': 
%v", cName, newLVName, err)
                }
 
                if err := os.Remove(lvLinkPath); err != nil {

From 2b1c1b0893eee2e21c8f129a99e3a004275f8a54 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 17 Sep 2019 09:57:50 +0200
Subject: [PATCH 5/6] lxd/device/disk: Properly return error messages
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/device/disk.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lxd/device/disk.go b/lxd/device/disk.go
index a695d0a0c4..6866f3f032 100644
--- a/lxd/device/disk.go
+++ b/lxd/device/disk.go
@@ -899,7 +899,7 @@ func (d *disk) getParentBlocks(path string) ([]string, 
error) {
 
                output, err := shared.RunCommand("zpool", "status", "-P", "-L", 
poolName)
                if err != nil {
-                       return nil, fmt.Errorf("Failed to query zfs filesystem 
information for %s: %s", dev[1], output)
+                       return nil, fmt.Errorf("Failed to query zfs filesystem 
information for %s: %v", dev[1], err)
                }
 
                header := true
@@ -953,7 +953,7 @@ func (d *disk) getParentBlocks(path string) ([]string, 
error) {
                // Accessible btrfs filesystems
                output, err := shared.RunCommand("btrfs", "filesystem", "show", 
dev[1])
                if err != nil {
-                       return nil, fmt.Errorf("Failed to query btrfs 
filesystem information for %s: %s", dev[1], output)
+                       return nil, fmt.Errorf("Failed to query btrfs 
filesystem information for %s: %v", dev[1], err)
                }
 
                for _, line := range strings.Split(output, "\n") {

From 4b010313d41341ca3f1c8c6519c17de59a4d67d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 17 Sep 2019 10:01:25 +0200
Subject: [PATCH 6/6] lxd/storage: Consistent error messages
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/storage_dir.go | 10 +++++-----
 lxd/storage_lvm.go |  2 +-
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/lxd/storage_dir.go b/lxd/storage_dir.go
index 92db99569b..ff5973a8f7 100644
--- a/lxd/storage_dir.go
+++ b/lxd/storage_dir.go
@@ -414,7 +414,7 @@ func (s *storageDir) StoragePoolVolumeUpdate(writable 
*api.StorageVolumePut, cha
                bwlimit := s.pool.Config["rsync.bwlimit"]
                output, err := rsyncLocalCopy(sourcePath, targetPath, bwlimit, 
true)
                if err != nil {
-                       return fmt.Errorf("failed to rsync container: %s: %s", 
string(output), err)
+                       return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
                }
 
                logger.Infof(`Restored DIR storage volume "%s" from snapshot 
"%s"`,
@@ -670,7 +670,7 @@ func (s *storageDir) copyContainer(target Instance, source 
Instance) error {
        bwlimit := s.pool.Config["rsync.bwlimit"]
        output, err := rsyncLocalCopy(sourceContainerMntPoint, 
targetContainerMntPoint, bwlimit, true)
        if err != nil {
-               return fmt.Errorf("failed to rsync container: %s: %s", 
string(output), err)
+               return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
        }
 
        err = target.TemplateApply("copy")
@@ -699,7 +699,7 @@ func (s *storageDir) copySnapshot(target Instance, 
targetPool string, source Ins
        bwlimit := s.pool.Config["rsync.bwlimit"]
        output, err := rsyncLocalCopy(sourceContainerMntPoint, 
targetContainerMntPoint, bwlimit, true)
        if err != nil {
-               return fmt.Errorf("failed to rsync container: %s: %s", 
string(output), err)
+               return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
        }
 
        return nil
@@ -894,7 +894,7 @@ func (s *storageDir) ContainerRestore(container Instance, 
sourceContainer Instan
        bwlimit := s.pool.Config["rsync.bwlimit"]
        output, err := rsyncLocalCopy(sourcePath, targetPath, bwlimit, true)
        if err != nil {
-               return fmt.Errorf("failed to rsync container: %s: %s", 
string(output), err)
+               return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
        }
 
        logger.Debugf("Restored DIR storage volume for container \"%s\" from %s 
to %s", s.volume.Name, sourceContainer.Name(), container.Name())
@@ -938,7 +938,7 @@ func (s *storageDir) 
ContainerSnapshotCreate(snapshotContainer Instance, sourceC
                output, err := rsyncLocalCopy(oldPath, newPath, bwlimit, true)
                if err != nil {
                        s.ContainerDelete(snapshotContainer)
-                       return fmt.Errorf("failed to rsync: %s: %s", 
string(output), err)
+                       return fmt.Errorf("Failed to rsync: %s: %s", 
string(output), err)
                }
                return nil
        }
diff --git a/lxd/storage_lvm.go b/lxd/storage_lvm.go
index 2ccefa5834..b3ef0b20eb 100644
--- a/lxd/storage_lvm.go
+++ b/lxd/storage_lvm.go
@@ -1492,7 +1492,7 @@ func (s *storageLvm) ContainerRestore(target Instance, 
source Instance) error {
                bwlimit := s.pool.Config["rsync.bwlimit"]
                output, err := rsyncLocalCopy(sourceContainerMntPoint, 
targetContainerMntPoint, bwlimit, true)
                if err != nil {
-                       return fmt.Errorf("failed to rsync container: %s: %s", 
string(output), err)
+                       return fmt.Errorf("Failed to rsync container: %s: %s", 
string(output), err)
                }
        }
 
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to