Skip to content

Commit 9094e54

Browse files
Add "image metadef property delete" command
Change-Id: I2e13b26139424c421ae609804c546a6b42add5a4
1 parent d9c4c43 commit 9094e54

5 files changed

Lines changed: 94 additions & 1 deletion

File tree

doc/source/cli/data/glance.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ md-object-property-show,,Describe a specific metadata definitions property insid
3939
md-object-show,,Describe a specific metadata definitions object inside a namespace.
4040
md-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.
42-
md-property-delete,,Delete a specific metadata definitions property inside a namespace.
42+
md-property-delete,image metadef property delete,Delete a specific metadata definitions property inside a namespace.
4343
md-property-list,image metadef property list,List metadata definitions properties inside a specific namespace.
4444
md-property-show,image metadef property show,Describe a specific metadata definitions property inside a namespace.
4545
md-property-update,,Update metadata definitions property inside a namespace.

openstackclient/image/v2/metadef_properties.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,44 @@ def take_action(self, parsed_args):
107107
return zip(*sorted(info.items()))
108108

109109

110+
class DeleteMetadefProperty(command.Command):
111+
_description = _("Delete a metadef property")
112+
113+
def get_parser(self, prog_name):
114+
parser = super().get_parser(prog_name)
115+
parser.add_argument(
116+
"namespace_name",
117+
help=_("An identifier (a name) for the namespace"),
118+
)
119+
parser.add_argument(
120+
"property_name",
121+
help=_("Property to delete"),
122+
)
123+
return parser
124+
125+
def take_action(self, parsed_args):
126+
image_client = self.app.client_manager.image
127+
128+
try:
129+
image_client.delete_metadef_property(
130+
parsed_args.property_name,
131+
parsed_args.namespace_name,
132+
ignore_missing=False,
133+
)
134+
except Exception as e:
135+
raise exceptions.CommandError(
136+
_(
137+
"Failed to delete property with name or "
138+
"ID '%(property)s' from namespace '%(namespace)s': %(e)s"
139+
)
140+
% {
141+
'property': parsed_args.property_name,
142+
'namespace': parsed_args.namespace_name,
143+
'e': e,
144+
}
145+
)
146+
147+
110148
class ListMetadefProperties(command.Lister):
111149
_description = _("List metadef properties")
112150

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

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

15+
from openstack import exceptions as sdk_exceptions
1516
from osc_lib import exceptions
1617

1718
from openstackclient.image.v2 import metadef_properties
@@ -85,6 +86,54 @@ def test_metadef_property_create_invalid_schema(self):
8586
)
8687

8788

89+
class TestMetadefPropertyDelete(image_fakes.TestImagev2):
90+
def setUp(self):
91+
super().setUp()
92+
93+
self.cmd = metadef_properties.DeleteMetadefProperty(self.app, None)
94+
95+
def test_metadef_property_delete(self):
96+
arglist = ['namespace', 'property']
97+
verifylist = []
98+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
99+
100+
result = self.cmd.take_action(parsed_args)
101+
102+
self.assertIsNone(result)
103+
104+
def test_metadef_property_delete_missing_arguments(self):
105+
arglist = []
106+
self.assertRaises(
107+
tests_utils.ParserException,
108+
self.check_parser,
109+
self.cmd,
110+
arglist,
111+
[],
112+
)
113+
114+
arglist = ['namespace']
115+
self.assertRaises(
116+
tests_utils.ParserException,
117+
self.check_parser,
118+
self.cmd,
119+
arglist,
120+
[],
121+
)
122+
123+
def test_metadef_property_delete_exception(self):
124+
arglist = ['namespace', 'property']
125+
verifylist = []
126+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
127+
128+
self.image_client.delete_metadef_property.side_effect = (
129+
sdk_exceptions.ResourceNotFound
130+
)
131+
132+
self.assertRaises(
133+
exceptions.CommandError, self.cmd.take_action, parsed_args
134+
)
135+
136+
88137
class TestMetadefPropertyList(image_fakes.TestImagev2):
89138
_metadef_property = [image_fakes.create_one_metadef_property()]
90139

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 property delete`` command to delete a
5+
metadef property inside a specific namespace.

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,7 @@ openstack.image.v2 =
398398
image_metadef_namespace_show = openstackclient.image.v2.metadef_namespaces:ShowMetadefNameSpace
399399

400400
image_metadef_property_create = openstackclient.image.v2.metadef_properties:CreateMetadefProperty
401+
image_metadef_property_delete = openstackclient.image.v2.metadef_properties:DeleteMetadefProperty
401402
image_metadef_property_list = openstackclient.image.v2.metadef_properties:ListMetadefProperties
402403
image_metadef_property_show = openstackclient.image.v2.metadef_properties:ShowMetadefProperty
403404

0 commit comments

Comments
 (0)