Skip to content

Commit 2a90a6f

Browse files
author
Mridula Joshi
committed
Adds CLI support for glance md-object-property-show
This patch adds a command "image metadef object property show" which describe a specific metadata definitions property inside an object. Change-Id: I738e2e3c27c9819290d5a2a8781878b81f03b5f9
1 parent 2eea916 commit 2a90a6f

6 files changed

Lines changed: 116 additions & 2 deletions

File tree

doc/source/cli/command-objects/image-metadef.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ Image v2
3737
.. autoprogram-cliff:: openstack.image.v2
3838
:command: image metadef object update
3939

40+
.. autoprogram-cliff:: openstack.image.v2
41+
:command: image metadef object property show
42+
4043
.. autoprogram-cliff:: openstack.image.v2
4144
:command: image metadef property create
4245

doc/source/cli/data/glance.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ md-object-create,image metadef object create,Create a new metadata definitions o
3636
md-object-show,image metadef object show,Describe a specific metadata definitions object inside a namespace.
3737
md-object-list,image metadef object list,List metadata definitions objects inside a specific namespace.
3838
md-object-delete,image metadef object delete,Delete a specific metadata definitions object inside a namespace.
39-
md-object-property-show,,Describe a specific metadata definitions property inside an object.
39+
md-object-property-show,image metadef object property show,Describe a specific metadata definitions property inside an object.
4040
md-object-update,image metadef object update,Update metadata definitions object inside a namespace.
4141
md-property-create,image metadef property create,Create a new metadata definitions property inside a namespace.
4242
md-property-delete,image metadef property delete,Delete a specific metadata definitions property inside a namespace.

openstackclient/image/v2/metadef_objects.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,3 +223,47 @@ def take_action(self, parsed_args):
223223
image_client.update_metadef_object(
224224
object, parsed_args.namespace, **kwargs
225225
)
226+
227+
228+
class ShowMetadefObjectProperty(command.ShowOne):
229+
_description = _(
230+
"Describe a specific metadata definitions property inside an object."
231+
)
232+
233+
def get_parser(self, prog_name):
234+
parser = super().get_parser(prog_name)
235+
parser.add_argument(
236+
"namespace",
237+
metavar="<namespace_name>",
238+
help=_("Namespace (name) for the namespace"),
239+
)
240+
parser.add_argument(
241+
"object",
242+
metavar="<object_name>",
243+
help=_("Name of an object."),
244+
)
245+
parser.add_argument(
246+
"property",
247+
help=_("Name of the property."),
248+
)
249+
return parser
250+
251+
def take_action(self, parsed_args):
252+
image_client = self.app.client_manager.image
253+
254+
namespace_name = parsed_args.namespace
255+
object_name = parsed_args.object
256+
257+
obj = image_client.get_metadef_object(object_name, namespace_name)
258+
try:
259+
prop = obj['properties'][parsed_args.property]
260+
prop['name'] = parsed_args.property
261+
262+
except KeyError:
263+
msg = _('Property %s not found in object %s.') % (
264+
parsed_args.property,
265+
parsed_args.object,
266+
)
267+
raise exceptions.CommandError(msg)
268+
269+
return zip(*sorted(prop.items()))

openstackclient/tests/unit/image/v2/test_metadef_objects.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
# License for the specific language governing permissions and limitations
1313
# under the License.
1414

15+
from osc_lib import exceptions
16+
1517
from openstackclient.image.v2 import metadef_objects
1618
from openstackclient.tests.unit.image.v2 import fakes
1719

@@ -198,3 +200,63 @@ def test_object_set(self):
198200
result = self.cmd.take_action(parsed_args)
199201

200202
self.assertIsNone(result)
203+
204+
205+
class TestMetadefObjectPropertyShow(fakes.TestImagev2):
206+
_metadef_namespace = fakes.create_one_metadef_namespace()
207+
_metadef_objects = fakes.create_one_metadef_object()
208+
md_property = _metadef_objects['properties']['quota:cpu_quota']
209+
md_property['name'] = 'quota:cpu_quota'
210+
211+
expected_columns = (
212+
'description',
213+
'name',
214+
'title',
215+
'type',
216+
)
217+
expected_data = (
218+
md_property['description'],
219+
md_property['name'],
220+
md_property['title'],
221+
md_property['type'],
222+
)
223+
224+
def setUp(self):
225+
super().setUp()
226+
227+
self.image_client.get_metadef_object.return_value = (
228+
self._metadef_objects
229+
)
230+
self.cmd = metadef_objects.ShowMetadefObjectProperty(self.app, None)
231+
232+
def test_object_property_show(self):
233+
arglist = [
234+
self._metadef_namespace.namespace,
235+
self._metadef_objects.name,
236+
'quota:cpu_quota',
237+
]
238+
verifylist = []
239+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
240+
columns, data = self.cmd.take_action(parsed_args)
241+
242+
self.assertEqual(self.expected_columns, columns)
243+
self.assertEqual(self.expected_data, data)
244+
245+
def test_neg_object_property_show(self):
246+
arglist = [
247+
self._metadef_namespace.namespace,
248+
self._metadef_objects.name,
249+
'prop1',
250+
]
251+
verifylist = []
252+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
253+
exc = self.assertRaises(
254+
exceptions.CommandError,
255+
self.cmd.take_action,
256+
parsed_args,
257+
)
258+
self.assertIn(
259+
'Property %s not found in object %s.'
260+
% (parsed_args.property, parsed_args.object),
261+
str(exc),
262+
)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- |
4+
Add ``image metadef object property show`` command which
5+
shows a particular property inside metadef object.

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ openstack.image.v2 =
404404
image_metadef_object_list = openstackclient.image.v2.metadef_objects:ListMetadefObjects
405405
image_metadef_object_delete = openstackclient.image.v2.metadef_objects:DeleteMetadefObject
406406
image_metadef_object_update = openstackclient.image.v2.metadef_objects:SetMetadefObject
407-
407+
image_metadef_object_property_show = openstackclient.image.v2.metadef_objects:ShowMetadefObjectProperty
408408

409409
image_metadef_property_create = openstackclient.image.v2.metadef_properties:CreateMetadefProperty
410410
image_metadef_property_delete = openstackclient.image.v2.metadef_properties:DeleteMetadefProperty

0 commit comments

Comments
 (0)