Skip to content

Commit 9bafea5

Browse files
ranasheel2000Steve Martinelli
authored andcommitted
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
1 parent 4d5c5d9 commit 9bafea5

4 files changed

Lines changed: 89 additions & 4 deletions

File tree

doc/source/command-objects/volume.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,12 +219,18 @@ Unset volume properties
219219
220220
os volume unset
221221
[--property <key>]
222+
[--image-property <key>]
222223
<volume>
223224
224225
.. option:: --property <key>
225226
226227
Property to remove from volume (repeat option to remove multiple properties)
227228
229+
.. option:: --image-property <key>
230+
231+
To remove image properties from volume
232+
(repeat option to remove multiple image properties)
233+
228234
.. describe:: <volume>
229235
230236
Volume to modify (name or ID)

openstackclient/tests/volume/v2/test_volume.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -783,3 +783,56 @@ def test_volume_set_image_property(self):
783783
self.cmd.take_action(parsed_args)
784784
self.volumes_mock.set_image_metadata.assert_called_with(
785785
self.volumes_mock.get().id, parsed_args.image_property)
786+
787+
788+
class TestVolumeUnset(TestVolume):
789+
790+
def setUp(self):
791+
super(TestVolumeUnset, self).setUp()
792+
793+
self.new_volume = volume_fakes.FakeVolume.create_one_volume()
794+
self.volumes_mock.create.return_value = self.new_volume
795+
796+
# Get the command object to set property
797+
self.cmd_set = volume.SetVolume(self.app, None)
798+
799+
# Get the command object to unset property
800+
self.cmd_unset = volume.UnsetVolume(self.app, None)
801+
802+
def test_volume_unset_image_property(self):
803+
804+
# Arguments for setting image properties
805+
arglist = [
806+
'--image-property', 'Alpha=a',
807+
'--image-property', 'Beta=b',
808+
self.new_volume.id,
809+
]
810+
verifylist = [
811+
('image_property', {'Alpha': 'a', 'Beta': 'b'}),
812+
('volume', self.new_volume.id),
813+
]
814+
parsed_args = self.check_parser(self.cmd_set, arglist, verifylist)
815+
816+
# In base command class ShowOne in cliff, abstract method take_action()
817+
# returns nothing
818+
self.cmd_set.take_action(parsed_args)
819+
820+
# Arguments for unsetting image properties
821+
arglist_unset = [
822+
'--image-property', 'Alpha',
823+
self.new_volume.id,
824+
]
825+
verifylist_unset = [
826+
('image_property', ['Alpha']),
827+
('volume', self.new_volume.id),
828+
]
829+
parsed_args_unset = self.check_parser(self.cmd_unset,
830+
arglist_unset,
831+
verifylist_unset)
832+
833+
# In base command class ShowOne in cliff, abstract method take_action()
834+
# returns nothing
835+
self.cmd_unset.take_action(parsed_args_unset)
836+
837+
self.volumes_mock.delete_image_metadata.assert_called_with(
838+
self.volumes_mock.get().id, parsed_args_unset.image_property)

openstackclient/volume/v2/volume.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -433,18 +433,30 @@ def get_parser(self, prog_name):
433433
parser.add_argument(
434434
'--property',
435435
metavar='<key>',
436-
required=True,
437436
action='append',
438-
default=[],
439437
help='Property to remove from volume '
440438
'(repeat option to remove multiple properties)',
441439
)
440+
parser.add_argument(
441+
'--image-property',
442+
metavar='<key>',
443+
action='append',
444+
help='To remove image properties from volume '
445+
'(repeat option to remove multiple image properties)',
446+
)
442447
return parser
443448

444449
def take_action(self, parsed_args):
445450
volume_client = self.app.client_manager.volume
446451
volume = utils.find_resource(
447452
volume_client.volumes, parsed_args.volume)
448453

449-
volume_client.volumes.delete_metadata(
450-
volume.id, parsed_args.property)
454+
if parsed_args.property:
455+
volume_client.volumes.delete_metadata(
456+
volume.id, parsed_args.property)
457+
if parsed_args.image_property:
458+
volume_client.volumes.delete_image_metadata(
459+
volume.id, parsed_args.image_property)
460+
461+
if (not parsed_args.image_property and not parsed_args.property):
462+
self.app.log.error("No changes requested\n")
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
fixes:
3+
- |
4+
Added support for deleting volume image property.
5+
6+
Image properties are copied from image when volume is created.
7+
But since a volume is mutable, user sometime wants to delete
8+
image properties for volume.
9+
10+
So, this fix enables user to delete image properties of volume
11+
using below command:
12+
``volume unset [--image-property <key>] <volume>``.
13+
14+
[Bug 'https://bugs.launchpad.net/python-openstackclient/+bug/1554879'_]

0 commit comments

Comments
 (0)