summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/image/v2/image.py32
-rw-r--r--openstackclient/tests/image/v2/test_image.py58
2 files changed, 88 insertions, 2 deletions
diff --git a/openstackclient/image/v2/image.py b/openstackclient/image/v2/image.py
index a3c1a99d..1fcb92d9 100644
--- a/openstackclient/image/v2/image.py
+++ b/openstackclient/image/v2/image.py
@@ -693,6 +693,17 @@ class SetImage(command.Command):
metavar="<ramdisk-id>",
help="ID of ramdisk image used to boot this disk image",
)
+ deactivate_group = parser.add_mutually_exclusive_group()
+ deactivate_group.add_argument(
+ "--deactivate",
+ action="store_true",
+ help="Deactivate the image",
+ )
+ deactivate_group.add_argument(
+ "--activate",
+ action="store_true",
+ help="Activate the image",
+ )
for deadopt in self.deadopts:
parser.add_argument(
"--%s" % deadopt,
@@ -745,18 +756,35 @@ class SetImage(command.Command):
if parsed_args.private:
kwargs['visibility'] = 'private'
- if not kwargs:
+ # 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 {}, {}
image = utils.find_resource(
image_client.images, parsed_args.image)
+ if parsed_args.deactivate:
+ image_client.images.deactivate(image.id)
+ activation_status = "deactivated"
+ if parsed_args.activate:
+ image_client.images.reactivate(image.id)
+ activation_status = "activated"
+
+ # Check if need to do the actual update
+ if not kwargs:
+ return {}, {}
+
if parsed_args.tags:
# Tags should be extended, but duplicates removed
kwargs['tags'] = list(set(image.tags).union(set(parsed_args.tags)))
- image = image_client.images.update(image.id, **kwargs)
+ try:
+ image = image_client.images.update(image.id, **kwargs)
+ except Exception as e:
+ if activation_status is not None:
+ print("Image %s was %s." % (image.id, activation_status))
+ raise e
class ShowImage(show.ShowOne):
diff --git a/openstackclient/tests/image/v2/test_image.py b/openstackclient/tests/image/v2/test_image.py
index be73c4ca..71e1a77b 100644
--- a/openstackclient/tests/image/v2/test_image.py
+++ b/openstackclient/tests/image/v2/test_image.py
@@ -838,6 +838,64 @@ class TestImageSet(TestImage):
**kwargs
)
+ def test_image_set_activate(self):
+ arglist = [
+ '--tag', 'test-tag',
+ '--activate',
+ image_fakes.image_name,
+ ]
+ verifylist = [
+ ('tags', ['test-tag']),
+ ('image', image_fakes.image_name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # DisplayCommandBase.take_action() returns two tuples
+ self.cmd.take_action(parsed_args)
+
+ kwargs = {
+ 'tags': ['test-tag'],
+ }
+
+ self.images_mock.reactivate.assert_called_with(
+ image_fakes.image_id,
+ )
+
+ # ImageManager.update(image, **kwargs)
+ self.images_mock.update.assert_called_with(
+ image_fakes.image_id,
+ **kwargs
+ )
+
+ def test_image_set_deactivate(self):
+ arglist = [
+ '--tag', 'test-tag',
+ '--deactivate',
+ image_fakes.image_name,
+ ]
+ verifylist = [
+ ('tags', ['test-tag']),
+ ('image', image_fakes.image_name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # DisplayCommandBase.take_action() returns two tuples
+ self.cmd.take_action(parsed_args)
+
+ kwargs = {
+ 'tags': ['test-tag'],
+ }
+
+ self.images_mock.deactivate.assert_called_with(
+ image_fakes.image_id,
+ )
+
+ # ImageManager.update(image, **kwargs)
+ self.images_mock.update.assert_called_with(
+ image_fakes.image_id,
+ **kwargs
+ )
+
def test_image_set_tag_merge(self):
old_image = copy.copy(image_fakes.IMAGE)
old_image['tags'] = ['old1', 'new2']