Merge "Adds command ``image metadef object delete``"

This commit is contained in:
Zuul 2023-11-22 11:05:26 +00:00 committed by Gerrit Code Review
commit 19896ec720
5 changed files with 104 additions and 5 deletions

View File

@ -21,3 +21,24 @@ Image v2
.. autoprogram-cliff:: openstack.image.v2
:command: image metadef resource type list
.. autoprogram-cliff:: openstack.image.v2
:command: image metadef object create
.. autoprogram-cliff:: openstack.image.v2
:command: image metadef object show
.. autoprogram-cliff:: openstack.image.v2
:command: image metadef object list
.. autoprogram-cliff:: openstack.image.v2
:command: image metadef object delete
.. autoprogram-cliff:: openstack.image.v2
:command: image metadef property create
.. autoprogram-cliff:: openstack.image.v2
:command: image metadef property list
.. autoprogram-cliff:: openstack.image.v2
:command: image metadef property show

View File

@ -33,10 +33,10 @@ md-namespace-show,image metadef namespace show,Describe a specific metadata defi
md-namespace-tags-delete,,Delete all metadata definitions tags inside a specific namespace.
md-namespace-update,,Update an existing metadata definitions namespace.
md-object-create,image metadef object create,Create a new metadata definitions object inside a namespace.
md-object-delete,,Delete a specific metadata definitions object inside a namespace.
md-object-list,image metadef object list,List metadata definitions objects inside a specific namespace.
md-object-property-show,,Describe a specific metadata definitions property inside an object.
md-object-show,image metadef object show,Describe a specific metadata definitions object inside a namespace.
md-object-list,image metadef object list,List metadata definitions objects inside a specific namespace.
md-object-delete,image metadef object delete,Delete a specific metadata definitions object inside a namespace.
md-object-property-show,,Describe a specific metadata definitions property inside an object.
md-object-update,,Update metadata definitions object inside a namespace.
md-property-create,image metadef property create,Create a new metadata definitions property inside a namespace.
md-property-delete,image metadef property delete,Delete a specific metadata definitions property inside a namespace.

1 cache-clear cached image list Clear all images from cache, queue or both.
33 md-namespace-tags-delete Delete all metadata definitions tags inside a specific namespace.
34 md-namespace-update Update an existing metadata definitions namespace.
35 md-object-create image metadef object create Create a new metadata definitions object inside a namespace.
md-object-delete Delete a specific metadata definitions object inside a namespace.
md-object-list image metadef object list List metadata definitions objects inside a specific namespace.
md-object-property-show Describe a specific metadata definitions property inside an object.
36 md-object-show image metadef object show Describe a specific metadata definitions object inside a namespace.
37 md-object-list image metadef object list List metadata definitions objects inside a specific namespace.
38 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.
40 md-object-update Update metadata definitions object inside a namespace.
41 md-property-create image metadef property create Create a new metadata definitions property inside a namespace.
42 md-property-delete image metadef property delete Delete a specific metadata definitions property inside a namespace.

View File

@ -15,13 +15,18 @@
"""Image V2 Action Implementations"""
import logging
from osc_lib.command import command
from osc_lib import exceptions
from osc_lib import utils
from openstackclient.i18n import _
LOG = logging.getLogger(__name__)
def _format_object(md_object):
fields_to_show = (
'created_at',
@ -77,7 +82,7 @@ class CreateMetadefObjects(command.ShowOne):
class ShowMetadefObjects(command.ShowOne):
_description = _(
"Describe a specific metadata definitions" "object inside a namespace"
"Describe a specific metadata definitions object inside a namespace"
)
def get_parser(self, prog_name):
@ -107,6 +112,55 @@ class ShowMetadefObjects(command.ShowOne):
return fields, value
class DeleteMetadefObject(command.Command):
_description = _(
"Delete a specific metadata definitions object inside a namespace"
)
def get_parser(self, prog_name):
parser = super().get_parser(prog_name)
parser.add_argument(
"namespace_name",
metavar="<namespace_name>",
help=_("Namespace (name) for the namespace"),
)
parser.add_argument(
"object_name",
metavar="<object_name>",
nargs="+",
help=_("Name of an object."),
)
return parser
def take_action(self, parsed_args):
image_client = self.app.client_manager.image
namespace_name = parsed_args.namespace_name
result = 0
for i in parsed_args.object_name:
try:
object = image_client.get_metadef_object(i, namespace_name)
image_client.delete_metadef_object(object, namespace_name)
except Exception as e:
result += 1
LOG.error(
_(
"Failed to delete object with name or "
"ID '%(object)s': %(e)s"
),
{'object': i, 'e': e},
)
if result > 0:
total = len(parsed_args.namespace_name)
msg = _("%(result)s of %(total)s object failed to delete.") % {
'result': result,
'total': total,
}
raise exceptions.CommandError(msg)
class ListMetadefObjects(command.Lister):
_description = _("List metadef objects inside a specific namespace.")

View File

@ -97,13 +97,36 @@ class TestMetadefObjectsShow(fakes.TestImagev2):
]
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.expected_columns, columns)
self.assertEqual(self.expected_data, data)
class TestMetadefObjectDelete(fakes.TestImagev2):
_metadef_namespace = fakes.create_one_metadef_namespace()
_metadef_objects = fakes.create_one_metadef_object()
def setUp(self):
super().setUp()
self.image_client.delete_metadef_object.return_value = None
self.cmd = metadef_objects.DeleteMetadefObject(self.app, None)
def test_object_delete(self):
arglist = [
self._metadef_namespace.namespace,
self._metadef_objects.name,
]
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
self.assertIsNone(result)
class TestMetadefObjectList(fakes.TestImagev2):
_metadef_namespace = fakes.create_one_metadef_namespace()
_metadef_objects = [fakes.create_one_metadef_object()]

View File

@ -401,6 +401,7 @@ openstack.image.v2 =
image_metadef_object_create = openstackclient.image.v2.metadef_objects:CreateMetadefObjects
image_metadef_object_show = openstackclient.image.v2.metadef_objects:ShowMetadefObjects
image_metadef_object_list = openstackclient.image.v2.metadef_objects:ListMetadefObjects
image_metadef_object_delete = openstackclient.image.v2.metadef_objects:DeleteMetadefObject
image_metadef_property_create = openstackclient.image.v2.metadef_properties:CreateMetadefProperty