From 9bafea555d6ef84817976621d40522172c5b351f Mon Sep 17 00:00:00 2001 From: root Date: Thu, 10 Mar 2016 09:30:47 +0530 Subject: Add support for deleting Image-property OSC does not support to delete volume's image property. This patch will provide support for deleting image property to existing volume. Closes-Bug:#1554879 Change-Id: I9256913948fae9e9a03fed173b826dfa918f78e9 Implements: bp cinder-command-support --- openstackclient/tests/volume/v2/test_volume.py | 53 ++++++++++++++++++++++++++ openstackclient/volume/v2/volume.py | 20 ++++++++-- 2 files changed, 69 insertions(+), 4 deletions(-) (limited to 'openstackclient') diff --git a/openstackclient/tests/volume/v2/test_volume.py b/openstackclient/tests/volume/v2/test_volume.py index 29fc391e..12253806 100644 --- a/openstackclient/tests/volume/v2/test_volume.py +++ b/openstackclient/tests/volume/v2/test_volume.py @@ -783,3 +783,56 @@ class TestVolumeSet(TestVolume): self.cmd.take_action(parsed_args) self.volumes_mock.set_image_metadata.assert_called_with( self.volumes_mock.get().id, parsed_args.image_property) + + +class TestVolumeUnset(TestVolume): + + def setUp(self): + super(TestVolumeUnset, 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 set property + self.cmd_set = volume.SetVolume(self.app, None) + + # Get the command object to unset property + self.cmd_unset = volume.UnsetVolume(self.app, None) + + def test_volume_unset_image_property(self): + + # Arguments for setting image properties + 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_set, arglist, verifylist) + + # In base command class ShowOne in cliff, abstract method take_action() + # returns nothing + self.cmd_set.take_action(parsed_args) + + # Arguments for unsetting image properties + arglist_unset = [ + '--image-property', 'Alpha', + self.new_volume.id, + ] + verifylist_unset = [ + ('image_property', ['Alpha']), + ('volume', self.new_volume.id), + ] + parsed_args_unset = self.check_parser(self.cmd_unset, + arglist_unset, + verifylist_unset) + + # In base command class ShowOne in cliff, abstract method take_action() + # returns nothing + self.cmd_unset.take_action(parsed_args_unset) + + self.volumes_mock.delete_image_metadata.assert_called_with( + self.volumes_mock.get().id, parsed_args_unset.image_property) diff --git a/openstackclient/volume/v2/volume.py b/openstackclient/volume/v2/volume.py index 9b58d73d..5d9d2d9e 100644 --- a/openstackclient/volume/v2/volume.py +++ b/openstackclient/volume/v2/volume.py @@ -433,12 +433,17 @@ class UnsetVolume(command.Command): parser.add_argument( '--property', metavar='', - required=True, action='append', - default=[], help='Property to remove from volume ' '(repeat option to remove multiple properties)', ) + parser.add_argument( + '--image-property', + metavar='', + action='append', + help='To remove image properties from volume ' + '(repeat option to remove multiple image properties)', + ) return parser def take_action(self, parsed_args): @@ -446,5 +451,12 @@ class UnsetVolume(command.Command): volume = utils.find_resource( volume_client.volumes, parsed_args.volume) - volume_client.volumes.delete_metadata( - volume.id, parsed_args.property) + if parsed_args.property: + volume_client.volumes.delete_metadata( + volume.id, parsed_args.property) + if parsed_args.image_property: + volume_client.volumes.delete_image_metadata( + volume.id, parsed_args.image_property) + + if (not parsed_args.image_property and not parsed_args.property): + self.app.log.error("No changes requested\n") -- cgit v1.2.1