From 4d5c5d9dcb6421e56823aad932bff5d87b728bb2 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 9 Mar 2016 20:59:40 +0530 Subject: [PATCH] Add support for setting Image-property OSC does not support to set volume's image property. This patch will provide support for adding image property to existing volume. Closes-Bug:#1554877 Implements: bp cinder-command-support Change-Id: I4ff5532c228f010789b81c7587dd4a2838a90f20 --- doc/source/command-objects/volume.rst | 8 +++++ .../tests/volume/v2/test_volume.py | 30 +++++++++++++++++++ openstackclient/volume/v2/volume.py | 13 +++++++- .../image-property_add-7f8479791eab45b7.yaml | 14 +++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/image-property_add-7f8479791eab45b7.yaml diff --git a/doc/source/command-objects/volume.rst b/doc/source/command-objects/volume.rst index bf89dc44e..f51b5ae19 100644 --- a/doc/source/command-objects/volume.rst +++ b/doc/source/command-objects/volume.rst @@ -164,6 +164,7 @@ Set volume properties [--description ] [--size ] [--property [...] ] + [--image-property [...] ] .. option:: --name @@ -182,6 +183,13 @@ Set volume properties Property to add or modify for this volume (repeat option to set multiple properties) +.. option:: --image-property + + To add or modify image properties for this volume. + (repeat option to set multiple image properties) + + *Volume version 2 only* + .. describe:: Volume to modify (name or ID) diff --git a/openstackclient/tests/volume/v2/test_volume.py b/openstackclient/tests/volume/v2/test_volume.py index a836f79ec..29fc391ee 100644 --- a/openstackclient/tests/volume/v2/test_volume.py +++ b/openstackclient/tests/volume/v2/test_volume.py @@ -753,3 +753,33 @@ class TestVolumeShow(TestVolume): self.assertEqual(volume_fakes.VOLUME_columns, columns) self.assertEqual(volume_fakes.VOLUME_data, data) + + +class TestVolumeSet(TestVolume): + + def setUp(self): + super(TestVolumeSet, self).setUp() + + self.new_volume = volume_fakes.FakeVolume.create_one_volume() + self.volumes_mock.create.return_value = self.new_volume + + # Get the command object to test + self.cmd = volume.SetVolume(self.app, None) + + def test_volume_set_image_property(self): + arglist = [ + '--image-property', 'Alpha=a', + '--image-property', 'Beta=b', + self.new_volume.id, + ] + verifylist = [ + ('image_property', {'Alpha': 'a', 'Beta': 'b'}), + ('volume', self.new_volume.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # In base command class ShowOne in cliff, abstract method take_action() + # returns nothing + self.cmd.take_action(parsed_args) + self.volumes_mock.set_image_metadata.assert_called_with( + self.volumes_mock.get().id, parsed_args.image_property) diff --git a/openstackclient/volume/v2/volume.py b/openstackclient/volume/v2/volume.py index 8f2122eb8..9b58d73da 100644 --- a/openstackclient/volume/v2/volume.py +++ b/openstackclient/volume/v2/volume.py @@ -345,6 +345,13 @@ class SetVolume(command.Command): help='Property to add or modify for this volume ' '(repeat option to set multiple properties)', ) + parser.add_argument( + '--image-property', + metavar='', + action=parseractions.KeyValueAction, + help='To add or modify image properties for this volume ' + '(repeat option to set multiple image properties)', + ) return parser def take_action(self, parsed_args): @@ -365,6 +372,9 @@ class SetVolume(command.Command): if parsed_args.property: volume_client.volumes.set_metadata(volume.id, parsed_args.property) + if parsed_args.image_property: + volume_client.volumes.set_image_metadata( + volume.id, parsed_args.image_property) kwargs = {} if parsed_args.name: @@ -374,7 +384,8 @@ class SetVolume(command.Command): if kwargs: volume_client.volumes.update(volume.id, **kwargs) - if not kwargs and not parsed_args.property and not parsed_args.size: + if (not kwargs and not parsed_args.property + and not parsed_args.image_property and not parsed_args.size): self.app.log.error("No changes requested\n") diff --git a/releasenotes/notes/image-property_add-7f8479791eab45b7.yaml b/releasenotes/notes/image-property_add-7f8479791eab45b7.yaml new file mode 100644 index 000000000..724da4515 --- /dev/null +++ b/releasenotes/notes/image-property_add-7f8479791eab45b7.yaml @@ -0,0 +1,14 @@ +--- +fixes: + - | + Added support for setting volume image property. + + Image properties are copied from image when volume is created. + But since a volume is mutable, user sometime wants to update + image properties for volume. + + So, this fix enables user to update image properties of volume + using below command: + ``volume set --image-property ``. + + [Bug 'https://bugs.launchpad.net/python-openstackclient/+bug/1554877'_]