Adds command `image metadef object create
`
Depends-on: https://review.opendev.org/c/openstack/openstacksdk/+/858350 Change-Id: Ie74231c823d6128d149d5f01c90a66ed3afa3d1a
This commit is contained in:
parent
dfcb8b0ee7
commit
f8c708900c
@ -32,7 +32,7 @@ md-namespace-resource-type-list,image metadef resource type list,List resource t
|
||||
md-namespace-show,image metadef namespace show,Describe a specific metadata definitions namespace.
|
||||
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,,Create a new metadata definitions object inside a 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,,List metadata definitions objects inside a specific namespace.
|
||||
md-object-property-show,,Describe a specific metadata definitions property inside an object.
|
||||
|
|
75
openstackclient/image/v2/metadef_objects.py
Normal file
75
openstackclient/image/v2/metadef_objects.py
Normal file
@ -0,0 +1,75 @@
|
||||
# Copyright 2012-2013 OpenStack Foundation
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
"""Image V2 Action Implementations"""
|
||||
|
||||
|
||||
from osc_lib.command import command
|
||||
from osc_lib import utils
|
||||
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
def _format_object(md_object):
|
||||
fields_to_show = (
|
||||
'created_at',
|
||||
'description',
|
||||
'name',
|
||||
'namespace_name',
|
||||
'properties',
|
||||
'required',
|
||||
'updated_at',
|
||||
)
|
||||
|
||||
return (
|
||||
fields_to_show,
|
||||
utils.get_item_properties(
|
||||
md_object,
|
||||
fields_to_show,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class CreateMetadefObjects(command.ShowOne):
|
||||
_description = _("Create a metadef object")
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super().get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
"--namespace",
|
||||
metavar="<namespace>",
|
||||
help=_("Metadef namespace to create the metadef object in (name)"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"name",
|
||||
metavar='<metadef-object-name>',
|
||||
help=_('New metadef object name'),
|
||||
)
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
image_client = self.app.client_manager.image
|
||||
|
||||
namespace = image_client.get_metadef_namespace(
|
||||
parsed_args.namespace,
|
||||
)
|
||||
data = image_client.create_metadef_object(
|
||||
namespace=namespace.namespace,
|
||||
name=parsed_args.name,
|
||||
)
|
||||
|
||||
fields, value = _format_object(data)
|
||||
|
||||
return fields, value
|
@ -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_object
|
||||
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
|
||||
@ -314,3 +315,46 @@ def create_resource_types(attrs=None, count=2):
|
||||
metadef_resource_types.append(create_one_resource_type(attrs))
|
||||
|
||||
return metadef_resource_types
|
||||
|
||||
|
||||
def create_one_metadef_object(attrs=None):
|
||||
"""Create a fake MetadefNamespace member.
|
||||
|
||||
:param attrs: A dictionary with all attributes of metadef_namespace member
|
||||
:type attrs: dict
|
||||
:return: a list of MetadefNamespace objects
|
||||
:rtype: list of `metadef_namespace.MetadefNamespace`
|
||||
"""
|
||||
attrs = attrs or {}
|
||||
|
||||
metadef_objects_list = {
|
||||
'created_at': '2014-09-19T18:20:56Z',
|
||||
'description': 'The CPU limits with control parameters.',
|
||||
'name': 'CPU Limits',
|
||||
'properties': {
|
||||
'quota:cpu_period': {
|
||||
'description': 'The enforcement interval',
|
||||
'maximum': 1000000,
|
||||
'minimum': 1000,
|
||||
'title': 'Quota: CPU Period',
|
||||
'type': 'integer',
|
||||
},
|
||||
'quota:cpu_quota': {
|
||||
'description': 'The maximum allowed bandwidth',
|
||||
'title': 'Quota: CPU Quota',
|
||||
'type': 'integer',
|
||||
},
|
||||
'quota:cpu_shares': {
|
||||
'description': 'The proportional weighted',
|
||||
'title': 'Quota: CPU Shares',
|
||||
'type': 'integer',
|
||||
},
|
||||
},
|
||||
'required': [],
|
||||
'schema': '/v2/schemas/metadefs/object',
|
||||
'updated_at': '2014-09-19T18:20:56Z',
|
||||
}
|
||||
|
||||
# Overwrite default attributes if there are some attributes set
|
||||
metadef_objects_list.update(attrs)
|
||||
return metadef_object.MetadefObject(**metadef_objects_list)
|
||||
|
62
openstackclient/tests/unit/image/v2/test_metadef_objects.py
Normal file
62
openstackclient/tests/unit/image/v2/test_metadef_objects.py
Normal file
@ -0,0 +1,62 @@
|
||||
# Copyright 2012-2013 OpenStack Foundation
|
||||
#
|
||||
# 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_objects
|
||||
from openstackclient.tests.unit.image.v2 import fakes
|
||||
|
||||
|
||||
class TestMetadefObjectsCreate(fakes.TestImagev2):
|
||||
_metadef_namespace = fakes.create_one_metadef_namespace()
|
||||
_metadef_objects = fakes.create_one_metadef_object()
|
||||
|
||||
expected_columns = (
|
||||
'created_at',
|
||||
'description',
|
||||
'name',
|
||||
'namespace_name',
|
||||
'properties',
|
||||
'required',
|
||||
'updated_at',
|
||||
)
|
||||
expected_data = (
|
||||
_metadef_objects.created_at,
|
||||
_metadef_objects.description,
|
||||
_metadef_objects.name,
|
||||
_metadef_objects.namespace_name,
|
||||
_metadef_objects.properties,
|
||||
_metadef_objects.required,
|
||||
_metadef_objects.updated_at,
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
||||
self.image_client.create_metadef_object.return_value = (
|
||||
self._metadef_objects
|
||||
)
|
||||
self.cmd = metadef_objects.CreateMetadefObjects(self.app, None)
|
||||
|
||||
def test_namespace_create(self):
|
||||
arglist = [
|
||||
'--namespace',
|
||||
self._metadef_namespace.namespace,
|
||||
self._metadef_objects.name,
|
||||
]
|
||||
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)
|
@ -0,0 +1,5 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Add ``image metadef object show`` command to create the
|
||||
metadata definitions objects inside a specific namespace
|
@ -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_object_create = openstackclient.image.v2.metadef_objects:CreateMetadefObjects
|
||||
|
||||
image_metadef_property_create = openstackclient.image.v2.metadef_properties:CreateMetadefProperty
|
||||
image_metadef_property_list = openstackclient.image.v2.metadef_properties:ListMetadefProperties
|
||||
image_metadef_property_show = openstackclient.image.v2.metadef_properties:ShowMetadefProperty
|
||||
|
Loading…
x
Reference in New Issue
Block a user