[lxc-devel] [lxd/master] Support renaming networks, profiles and image aliases

albertodonato on Github lxc-bot at linuxcontainers.org
Thu Oct 12 15:13:08 UTC 2017


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20171012/13caed9f/attachment.bin>
-------------- next part --------------
From 8b95369d65b0fb87ff22af3263432b76bbae8f97 Mon Sep 17 00:00:00 2001
From: Alberto Donato <alberto.donato at canonical.com>
Date: Thu, 12 Oct 2017 16:20:26 +0200
Subject: [PATCH 1/3] lxc/profle: add "profile rename" command

Signed-off-by: Alberto Donato <alberto.donato at canonical.com>
---
 lxc/profile.go        | 18 ++++++++++++++++++
 test/suites/config.sh |  5 +++++
 2 files changed, 23 insertions(+)

diff --git a/lxc/profile.go b/lxc/profile.go
index fad41668b..a464587a1 100644
--- a/lxc/profile.go
+++ b/lxc/profile.go
@@ -81,6 +81,9 @@ lxc profile delete [<remote>:]<profile>
 lxc profile edit [<remote>:]<profile>
     Edit profile, either by launching external editor or reading STDIN.
 
+lxc profile rename [<remote>:]<profile> <new-name>
+    Rename a profile.
+
 *Profile assignment*
 lxc profile assign [<remote>:]<container> <profiles>
     Replace the current set of profiles for the container by the one provided.
@@ -161,6 +164,11 @@ func (c *profileCmd) run(conf *config.Config, args []string) error {
 		return c.doProfileDevice(conf, args)
 	case "edit":
 		return c.doProfileEdit(client, profile)
+	case "rename":
+		if len(args) != 3 {
+			return errArgs
+		}
+		return c.doProfileRename(client, profile, args[2])
 	case "apply", "assign":
 		container := profile
 		switch len(args) {
@@ -283,6 +291,16 @@ func (c *profileCmd) doProfileEdit(client lxd.ContainerServer, p string) error {
 	return nil
 }
 
+func (c *profileCmd) doProfileRename(client lxd.ContainerServer, p string, newName string) error {
+	err := client.RenameProfile(p, api.ProfilePost{Name: newName})
+	if err != nil {
+		return err
+	}
+
+	fmt.Printf(i18n.G("Profile %s renamed to %s")+"\n", p, newName)
+	return nil
+}
+
 func (c *profileCmd) doProfileDelete(client lxd.ContainerServer, p string) error {
 	err := client.DeleteProfile(p)
 	if err != nil {
diff --git a/test/suites/config.sh b/test/suites/config.sh
index f0ecfcf25..2f4e21a59 100644
--- a/test/suites/config.sh
+++ b/test/suites/config.sh
@@ -150,6 +150,11 @@ test_config_profiles() {
   lxc profile create unconfined
   lxc profile set unconfined raw.lxc "lxc.aa_profile=unconfined"
   lxc profile assign foo onenic,unconfined
+  # test profile rename
+  lxc profile create foo
+  lxc profile rename foo bar
+  lxc profile list | grep -qv foo  # the old name is gone
+  lxc profile delete bar
 
   lxc config device list foo | grep mnt1
   lxc config device show foo | grep "/mnt1"

From 964f5b4e274d8d23e5a496e41f75116b246498d2 Mon Sep 17 00:00:00 2001
From: Alberto Donato <alberto.donato at canonical.com>
Date: Thu, 12 Oct 2017 16:28:35 +0200
Subject: [PATCH 2/3] lxc/network: add "network rename" command

Signed-off-by: Alberto Donato <alberto.donato at canonical.com>
---
 lxc/network.go         | 18 ++++++++++++++++++
 test/suites/network.sh |  6 ++++++
 2 files changed, 24 insertions(+)

diff --git a/lxc/network.go b/lxc/network.go
index c17d2b40b..3ef5fd7e8 100644
--- a/lxc/network.go
+++ b/lxc/network.go
@@ -76,6 +76,9 @@ lxc network delete [<remote>:]<network>
 lxc network edit [<remote>:]<network>
     Edit network, either by launching external editor or reading STDIN.
 
+lxc network rename [<remote>:]<network> <new-name>
+    Rename a network.
+
 lxc network attach [<remote>:]<network> <container> [device name] [interface name]
     Attach a network interface connecting the network to a specified container.
 
@@ -133,6 +136,11 @@ func (c *networkCmd) run(conf *config.Config, args []string) error {
 		return c.doNetworkDetachProfile(client, network, args[2:])
 	case "edit":
 		return c.doNetworkEdit(client, network)
+	case "rename":
+		if len(args) != 3 {
+			return errArgs
+		}
+		return c.doNetworkRename(client, network, args[2])
 	case "get":
 		return c.doNetworkGet(client, network, args[2:])
 	case "set":
@@ -434,6 +442,16 @@ func (c *networkCmd) doNetworkEdit(client lxd.ContainerServer, name string) erro
 	return nil
 }
 
+func (c *networkCmd) doNetworkRename(client lxd.ContainerServer, name string, newName string) error {
+	err := client.RenameNetwork(name, api.NetworkPost{Name: newName})
+	if err != nil {
+		return err
+	}
+
+	fmt.Printf(i18n.G("Network %s renamed to %s")+"\n", name, newName)
+	return nil
+}
+
 func (c *networkCmd) doNetworkGet(client lxd.ContainerServer, name string, args []string) error {
 	// we shifted @args so so it should read "<key>"
 	if len(args) != 1 {
diff --git a/test/suites/network.sh b/test/suites/network.sh
index c13b86332..6a51a9fe0 100644
--- a/test/suites/network.sh
+++ b/test/suites/network.sh
@@ -19,6 +19,12 @@ test_network() {
   lxc network show lxdt$$ | grep -q 'description: foo'
   lxc network delete lxdt$$
 
+  # rename network
+  lxc network create lxdt$$
+  lxc network rename lxdt$$ newnet
+  lxc network list | grep -qv lxdt$$  # the old name is gone
+  lxc network delete newnet
+
   # Unconfigured bridge
   lxc network create lxdt$$ ipv4.address=none ipv6.address=none
   lxc network delete lxdt$$

From f439ddc90e40a4ab616e22b6e6972e6d5c1d5bca Mon Sep 17 00:00:00 2001
From: Alberto Donato <alberto.donato at canonical.com>
Date: Thu, 12 Oct 2017 16:40:29 +0200
Subject: [PATCH 3/3] lxc/image: add "image alias rename" command

Signed-off-by: Alberto Donato <alberto.donato at canonical.com>
---
 lxc/image.go         | 19 +++++++++++++++++++
 test/suites/basic.sh |  5 +++++
 2 files changed, 24 insertions(+)

diff --git a/lxc/image.go b/lxc/image.go
index b88256541..78b90cd33 100644
--- a/lxc/image.go
+++ b/lxc/image.go
@@ -160,6 +160,9 @@ lxc image edit [<remote>:]<image>
 lxc image alias create [<remote>:]<alias> <fingerprint>
     Create a new alias for an existing image.
 
+lxc image alias rename [<remote>:]<alias> <new-name>
+    Rename an alias.
+
 lxc image alias delete [<remote>:]<alias>
     Delete an alias.
 
@@ -323,6 +326,22 @@ func (c *imageCmd) doImageAlias(conf *config.Config, args []string) error {
 		alias.Target = args[3]
 
 		return d.CreateImageAlias(alias)
+	case "rename":
+		/* alias rename [<remote>:]<alias> <newname> */
+		if len(args) < 4 {
+			return errArgs
+		}
+		remote, alias, err := conf.ParseRemote(args[2])
+		if err != nil {
+			return err
+		}
+
+		d, err := conf.GetContainerServer(remote)
+		if err != nil {
+			return err
+		}
+
+		return d.RenameImageAlias(alias, api.ImageAliasesEntryPost{Name: args[3]})
 	case "delete":
 		/* alias delete [<remote>:]<alias> */
 		if len(args) < 3 {
diff --git a/test/suites/basic.sh b/test/suites/basic.sh
index cb7d147ae..3d3926656 100644
--- a/test/suites/basic.sh
+++ b/test/suites/basic.sh
@@ -27,6 +27,11 @@ test_basic_usage() {
   lxc image alias delete foo
   lxc image alias delete bar
 
+  lxc image alias create foo "${sum}"
+  lxc image alias rename foo bar
+  lxc image alias list | grep -qv foo  # the old name is gone
+  lxc image alias delete bar
+
   # Test image list output formats (table & json)
   lxc image list --format table | grep -q testimage
   lxc image list --format json \


More information about the lxc-devel mailing list