Skip to content

Commit e54bdfb

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Adds command image metadef object create"
2 parents 0b78dfe + f8c7089 commit e54bdfb

6 files changed

Lines changed: 189 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
@@ -32,7 +32,7 @@ md-namespace-resource-type-list,image metadef resource type list,List resource t
3232
md-namespace-show,image metadef namespace show,Describe a specific metadata definitions namespace.
3333
md-namespace-tags-delete,,Delete all metadata definitions tags inside a specific namespace.
3434
md-namespace-update,,Update an existing metadata definitions namespace.
35-
md-object-create,,Create a new metadata definitions object inside a namespace.
35+
md-object-create,image metadef object create,Create a new metadata definitions object inside a namespace.
3636
md-object-delete,,Delete a specific metadata definitions object inside a namespace.
3737
md-object-list,,List metadata definitions objects inside a specific namespace.
3838
md-object-property-show,,Describe a specific metadata definitions property inside an object.
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Copyright 2012-2013 OpenStack Foundation
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
4+
# not use this file except in compliance with the License. You may obtain
5+
# a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12+
# License for the specific language governing permissions and limitations
13+
# under the License.
14+
#
15+
16+
"""Image V2 Action Implementations"""
17+
18+
19+
from osc_lib.command import command
20+
from osc_lib import utils
21+
22+
from openstackclient.i18n import _
23+
24+
25+
def _format_object(md_object):
26+
fields_to_show = (
27+
'created_at',
28+
'description',
29+
'name',
30+
'namespace_name',
31+
'properties',
32+
'required',
33+
'updated_at',
34+
)
35+
36+
return (
37+
fields_to_show,
38+
utils.get_item_properties(
39+
md_object,
40+
fields_to_show,
41+
),
42+
)
43+
44+
45+
class CreateMetadefObjects(command.ShowOne):
46+
_description = _("Create a metadef object")
47+
48+
def get_parser(self, prog_name):
49+
parser = super().get_parser(prog_name)
50+
parser.add_argument(
51+
"--namespace",
52+
metavar="<namespace>",
53+
help=_("Metadef namespace to create the metadef object in (name)"),
54+
)
55+
parser.add_argument(
56+
"name",
57+
metavar='<metadef-object-name>',
58+
help=_('New metadef object name'),
59+
)
60+
return parser
61+
62+
def take_action(self, parsed_args):
63+
image_client = self.app.client_manager.image
64+
65+
namespace = image_client.get_metadef_namespace(
66+
parsed_args.namespace,
67+
)
68+
data = image_client.create_metadef_object(
69+
namespace=namespace.namespace,
70+
name=parsed_args.name,
71+
)
72+
73+
fields, value = _format_object(data)
74+
75+
return fields, value

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from openstack.image.v2 import image
2121
from openstack.image.v2 import member
2222
from openstack.image.v2 import metadef_namespace
23+
from openstack.image.v2 import metadef_object
2324
from openstack.image.v2 import metadef_property
2425
from openstack.image.v2 import metadef_resource_type
2526
from openstack.image.v2 import service_info as _service_info
@@ -314,3 +315,46 @@ def create_resource_types(attrs=None, count=2):
314315
metadef_resource_types.append(create_one_resource_type(attrs))
315316

316317
return metadef_resource_types
318+
319+
320+
def create_one_metadef_object(attrs=None):
321+
"""Create a fake MetadefNamespace member.
322+
323+
:param attrs: A dictionary with all attributes of metadef_namespace member
324+
:type attrs: dict
325+
:return: a list of MetadefNamespace objects
326+
:rtype: list of `metadef_namespace.MetadefNamespace`
327+
"""
328+
attrs = attrs or {}
329+
330+
metadef_objects_list = {
331+
'created_at': '2014-09-19T18:20:56Z',
332+
'description': 'The CPU limits with control parameters.',
333+
'name': 'CPU Limits',
334+
'properties': {
335+
'quota:cpu_period': {
336+
'description': 'The enforcement interval',
337+
'maximum': 1000000,
338+
'minimum': 1000,
339+
'title': 'Quota: CPU Period',
340+
'type': 'integer',
341+
},
342+
'quota:cpu_quota': {
343+
'description': 'The maximum allowed bandwidth',
344+
'title': 'Quota: CPU Quota',
345+
'type': 'integer',
346+
},
347+
'quota:cpu_shares': {
348+
'description': 'The proportional weighted',
349+
'title': 'Quota: CPU Shares',
350+
'type': 'integer',
351+
},
352+
},
353+
'required': [],
354+
'schema': '/v2/schemas/metadefs/object',
355+
'updated_at': '2014-09-19T18:20:56Z',
356+
}
357+
358+
# Overwrite default attributes if there are some attributes set
359+
metadef_objects_list.update(attrs)
360+
return metadef_object.MetadefObject(**metadef_objects_list)
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Copyright 2012-2013 OpenStack Foundation
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
4+
# not use this file except in compliance with the License. You may obtain
5+
# a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12+
# License for the specific language governing permissions and limitations
13+
# under the License.
14+
15+
from openstackclient.image.v2 import metadef_objects
16+
from openstackclient.tests.unit.image.v2 import fakes
17+
18+
19+
class TestMetadefObjectsCreate(fakes.TestImagev2):
20+
_metadef_namespace = fakes.create_one_metadef_namespace()
21+
_metadef_objects = fakes.create_one_metadef_object()
22+
23+
expected_columns = (
24+
'created_at',
25+
'description',
26+
'name',
27+
'namespace_name',
28+
'properties',
29+
'required',
30+
'updated_at',
31+
)
32+
expected_data = (
33+
_metadef_objects.created_at,
34+
_metadef_objects.description,
35+
_metadef_objects.name,
36+
_metadef_objects.namespace_name,
37+
_metadef_objects.properties,
38+
_metadef_objects.required,
39+
_metadef_objects.updated_at,
40+
)
41+
42+
def setUp(self):
43+
super().setUp()
44+
45+
self.image_client.create_metadef_object.return_value = (
46+
self._metadef_objects
47+
)
48+
self.cmd = metadef_objects.CreateMetadefObjects(self.app, None)
49+
50+
def test_namespace_create(self):
51+
arglist = [
52+
'--namespace',
53+
self._metadef_namespace.namespace,
54+
self._metadef_objects.name,
55+
]
56+
verifylist = []
57+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
58+
59+
columns, data = self.cmd.take_action(parsed_args)
60+
61+
self.assertEqual(self.expected_columns, columns)
62+
self.assertEqual(self.expected_data, data)
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 show`` command to create the
5+
metadata definitions objects inside a specific namespace

setup.cfg

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,8 @@ openstack.image.v2 =
397397
image_metadef_namespace_set = openstackclient.image.v2.metadef_namespaces:SetMetadefNameSpace
398398
image_metadef_namespace_show = openstackclient.image.v2.metadef_namespaces:ShowMetadefNameSpace
399399

400+
image_metadef_object_create = openstackclient.image.v2.metadef_objects:CreateMetadefObjects
401+
400402
image_metadef_property_create = openstackclient.image.v2.metadef_properties:CreateMetadefProperty
401403
image_metadef_property_list = openstackclient.image.v2.metadef_properties:ListMetadefProperties
402404
image_metadef_property_show = openstackclient.image.v2.metadef_properties:ShowMetadefProperty

0 commit comments

Comments
 (0)