[lxc-devel] [lxd/master] Bugfixes and minor improvements

stgraber on Github lxc-bot at linuxcontainers.org
Fri Jun 30 21:04:35 UTC 2017


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20170630/a4cf9267/attachment.bin>
-------------- next part --------------
From 57c675067fc5df825c9c5d7b2bd0a203a19b3f03 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 30 Jun 2017 15:44:47 -0400
Subject: [PATCH 1/3] lxc/config: Removal of multiple devices at once
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Launchpad: https://bugs.launchpad.net/ubuntu/+source/lxd/+bug/1690299
Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxc/config.go | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/lxc/config.go b/lxc/config.go
index f9b26642c..6bc2fd06d 100644
--- a/lxc/config.go
+++ b/lxc/config.go
@@ -99,7 +99,7 @@ lxc config device list [<remote>:]<container>
 lxc config device show [<remote>:]<container>
     Show full device details for container.
 
-lxc config device remove [<remote>:]<container> <name>
+lxc config device remove [<remote>:]<container> <name>...
     Remove device from container.
 
 *Client trust store management*
@@ -993,19 +993,19 @@ func (c *configCmd) deviceRm(conf *config.Config, which string, args []string) e
 		return err
 	}
 
-	devname := args[3]
-
 	if which == "profile" {
 		profile, etag, err := client.GetProfile(name)
 		if err != nil {
 			return err
 		}
 
-		_, ok := profile.Devices[devname]
-		if !ok {
-			return fmt.Errorf(i18n.G("The device doesn't exist"))
+		for _, devname := range args[3:] {
+			_, ok := profile.Devices[devname]
+			if !ok {
+				return fmt.Errorf(i18n.G("The device doesn't exist"))
+			}
+			delete(profile.Devices, devname)
 		}
-		delete(profile.Devices, devname)
 
 		err = client.UpdateProfile(name, profile.Writable(), etag)
 		if err != nil {
@@ -1017,11 +1017,13 @@ func (c *configCmd) deviceRm(conf *config.Config, which string, args []string) e
 			return err
 		}
 
-		_, ok := container.Devices[devname]
-		if !ok {
-			return fmt.Errorf(i18n.G("The device doesn't exist"))
+		for _, devname := range args[3:] {
+			_, ok := container.Devices[devname]
+			if !ok {
+				return fmt.Errorf(i18n.G("The device doesn't exist"))
+			}
+			delete(container.Devices, devname)
 		}
-		delete(container.Devices, devname)
 
 		op, err := client.UpdateContainer(name, container.Writable(), etag)
 		if err != nil {
@@ -1034,7 +1036,7 @@ func (c *configCmd) deviceRm(conf *config.Config, which string, args []string) e
 		}
 	}
 
-	fmt.Printf(i18n.G("Device %s removed from %s")+"\n", devname, name)
+	fmt.Printf(i18n.G("Device %s removed from %s")+"\n", strings.Join(args[3:], ", "), name)
 	return nil
 }
 

From 083c5b2a8ad4c70f8a1769d7a902001bd9a7dd39 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 30 Jun 2017 17:02:21 -0400
Subject: [PATCH 2/3] client: Commonize error handling
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Some functions that were doing direct HTTP queries weren't using the
centralized error handling and would lead to low level errors being
reported to the user rather than the more useful higher level errors.

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 client/lxd.go            | 50 ++++++++++++++++++++++++++----------------------
 client/lxd_containers.go | 15 +++++++++++----
 client/lxd_images.go     | 23 ++++++----------------
 3 files changed, 44 insertions(+), 44 deletions(-)

diff --git a/client/lxd.go b/client/lxd.go
index 742ad2fc6..a6e071308 100644
--- a/client/lxd.go
+++ b/client/lxd.go
@@ -74,6 +74,32 @@ func (r *ProtocolLXD) RawWebsocket(path string) (*websocket.Conn, error) {
 }
 
 // Internal functions
+func (r *ProtocolLXD) parseResponse(resp *http.Response) (*api.Response, string, error) {
+	// Get the ETag
+	etag := resp.Header.Get("ETag")
+
+	// Decode the response
+	decoder := json.NewDecoder(resp.Body)
+	response := api.Response{}
+
+	err := decoder.Decode(&response)
+	if err != nil {
+		// Check the return value for a cleaner error
+		if resp.StatusCode != http.StatusOK {
+			return nil, "", fmt.Errorf("Failed to fetch %s: %s", resp.Request.URL.String(), resp.Status)
+		}
+
+		return nil, "", err
+	}
+
+	// Handle errors
+	if response.Type == api.ErrorResponse {
+		return nil, "", fmt.Errorf(response.Error)
+	}
+
+	return &response, etag, nil
+}
+
 func (r *ProtocolLXD) rawQuery(method string, url string, data interface{}, ETag string) (*api.Response, string, error) {
 	var req *http.Request
 	var err error
@@ -130,29 +156,7 @@ func (r *ProtocolLXD) rawQuery(method string, url string, data interface{}, ETag
 	}
 	defer resp.Body.Close()
 
-	// Get the ETag
-	etag := resp.Header.Get("ETag")
-
-	// Decode the response
-	decoder := json.NewDecoder(resp.Body)
-	response := api.Response{}
-
-	err = decoder.Decode(&response)
-	if err != nil {
-		// Check the return value for a cleaner error
-		if resp.StatusCode != http.StatusOK {
-			return nil, "", fmt.Errorf("Failed to fetch %s: %s", url, resp.Status)
-		}
-
-		return nil, "", err
-	}
-
-	// Handle errors
-	if response.Type == api.ErrorResponse {
-		return nil, "", fmt.Errorf(response.Error)
-	}
-
-	return &response, etag, nil
+	return r.parseResponse(resp)
 }
 
 func (r *ProtocolLXD) query(method string, path string, data interface{}, ETag string) (*api.Response, string, error) {
diff --git a/client/lxd_containers.go b/client/lxd_containers.go
index c3786914b..e8d03a144 100644
--- a/client/lxd_containers.go
+++ b/client/lxd_containers.go
@@ -490,7 +490,10 @@ func (r *ProtocolLXD) GetContainerFile(containerName string, path string) (io.Re
 
 	// Check the return value for a cleaner error
 	if resp.StatusCode != http.StatusOK {
-		return nil, nil, fmt.Errorf("Failed to fetch %s: %s", url, resp.Status)
+		_, _, err := r.parseResponse(resp)
+		if err != nil {
+			return nil, nil, err
+		}
 	}
 
 	// Parse the headers
@@ -581,8 +584,9 @@ func (r *ProtocolLXD) CreateContainerFile(containerName string, path string, arg
 	}
 
 	// Check the return value for a cleaner error
-	if resp.StatusCode != http.StatusOK {
-		return fmt.Errorf("Failed to upload to %s: %s", url, resp.Status)
+	_, _, err = r.parseResponse(resp)
+	if err != nil {
+		return err
 	}
 
 	return nil
@@ -856,7 +860,10 @@ func (r *ProtocolLXD) GetContainerLogfile(name string, filename string) (io.Read
 
 	// Check the return value for a cleaner error
 	if resp.StatusCode != http.StatusOK {
-		return nil, fmt.Errorf("Failed to fetch %s: %s", url, resp.Status)
+		_, _, err := r.parseResponse(resp)
+		if err != nil {
+			return nil, err
+		}
 	}
 
 	return resp.Body, err
diff --git a/client/lxd_images.go b/client/lxd_images.go
index edc7a4530..e17b1d29e 100644
--- a/client/lxd_images.go
+++ b/client/lxd_images.go
@@ -2,7 +2,6 @@ package lxd
 
 import (
 	"crypto/sha256"
-	"encoding/json"
 	"fmt"
 	"io"
 	"io/ioutil"
@@ -125,7 +124,10 @@ func (r *ProtocolLXD) GetPrivateImageFile(fingerprint string, secret string, req
 	defer response.Body.Close()
 
 	if response.StatusCode != http.StatusOK {
-		return nil, fmt.Errorf("Unable to fetch %s: %s", url, response.Status)
+		_, _, err := r.parseResponse(response)
+		if err != nil {
+			return nil, err
+		}
 	}
 
 	ctype, ctypeParams, err := mime.ParseMediaType(response.Header.Get("Content-Type"))
@@ -406,25 +408,12 @@ func (r *ProtocolLXD) CreateImage(image api.ImagesPost, args *ImageCreateArgs) (
 	}
 	defer resp.Body.Close()
 
-	// Decode the response
-	decoder := json.NewDecoder(resp.Body)
-	response := api.Response{}
-
-	err = decoder.Decode(&response)
+	// Handle errors
+	response, _, err := r.parseResponse(resp)
 	if err != nil {
-		// Check the return value for a cleaner error
-		if resp.StatusCode != http.StatusOK {
-			return nil, fmt.Errorf("Failed to fetch %s: %s", reqURL, resp.Status)
-		}
-
 		return nil, err
 	}
 
-	// Handle errors
-	if response.Type == api.ErrorResponse {
-		return nil, fmt.Errorf(response.Error)
-	}
-
 	// Get to the operation
 	respOperation, err := response.MetadataAsOperation()
 	if err != nil {

From ccad5916cf0dfcdd2a9deee6b86cfa488ce3c097 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 30 Jun 2017 17:03:16 -0400
Subject: [PATCH 3/3] i18n: Update translation templates
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 po/de.po   | 40 ++++++++++++++++++++--------------------
 po/el.po   | 40 ++++++++++++++++++++--------------------
 po/fr.po   | 40 ++++++++++++++++++++--------------------
 po/it.po   | 40 ++++++++++++++++++++--------------------
 po/ja.po   | 41 +++++++++++++++++++++--------------------
 po/lxd.pot | 40 ++++++++++++++++++++--------------------
 po/nl.po   | 40 ++++++++++++++++++++--------------------
 po/ru.po   | 40 ++++++++++++++++++++--------------------
 po/sr.po   | 40 ++++++++++++++++++++--------------------
 po/sv.po   | 40 ++++++++++++++++++++--------------------
 po/tr.po   | 40 ++++++++++++++++++++--------------------
 11 files changed, 221 insertions(+), 220 deletions(-)

diff --git a/po/de.po b/po/de.po
index 47a157840..3eb0f51c1 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LXD\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-06-27 00:23-0400\n"
+"POT-Creation-Date: 2017-06-30 17:03-0400\n"
 "PO-Revision-Date: 2017-02-14 17:11+0000\n"
 "Last-Translator: Tim Rose <tim at netlope.de>\n"
 "Language-Team: German <https://hosted.weblate.org/projects/linux-containers/"
@@ -213,12 +213,12 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:186
+#: lxc/file.go:187
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/file.go:128
+#: lxc/file.go:129
 #, c-format
 msgid "'%s' isn't a regular file or directory."
 msgstr ""
@@ -302,7 +302,7 @@ msgstr " Prozessorauslastung:"
 msgid "CREATED AT"
 msgstr "ERSTELLT AM"
 
-#: lxc/file.go:479
+#: lxc/file.go:480
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -361,12 +361,12 @@ msgstr ""
 msgid "Container name is mandatory"
 msgstr ""
 
-#: lxc/copy.go:210 lxc/init.go:313
+#: lxc/copy.go:210 lxc/init.go:314
 #, c-format
 msgid "Container name is: %s"
 msgstr ""
 
-#: lxc/publish.go:250
+#: lxc/publish.go:248
 #, fuzzy, c-format
 msgid "Container published with fingerprint: %s"
 msgstr "Abbild mit Fingerabdruck %s importiert\n"
@@ -426,7 +426,7 @@ msgstr ""
 msgid "Device %s added to %s"
 msgstr "Gerät %s wurde zu %s hinzugefügt\n"
 
-#: lxc/config.go:1037
+#: lxc/config.go:1039
 #, fuzzy, c-format
 msgid "Device %s removed from %s"
 msgstr "Gerät %s wurde von %s entfernt\n"
@@ -516,7 +516,7 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr "kann nicht zum selben Container Namen kopieren"
 
-#: lxc/file.go:123
+#: lxc/file.go:124
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -616,17 +616,17 @@ msgstr "Akzeptiere Zertifikat"
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:522
+#: lxc/file.go:523
 #, fuzzy, c-format
 msgid "Invalid path %s"
 msgstr "Ungültiges Ziel %s"
 
-#: lxc/file.go:451
+#: lxc/file.go:452
 #, c-format
 msgid "Invalid source %s"
 msgstr "Ungültige Quelle %s"
 
-#: lxc/file.go:224
+#: lxc/file.go:225
 #, c-format
 msgid "Invalid target %s"
 msgstr "Ungültiges Ziel %s"
@@ -693,7 +693,7 @@ msgstr "Fehlende Zusammenfassung."
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:438
+#: lxc/file.go:439
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 "Mehr als eine Datei herunterzuladen, aber das Ziel ist kein Verzeichnis"
@@ -1123,7 +1123,7 @@ msgid ""
 "restarted."
 msgstr ""
 
-#: lxc/init.go:358
+#: lxc/init.go:359
 msgid "The container you are starting doesn't have any network attached to it."
 msgstr ""
 
@@ -1133,12 +1133,12 @@ msgid "The device already exists"
 msgstr "entfernte Instanz %s existiert bereits"
 
 #: lxc/config.go:833 lxc/config.go:845 lxc/config.go:881 lxc/config.go:899
-#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1006 lxc/config.go:1022
+#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1005 lxc/config.go:1023
 #, fuzzy
 msgid "The device doesn't exist"
 msgstr "entfernte Instanz %s existiert nicht"
 
-#: lxc/init.go:342
+#: lxc/init.go:343
 #, c-format
 msgid "The local image '%s' couldn't be found, trying '%s:' instead."
 msgstr ""
@@ -1179,11 +1179,11 @@ msgstr "Wartezeit bevor der Container gestoppt wird."
 msgid "Timestamps:"
 msgstr "Zeitstempel:\n"
 
-#: lxc/init.go:360
+#: lxc/init.go:361
 msgid "To attach a network to a container, use: lxc network attach"
 msgstr ""
 
-#: lxc/init.go:359
+#: lxc/init.go:360
 msgid "To create a new network, use: lxc network create"
 msgstr ""
 
@@ -1302,7 +1302,7 @@ msgid ""
 "lxc config device show [<remote>:]<container>\n"
 "    Show full device details for container.\n"
 "\n"
-"lxc config device remove [<remote>:]<container> <name>\n"
+"lxc config device remove [<remote>:]<container> <name>...\n"
 "    Remove device from container.\n"
 "\n"
 "*Client trust store management*\n"
@@ -2184,7 +2184,7 @@ msgstr ""
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:272
+#: lxc/file.go:273
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2228,7 +2228,7 @@ msgstr "OK (y/n)? "
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:550
+#: lxc/file.go:551
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
diff --git a/po/el.po b/po/el.po
index b3d6ffc8d..fd895d9ac 100644
--- a/po/el.po
+++ b/po/el.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-06-27 00:23-0400\n"
+"POT-Creation-Date: 2017-06-30 17:03-0400\n"
 "PO-Revision-Date: 2017-02-14 08:00+0000\n"
 "Last-Translator: Simos Xenitellis <simos.65 at gmail.com>\n"
 "Language-Team: Greek <https://hosted.weblate.org/projects/linux-containers/"
@@ -127,12 +127,12 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:186
+#: lxc/file.go:187
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/file.go:128
+#: lxc/file.go:129
 #, c-format
 msgid "'%s' isn't a regular file or directory."
 msgstr ""
@@ -214,7 +214,7 @@ msgstr "  Χρήση CPU:"
 msgid "CREATED AT"
 msgstr ""
 
-#: lxc/file.go:479
+#: lxc/file.go:480
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -272,12 +272,12 @@ msgstr ""
 msgid "Container name is mandatory"
 msgstr ""
 
-#: lxc/copy.go:210 lxc/init.go:313
+#: lxc/copy.go:210 lxc/init.go:314
 #, c-format
 msgid "Container name is: %s"
 msgstr ""
 
-#: lxc/publish.go:250
+#: lxc/publish.go:248
 #, c-format
 msgid "Container published with fingerprint: %s"
 msgstr ""
@@ -335,7 +335,7 @@ msgstr ""
 msgid "Device %s added to %s"
 msgstr ""
 
-#: lxc/config.go:1037
+#: lxc/config.go:1039
 #, c-format
 msgid "Device %s removed from %s"
 msgstr ""
@@ -422,7 +422,7 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/file.go:123
+#: lxc/file.go:124
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -518,17 +518,17 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:522
+#: lxc/file.go:523
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
 
-#: lxc/file.go:451
+#: lxc/file.go:452
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:224
+#: lxc/file.go:225
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -595,7 +595,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:438
+#: lxc/file.go:439
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -1008,7 +1008,7 @@ msgid ""
 "restarted."
 msgstr ""
 
-#: lxc/init.go:358
+#: lxc/init.go:359
 msgid "The container you are starting doesn't have any network attached to it."
 msgstr ""
 
@@ -1017,11 +1017,11 @@ msgid "The device already exists"
 msgstr ""
 
 #: lxc/config.go:833 lxc/config.go:845 lxc/config.go:881 lxc/config.go:899
-#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1006 lxc/config.go:1022
+#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1005 lxc/config.go:1023
 msgid "The device doesn't exist"
 msgstr ""
 
-#: lxc/init.go:342
+#: lxc/init.go:343
 #, c-format
 msgid "The local image '%s' couldn't be found, trying '%s:' instead."
 msgstr ""
@@ -1058,11 +1058,11 @@ msgstr ""
 msgid "Timestamps:"
 msgstr ""
 
-#: lxc/init.go:360
+#: lxc/init.go:361
 msgid "To attach a network to a container, use: lxc network attach"
 msgstr ""
 
-#: lxc/init.go:359
+#: lxc/init.go:360
 msgid "To create a new network, use: lxc network create"
 msgstr ""
 
@@ -1174,7 +1174,7 @@ msgid ""
 "lxc config device show [<remote>:]<container>\n"
 "    Show full device details for container.\n"
 "\n"
-"lxc config device remove [<remote>:]<container> <name>\n"
+"lxc config device remove [<remote>:]<container> <name>...\n"
 "    Remove device from container.\n"
 "\n"
 "*Client trust store management*\n"
@@ -1900,7 +1900,7 @@ msgstr ""
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:272
+#: lxc/file.go:273
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -1943,7 +1943,7 @@ msgstr ""
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:550
+#: lxc/file.go:551
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
diff --git a/po/fr.po b/po/fr.po
index 23f139b97..8cfa72c0e 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LXD\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-06-27 00:23-0400\n"
+"POT-Creation-Date: 2017-06-30 17:03-0400\n"
 "PO-Revision-Date: 2017-06-07 15:24+0000\n"
 "Last-Translator: Stéphane Graber <stgraber at stgraber.org>\n"
 "Language-Team: French <https://hosted.weblate.org/projects/linux-containers/"
@@ -204,12 +204,12 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr "%s (%d de plus)"
 
-#: lxc/file.go:186
+#: lxc/file.go:187
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/file.go:128
+#: lxc/file.go:129
 #, c-format
 msgid "'%s' isn't a regular file or directory."
 msgstr ""
@@ -291,7 +291,7 @@ msgstr "CPU utilisé :"
 msgid "CREATED AT"
 msgstr "CRÉÉ À"
 
-#: lxc/file.go:479
+#: lxc/file.go:480
 #, fuzzy
 msgid "Can't pull a directory without --recursive"
 msgstr "impossible de récupérer un répertoire sans --recursive"
@@ -352,12 +352,12 @@ msgstr "Connexion refusée ; LXD est-il actif ?"
 msgid "Container name is mandatory"
 msgstr "Le nom du conteneur est obligatoire"
 
-#: lxc/copy.go:210 lxc/init.go:313
+#: lxc/copy.go:210 lxc/init.go:314
 #, c-format
 msgid "Container name is: %s"
 msgstr "Le nom du conteneur est : %s"
 
-#: lxc/publish.go:250
+#: lxc/publish.go:248
 #, c-format
 msgid "Container published with fingerprint: %s"
 msgstr "Conteneur publié avec l'empreinte : %s"
@@ -416,7 +416,7 @@ msgstr "Définir un algorithme de compression : pour image ou aucun"
 msgid "Device %s added to %s"
 msgstr "Périphérique %s ajouté à %s"
 
-#: lxc/config.go:1037
+#: lxc/config.go:1039
 #, c-format
 msgid "Device %s removed from %s"
 msgstr "Périphérique %s retiré de %s"
@@ -504,7 +504,7 @@ msgstr "Échec lors de la génération de 'lxc.1': %v"
 msgid "Failed to get the new container name"
 msgstr "Profil à appliquer au nouveau conteneur"
 
-#: lxc/file.go:123
+#: lxc/file.go:124
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -606,17 +606,17 @@ msgstr "Certificat invalide"
 msgid "Invalid configuration key"
 msgstr "Clé de configuration invalide"
 
-#: lxc/file.go:522
+#: lxc/file.go:523
 #, fuzzy, c-format
 msgid "Invalid path %s"
 msgstr "Cible invalide %s"
 
-#: lxc/file.go:451
+#: lxc/file.go:452
 #, c-format
 msgid "Invalid source %s"
 msgstr "Source invalide %s"
 
-#: lxc/file.go:224
+#: lxc/file.go:225
 #, c-format
 msgid "Invalid target %s"
 msgstr "Cible invalide %s"
@@ -683,7 +683,7 @@ msgstr "Résumé manquant."
 msgid "More than one device matches, specify the device name."
 msgstr "Plus d'un périphérique correspond, spécifier le nom du périphérique."
 
-#: lxc/file.go:438
+#: lxc/file.go:439
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 "Plusieurs fichiers à télécharger, mais la destination n'est pas un dossier"
@@ -1107,7 +1107,7 @@ msgstr ""
 "Le conteneur est en cours d'exécution. Utiliser --force pour qu'il soit "
 "arrêté et redémarré."
 
-#: lxc/init.go:358
+#: lxc/init.go:359
 msgid "The container you are starting doesn't have any network attached to it."
 msgstr ""
 "Le conteneur que vous démarrez n'est attaché à aucune interface réseau."
@@ -1118,11 +1118,11 @@ msgid "The device already exists"
 msgstr "Le périphérique n'existe pas"
 
 #: lxc/config.go:833 lxc/config.go:845 lxc/config.go:881 lxc/config.go:899
-#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1006 lxc/config.go:1022
+#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1005 lxc/config.go:1023
 msgid "The device doesn't exist"
 msgstr "Le périphérique n'existe pas"
 
-#: lxc/init.go:342
+#: lxc/init.go:343
 #, c-format
 msgid "The local image '%s' couldn't be found, trying '%s:' instead."
 msgstr "L'image locale '%s' n'a pas été trouvée, essayer '%s:' à la place."
@@ -1165,11 +1165,11 @@ msgstr "Temps d'attente du conteneur avant de le tuer"
 msgid "Timestamps:"
 msgstr "Horodatage :"
 
-#: lxc/init.go:360
+#: lxc/init.go:361
 msgid "To attach a network to a container, use: lxc network attach"
 msgstr "Pour attacher un réseau à un conteneur, utiliser : lxc network attach"
 
-#: lxc/init.go:359
+#: lxc/init.go:360
 msgid "To create a new network, use: lxc network create"
 msgstr "Pour créer un réseau, utiliser : lxc network create"
 
@@ -1286,7 +1286,7 @@ msgid ""
 "lxc config device show [<remote>:]<container>\n"
 "    Show full device details for container.\n"
 "\n"
-"lxc config device remove [<remote>:]<container> <name>\n"
+"lxc config device remove [<remote>:]<container> <name>...\n"
 "    Remove device from container.\n"
 "\n"
 "*Client trust store management*\n"
@@ -2466,7 +2466,7 @@ msgstr ""
 msgid "can't remove the default remote"
 msgstr "impossible de supprimer le serveur distant par défaut"
 
-#: lxc/file.go:272
+#: lxc/file.go:273
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr "impossible de spécifier uid/gid/mode en mode récursif"
 
@@ -2509,7 +2509,7 @@ msgstr "ok (y/n) ?"
 msgid "processing aliases failed %s\n"
 msgstr "l'analyse des alias a échoué %s\n"
 
-#: lxc/file.go:550
+#: lxc/file.go:551
 msgid "recursive edit doesn't make sense :("
 msgstr "l'édition récursive ne fait aucun sens :("
 
diff --git a/po/it.po b/po/it.po
index 2447fd977..3e7baaca7 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-06-27 00:23-0400\n"
+"POT-Creation-Date: 2017-06-30 17:03-0400\n"
 "PO-Revision-Date: 2017-06-15 22:46+0000\n"
 "Last-Translator: Alberto Donato <alberto.donato at gmail.com>\n"
 "Language-Team: Italian <https://hosted.weblate.org/projects/linux-containers/"
@@ -148,12 +148,12 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr "%s (altri %d)"
 
-#: lxc/file.go:186
+#: lxc/file.go:187
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/file.go:128
+#: lxc/file.go:129
 #, c-format
 msgid "'%s' isn't a regular file or directory."
 msgstr ""
@@ -234,7 +234,7 @@ msgstr "Utilizzo CPU:"
 msgid "CREATED AT"
 msgstr "CREATO IL"
 
-#: lxc/file.go:479
+#: lxc/file.go:480
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -292,12 +292,12 @@ msgstr ""
 msgid "Container name is mandatory"
 msgstr ""
 
-#: lxc/copy.go:210 lxc/init.go:313
+#: lxc/copy.go:210 lxc/init.go:314
 #, c-format
 msgid "Container name is: %s"
 msgstr ""
 
-#: lxc/publish.go:250
+#: lxc/publish.go:248
 #, c-format
 msgid "Container published with fingerprint: %s"
 msgstr ""
@@ -355,7 +355,7 @@ msgstr ""
 msgid "Device %s added to %s"
 msgstr ""
 
-#: lxc/config.go:1037
+#: lxc/config.go:1039
 #, c-format
 msgid "Device %s removed from %s"
 msgstr ""
@@ -441,7 +441,7 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/file.go:123
+#: lxc/file.go:124
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -537,17 +537,17 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:522
+#: lxc/file.go:523
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
 
-#: lxc/file.go:451
+#: lxc/file.go:452
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:224
+#: lxc/file.go:225
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -613,7 +613,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:438
+#: lxc/file.go:439
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -1025,7 +1025,7 @@ msgid ""
 "restarted."
 msgstr ""
 
-#: lxc/init.go:358
+#: lxc/init.go:359
 msgid "The container you are starting doesn't have any network attached to it."
 msgstr ""
 
@@ -1035,11 +1035,11 @@ msgid "The device already exists"
 msgstr "il remote %s esiste già"
 
 #: lxc/config.go:833 lxc/config.go:845 lxc/config.go:881 lxc/config.go:899
-#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1006 lxc/config.go:1022
+#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1005 lxc/config.go:1023
 msgid "The device doesn't exist"
 msgstr ""
 
-#: lxc/init.go:342
+#: lxc/init.go:343
 #, c-format
 msgid "The local image '%s' couldn't be found, trying '%s:' instead."
 msgstr ""
@@ -1076,11 +1076,11 @@ msgstr ""
 msgid "Timestamps:"
 msgstr ""
 
-#: lxc/init.go:360
+#: lxc/init.go:361
 msgid "To attach a network to a container, use: lxc network attach"
 msgstr ""
 
-#: lxc/init.go:359
+#: lxc/init.go:360
 msgid "To create a new network, use: lxc network create"
 msgstr ""
 
@@ -1192,7 +1192,7 @@ msgid ""
 "lxc config device show [<remote>:]<container>\n"
 "    Show full device details for container.\n"
 "\n"
-"lxc config device remove [<remote>:]<container> <name>\n"
+"lxc config device remove [<remote>:]<container> <name>...\n"
 "    Remove device from container.\n"
 "\n"
 "*Client trust store management*\n"
@@ -1919,7 +1919,7 @@ msgstr ""
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:272
+#: lxc/file.go:273
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -1962,7 +1962,7 @@ msgstr "ok (y/n)?"
 msgid "processing aliases failed %s\n"
 msgstr "errore di processamento degli alias %s\n"
 
-#: lxc/file.go:550
+#: lxc/file.go:551
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
diff --git a/po/ja.po b/po/ja.po
index f46379e85..a02a4f630 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LXD\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-06-27 00:23-0400\n"
+"POT-Creation-Date: 2017-06-30 17:03-0400\n"
 "PO-Revision-Date: 2017-03-23 12:03+0000\n"
 "Last-Translator: KATOH Yasufumi <karma at jazz.email.ne.jp>\n"
 "Language-Team: Japanese <https://hosted.weblate.org/projects/linux-"
@@ -127,12 +127,12 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:186
+#: lxc/file.go:187
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/file.go:128
+#: lxc/file.go:129
 #, c-format
 msgid "'%s' isn't a regular file or directory."
 msgstr ""
@@ -213,7 +213,7 @@ msgstr "CPU使用量:"
 msgid "CREATED AT"
 msgstr ""
 
-#: lxc/file.go:479
+#: lxc/file.go:480
 #, fuzzy
 msgid "Can't pull a directory without --recursive"
 msgstr ""
@@ -273,12 +273,12 @@ msgstr "接続が拒否されました。LXDが実行されていますか?"
 msgid "Container name is mandatory"
 msgstr "コンテナ名を指定する必要があります"
 
-#: lxc/copy.go:210 lxc/init.go:313
+#: lxc/copy.go:210 lxc/init.go:314
 #, c-format
 msgid "Container name is: %s"
 msgstr "コンテナ名: %s"
 
-#: lxc/publish.go:250
+#: lxc/publish.go:248
 #, c-format
 msgid "Container published with fingerprint: %s"
 msgstr "コンテナは以下のフィンガープリントで publish されます: %s"
@@ -337,7 +337,7 @@ msgstr "圧縮アルゴリズムを指定します: 圧縮アルゴリズム名
 msgid "Device %s added to %s"
 msgstr "デバイス %s が %s に追加されました"
 
-#: lxc/config.go:1037
+#: lxc/config.go:1039
 #, c-format
 msgid "Device %s removed from %s"
 msgstr "デバイス %s が %s から削除されました"
@@ -424,7 +424,7 @@ msgstr "'lxc.1' の生成が失敗しました: %v"
 msgid "Failed to get the new container name"
 msgstr "新しいコンテナに適用するプロファイル"
 
-#: lxc/file.go:123
+#: lxc/file.go:124
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -523,17 +523,17 @@ msgstr "不正な証明書です"
 msgid "Invalid configuration key"
 msgstr "正しくない設定項目 (key) です"
 
-#: lxc/file.go:522
+#: lxc/file.go:523
 #, c-format
 msgid "Invalid path %s"
 msgstr "不正なパス %s"
 
-#: lxc/file.go:451
+#: lxc/file.go:452
 #, c-format
 msgid "Invalid source %s"
 msgstr "不正なソース %s"
 
-#: lxc/file.go:224
+#: lxc/file.go:225
 #, c-format
 msgid "Invalid target %s"
 msgstr "不正な送り先 %s"
@@ -599,7 +599,7 @@ msgstr "サマリーはありません。"
 msgid "More than one device matches, specify the device name."
 msgstr "複数のデバイスとマッチします。デバイス名を指定してください。"
 
-#: lxc/file.go:438
+#: lxc/file.go:439
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 "ダウンロード対象のファイルが複数ありますが、コピー先がディレクトリではありま"
@@ -1016,7 +1016,7 @@ msgstr ""
 "コンテナは現在実行中です。停止して、再起動するために --force を使用してくだ\n"
 "さい。"
 
-#: lxc/init.go:358
+#: lxc/init.go:359
 msgid "The container you are starting doesn't have any network attached to it."
 msgstr "起動しようとしたコンテナに接続されているネットワークがありません。"
 
@@ -1026,11 +1026,11 @@ msgid "The device already exists"
 msgstr "リモート %s は既に存在します"
 
 #: lxc/config.go:833 lxc/config.go:845 lxc/config.go:881 lxc/config.go:899
-#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1006 lxc/config.go:1022
+#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1005 lxc/config.go:1023
 msgid "The device doesn't exist"
 msgstr "デバイスが存在しません"
 
-#: lxc/init.go:342
+#: lxc/init.go:343
 #, c-format
 msgid "The local image '%s' couldn't be found, trying '%s:' instead."
 msgstr ""
@@ -1074,12 +1074,12 @@ msgstr "コンテナを強制停止するまでの時間"
 msgid "Timestamps:"
 msgstr "タイムスタンプ:"
 
-#: lxc/init.go:360
+#: lxc/init.go:361
 msgid "To attach a network to a container, use: lxc network attach"
 msgstr ""
 "コンテナにネットワークを接続するには、lxc network attach を使用してください"
 
-#: lxc/init.go:359
+#: lxc/init.go:360
 msgid "To create a new network, use: lxc network create"
 msgstr ""
 "新しいネットワークを作成するには、lxc network create を使用してください"
@@ -1154,6 +1154,7 @@ msgid "Usage: lxc <command> [options]"
 msgstr "使い方: lxc <コマンド> [オプション]"
 
 #: lxc/config.go:60
+#, fuzzy
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
 "\n"
@@ -1197,7 +1198,7 @@ msgid ""
 "lxc config device show [<remote>:]<container>\n"
 "    Show full device details for container.\n"
 "\n"
-"lxc config device remove [<remote>:]<container> <name>\n"
+"lxc config device remove [<remote>:]<container> <name>...\n"
 "    Remove device from container.\n"
 "\n"
 "*Client trust store management*\n"
@@ -2526,7 +2527,7 @@ msgstr "`lxc config profile` は廃止されました。`lxc profile` を使っ
 msgid "can't remove the default remote"
 msgstr "デフォルトのリモートは削除できません"
 
-#: lxc/file.go:272
+#: lxc/file.go:273
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr "再帰 (recursive) モードでは uid/gid/mode を指定できません"
 
@@ -2571,7 +2572,7 @@ msgstr "ok (y/n)?"
 msgid "processing aliases failed %s\n"
 msgstr "エイリアスの処理が失敗しました %s\n"
 
-#: lxc/file.go:550
+#: lxc/file.go:551
 msgid "recursive edit doesn't make sense :("
 msgstr "再帰的な edit は意味がありません :("
 
diff --git a/po/lxd.pot b/po/lxd.pot
index a4c3ebd30..0363f2799 100644
--- a/po/lxd.pot
+++ b/po/lxd.pot
@@ -7,7 +7,7 @@
 msgid   ""
 msgstr  "Project-Id-Version: lxd\n"
         "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-        "POT-Creation-Date: 2017-06-27 00:23-0400\n"
+        "POT-Creation-Date: 2017-06-30 17:03-0400\n"
         "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
         "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
         "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -118,12 +118,12 @@ msgstr  ""
 msgid   "%s (%d more)"
 msgstr  ""
 
-#: lxc/file.go:186
+#: lxc/file.go:187
 #, c-format
 msgid   "%s is not a directory"
 msgstr  ""
 
-#: lxc/file.go:128
+#: lxc/file.go:129
 #, c-format
 msgid   "'%s' isn't a regular file or directory."
 msgstr  ""
@@ -204,7 +204,7 @@ msgstr  ""
 msgid   "CREATED AT"
 msgstr  ""
 
-#: lxc/file.go:479
+#: lxc/file.go:480
 msgid   "Can't pull a directory without --recursive"
 msgstr  ""
 
@@ -261,12 +261,12 @@ msgstr  ""
 msgid   "Container name is mandatory"
 msgstr  ""
 
-#: lxc/copy.go:210 lxc/init.go:313
+#: lxc/copy.go:210 lxc/init.go:314
 #, c-format
 msgid   "Container name is: %s"
 msgstr  ""
 
-#: lxc/publish.go:250
+#: lxc/publish.go:248
 #, c-format
 msgid   "Container published with fingerprint: %s"
 msgstr  ""
@@ -323,7 +323,7 @@ msgstr  ""
 msgid   "Device %s added to %s"
 msgstr  ""
 
-#: lxc/config.go:1037
+#: lxc/config.go:1039
 #, c-format
 msgid   "Device %s removed from %s"
 msgstr  ""
@@ -409,7 +409,7 @@ msgstr  ""
 msgid   "Failed to get the new container name"
 msgstr  ""
 
-#: lxc/file.go:123
+#: lxc/file.go:124
 #, c-format
 msgid   "Failed to walk path for %s: %s"
 msgstr  ""
@@ -505,17 +505,17 @@ msgstr  ""
 msgid   "Invalid configuration key"
 msgstr  ""
 
-#: lxc/file.go:522
+#: lxc/file.go:523
 #, c-format
 msgid   "Invalid path %s"
 msgstr  ""
 
-#: lxc/file.go:451
+#: lxc/file.go:452
 #, c-format
 msgid   "Invalid source %s"
 msgstr  ""
 
-#: lxc/file.go:224
+#: lxc/file.go:225
 #, c-format
 msgid   "Invalid target %s"
 msgstr  ""
@@ -581,7 +581,7 @@ msgstr  ""
 msgid   "More than one device matches, specify the device name."
 msgstr  ""
 
-#: lxc/file.go:438
+#: lxc/file.go:439
 msgid   "More than one file to download, but target is not a directory"
 msgstr  ""
 
@@ -990,7 +990,7 @@ msgstr  ""
 msgid   "The container is currently running. Use --force to have it stopped and restarted."
 msgstr  ""
 
-#: lxc/init.go:358
+#: lxc/init.go:359
 msgid   "The container you are starting doesn't have any network attached to it."
 msgstr  ""
 
@@ -998,11 +998,11 @@ msgstr  ""
 msgid   "The device already exists"
 msgstr  ""
 
-#: lxc/config.go:833 lxc/config.go:845 lxc/config.go:881 lxc/config.go:899 lxc/config.go:945 lxc/config.go:962 lxc/config.go:1006 lxc/config.go:1022
+#: lxc/config.go:833 lxc/config.go:845 lxc/config.go:881 lxc/config.go:899 lxc/config.go:945 lxc/config.go:962 lxc/config.go:1005 lxc/config.go:1023
 msgid   "The device doesn't exist"
 msgstr  ""
 
-#: lxc/init.go:342
+#: lxc/init.go:343
 #, c-format
 msgid   "The local image '%s' couldn't be found, trying '%s:' instead."
 msgstr  ""
@@ -1038,11 +1038,11 @@ msgstr  ""
 msgid   "Timestamps:"
 msgstr  ""
 
-#: lxc/init.go:360
+#: lxc/init.go:361
 msgid   "To attach a network to a container, use: lxc network attach"
 msgstr  ""
 
-#: lxc/init.go:359
+#: lxc/init.go:360
 msgid   "To create a new network, use: lxc network create"
 msgstr  ""
 
@@ -1151,7 +1151,7 @@ msgid   "Usage: lxc config <subcommand> [options]\n"
         "lxc config device show [<remote>:]<container>\n"
         "    Show full device details for container.\n"
         "\n"
-        "lxc config device remove [<remote>:]<container> <name>\n"
+        "lxc config device remove [<remote>:]<container> <name>...\n"
         "    Remove device from container.\n"
         "\n"
         "*Client trust store management*\n"
@@ -1802,7 +1802,7 @@ msgstr  ""
 msgid   "can't remove the default remote"
 msgstr  ""
 
-#: lxc/file.go:272
+#: lxc/file.go:273
 msgid   "can't supply uid/gid/mode in recursive mode"
 msgstr  ""
 
@@ -1845,7 +1845,7 @@ msgstr  ""
 msgid   "processing aliases failed %s\n"
 msgstr  ""
 
-#: lxc/file.go:550
+#: lxc/file.go:551
 msgid   "recursive edit doesn't make sense :("
 msgstr  ""
 
diff --git a/po/nl.po b/po/nl.po
index fdd60f425..035d87772 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-06-27 00:23-0400\n"
+"POT-Creation-Date: 2017-06-30 17:03-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -124,12 +124,12 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:186
+#: lxc/file.go:187
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/file.go:128
+#: lxc/file.go:129
 #, c-format
 msgid "'%s' isn't a regular file or directory."
 msgstr ""
@@ -210,7 +210,7 @@ msgstr ""
 msgid "CREATED AT"
 msgstr ""
 
-#: lxc/file.go:479
+#: lxc/file.go:480
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -268,12 +268,12 @@ msgstr ""
 msgid "Container name is mandatory"
 msgstr ""
 
-#: lxc/copy.go:210 lxc/init.go:313
+#: lxc/copy.go:210 lxc/init.go:314
 #, c-format
 msgid "Container name is: %s"
 msgstr ""
 
-#: lxc/publish.go:250
+#: lxc/publish.go:248
 #, c-format
 msgid "Container published with fingerprint: %s"
 msgstr ""
@@ -331,7 +331,7 @@ msgstr ""
 msgid "Device %s added to %s"
 msgstr ""
 
-#: lxc/config.go:1037
+#: lxc/config.go:1039
 #, c-format
 msgid "Device %s removed from %s"
 msgstr ""
@@ -417,7 +417,7 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/file.go:123
+#: lxc/file.go:124
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -513,17 +513,17 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:522
+#: lxc/file.go:523
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
 
-#: lxc/file.go:451
+#: lxc/file.go:452
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:224
+#: lxc/file.go:225
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -589,7 +589,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:438
+#: lxc/file.go:439
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -1001,7 +1001,7 @@ msgid ""
 "restarted."
 msgstr ""
 
-#: lxc/init.go:358
+#: lxc/init.go:359
 msgid "The container you are starting doesn't have any network attached to it."
 msgstr ""
 
@@ -1010,11 +1010,11 @@ msgid "The device already exists"
 msgstr ""
 
 #: lxc/config.go:833 lxc/config.go:845 lxc/config.go:881 lxc/config.go:899
-#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1006 lxc/config.go:1022
+#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1005 lxc/config.go:1023
 msgid "The device doesn't exist"
 msgstr ""
 
-#: lxc/init.go:342
+#: lxc/init.go:343
 #, c-format
 msgid "The local image '%s' couldn't be found, trying '%s:' instead."
 msgstr ""
@@ -1051,11 +1051,11 @@ msgstr ""
 msgid "Timestamps:"
 msgstr ""
 
-#: lxc/init.go:360
+#: lxc/init.go:361
 msgid "To attach a network to a container, use: lxc network attach"
 msgstr ""
 
-#: lxc/init.go:359
+#: lxc/init.go:360
 msgid "To create a new network, use: lxc network create"
 msgstr ""
 
@@ -1167,7 +1167,7 @@ msgid ""
 "lxc config device show [<remote>:]<container>\n"
 "    Show full device details for container.\n"
 "\n"
-"lxc config device remove [<remote>:]<container> <name>\n"
+"lxc config device remove [<remote>:]<container> <name>...\n"
 "    Remove device from container.\n"
 "\n"
 "*Client trust store management*\n"
@@ -1893,7 +1893,7 @@ msgstr ""
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:272
+#: lxc/file.go:273
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -1936,7 +1936,7 @@ msgstr ""
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:550
+#: lxc/file.go:551
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
diff --git a/po/ru.po b/po/ru.po
index eb28262e4..8a13ea3df 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-06-27 00:23-0400\n"
+"POT-Creation-Date: 2017-06-30 17:03-0400\n"
 "PO-Revision-Date: 2017-06-06 13:55+0000\n"
 "Last-Translator: Александр Киль <shorrey at gmail.com>\n"
 "Language-Team: Russian <https://hosted.weblate.org/projects/linux-containers/"
@@ -195,12 +195,12 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:186
+#: lxc/file.go:187
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/file.go:128
+#: lxc/file.go:129
 #, c-format
 msgid "'%s' isn't a regular file or directory."
 msgstr ""
@@ -283,7 +283,7 @@ msgstr " Использование ЦП:"
 msgid "CREATED AT"
 msgstr "СОЗДАН"
 
-#: lxc/file.go:479
+#: lxc/file.go:480
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -341,12 +341,12 @@ msgstr "В соединении отказано; LXD запущен?"
 msgid "Container name is mandatory"
 msgstr "Имя контейнера является обязательным"
 
-#: lxc/copy.go:210 lxc/init.go:313
+#: lxc/copy.go:210 lxc/init.go:314
 #, c-format
 msgid "Container name is: %s"
 msgstr "Имя контейнера: %s"
 
-#: lxc/publish.go:250
+#: lxc/publish.go:248
 #, c-format
 msgid "Container published with fingerprint: %s"
 msgstr ""
@@ -404,7 +404,7 @@ msgstr ""
 msgid "Device %s added to %s"
 msgstr ""
 
-#: lxc/config.go:1037
+#: lxc/config.go:1039
 #, c-format
 msgid "Device %s removed from %s"
 msgstr ""
@@ -491,7 +491,7 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/file.go:123
+#: lxc/file.go:124
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -587,17 +587,17 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:522
+#: lxc/file.go:523
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
 
-#: lxc/file.go:451
+#: lxc/file.go:452
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:224
+#: lxc/file.go:225
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -664,7 +664,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:438
+#: lxc/file.go:439
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -1077,7 +1077,7 @@ msgid ""
 "restarted."
 msgstr ""
 
-#: lxc/init.go:358
+#: lxc/init.go:359
 msgid "The container you are starting doesn't have any network attached to it."
 msgstr ""
 
@@ -1086,11 +1086,11 @@ msgid "The device already exists"
 msgstr ""
 
 #: lxc/config.go:833 lxc/config.go:845 lxc/config.go:881 lxc/config.go:899
-#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1006 lxc/config.go:1022
+#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1005 lxc/config.go:1023
 msgid "The device doesn't exist"
 msgstr ""
 
-#: lxc/init.go:342
+#: lxc/init.go:343
 #, c-format
 msgid "The local image '%s' couldn't be found, trying '%s:' instead."
 msgstr ""
@@ -1127,11 +1127,11 @@ msgstr ""
 msgid "Timestamps:"
 msgstr ""
 
-#: lxc/init.go:360
+#: lxc/init.go:361
 msgid "To attach a network to a container, use: lxc network attach"
 msgstr ""
 
-#: lxc/init.go:359
+#: lxc/init.go:360
 msgid "To create a new network, use: lxc network create"
 msgstr ""
 
@@ -1246,7 +1246,7 @@ msgid ""
 "lxc config device show [<remote>:]<container>\n"
 "    Show full device details for container.\n"
 "\n"
-"lxc config device remove [<remote>:]<container> <name>\n"
+"lxc config device remove [<remote>:]<container> <name>...\n"
 "    Remove device from container.\n"
 "\n"
 "*Client trust store management*\n"
@@ -1977,7 +1977,7 @@ msgstr ""
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:272
+#: lxc/file.go:273
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2020,7 +2020,7 @@ msgstr ""
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:550
+#: lxc/file.go:551
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
diff --git a/po/sr.po b/po/sr.po
index 687eae9b0..78e89175e 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-06-27 00:23-0400\n"
+"POT-Creation-Date: 2017-06-30 17:03-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -124,12 +124,12 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:186
+#: lxc/file.go:187
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/file.go:128
+#: lxc/file.go:129
 #, c-format
 msgid "'%s' isn't a regular file or directory."
 msgstr ""
@@ -210,7 +210,7 @@ msgstr ""
 msgid "CREATED AT"
 msgstr ""
 
-#: lxc/file.go:479
+#: lxc/file.go:480
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -268,12 +268,12 @@ msgstr ""
 msgid "Container name is mandatory"
 msgstr ""
 
-#: lxc/copy.go:210 lxc/init.go:313
+#: lxc/copy.go:210 lxc/init.go:314
 #, c-format
 msgid "Container name is: %s"
 msgstr ""
 
-#: lxc/publish.go:250
+#: lxc/publish.go:248
 #, c-format
 msgid "Container published with fingerprint: %s"
 msgstr ""
@@ -331,7 +331,7 @@ msgstr ""
 msgid "Device %s added to %s"
 msgstr ""
 
-#: lxc/config.go:1037
+#: lxc/config.go:1039
 #, c-format
 msgid "Device %s removed from %s"
 msgstr ""
@@ -417,7 +417,7 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/file.go:123
+#: lxc/file.go:124
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -513,17 +513,17 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:522
+#: lxc/file.go:523
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
 
-#: lxc/file.go:451
+#: lxc/file.go:452
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:224
+#: lxc/file.go:225
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -589,7 +589,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:438
+#: lxc/file.go:439
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -1001,7 +1001,7 @@ msgid ""
 "restarted."
 msgstr ""
 
-#: lxc/init.go:358
+#: lxc/init.go:359
 msgid "The container you are starting doesn't have any network attached to it."
 msgstr ""
 
@@ -1010,11 +1010,11 @@ msgid "The device already exists"
 msgstr ""
 
 #: lxc/config.go:833 lxc/config.go:845 lxc/config.go:881 lxc/config.go:899
-#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1006 lxc/config.go:1022
+#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1005 lxc/config.go:1023
 msgid "The device doesn't exist"
 msgstr ""
 
-#: lxc/init.go:342
+#: lxc/init.go:343
 #, c-format
 msgid "The local image '%s' couldn't be found, trying '%s:' instead."
 msgstr ""
@@ -1051,11 +1051,11 @@ msgstr ""
 msgid "Timestamps:"
 msgstr ""
 
-#: lxc/init.go:360
+#: lxc/init.go:361
 msgid "To attach a network to a container, use: lxc network attach"
 msgstr ""
 
-#: lxc/init.go:359
+#: lxc/init.go:360
 msgid "To create a new network, use: lxc network create"
 msgstr ""
 
@@ -1167,7 +1167,7 @@ msgid ""
 "lxc config device show [<remote>:]<container>\n"
 "    Show full device details for container.\n"
 "\n"
-"lxc config device remove [<remote>:]<container> <name>\n"
+"lxc config device remove [<remote>:]<container> <name>...\n"
 "    Remove device from container.\n"
 "\n"
 "*Client trust store management*\n"
@@ -1893,7 +1893,7 @@ msgstr ""
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:272
+#: lxc/file.go:273
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -1936,7 +1936,7 @@ msgstr ""
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:550
+#: lxc/file.go:551
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
diff --git a/po/sv.po b/po/sv.po
index b01137725..931812b87 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-06-27 00:23-0400\n"
+"POT-Creation-Date: 2017-06-30 17:03-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -124,12 +124,12 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:186
+#: lxc/file.go:187
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/file.go:128
+#: lxc/file.go:129
 #, c-format
 msgid "'%s' isn't a regular file or directory."
 msgstr ""
@@ -210,7 +210,7 @@ msgstr ""
 msgid "CREATED AT"
 msgstr ""
 
-#: lxc/file.go:479
+#: lxc/file.go:480
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -268,12 +268,12 @@ msgstr ""
 msgid "Container name is mandatory"
 msgstr ""
 
-#: lxc/copy.go:210 lxc/init.go:313
+#: lxc/copy.go:210 lxc/init.go:314
 #, c-format
 msgid "Container name is: %s"
 msgstr ""
 
-#: lxc/publish.go:250
+#: lxc/publish.go:248
 #, c-format
 msgid "Container published with fingerprint: %s"
 msgstr ""
@@ -331,7 +331,7 @@ msgstr ""
 msgid "Device %s added to %s"
 msgstr ""
 
-#: lxc/config.go:1037
+#: lxc/config.go:1039
 #, c-format
 msgid "Device %s removed from %s"
 msgstr ""
@@ -417,7 +417,7 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/file.go:123
+#: lxc/file.go:124
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -513,17 +513,17 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:522
+#: lxc/file.go:523
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
 
-#: lxc/file.go:451
+#: lxc/file.go:452
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:224
+#: lxc/file.go:225
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -589,7 +589,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:438
+#: lxc/file.go:439
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -1001,7 +1001,7 @@ msgid ""
 "restarted."
 msgstr ""
 
-#: lxc/init.go:358
+#: lxc/init.go:359
 msgid "The container you are starting doesn't have any network attached to it."
 msgstr ""
 
@@ -1010,11 +1010,11 @@ msgid "The device already exists"
 msgstr ""
 
 #: lxc/config.go:833 lxc/config.go:845 lxc/config.go:881 lxc/config.go:899
-#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1006 lxc/config.go:1022
+#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1005 lxc/config.go:1023
 msgid "The device doesn't exist"
 msgstr ""
 
-#: lxc/init.go:342
+#: lxc/init.go:343
 #, c-format
 msgid "The local image '%s' couldn't be found, trying '%s:' instead."
 msgstr ""
@@ -1051,11 +1051,11 @@ msgstr ""
 msgid "Timestamps:"
 msgstr ""
 
-#: lxc/init.go:360
+#: lxc/init.go:361
 msgid "To attach a network to a container, use: lxc network attach"
 msgstr ""
 
-#: lxc/init.go:359
+#: lxc/init.go:360
 msgid "To create a new network, use: lxc network create"
 msgstr ""
 
@@ -1167,7 +1167,7 @@ msgid ""
 "lxc config device show [<remote>:]<container>\n"
 "    Show full device details for container.\n"
 "\n"
-"lxc config device remove [<remote>:]<container> <name>\n"
+"lxc config device remove [<remote>:]<container> <name>...\n"
 "    Remove device from container.\n"
 "\n"
 "*Client trust store management*\n"
@@ -1893,7 +1893,7 @@ msgstr ""
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:272
+#: lxc/file.go:273
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -1936,7 +1936,7 @@ msgstr ""
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:550
+#: lxc/file.go:551
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
diff --git a/po/tr.po b/po/tr.po
index 3d26e3a66..543d2cf85 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: lxd\n"
 "Report-Msgid-Bugs-To: lxc-devel at lists.linuxcontainers.org\n"
-"POT-Creation-Date: 2017-06-27 00:23-0400\n"
+"POT-Creation-Date: 2017-06-30 17:03-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -124,12 +124,12 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:186
+#: lxc/file.go:187
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/file.go:128
+#: lxc/file.go:129
 #, c-format
 msgid "'%s' isn't a regular file or directory."
 msgstr ""
@@ -210,7 +210,7 @@ msgstr ""
 msgid "CREATED AT"
 msgstr ""
 
-#: lxc/file.go:479
+#: lxc/file.go:480
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -268,12 +268,12 @@ msgstr ""
 msgid "Container name is mandatory"
 msgstr ""
 
-#: lxc/copy.go:210 lxc/init.go:313
+#: lxc/copy.go:210 lxc/init.go:314
 #, c-format
 msgid "Container name is: %s"
 msgstr ""
 
-#: lxc/publish.go:250
+#: lxc/publish.go:248
 #, c-format
 msgid "Container published with fingerprint: %s"
 msgstr ""
@@ -331,7 +331,7 @@ msgstr ""
 msgid "Device %s added to %s"
 msgstr ""
 
-#: lxc/config.go:1037
+#: lxc/config.go:1039
 #, c-format
 msgid "Device %s removed from %s"
 msgstr ""
@@ -417,7 +417,7 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/file.go:123
+#: lxc/file.go:124
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -513,17 +513,17 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:522
+#: lxc/file.go:523
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
 
-#: lxc/file.go:451
+#: lxc/file.go:452
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:224
+#: lxc/file.go:225
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -589,7 +589,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:438
+#: lxc/file.go:439
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -1001,7 +1001,7 @@ msgid ""
 "restarted."
 msgstr ""
 
-#: lxc/init.go:358
+#: lxc/init.go:359
 msgid "The container you are starting doesn't have any network attached to it."
 msgstr ""
 
@@ -1010,11 +1010,11 @@ msgid "The device already exists"
 msgstr ""
 
 #: lxc/config.go:833 lxc/config.go:845 lxc/config.go:881 lxc/config.go:899
-#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1006 lxc/config.go:1022
+#: lxc/config.go:945 lxc/config.go:962 lxc/config.go:1005 lxc/config.go:1023
 msgid "The device doesn't exist"
 msgstr ""
 
-#: lxc/init.go:342
+#: lxc/init.go:343
 #, c-format
 msgid "The local image '%s' couldn't be found, trying '%s:' instead."
 msgstr ""
@@ -1051,11 +1051,11 @@ msgstr ""
 msgid "Timestamps:"
 msgstr ""
 
-#: lxc/init.go:360
+#: lxc/init.go:361
 msgid "To attach a network to a container, use: lxc network attach"
 msgstr ""
 
-#: lxc/init.go:359
+#: lxc/init.go:360
 msgid "To create a new network, use: lxc network create"
 msgstr ""
 
@@ -1167,7 +1167,7 @@ msgid ""
 "lxc config device show [<remote>:]<container>\n"
 "    Show full device details for container.\n"
 "\n"
-"lxc config device remove [<remote>:]<container> <name>\n"
+"lxc config device remove [<remote>:]<container> <name>...\n"
 "    Remove device from container.\n"
 "\n"
 "*Client trust store management*\n"
@@ -1893,7 +1893,7 @@ msgstr ""
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:272
+#: lxc/file.go:273
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -1936,7 +1936,7 @@ msgstr ""
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:550
+#: lxc/file.go:551
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 


More information about the lxc-devel mailing list