summaryrefslogtreecommitdiff
path: root/openstackclient/image
diff options
context:
space:
mode:
authorsunyajing <yajing.sun@easystack.cn>2016-05-28 11:01:22 +0800
committersunyajing <yajing.sun@easystack.cn>2016-05-28 16:38:22 +0800
commit3e11661074e1a7e051e0ebff5800f8f1aac85153 (patch)
tree8714135039224e6e1cc338cbd75dd038e8022655 /openstackclient/image
parent9da02d14eadc39da6f97b3df095af8b0c452a5b4 (diff)
downloadpython-openstackclient-3e11661074e1a7e051e0ebff5800f8f1aac85153.tar.gz
Add "image unset" command
This patch add a command that supports unsetting image tags and properties Change-Id: I6f2cf45a61ff89da6664f3a34ae49fdd85d8c986 Closes-Bug:#1582968
Diffstat (limited to 'openstackclient/image')
-rw-r--r--openstackclient/image/v2/image.py89
1 files changed, 87 insertions, 2 deletions
diff --git a/openstackclient/image/v2/image.py b/openstackclient/image/v2/image.py
index a9c0f1fd..a81f092c 100644
--- a/openstackclient/image/v2/image.py
+++ b/openstackclient/image/v2/image.py
@@ -805,8 +805,8 @@ class SetImage(command.Command):
# Checks if anything that requires getting the image
if not (kwargs or parsed_args.deactivate or parsed_args.activate):
- self.log.warning(_("No arguments specified"))
- return {}, {}
+ msg = _("No arguments specified")
+ raise exceptions.CommandError(msg)
image = utils.find_resource(
image_client.images, parsed_args.image)
@@ -856,3 +856,88 @@ class ShowImage(command.ShowOne):
info = _format_image(image)
return zip(*sorted(six.iteritems(info)))
+
+
+class UnsetImage(command.Command):
+ """Unset image tags and properties"""
+
+ def get_parser(self, prog_name):
+ parser = super(UnsetImage, self).get_parser(prog_name)
+ parser.add_argument(
+ "image",
+ metavar="<image>",
+ help=_("Image to modify (name or ID)"),
+ )
+ parser.add_argument(
+ "--tag",
+ dest="tags",
+ metavar="<tag>",
+ default=[],
+ action='append',
+ help=_("Unset a tag on this image "
+ "(repeat option to set multiple tags)"),
+ )
+ parser.add_argument(
+ "--property",
+ dest="properties",
+ metavar="<property_key>",
+ default=[],
+ action='append',
+ help=_("Unset a property on this image "
+ "(repeat option to set multiple properties)"),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ image_client = self.app.client_manager.image
+ image = utils.find_resource(
+ image_client.images,
+ parsed_args.image,
+ )
+
+ if not (parsed_args.tags or parsed_args.properties):
+ msg = _("No arguments specified")
+ raise exceptions.CommandError(msg)
+
+ kwargs = {}
+ tagret = 0
+ propret = 0
+ if parsed_args.tags:
+ for k in parsed_args.tags:
+ try:
+ image_client.image_tags.delete(image.id, k)
+ except Exception:
+ self.log.error(_("tag unset failed,"
+ " '%s' is a nonexistent tag ") % k)
+ tagret += 1
+
+ if parsed_args.properties:
+ for k in parsed_args.properties:
+ try:
+ assert(k in image.keys())
+ except AssertionError:
+ self.log.error(_("property unset failed,"
+ " '%s' is a nonexistent property ") % k)
+ propret += 1
+ image_client.images.update(
+ image.id,
+ parsed_args.properties,
+ **kwargs)
+
+ tagtotal = len(parsed_args.tags)
+ proptotal = len(parsed_args.properties)
+ if (tagret > 0 and propret > 0):
+ msg = (_("Failed to unset %(tagret)s of %(tagtotal)s tags,"
+ "Failed to unset %(propret)s of %(proptotal)s properties.")
+ % {'tagret': tagret, 'tagtotal': tagtotal,
+ 'propret': propret, 'proptotal': proptotal})
+ raise exceptions.CommandError(msg)
+ elif tagret > 0:
+ msg = (_("Failed to unset %(target)s of %(tagtotal)s tags.")
+ % {'tagret': tagret, 'tagtotal': tagtotal})
+ raise exceptions.CommandError(msg)
+ elif propret > 0:
+ msg = (_("Failed to unset %(propret)s of %(proptotal)s"
+ " properties.")
+ % {'propret': propret, 'proptotal': proptotal})
+ raise exceptions.CommandError(msg)