[lxc-devel] [lxd/master] Add aliases sub-command

stgraber on Github lxc-bot at linuxcontainers.org
Fri Feb 9 23:52:17 UTC 2018


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/20180209/940c497c/attachment.bin>
-------------- next part --------------
From 290b93c903d0aeb6863359c6e46eedc988d8a4e7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 9 Feb 2018 18:50:07 -0500
Subject: [PATCH 1/2] lxc/alias: Add subcommand to manage aliases
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #4233

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxc/alias.go | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 lxc/main.go  |   1 +
 2 files changed, 111 insertions(+)
 create mode 100644 lxc/alias.go

diff --git a/lxc/alias.go b/lxc/alias.go
new file mode 100644
index 000000000..676042a84
--- /dev/null
+++ b/lxc/alias.go
@@ -0,0 +1,110 @@
+package main
+
+import (
+	"fmt"
+	"os"
+	"sort"
+
+	"github.com/olekukonko/tablewriter"
+
+	"github.com/lxc/lxd/lxc/config"
+	"github.com/lxc/lxd/shared/i18n"
+)
+
+type aliasCmd struct {
+}
+
+func (c *aliasCmd) showByDefault() bool {
+	return true
+}
+
+func (c *aliasCmd) usage() string {
+	return i18n.G(
+		`Usage: lxc alias <subcommand> [options]
+
+Manage command aliases.
+
+lxc alias add <alias> <target>
+    Add a new alias <alias> pointing to <target>.
+
+lxc alias remove <alias>
+    Remove the alias <alias>.
+
+lxc alias list
+    List all the aliases.
+
+lxc alias rename <old alias> <new alias>
+    Rename remote <old alias> to <new alias>.`)
+}
+
+func (c *aliasCmd) flags() {
+}
+
+func (c *aliasCmd) run(conf *config.Config, args []string) error {
+	if len(args) < 1 {
+		return errUsage
+	}
+
+	switch args[0] {
+	case "add":
+		if len(args) != 3 {
+			return errArgs
+		}
+
+		_, ok := conf.Aliases[args[1]]
+		if ok {
+			return fmt.Errorf(i18n.G("alias %s already exists"), args[1])
+		}
+
+		conf.Aliases[args[1]] = args[2]
+
+	case "remove":
+		if len(args) != 2 {
+			return errArgs
+		}
+
+		_, ok := conf.Aliases[args[1]]
+		if !ok {
+			return fmt.Errorf(i18n.G("alias %s doesn't exist"), args[1])
+		}
+
+		delete(conf.Aliases, args[1])
+
+	case "list":
+		data := [][]string{}
+		for k, v := range conf.Aliases {
+			data = append(data, []string{k, v})
+		}
+
+		table := tablewriter.NewWriter(os.Stdout)
+		table.SetAutoWrapText(false)
+		table.SetAlignment(tablewriter.ALIGN_LEFT)
+		table.SetRowLine(true)
+		table.SetHeader([]string{
+			i18n.G("ALIAS"),
+			i18n.G("TARGET")})
+		sort.Sort(byName(data))
+		table.AppendBulk(data)
+		table.Render()
+
+	case "rename":
+		if len(args) != 3 {
+			return errArgs
+		}
+
+		target, ok := conf.Aliases[args[1]]
+		if !ok {
+			return fmt.Errorf(i18n.G("alias %s doesn't exist"), args[1])
+		}
+
+		_, ok = conf.Aliases[args[2]]
+		if ok {
+			return fmt.Errorf(i18n.G("alias %s already exists"), args[2])
+		}
+
+		conf.Aliases[args[2]] = target
+		delete(conf.Aliases, args[1])
+	}
+
+	return conf.SaveConfig(configPath)
+}
diff --git a/lxc/main.go b/lxc/main.go
index 54c93df3b..54a15ffbc 100644
--- a/lxc/main.go
+++ b/lxc/main.go
@@ -213,6 +213,7 @@ type command interface {
 }
 
 var commands = map[string]command{
+	"alias":     &aliasCmd{},
 	"config":    &configCmd{},
 	"console":   &consoleCmd{},
 	"copy":      &copyCmd{},

From db8baab272f4992ee45ac3ed393eb438d8749ff6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 9 Feb 2018 18:50:51 -0500
Subject: [PATCH 2/2] 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      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/el.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/es.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/fi.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/fr.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/id.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/it.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/ja.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/lxd.pot    | 90 +++++++++++++++++++++++++++++++++++++++-------------------
 po/nb_NO.po   | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/nl.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/pl.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/pt_BR.po   | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/ru.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/sr.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/sv.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/tr.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/zh.po      | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 po/zh_Hans.po | 91 ++++++++++++++++++++++++++++++++++++++++-------------------
 19 files changed, 1177 insertions(+), 551 deletions(-)

diff --git a/po/de.po b/po/de.po
index d0f7f4882..241ba7bc1 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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\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/"
@@ -255,17 +255,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -274,7 +274,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -379,7 +379,7 @@ msgstr ""
 "Optionen:\n"
 "\n"
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -428,7 +428,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr "kann nicht zum selben Container Namen kopieren"
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, fuzzy, c-format
 msgid "Config parsing error: %s"
@@ -520,7 +520,7 @@ msgstr "Gerät %s wurde zu %s hinzugefügt\n"
 msgid "Device %s removed from %s"
 msgstr "Gerät %s wurde von %s entfernt\n"
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, fuzzy, c-format
 msgid "Device already exists: %s"
 msgstr "entfernte Instanz %s existiert bereits"
@@ -572,7 +572,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr "Flüchtiger Container"
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, fuzzy, c-format
 msgid "Error updating template file: %s"
 msgstr "Fehler beim hinzufügen des Alias %s\n"
@@ -603,7 +603,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -623,12 +623,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr "kann nicht zum selben Container Namen kopieren"
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -749,7 +749,7 @@ msgstr "Akzeptiere Zertifikat"
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, fuzzy, c-format
 msgid "Invalid path %s"
 msgstr "Ungültiges Ziel %s"
@@ -759,12 +759,12 @@ msgstr "Ungültiges Ziel %s"
 msgid "Invalid protocol: %s"
 msgstr "Ungültiges Ziel %s"
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr "Ungültige Quelle %s"
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr "Ungültiges Ziel %s"
@@ -823,7 +823,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr "Fehlende Zusammenfassung."
 
@@ -831,7 +831,7 @@ msgstr "Fehlende Zusammenfassung."
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 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"
@@ -982,7 +982,7 @@ msgstr "Alternatives config Verzeichnis."
 msgid "Path to an alternate server directory"
 msgstr "Alternatives config Verzeichnis."
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 #, fuzzy
 msgid "Pause containers."
 msgstr "kann nicht zum selben Container Namen kopieren"
@@ -1000,7 +1000,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -1093,7 +1093,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr "Entferntes Administrator Passwort"
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 #, fuzzy
 msgid "Remote operation canceled by user"
 msgstr "Server Zertifikat vom Benutzer nicht akzeptiert"
@@ -1121,7 +1121,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 #, fuzzy
 msgid "Restart containers."
 msgstr "kann nicht zum selben Container Namen kopieren"
@@ -1244,7 +1244,7 @@ msgstr "Anhalten des Containers fehlgeschlagen!"
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 #, fuzzy
 msgid "Start containers."
 msgstr "kann nicht zum selben Container Namen kopieren"
@@ -1259,7 +1259,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 #, fuzzy
 msgid "Stop containers."
 msgstr "Anhalten des Containers fehlgeschlagen!"
@@ -1315,6 +1315,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1444,7 +1448,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, fuzzy, c-format
 msgid "Unknown file type '%s'"
 msgstr "Unbekannter Befehl %s für Abbild"
@@ -1472,6 +1476,25 @@ msgstr ""
 "Benutzung: lxc [Unterbefehl] [Optionen]\n"
 "Verfügbare Befehle:\n"
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 #, fuzzy
 msgid ""
@@ -2469,7 +2492,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2513,11 +2536,21 @@ msgstr "der Name des Ursprung Containers muss angegeben werden"
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, fuzzy, c-format
+msgid "alias %s already exists"
+msgstr "entfernte Instanz %s existiert bereits"
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, fuzzy, c-format
+msgid "alias %s doesn't exist"
+msgstr "entfernte Instanz %s existiert nicht"
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2572,12 +2605,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr "OK (y/n)? "
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2626,7 +2659,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr "falsche Anzahl an Parametern für Unterbefehl"
 
diff --git a/po/el.po b/po/el.po
index 0e68d83c8..5db9ec165 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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\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/"
@@ -151,17 +151,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -170,7 +170,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -269,7 +269,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -317,7 +317,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -407,7 +407,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -457,7 +457,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -488,7 +488,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -507,12 +507,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -626,7 +626,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -636,12 +636,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -700,7 +700,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr "  Χρήση μνήμης:"
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -708,7 +708,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -851,7 +851,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -868,7 +868,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -959,7 +959,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -986,7 +986,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1105,7 +1105,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1119,7 +1119,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1172,6 +1172,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1295,7 +1299,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1317,6 +1321,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2156,7 +2179,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2196,11 +2219,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2254,12 +2287,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2308,7 +2341,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/es.po b/po/es.po
index 153806fa1..f7a00d4ba 100644
--- a/po/es.po
+++ b/po/es.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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -148,17 +148,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -265,7 +265,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -313,7 +313,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -403,7 +403,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -483,7 +483,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -502,12 +502,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -631,12 +631,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -702,7 +702,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -844,7 +844,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1112,7 +1112,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1165,6 +1165,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1288,7 +1292,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1310,6 +1314,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2149,7 +2172,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2189,11 +2212,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2247,12 +2280,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2301,7 +2334,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/fi.po b/po/fi.po
index 76fd54f0a..2d4239320 100644
--- a/po/fi.po
+++ b/po/fi.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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -148,17 +148,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -265,7 +265,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -313,7 +313,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -403,7 +403,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -483,7 +483,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -502,12 +502,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -631,12 +631,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -702,7 +702,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -844,7 +844,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1112,7 +1112,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1165,6 +1165,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1288,7 +1292,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1310,6 +1314,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2149,7 +2172,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2189,11 +2212,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2247,12 +2280,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2301,7 +2334,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/fr.po b/po/fr.po
index 3fd9c092f..ebe136b1c 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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: 2018-01-02 10:52+0000\n"
 "Last-Translator: Bruno Perel <brunoperel at gmail.com>\n"
 "Language-Team: French <https://hosted.weblate.org/projects/linux-containers/"
@@ -246,17 +246,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr "%s (%d de plus)"
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr "%s n'est pas un répertoire"
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr "%v (interrompre encore deux fois pour forcer)"
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr "'%s' n'est pas un format de fichier pris en charge."
@@ -265,7 +265,7 @@ msgstr "'%s' n'est pas un format de fichier pris en charge."
 msgid "(none)"
 msgstr "(aucun)"
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr "ALIAS"
 
@@ -366,7 +366,7 @@ msgstr "CRÉÉ À"
 msgid "Cached: %s"
 msgstr "Créé : %s"
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 #, fuzzy
 msgid "Can't pull a directory without --recursive"
 msgstr "impossible de récupérer un répertoire sans --recursive"
@@ -417,7 +417,7 @@ msgstr "Commandes :"
 msgid "Config key/value to apply to the new container"
 msgstr "Clé/valeur de configuration à appliquer au nouveau conteneur"
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -508,7 +508,7 @@ msgstr "Périphérique %s ajouté à %s"
 msgid "Device %s removed from %s"
 msgstr "Périphérique %s retiré de %s"
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, fuzzy, c-format
 msgid "Device already exists: %s"
 msgstr "le serveur distant %s existe déjà"
@@ -558,7 +558,7 @@ msgstr "Environnement :"
 msgid "Ephemeral container"
 msgstr "Conteneur éphémère"
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, fuzzy, c-format
 msgid "Error updating template file: %s"
 msgstr "Import de l'image : %s"
@@ -590,7 +590,7 @@ msgstr "NOM"
 msgid "FINGERPRINT"
 msgstr "EMPREINTE"
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, fuzzy, c-format
 msgid "Failed to create alias %s"
 msgstr "Échec lors de la génération de 'lxc.%s.1': %v"
@@ -610,12 +610,12 @@ 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/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -737,7 +737,7 @@ msgstr "Certificat invalide"
 msgid "Invalid configuration key"
 msgstr "Clé de configuration invalide"
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, fuzzy, c-format
 msgid "Invalid path %s"
 msgstr "Cible invalide %s"
@@ -747,12 +747,12 @@ msgstr "Cible invalide %s"
 msgid "Invalid protocol: %s"
 msgstr "Cible invalide %s"
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr "Source invalide %s"
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr "Cible invalide %s"
@@ -811,7 +811,7 @@ msgstr "Mémoire (pointe)"
 msgid "Memory usage:"
 msgstr "  Mémoire utilisée :"
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr "Résumé manquant."
 
@@ -819,7 +819,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:450
+#: lxc/file.go:460
 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"
@@ -966,7 +966,7 @@ msgstr "Chemin vers un dossier de configuration client alternatif"
 msgid "Path to an alternate server directory"
 msgstr "Chemin vers un dossier de configuration serveur alternatif"
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 #, fuzzy
 msgid "Pause containers."
 msgstr "Création du conteneur"
@@ -984,7 +984,7 @@ msgstr "Pid : %d"
 msgid "Press enter to open the editor again"
 msgstr "Appuyer sur Entrée pour ouvrir à nouveau l'éditeur"
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr "Appuyer sur Entrée pour lancer à nouveau l'éditeur"
@@ -1075,7 +1075,7 @@ msgstr "Récupération de l'image : %s"
 msgid "Remote admin password"
 msgstr "Mot de passe de l'administrateur distant"
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 #, fuzzy
 msgid "Remote operation canceled by user"
 msgstr "Certificat serveur rejeté par l'utilisateur"
@@ -1103,7 +1103,7 @@ msgstr "Requérir une confirmation de l'utilisateur"
 msgid "Resources:"
 msgstr "Ressources :"
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 #, fuzzy
 msgid "Restart containers."
 msgstr "Création du conteneur"
@@ -1227,7 +1227,7 @@ msgstr "L'arrêt du conteneur a échoué !"
 msgid "Source:"
 msgstr "Source :"
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 #, fuzzy
 msgid "Start containers."
 msgstr "Création du conteneur"
@@ -1242,7 +1242,7 @@ msgstr "Démarrage de %s"
 msgid "Status: %s"
 msgstr "État : %s"
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 #, fuzzy
 msgid "Stop containers."
 msgstr "L'arrêt du conteneur a échoué !"
@@ -1296,6 +1296,10 @@ msgstr "Swap (courant)"
 msgid "Swap (peak)"
 msgstr "Swap (pointe)"
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr "TYPE"
@@ -1431,7 +1435,7 @@ msgstr "UTILISÉ PAR"
 msgid "Unable to find help2man."
 msgstr "Impossible de trouver help2man."
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1456,6 +1460,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr "Utilisation : lxc <commande> [options]"
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 #, fuzzy
 msgid ""
@@ -2753,7 +2776,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr "L'utilisateur a annulé l'opération de suppression."
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2799,11 +2822,21 @@ msgstr ""
 "La commande `lxc config profile` est dépréciée, merci d'utiliser `lxc "
 "profile`"
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, fuzzy, c-format
+msgid "alias %s already exists"
+msgstr "le serveur distant %s existe déjà"
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, fuzzy, c-format
+msgid "alias %s doesn't exist"
+msgstr "le serveur distant %s n'existe pas"
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr "impossible de supprimer le serveur distant par défaut"
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr "impossible de spécifier uid/gid/mode en mode récursif"
 
@@ -2857,12 +2890,12 @@ msgstr "non"
 msgid "ok (y/n)?"
 msgstr "ok (y/n) ?"
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr "l'analyse des alias a échoué %s\n"
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr "l'édition récursive ne fait aucun sens :("
 
@@ -2911,7 +2944,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr "nombre d'arguments incorrect pour la sous-comande"
 
diff --git a/po/id.po b/po/id.po
index af6c7ce69..0feda5be5 100644
--- a/po/id.po
+++ b/po/id.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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -148,17 +148,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -265,7 +265,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -313,7 +313,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -403,7 +403,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -483,7 +483,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -502,12 +502,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -631,12 +631,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -702,7 +702,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -844,7 +844,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1112,7 +1112,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1165,6 +1165,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1288,7 +1292,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1310,6 +1314,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2149,7 +2172,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2189,11 +2212,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2247,12 +2280,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2301,7 +2334,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/it.po b/po/it.po
index a34c108c4..680c91e1a 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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: 2017-08-18 14:22+0000\n"
 "Last-Translator: Alberto Donato <alberto.donato at gmail.com>\n"
 "Language-Team: Italian <https://hosted.weblate.org/projects/linux-containers/"
@@ -172,17 +172,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr "%s (altri %d)"
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr "%v (interrompi altre due volte per forzare)"
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr "'%s' non è un tipo di file supportato."
@@ -191,7 +191,7 @@ msgstr "'%s' non è un tipo di file supportato."
 msgid "(none)"
 msgstr "(nessuno)"
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr "ALIAS"
 
@@ -290,7 +290,7 @@ msgstr "CREATO IL"
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr "Impossibile effettuare il pull di una directory senza --recursive"
 
@@ -338,7 +338,7 @@ msgstr "Comandi:"
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -428,7 +428,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr "La periferica esiste già: %s"
@@ -477,7 +477,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -508,7 +508,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -527,12 +527,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -647,7 +647,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -657,12 +657,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr "Proprietà errata: %s"
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -720,7 +720,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -728,7 +728,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -870,7 +870,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -887,7 +887,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -978,7 +978,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -1005,7 +1005,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1124,7 +1124,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1138,7 +1138,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1191,6 +1191,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1314,7 +1318,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1336,6 +1340,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2175,7 +2198,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2215,11 +2238,21 @@ msgstr "Occorre specificare un nome di container come origine"
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, fuzzy, c-format
+msgid "alias %s already exists"
+msgstr "il remote %s esiste già"
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, fuzzy, c-format
+msgid "alias %s doesn't exist"
+msgstr "il remote %s non esiste"
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2273,12 +2306,12 @@ msgstr "no"
 msgid "ok (y/n)?"
 msgstr "ok (y/n)?"
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr "errore di processamento degli alias %s\n"
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2327,7 +2360,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr "numero errato di argomenti del sottocomando"
 
diff --git a/po/ja.po b/po/ja.po
index 9e636b5a6..4abce8d63 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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: 2018-01-02 10:52+0000\n"
 "Last-Translator: KATOH Yasufumi <karma at jazz.email.ne.jp>\n"
 "Language-Team: Japanese <https://hosted.weblate.org/projects/linux-"
@@ -151,18 +151,18 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr "%s (他%d個)"
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr "%s はディレクトリではありません"
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 "%v (強制的に中断したい場合はあと2回Ctrl-Cを入力/SIGINTを送出してください)"
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr "'%s' はサポートされないタイプのファイルです。"
@@ -171,7 +171,7 @@ msgstr "'%s' はサポートされないタイプのファイルです。"
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -269,7 +269,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr "キャッシュ済: %s"
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 "ディレクトリを pull する場合は --recursive オプションを使用してください"
@@ -318,7 +318,7 @@ msgstr "コマンド:"
 msgid "Config key/value to apply to the new container"
 msgstr "新しいコンテナに適用するキー/値の設定"
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -408,7 +408,7 @@ msgstr "デバイス %s が %s に追加されました"
 msgid "Device %s removed from %s"
 msgstr "デバイス %s が %s から削除されました"
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr "デバイスは既に存在します: %s"
@@ -457,7 +457,7 @@ msgstr "環境変数:"
 msgid "Ephemeral container"
 msgstr "Ephemeral コンテナ"
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr "テンプレートファイル更新のエラー: %s"
@@ -488,7 +488,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr "エイリアス %s の作成に失敗しました"
@@ -507,12 +507,12 @@ msgstr "'lxc.1' の生成が失敗しました: %v"
 msgid "Failed to get the new container name"
 msgstr "新しいコンテナ名が取得できません"
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr "エイリアス %s の削除に失敗しました"
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr "パス %s にアクセスできませんでした: %s"
@@ -627,7 +627,7 @@ msgstr "不正な証明書です"
 msgid "Invalid configuration key"
 msgstr "正しくない設定項目 (key) です"
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr "不正なパス %s"
@@ -637,12 +637,12 @@ msgstr "不正なパス %s"
 msgid "Invalid protocol: %s"
 msgstr "不正なプロトコル: %s"
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr "不正なソース %s"
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr "不正な送り先 %s"
@@ -700,7 +700,7 @@ msgstr "メモリ (ピーク)"
 msgid "Memory usage:"
 msgstr "メモリ消費量:"
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr "サマリーはありません。"
 
@@ -708,7 +708,7 @@ msgstr "サマリーはありません。"
 msgid "More than one device matches, specify the device name."
 msgstr "複数のデバイスとマッチします。デバイス名を指定してください。"
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 "ダウンロード対象のファイルが複数ありますが、コピー先がディレクトリではありま"
@@ -852,7 +852,7 @@ msgstr "別のクライアント用設定ディレクトリ"
 msgid "Path to an alternate server directory"
 msgstr "別のサーバ用設定ディレクトリ"
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr "コンテナを一時停止します。"
 
@@ -869,7 +869,7 @@ msgstr "Pid: %d"
 msgid "Press enter to open the editor again"
 msgstr "再度エディタを開くためには Enter キーを押します"
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr "再度エディタを起動するには Enter キーを押します"
@@ -960,7 +960,7 @@ msgstr "イメージの更新中: %s"
 msgid "Remote admin password"
 msgstr "リモートの管理者パスワード"
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr "リモート操作がユーザによってキャンセルされました"
 
@@ -987,7 +987,7 @@ msgstr "ユーザの確認を要求する"
 msgid "Resources:"
 msgstr "リソース:"
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr "コンテナを再起動します。"
 
@@ -1106,7 +1106,7 @@ msgstr "一部のコンテナで %s が失敗しました"
 msgid "Source:"
 msgstr "取得元:"
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr "コンテナを起動します。"
 
@@ -1120,7 +1120,7 @@ msgstr "%s を起動中"
 msgid "Status: %s"
 msgstr "状態: %s"
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr "コンテナを停止します。"
 
@@ -1173,6 +1173,10 @@ msgstr "Swap (現在値)"
 msgid "Swap (peak)"
 msgstr "Swap (ピーク)"
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1309,7 +1313,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr "help2man が見つかりません。"
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr "未知のファイルタイプ '%s'"
@@ -1334,6 +1338,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr "使い方: lxc <コマンド> [オプション]"
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2895,7 +2918,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr "ユーザが削除操作を中断しました。"
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2939,11 +2962,21 @@ msgstr "コピー元のコンテナ名を指定してください"
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr "`lxc config profile` は廃止されました。`lxc profile` を使ってください"
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, fuzzy, c-format
+msgid "alias %s already exists"
+msgstr "リモート %s は既に存在します"
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, fuzzy, c-format
+msgid "alias %s doesn't exist"
+msgstr "リモート %s は存在しません"
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr "デフォルトのリモートは削除できません"
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr "再帰 (recursive) モードでは uid/gid/mode を指定できません"
 
@@ -2999,12 +3032,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr "ok (y/n)?"
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr "エイリアスの処理が失敗しました %s\n"
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr "再帰的な edit は意味がありません :("
 
@@ -3053,7 +3086,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr "サブコマンドの引数の数が正しくありません"
 
diff --git a/po/lxd.pot b/po/lxd.pot
index a3a5a4ed6..0b4d07487 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: 2018-01-21 22:50+0100\n"
+        "POT-Creation-Date: 2018-02-09 18:50-0500\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"
@@ -141,17 +141,17 @@ msgstr  ""
 msgid   "%s (%d more)"
 msgstr  ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid   "%s is not a directory"
 msgstr  ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid   "%v (interrupt two more times to force)"
 msgstr  ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid   "'%s' isn't a supported file type."
 msgstr  ""
@@ -160,7 +160,7 @@ msgstr  ""
 msgid   "(none)"
 msgstr  ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid   "ALIAS"
 msgstr  ""
 
@@ -258,7 +258,7 @@ msgstr  ""
 msgid   "Cached: %s"
 msgstr  ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid   "Can't pull a directory without --recursive"
 msgstr  ""
 
@@ -306,7 +306,7 @@ msgstr  ""
 msgid   "Config key/value to apply to the new container"
 msgstr  ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190 lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190 lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid   "Config parsing error: %s"
 msgstr  ""
@@ -394,7 +394,7 @@ msgstr  ""
 msgid   "Device %s removed from %s"
 msgstr  ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid   "Device already exists: %s"
 msgstr  ""
@@ -443,7 +443,7 @@ msgstr  ""
 msgid   "Ephemeral container"
 msgstr  ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid   "Error updating template file: %s"
 msgstr  ""
@@ -474,7 +474,7 @@ msgstr  ""
 msgid   "FINGERPRINT"
 msgstr  ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid   "Failed to create alias %s"
 msgstr  ""
@@ -493,12 +493,12 @@ msgstr  ""
 msgid   "Failed to get the new container name"
 msgstr  ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid   "Failed to remove alias %s"
 msgstr  ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid   "Failed to walk path for %s: %s"
 msgstr  ""
@@ -610,7 +610,7 @@ msgstr  ""
 msgid   "Invalid configuration key"
 msgstr  ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid   "Invalid path %s"
 msgstr  ""
@@ -620,12 +620,12 @@ msgstr  ""
 msgid   "Invalid protocol: %s"
 msgstr  ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid   "Invalid source %s"
 msgstr  ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid   "Invalid target %s"
 msgstr  ""
@@ -683,7 +683,7 @@ msgstr  ""
 msgid   "Memory usage:"
 msgstr  ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid   "Missing summary."
 msgstr  ""
 
@@ -691,7 +691,7 @@ msgstr  ""
 msgid   "More than one device matches, specify the device name."
 msgstr  ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid   "More than one file to download, but target is not a directory"
 msgstr  ""
 
@@ -832,7 +832,7 @@ msgstr  ""
 msgid   "Path to an alternate server directory"
 msgstr  ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid   "Pause containers."
 msgstr  ""
 
@@ -849,7 +849,7 @@ msgstr  ""
 msgid   "Press enter to open the editor again"
 msgstr  ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382 lxc/image.go:1191
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383 lxc/image.go:1191
 msgid   "Press enter to start the editor again"
 msgstr  ""
 
@@ -939,7 +939,7 @@ msgstr  ""
 msgid   "Remote admin password"
 msgstr  ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid   "Remote operation canceled by user"
 msgstr  ""
 
@@ -966,7 +966,7 @@ msgstr  ""
 msgid   "Resources:"
 msgstr  ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid   "Restart containers."
 msgstr  ""
 
@@ -1085,7 +1085,7 @@ msgstr  ""
 msgid   "Source:"
 msgstr  ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid   "Start containers."
 msgstr  ""
 
@@ -1099,7 +1099,7 @@ msgstr  ""
 msgid   "Status: %s"
 msgstr  ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid   "Stop containers."
 msgstr  ""
 
@@ -1152,6 +1152,10 @@ msgstr  ""
 msgid   "Swap (peak)"
 msgstr  ""
 
+#: lxc/alias.go:85
+msgid   "TARGET"
+msgstr  ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid   "TYPE"
 msgstr  ""
@@ -1271,7 +1275,7 @@ msgstr  ""
 msgid   "Unable to find help2man."
 msgstr  ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid   "Unknown file type '%s'"
 msgstr  ""
@@ -1292,6 +1296,24 @@ msgstr  ""
 msgid   "Usage: lxc <command> [options]"
 msgstr  ""
 
+#: lxc/alias.go:22
+msgid   "Usage: lxc alias <subcommand> [options]\n"
+        "\n"
+        "Manage command aliases.\n"
+        "\n"
+        "lxc alias add <alias> <target>\n"
+        "    Add a new alias <alias> pointing to <target>.\n"
+        "\n"
+        "lxc alias remove <alias>\n"
+        "    Remove the alias <alias>.\n"
+        "\n"
+        "lxc alias list\n"
+        "    List all the aliases.\n"
+        "\n"
+        "lxc alias rename <old alias> <new alias>\n"
+        "    Rename remote <old alias> to <new alias>."
+msgstr  ""
+
 #: lxc/config.go:85
 msgid   "Usage: lxc config <subcommand> [options]\n"
         "\n"
@@ -2044,7 +2066,7 @@ msgstr  ""
 msgid   "User aborted delete operation."
 msgstr  ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid   "User signaled us three times, exiting. The remote operation will keep running."
 msgstr  ""
 
@@ -2080,11 +2102,21 @@ msgstr  ""
 msgid   "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr  ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid   "alias %s already exists"
+msgstr  ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid   "alias %s doesn't exist"
+msgstr  ""
+
 #: lxc/remote.go:370
 msgid   "can't remove the default remote"
 msgstr  ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid   "can't supply uid/gid/mode in recursive mode"
 msgstr  ""
 
@@ -2138,12 +2170,12 @@ msgstr  ""
 msgid   "ok (y/n)?"
 msgstr  ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid   "processing aliases failed %s\n"
 msgstr  ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid   "recursive edit doesn't make sense :("
 msgstr  ""
 
@@ -2192,7 +2224,7 @@ msgstr  ""
 msgid   "used by"
 msgstr  ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid   "wrong number of subcommand arguments"
 msgstr  ""
 
diff --git a/po/nb_NO.po b/po/nb_NO.po
index 0f41c8970..3b2c2b07c 100644
--- a/po/nb_NO.po
+++ b/po/nb_NO.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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -148,17 +148,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -265,7 +265,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -313,7 +313,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -403,7 +403,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -483,7 +483,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -502,12 +502,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -631,12 +631,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -702,7 +702,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -844,7 +844,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1112,7 +1112,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1165,6 +1165,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1288,7 +1292,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1310,6 +1314,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2149,7 +2172,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2189,11 +2212,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2247,12 +2280,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2301,7 +2334,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/nl.po b/po/nl.po
index 2b2c6fb13..3f49ec64e 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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -148,17 +148,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -265,7 +265,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -313,7 +313,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -403,7 +403,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -483,7 +483,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -502,12 +502,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -631,12 +631,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -702,7 +702,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -844,7 +844,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1112,7 +1112,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1165,6 +1165,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1288,7 +1292,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1310,6 +1314,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2149,7 +2172,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2189,11 +2212,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2247,12 +2280,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2301,7 +2334,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/pl.po b/po/pl.po
index 3c6ddfe4d..e2729ee5d 100644
--- a/po/pl.po
+++ b/po/pl.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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -148,17 +148,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -265,7 +265,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -313,7 +313,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -403,7 +403,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -483,7 +483,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -502,12 +502,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -631,12 +631,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -702,7 +702,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -844,7 +844,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1112,7 +1112,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1165,6 +1165,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1288,7 +1292,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1310,6 +1314,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2149,7 +2172,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2189,11 +2212,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2247,12 +2280,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2301,7 +2334,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 4ec5757f4..7cbcec7a1 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -148,17 +148,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -265,7 +265,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -313,7 +313,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -403,7 +403,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -483,7 +483,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -502,12 +502,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -631,12 +631,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -702,7 +702,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -844,7 +844,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1112,7 +1112,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1165,6 +1165,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1288,7 +1292,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1310,6 +1314,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2149,7 +2172,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2189,11 +2212,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2247,12 +2280,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2301,7 +2334,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/ru.po b/po/ru.po
index 9bdf106d8..9676f50a4 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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: 2017-09-05 16:48+0000\n"
 "Last-Translator: Ilya Yakimavets <ilya.yakimavets at backend.expert>\n"
 "Language-Team: Russian <https://hosted.weblate.org/projects/linux-containers/"
@@ -233,17 +233,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -252,7 +252,7 @@ msgstr ""
 msgid "(none)"
 msgstr "(пусто)"
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr "ПСЕВДОНИМ"
 
@@ -353,7 +353,7 @@ msgstr "СОЗДАН"
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -401,7 +401,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -491,7 +491,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -541,7 +541,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, fuzzy, c-format
 msgid "Error updating template file: %s"
 msgstr "Копирование образа: %s"
@@ -572,7 +572,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -591,12 +591,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -710,7 +710,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -720,12 +720,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -784,7 +784,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr " Использование памяти:"
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -792,7 +792,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -935,7 +935,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -1043,7 +1043,7 @@ msgstr "Копирование образа: %s"
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -1070,7 +1070,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1189,7 +1189,7 @@ msgstr "Невозможно добавить имя контейнера в с
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1203,7 +1203,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1256,6 +1256,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1379,7 +1383,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1404,6 +1408,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2252,7 +2275,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2292,11 +2315,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2350,12 +2383,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2404,7 +2437,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/sr.po b/po/sr.po
index e398da942..2b4a1971a 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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -148,17 +148,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -265,7 +265,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -313,7 +313,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -403,7 +403,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -483,7 +483,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -502,12 +502,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -631,12 +631,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -702,7 +702,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -844,7 +844,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1112,7 +1112,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1165,6 +1165,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1288,7 +1292,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1310,6 +1314,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2149,7 +2172,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2189,11 +2212,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2247,12 +2280,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2301,7 +2334,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/sv.po b/po/sv.po
index 686e5dc93..4c216af11 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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -148,17 +148,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -265,7 +265,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -313,7 +313,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -403,7 +403,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -483,7 +483,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -502,12 +502,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -631,12 +631,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -702,7 +702,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -844,7 +844,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1112,7 +1112,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1165,6 +1165,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1288,7 +1292,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1310,6 +1314,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2149,7 +2172,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2189,11 +2212,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2247,12 +2280,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2301,7 +2334,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/tr.po b/po/tr.po
index cfd21eb4a..c72dc7c8d 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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -148,17 +148,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -265,7 +265,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -313,7 +313,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -403,7 +403,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -483,7 +483,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -502,12 +502,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -631,12 +631,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -702,7 +702,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -844,7 +844,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1112,7 +1112,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1165,6 +1165,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1288,7 +1292,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1310,6 +1314,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2149,7 +2172,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2189,11 +2212,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2247,12 +2280,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2301,7 +2334,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/zh.po b/po/zh.po
index 4565d52a9..c4bdd4357 100644
--- a/po/zh.po
+++ b/po/zh.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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -148,17 +148,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -265,7 +265,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -313,7 +313,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -403,7 +403,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -483,7 +483,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -502,12 +502,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -631,12 +631,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -702,7 +702,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -844,7 +844,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1112,7 +1112,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1165,6 +1165,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1288,7 +1292,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1310,6 +1314,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2149,7 +2172,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2189,11 +2212,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2247,12 +2280,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2301,7 +2334,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 
diff --git a/po/zh_Hans.po b/po/zh_Hans.po
index 7fbfe611d..50cc321cc 100644
--- a/po/zh_Hans.po
+++ b/po/zh_Hans.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: 2018-01-21 21:48+0000\n"
+"POT-Creation-Date: 2018-02-09 18:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -148,17 +148,17 @@ msgstr ""
 msgid "%s (%d more)"
 msgstr ""
 
-#: lxc/file.go:195
+#: lxc/file.go:205
 #, c-format
 msgid "%s is not a directory"
 msgstr ""
 
-#: lxc/utils.go:375
+#: lxc/utils.go:376
 #, c-format
 msgid "%v (interrupt two more times to force)"
 msgstr ""
 
-#: lxc/file.go:132
+#: lxc/file.go:142
 #, c-format
 msgid "'%s' isn't a supported file type."
 msgstr ""
@@ -167,7 +167,7 @@ msgstr ""
 msgid "(none)"
 msgstr ""
 
-#: lxc/image.go:230 lxc/image.go:1135
+#: lxc/alias.go:84 lxc/image.go:230 lxc/image.go:1135
 msgid "ALIAS"
 msgstr ""
 
@@ -265,7 +265,7 @@ msgstr ""
 msgid "Cached: %s"
 msgstr ""
 
-#: lxc/file.go:491
+#: lxc/file.go:501
 msgid "Can't pull a directory without --recursive"
 msgstr ""
 
@@ -313,7 +313,7 @@ msgstr ""
 msgid "Config key/value to apply to the new container"
 msgstr ""
 
-#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1331 lxc/image.go:1190
+#: lxc/config.go:816 lxc/config.go:881 lxc/config.go:1332 lxc/image.go:1190
 #: lxc/network.go:426 lxc/profile.go:275 lxc/storage.go:614 lxc/storage.go:1067
 #, c-format
 msgid "Config parsing error: %s"
@@ -403,7 +403,7 @@ msgstr ""
 msgid "Device %s removed from %s"
 msgstr ""
 
-#: lxc/utils.go:307 lxc/utils.go:331
+#: lxc/utils.go:308 lxc/utils.go:332
 #, c-format
 msgid "Device already exists: %s"
 msgstr ""
@@ -452,7 +452,7 @@ msgstr ""
 msgid "Ephemeral container"
 msgstr ""
 
-#: lxc/config.go:1381
+#: lxc/config.go:1382
 #, c-format
 msgid "Error updating template file: %s"
 msgstr ""
@@ -483,7 +483,7 @@ msgstr ""
 msgid "FINGERPRINT"
 msgstr ""
 
-#: lxc/utils.go:413
+#: lxc/utils.go:414
 #, c-format
 msgid "Failed to create alias %s"
 msgstr ""
@@ -502,12 +502,12 @@ msgstr ""
 msgid "Failed to get the new container name"
 msgstr ""
 
-#: lxc/utils.go:403
+#: lxc/utils.go:404
 #, c-format
 msgid "Failed to remove alias %s"
 msgstr ""
 
-#: lxc/file.go:127
+#: lxc/file.go:137
 #, c-format
 msgid "Failed to walk path for %s: %s"
 msgstr ""
@@ -621,7 +621,7 @@ msgstr ""
 msgid "Invalid configuration key"
 msgstr ""
 
-#: lxc/file.go:536
+#: lxc/file.go:560
 #, c-format
 msgid "Invalid path %s"
 msgstr ""
@@ -631,12 +631,12 @@ msgstr ""
 msgid "Invalid protocol: %s"
 msgstr ""
 
-#: lxc/file.go:463
+#: lxc/file.go:473
 #, c-format
 msgid "Invalid source %s"
 msgstr ""
 
-#: lxc/file.go:240
+#: lxc/file.go:250
 #, c-format
 msgid "Invalid target %s"
 msgstr ""
@@ -694,7 +694,7 @@ msgstr ""
 msgid "Memory usage:"
 msgstr ""
 
-#: lxc/utils.go:258
+#: lxc/utils.go:259
 msgid "Missing summary."
 msgstr ""
 
@@ -702,7 +702,7 @@ msgstr ""
 msgid "More than one device matches, specify the device name."
 msgstr ""
 
-#: lxc/file.go:450
+#: lxc/file.go:460
 msgid "More than one file to download, but target is not a directory"
 msgstr ""
 
@@ -844,7 +844,7 @@ msgstr ""
 msgid "Path to an alternate server directory"
 msgstr ""
 
-#: lxc/main.go:238
+#: lxc/main.go:239
 msgid "Pause containers."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 msgid "Press enter to open the editor again"
 msgstr ""
 
-#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1332 lxc/config.go:1382
+#: lxc/config.go:817 lxc/config.go:882 lxc/config.go:1333 lxc/config.go:1383
 #: lxc/image.go:1191
 msgid "Press enter to start the editor again"
 msgstr ""
@@ -952,7 +952,7 @@ msgstr ""
 msgid "Remote admin password"
 msgstr ""
 
-#: lxc/utils.go:366
+#: lxc/utils.go:367
 msgid "Remote operation canceled by user"
 msgstr ""
 
@@ -979,7 +979,7 @@ msgstr ""
 msgid "Resources:"
 msgstr ""
 
-#: lxc/main.go:246
+#: lxc/main.go:247
 msgid "Restart containers."
 msgstr ""
 
@@ -1098,7 +1098,7 @@ msgstr ""
 msgid "Source:"
 msgstr ""
 
-#: lxc/main.go:256
+#: lxc/main.go:257
 msgid "Start containers."
 msgstr ""
 
@@ -1112,7 +1112,7 @@ msgstr ""
 msgid "Status: %s"
 msgstr ""
 
-#: lxc/main.go:262
+#: lxc/main.go:263
 msgid "Stop containers."
 msgstr ""
 
@@ -1165,6 +1165,10 @@ msgstr ""
 msgid "Swap (peak)"
 msgstr ""
 
+#: lxc/alias.go:85
+msgid "TARGET"
+msgstr ""
+
 #: lxc/list.go:473 lxc/network.go:523 lxc/operation.go:153 lxc/storage.go:879
 msgid "TYPE"
 msgstr ""
@@ -1288,7 +1292,7 @@ msgstr ""
 msgid "Unable to find help2man."
 msgstr ""
 
-#: lxc/file.go:114
+#: lxc/file.go:124
 #, c-format
 msgid "Unknown file type '%s'"
 msgstr ""
@@ -1310,6 +1314,25 @@ msgstr ""
 msgid "Usage: lxc <command> [options]"
 msgstr ""
 
+#: lxc/alias.go:22
+msgid ""
+"Usage: lxc alias <subcommand> [options]\n"
+"\n"
+"Manage command aliases.\n"
+"\n"
+"lxc alias add <alias> <target>\n"
+"    Add a new alias <alias> pointing to <target>.\n"
+"\n"
+"lxc alias remove <alias>\n"
+"    Remove the alias <alias>.\n"
+"\n"
+"lxc alias list\n"
+"    List all the aliases.\n"
+"\n"
+"lxc alias rename <old alias> <new alias>\n"
+"    Rename remote <old alias> to <new alias>."
+msgstr ""
+
 #: lxc/config.go:85
 msgid ""
 "Usage: lxc config <subcommand> [options]\n"
@@ -2149,7 +2172,7 @@ msgstr ""
 msgid "User aborted delete operation."
 msgstr ""
 
-#: lxc/utils.go:371
+#: lxc/utils.go:372
 msgid ""
 "User signaled us three times, exiting. The remote operation will keep "
 "running."
@@ -2189,11 +2212,21 @@ msgstr ""
 msgid "`lxc config profile` is deprecated, please use `lxc profile`"
 msgstr ""
 
+#: lxc/alias.go:56 lxc/alias.go:102
+#, c-format
+msgid "alias %s already exists"
+msgstr ""
+
+#: lxc/alias.go:68 lxc/alias.go:97
+#, c-format
+msgid "alias %s doesn't exist"
+msgstr ""
+
 #: lxc/remote.go:370
 msgid "can't remove the default remote"
 msgstr ""
 
-#: lxc/file.go:286
+#: lxc/file.go:296
 msgid "can't supply uid/gid/mode in recursive mode"
 msgstr ""
 
@@ -2247,12 +2280,12 @@ msgstr ""
 msgid "ok (y/n)?"
 msgstr ""
 
-#: lxc/main.go:366 lxc/main.go:370
+#: lxc/main.go:367 lxc/main.go:371
 #, c-format
 msgid "processing aliases failed %s\n"
 msgstr ""
 
-#: lxc/file.go:564
+#: lxc/file.go:588
 msgid "recursive edit doesn't make sense :("
 msgstr ""
 
@@ -2301,7 +2334,7 @@ msgstr ""
 msgid "used by"
 msgstr ""
 
-#: lxc/main.go:297
+#: lxc/main.go:298
 msgid "wrong number of subcommand arguments"
 msgstr ""
 


More information about the lxc-devel mailing list