summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <ranasheel2000@gmail.com>2016-03-09 20:59:40 +0530
committerSteve Martinelli <stevemar@ca.ibm.com>2016-03-16 14:17:34 +0000
commit4d5c5d9dcb6421e56823aad932bff5d87b728bb2 (patch)
treeacd9941d7abf4fd67f3ac0e326a031cc9a08afef
parentd88284c86d5a750a82b207da321f9df249e90ac0 (diff)
downloadpython-openstackclient-4d5c5d9dcb6421e56823aad932bff5d87b728bb2.tar.gz
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
-rw-r--r--doc/source/command-objects/volume.rst8
-rw-r--r--openstackclient/tests/volume/v2/test_volume.py30
-rw-r--r--openstackclient/volume/v2/volume.py13
-rw-r--r--releasenotes/notes/image-property_add-7f8479791eab45b7.yaml14
4 files changed, 64 insertions, 1 deletions
diff --git a/doc/source/command-objects/volume.rst b/doc/source/command-objects/volume.rst
index bf89dc44..f51b5ae1 100644
--- a/doc/source/command-objects/volume.rst
+++ b/doc/source/command-objects/volume.rst
@@ -164,6 +164,7 @@ Set volume properties
[--description <description>]
[--size <size>]
[--property <key=value> [...] ]
+ [--image-property <key=value> [...] ]
<volume>
.. option:: --name <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 <key=value>
+
+ To add or modify image properties for this volume.
+ (repeat option to set multiple image properties)
+
+ *Volume version 2 only*
+
.. describe:: <volume>
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 a836f79e..29fc391e 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 8f2122eb..9b58d73d 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='<key=value>',
+ 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 00000000..724da451
--- /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 <key=value> <volume>``.
+
+ [Bug 'https://bugs.launchpad.net/python-openstackclient/+bug/1554877'_]