From 5fb922e46953963ffbdadeef3e4854e7ae3c37b5 Mon Sep 17 00:00:00 2001 From: Cyril Roelandt Date: Mon, 9 Oct 2023 23:33:02 +0000 Subject: [PATCH] Add "image metadef property list" command. Depends-On: https://review.opendev.org/c/openstack/openstacksdk/+/857727 Change-Id: I8f6692e779c4721225052d348b4b947a545bd6c0 --- doc/source/cli/data/glance.csv | 2 +- .../image/v2/metadef_properties.py | 46 +++++++++++++++++++ openstackclient/tests/unit/image/v2/fakes.py | 15 ++++++ .../unit/image/v2/test_metadef_properties.py | 42 +++++++++++++++++ ...etadef-property-list-fe89ae8ff9780002.yaml | 5 ++ setup.cfg | 2 + 6 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 openstackclient/image/v2/metadef_properties.py create mode 100644 openstackclient/tests/unit/image/v2/test_metadef_properties.py create mode 100644 releasenotes/notes/add-metadef-property-list-fe89ae8ff9780002.yaml diff --git a/doc/source/cli/data/glance.csv b/doc/source/cli/data/glance.csv index 1481610ec..a8b342867 100644 --- a/doc/source/cli/data/glance.csv +++ b/doc/source/cli/data/glance.csv @@ -40,7 +40,7 @@ md-object-show,,Describe a specific metadata definitions object inside a namespa md-object-update,,Update metadata definitions object inside a namespace. md-property-create,,Create a new metadata definitions property inside a namespace. md-property-delete,,Delete a specific metadata definitions property inside a namespace. -md-property-list,,List metadata definitions properties inside a specific namespace. +md-property-list,image metadef property list,List metadata definitions properties inside a specific namespace. md-property-show,,Describe a specific metadata definitions property inside a namespace. md-property-update,,Update metadata definitions property inside a namespace. md-resource-type-associate,,Associate resource type with a metadata definitions namespace. diff --git a/openstackclient/image/v2/metadef_properties.py b/openstackclient/image/v2/metadef_properties.py new file mode 100644 index 000000000..89452667f --- /dev/null +++ b/openstackclient/image/v2/metadef_properties.py @@ -0,0 +1,46 @@ +# Copyright 2023 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from osc_lib.command import command +from osc_lib import utils + +from openstackclient.i18n import _ + + +class ListMetadefProperties(command.Lister): + _description = _("List metadef properties") + + def get_parser(self, prog_name): + parser = super().get_parser(prog_name) + parser.add_argument( + "namespace_name", + metavar="", + help=_("An identifier (a name) for the namespace"), + ) + return parser + + def take_action(self, parsed_args): + image_client = self.app.client_manager.image + props = image_client.metadef_properties(parsed_args.namespace_name) + columns = ['name', 'title', 'type'] + return ( + columns, + ( + utils.get_item_properties( + prop, + columns, + ) + for prop in props + ), + ) diff --git a/openstackclient/tests/unit/image/v2/fakes.py b/openstackclient/tests/unit/image/v2/fakes.py index 1fcfb50e9..a63d4c525 100644 --- a/openstackclient/tests/unit/image/v2/fakes.py +++ b/openstackclient/tests/unit/image/v2/fakes.py @@ -20,6 +20,7 @@ from openstack.image.v2 import _proxy from openstack.image.v2 import image from openstack.image.v2 import member from openstack.image.v2 import metadef_namespace +from openstack.image.v2 import metadef_property from openstack.image.v2 import metadef_resource_type from openstack.image.v2 import service_info as _service_info from openstack.image.v2 import task @@ -263,6 +264,20 @@ def create_one_metadef_namespace(attrs=None): return metadef_namespace.MetadefNamespace(**metadef_namespace_list) +def create_one_metadef_property(attrs=None): + attrs = attrs or {} + + metadef_property_list = { + 'name': 'cpu_cores', + 'title': 'vCPU Cores', + 'type': 'integer', + } + + # Overwrite default attributes if there are some attributes set + metadef_property_list.update(attrs) + return metadef_property.MetadefProperty(**metadef_property_list) + + def create_one_resource_type(attrs=None): """Create a fake MetadefResourceType member. diff --git a/openstackclient/tests/unit/image/v2/test_metadef_properties.py b/openstackclient/tests/unit/image/v2/test_metadef_properties.py new file mode 100644 index 000000000..57b1bb6cd --- /dev/null +++ b/openstackclient/tests/unit/image/v2/test_metadef_properties.py @@ -0,0 +1,42 @@ +# Copyright 2023 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from openstackclient.image.v2 import metadef_properties +from openstackclient.tests.unit.image.v2 import fakes as image_fakes + + +class TestMetadefPropertyList(image_fakes.TestImagev2): + _metadef_property = [image_fakes.create_one_metadef_property()] + + columns = ['name', 'title', 'type'] + + def setUp(self): + super().setUp() + + self.image_client.metadef_properties.side_effect = [ + self._metadef_property, + [], + ] + + self.cmd = metadef_properties.ListMetadefProperties(self.app, None) + self.datalist = self._metadef_property + + def test_metadef_property_list(self): + arglist = ['my-namespace'] + parsed_args = self.check_parser(self.cmd, arglist, []) + + columns, data = self.cmd.take_action(parsed_args) + + self.assertEqual(self.columns, columns) + self.assertEqual(getattr(self.datalist[0], 'name'), next(data)[0]) diff --git a/releasenotes/notes/add-metadef-property-list-fe89ae8ff9780002.yaml b/releasenotes/notes/add-metadef-property-list-fe89ae8ff9780002.yaml new file mode 100644 index 000000000..643c2c5e3 --- /dev/null +++ b/releasenotes/notes/add-metadef-property-list-fe89ae8ff9780002.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add ``image metadef property list`` command to list the + metadata definitions properties inside a specific namespace. diff --git a/setup.cfg b/setup.cfg index 26b5ae309..3c994fd0e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -397,6 +397,8 @@ openstack.image.v2 = image_metadef_namespace_set = openstackclient.image.v2.metadef_namespaces:SetMetadefNameSpace image_metadef_namespace_show = openstackclient.image.v2.metadef_namespaces:ShowMetadefNameSpace + image_metadef_property_list = openstackclient.image.v2.metadef_properties:ListMetadefProperties + image_metadef_resource_type_list = openstackclient.image.v2.metadef_resource_types:ListMetadefResourceTypes openstack.network.v2 =