Skip to content

Commit 71f232a

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Add "image metadef property set" command"
2 parents c09c1fb + 705ecef commit 71f232a

5 files changed

Lines changed: 103 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
@@ -42,7 +42,7 @@ md-property-create,image metadef property create,Create a new metadata definitio
4242
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.
45-
md-property-update,,Update metadata definitions property inside a namespace.
45+
md-property-update,image metadef property set,Update metadata definitions property inside a namespace.
4646
md-resource-type-associate,,Associate resource type with a metadata definitions namespace.
4747
md-resource-type-deassociate,,Deassociate resource type with a metadata definitions namespace.
4848
md-resource-type-list,,List available resource type names.

openstackclient/image/v2/metadef_properties.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,68 @@ def take_action(self, parsed_args):
173173
)
174174

175175

176+
class SetMetadefProperty(command.Command):
177+
_description = _("Update metadef namespace property")
178+
179+
def get_parser(self, prog_name):
180+
parser = super().get_parser(prog_name)
181+
parser.add_argument(
182+
"--name",
183+
help=_("Internal name of the property"),
184+
)
185+
parser.add_argument(
186+
"--title",
187+
help=_("Property name displayed to the user"),
188+
)
189+
parser.add_argument(
190+
"--type",
191+
help=_("Property type"),
192+
)
193+
parser.add_argument(
194+
"--schema",
195+
help=_("Valid JSON schema of the property"),
196+
)
197+
parser.add_argument(
198+
"namespace_name",
199+
help=_("Namespace of the namespace to which the property belongs"),
200+
)
201+
parser.add_argument(
202+
"property_name",
203+
help=_("Property to update"),
204+
)
205+
return parser
206+
207+
def take_action(self, parsed_args):
208+
image_client = self.app.client_manager.image
209+
210+
# We need to pass the values for *all* attributes as kwargs to
211+
# update_metadef_property(), otherwise the attributes that are not
212+
# listed will be reset.
213+
data = image_client.get_metadef_property(
214+
parsed_args.property_name, parsed_args.namespace_name
215+
)
216+
kwargs = _format_property(data)
217+
for key in ['name', 'title', 'type']:
218+
argument = getattr(parsed_args, key, None)
219+
if argument is not None:
220+
kwargs[key] = argument
221+
222+
if parsed_args.schema:
223+
try:
224+
kwargs.update(json.loads(parsed_args.schema))
225+
except json.JSONDecodeError as e:
226+
raise exceptions.CommandError(
227+
_("Failed to load JSON schema: %(e)s")
228+
% {
229+
'e': e,
230+
}
231+
)
232+
233+
image_client.update_metadef_property(
234+
parsed_args.property_name, parsed_args.namespace_name, **kwargs
235+
)
236+
237+
176238
class ShowMetadefProperty(command.ShowOne):
177239
_description = _("Describe a specific property from a namespace")
178240

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,40 @@ def test_metadef_property_list(self):
160160
self.assertEqual(getattr(self.datalist[0], 'name'), next(data)[0])
161161

162162

163+
class TestMetadefPropertySet(image_fakes.TestImagev2):
164+
_metadef_property = image_fakes.create_one_metadef_property()
165+
166+
def setUp(self):
167+
super().setUp()
168+
169+
self.cmd = metadef_properties.SetMetadefProperty(self.app, None)
170+
self.image_client.get_metadef_property.return_value = (
171+
self._metadef_property
172+
)
173+
174+
def test_metadef_property_set(self):
175+
arglist = ['--title', 'new title', 'namespace', 'property']
176+
verifylist = []
177+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
178+
result = self.cmd.take_action(parsed_args)
179+
self.assertIsNone(result)
180+
181+
def test_metadef_property_set_invalid_schema(self):
182+
arglist = [
183+
'--title',
184+
'new title',
185+
'--schema',
186+
'{invalid}',
187+
'namespace',
188+
'property',
189+
]
190+
verifylist = []
191+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
192+
self.assertRaises(
193+
exceptions.CommandError, self.cmd.take_action, parsed_args
194+
)
195+
196+
163197
class TestMetadefPropertyShow(image_fakes.TestImagev2):
164198
_metadef_property = image_fakes.create_one_metadef_property()
165199

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

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@ openstack.image.v2 =
402402
image_metadef_property_create = openstackclient.image.v2.metadef_properties:CreateMetadefProperty
403403
image_metadef_property_delete = openstackclient.image.v2.metadef_properties:DeleteMetadefProperty
404404
image_metadef_property_list = openstackclient.image.v2.metadef_properties:ListMetadefProperties
405+
image_metadef_property_set = openstackclient.image.v2.metadef_properties:SetMetadefProperty
405406
image_metadef_property_show = openstackclient.image.v2.metadef_properties:ShowMetadefProperty
406407

407408
image_metadef_resource_type_list = openstackclient.image.v2.metadef_resource_types:ListMetadefResourceTypes

0 commit comments

Comments
 (0)