[lxc-devel] [lxd/master] Allow lxc image delete to delete multiple images
ctrlrsf on Github
lxc-bot at linuxcontainers.org
Wed Jun 1 14:34:15 UTC 2016
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 2716 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20160601/e9ea6338/attachment.bin>
-------------- next part --------------
From 324e82e747cffb8cdbfa7f6d9bd8f3f3d7cc2a77 Mon Sep 17 00:00:00 2001
From: Rene Fragoso <ctrlrsf at gmail.com>
Date: Wed, 1 Jun 2016 10:00:05 -0400
Subject: [PATCH 1/3] Allow deleting multiple images at a time
lxc image delete subcommand was modified to allow more than
one image name as arguments.
When more than one image is specified, we will iterate and
delete each one.
All images have to be from same remote.
Signed-off-by: Rene Fragoso <ctrlrsf at gmail.com>
---
lxc/image.go | 26 ++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/lxc/image.go b/lxc/image.go
index 0239773..36ee1c1 100644
--- a/lxc/image.go
+++ b/lxc/image.go
@@ -119,8 +119,8 @@ lxc image copy [remote:]<image> <remote>: [--alias=ALIAS].. [--copy-aliases] [--
The auto-update flag instructs the server to keep this image up to
date. It requires the source to be an alias and for it to be public.
-lxc image delete [remote:]<image>
- Delete an image from the LXD image store.
+lxc image delete [remote:]<image> [<image>...]
+ Delete one or more images from the LXD image store.
lxc image export [remote:]<image>
Export an image from the LXD image store into a distributable tarball.
@@ -278,7 +278,7 @@ func (c *imageCmd) run(config *lxd.Config, args []string) error {
return err
case "delete":
- /* delete [<remote>:]<image> */
+ /* delete [<remote>:]<image> [<image>...] */
if len(args) < 2 {
return errArgs
}
@@ -288,14 +288,28 @@ func (c *imageCmd) run(config *lxd.Config, args []string) error {
inName = "default"
}
+ imageNames := []string{inName}
+
+ if len(args) > 2 {
+ for _, extraImage := range args[2:] {
+ imageNames = append(imageNames, extraImage)
+ }
+ }
+
d, err := lxd.NewClient(config, remote)
if err != nil {
return err
}
- image := c.dereferenceAlias(d, inName)
- err = d.DeleteImage(image)
- return err
+ for _, imageName := range imageNames {
+ image := c.dereferenceAlias(d, imageName)
+ err = d.DeleteImage(image)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
case "info":
if len(args) < 2 {
From 1e14c97b92f7517c20648570f0a2db323ee3447b Mon Sep 17 00:00:00 2001
From: Rene Fragoso <ctrlrsf at gmail.com>
Date: Wed, 1 Jun 2016 10:09:25 -0400
Subject: [PATCH 2/3] Update i18n
Signed-off-by: Rene Fragoso <ctrlrsf at gmail.com>
---
po/lxd.pot | 68 +++++++++++++++++++++++++++++++-------------------------------
1 file changed, 34 insertions(+), 34 deletions(-)
diff --git a/po/lxd.pot b/po/lxd.pot
index edf9f99..1fed80a 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: 2016-05-23 07:23-0600\n"
+ "POT-Creation-Date: 2016-06-01 10:08-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <LL at li.org>\n"
@@ -77,7 +77,7 @@ msgid "### This is a yaml representation of the profile.\n"
"### Note that the name is shown but cannot be changed"
msgstr ""
-#: lxc/image.go:597
+#: lxc/image.go:611
#, c-format
msgid "%s (%d more)"
msgstr ""
@@ -90,11 +90,11 @@ msgstr ""
msgid "(none)"
msgstr ""
-#: lxc/image.go:618 lxc/image.go:660
+#: lxc/image.go:632 lxc/image.go:674
msgid "ALIAS"
msgstr ""
-#: lxc/image.go:622
+#: lxc/image.go:636
msgid "ARCH"
msgstr ""
@@ -111,7 +111,7 @@ msgstr ""
msgid "Admin password for %s: "
msgstr ""
-#: lxc/image.go:350
+#: lxc/image.go:364
msgid "Aliases:"
msgstr ""
@@ -119,12 +119,12 @@ msgstr ""
msgid "An environment variable of the form HOME=/home/foo"
msgstr ""
-#: lxc/image.go:333 lxc/info.go:90
+#: lxc/image.go:347 lxc/info.go:90
#, c-format
msgid "Architecture: %s"
msgstr ""
-#: lxc/image.go:354
+#: lxc/image.go:368
#, c-format
msgid "Auto update: %s"
msgstr ""
@@ -187,7 +187,7 @@ msgstr ""
msgid "Config key/value to apply to the new container"
msgstr ""
-#: lxc/config.go:527 lxc/config.go:592 lxc/image.go:714 lxc/profile.go:217
+#: lxc/config.go:527 lxc/config.go:592 lxc/image.go:728 lxc/profile.go:217
#, c-format
msgid "Config parsing error: %s"
msgstr ""
@@ -245,7 +245,7 @@ msgid "Create a read-only snapshot of a container.\n"
"lxc snapshot u1 snap0"
msgstr ""
-#: lxc/image.go:338 lxc/info.go:92
+#: lxc/image.go:352 lxc/info.go:92
#, c-format
msgid "Created: %s"
msgstr ""
@@ -259,7 +259,7 @@ msgstr ""
msgid "Creating the container"
msgstr ""
-#: lxc/image.go:621 lxc/image.go:662
+#: lxc/image.go:635 lxc/image.go:676
msgid "DESCRIPTION"
msgstr ""
@@ -317,16 +317,16 @@ msgid "Execute the specified command in a container.\n"
"Mode defaults to non-interactive, interactive mode is selected if both stdin AND stdout are terminals (stderr is ignored)."
msgstr ""
-#: lxc/image.go:342
+#: lxc/image.go:356
#, c-format
msgid "Expires: %s"
msgstr ""
-#: lxc/image.go:344
+#: lxc/image.go:358
msgid "Expires: never"
msgstr ""
-#: lxc/config.go:269 lxc/image.go:619 lxc/image.go:661
+#: lxc/config.go:269 lxc/image.go:633 lxc/image.go:675
msgid "FINGERPRINT"
msgstr ""
@@ -334,7 +334,7 @@ msgstr ""
msgid "Fast mode (same as --columns=nsacPt"
msgstr ""
-#: lxc/image.go:331
+#: lxc/image.go:345
#, c-format
msgid "Fingerprint: %s"
msgstr ""
@@ -393,7 +393,7 @@ msgstr ""
msgid "Image copied successfully!"
msgstr ""
-#: lxc/image.go:422
+#: lxc/image.go:436
#, c-format
msgid "Image imported with fingerprint: %s"
msgstr ""
@@ -638,8 +638,8 @@ msgid "Manipulate container images.\n"
" The auto-update flag instructs the server to keep this image up to\n"
" date. It requires the source to be an alias and for it to be public.\n"
"\n"
- "lxc image delete [remote:]<image>\n"
- " Delete an image from the LXD image store.\n"
+ "lxc image delete [remote:]<image> [<image>...]\n"
+ " Delete one or more images from the LXD image store.\n"
"\n"
"lxc image export [remote:]<image>\n"
" Export an image from the LXD image store into a distributable tarball.\n"
@@ -743,7 +743,7 @@ msgstr ""
msgid "Only https URLs are supported for simplestreams"
msgstr ""
-#: lxc/image.go:414
+#: lxc/image.go:428
msgid "Only https:// is supported for remote image import."
msgstr ""
@@ -751,7 +751,7 @@ msgstr ""
msgid "Options:"
msgstr ""
-#: lxc/image.go:518
+#: lxc/image.go:532
#, c-format
msgid "Output is in %s"
msgstr ""
@@ -776,7 +776,7 @@ msgstr ""
msgid "PROTOCOL"
msgstr ""
-#: lxc/image.go:620 lxc/remote.go:366
+#: lxc/image.go:634 lxc/remote.go:366
msgid "PUBLIC"
msgstr ""
@@ -815,7 +815,7 @@ msgstr ""
msgid "Press enter to open the editor again"
msgstr ""
-#: lxc/config.go:528 lxc/config.go:593 lxc/image.go:715
+#: lxc/config.go:528 lxc/config.go:593 lxc/image.go:729
msgid "Press enter to start the editor again"
msgstr ""
@@ -876,7 +876,7 @@ msgstr ""
msgid "Profiles: %s"
msgstr ""
-#: lxc/image.go:346
+#: lxc/image.go:360
msgid "Properties:"
msgstr ""
@@ -884,7 +884,7 @@ msgstr ""
msgid "Public image server"
msgstr ""
-#: lxc/image.go:334
+#: lxc/image.go:348
#, c-format
msgid "Public: %s"
msgstr ""
@@ -917,7 +917,7 @@ msgstr ""
msgid "Retrieving image: %s"
msgstr ""
-#: lxc/image.go:623
+#: lxc/image.go:637
msgid "SIZE"
msgstr ""
@@ -978,7 +978,7 @@ msgstr ""
msgid "Show the container's last 100 log lines?"
msgstr ""
-#: lxc/image.go:332
+#: lxc/image.go:346
#, c-format
msgid "Size: %.2fMB"
msgstr ""
@@ -987,7 +987,7 @@ msgstr ""
msgid "Snapshots:"
msgstr ""
-#: lxc/image.go:356
+#: lxc/image.go:370
msgid "Source:"
msgstr ""
@@ -1050,7 +1050,7 @@ msgstr ""
msgid "Time to wait for the container before killing it."
msgstr ""
-#: lxc/image.go:335
+#: lxc/image.go:349
msgid "Timestamps:"
msgstr ""
@@ -1058,7 +1058,7 @@ msgstr ""
msgid "To start your first container, try: lxc launch ubuntu:16.04"
msgstr ""
-#: lxc/image.go:405
+#: lxc/image.go:419
#, c-format
msgid "Transferring image: %d%%"
msgstr ""
@@ -1076,7 +1076,7 @@ msgstr ""
msgid "Type: persistent"
msgstr ""
-#: lxc/image.go:624
+#: lxc/image.go:638
msgid "UPLOAD DATE"
msgstr ""
@@ -1088,7 +1088,7 @@ msgstr ""
msgid "Unable to read remote TLS certificate"
msgstr ""
-#: lxc/image.go:340
+#: lxc/image.go:354
#, c-format
msgid "Uploaded: %s"
msgstr ""
@@ -1150,11 +1150,11 @@ msgstr ""
msgid "didn't get any affected image, container or snapshot from server"
msgstr ""
-#: lxc/image.go:326
+#: lxc/image.go:340
msgid "disabled"
msgstr ""
-#: lxc/image.go:328
+#: lxc/image.go:342
msgid "enabled"
msgstr ""
@@ -1172,7 +1172,7 @@ msgstr ""
msgid "got bad version"
msgstr ""
-#: lxc/image.go:321 lxc/image.go:600
+#: lxc/image.go:335 lxc/image.go:614
msgid "no"
msgstr ""
@@ -1230,7 +1230,7 @@ msgstr ""
msgid "wrong number of subcommand arguments"
msgstr ""
-#: lxc/delete.go:45 lxc/image.go:323 lxc/image.go:604
+#: lxc/delete.go:45 lxc/image.go:337 lxc/image.go:618
msgid "yes"
msgstr ""
From e2a21a2af54f1588c3e3e95bf9e1018a8b7332cc Mon Sep 17 00:00:00 2001
From: Rene Fragoso <ctrlrsf at gmail.com>
Date: Wed, 1 Jun 2016 10:13:16 -0400
Subject: [PATCH 3/3] Add test for deleting multiple images
This test creates three containers, modifies the content of the
containers, then creates images of those containers so we have
three unique images.
Once we have multiple images, an lxc image delete with
multiple arguments is called to delete them all.
Signed-off-by: Rene Fragoso <ctrlrsf at gmail.com>
---
test/suites/basic.sh | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/test/suites/basic.sh b/test/suites/basic.sh
index 3af6038..6899ae8 100644
--- a/test/suites/basic.sh
+++ b/test/suites/basic.sh
@@ -265,6 +265,25 @@ test_basic_usage() {
[ "$(lxc config get configtest boot.host_shutdown_timeout)" -eq 15 ]
lxc delete configtest
+ # Test deleting multiple images
+ # Start 3 containers to create 3 different images
+ lxc launch testimage c1
+ lxc launch testimage c2
+ lxc launch testimage c3
+ lxc exec c1 -- touch /tmp/c1
+ lxc exec c2 -- touch /tmp/c2
+ lxc exec c3 -- touch /tmp/c3
+ lxc publish --force c1 --alias=image1
+ lxc publish --force c2 --alias=image2
+ lxc publish --force c3 --alias=image3
+ # Delete multiple images with lxc delete and confirm they're deleted
+ lxc image delete image1 image2 image3
+ ! lxc image list | grep -q image1
+ ! lxc image list | grep -q image2
+ ! lxc image list | grep -q image3
+ # Cleanup the containers
+ lxc delete --force c1 c2 c3
+
# Ephemeral
lxc launch testimage foo -e
More information about the lxc-devel
mailing list