Resource class set (v1.7)
Change-Id: I449ee4574091c9f5babe0b31d8a771a086d7bc1c Partially-Implements: blueprint placement-osc-plugin-rocky
This commit is contained in:
parent
7882ed33f3
commit
d839cd9dc5
@ -67,6 +67,35 @@ class CreateResourceClass(command.Command):
|
||||
http.request('POST', BASE_URL, json={'name': parsed_args.name})
|
||||
|
||||
|
||||
class SetResourceClass(command.Command):
|
||||
|
||||
"""Create or validate the existence of single resource class.
|
||||
|
||||
Unlike "resource class create" also succeed if the resource class
|
||||
already exists, which makes this an idempotent check or create command.
|
||||
|
||||
This command requires at least ``--os-placement-api-version 1.7``.
|
||||
"""
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(SetResourceClass, self).get_parser(prog_name)
|
||||
|
||||
parser.add_argument(
|
||||
'name',
|
||||
metavar='<name>',
|
||||
help='Name of the resource class'
|
||||
)
|
||||
return parser
|
||||
|
||||
@version.check(version.ge('1.7'))
|
||||
def take_action(self, parsed_args):
|
||||
http = self.app.client_manager.placement
|
||||
|
||||
url = BASE_URL + '/' + parsed_args.name
|
||||
|
||||
http.request('PUT', url)
|
||||
|
||||
|
||||
class ShowResourceClass(command.ShowOne):
|
||||
|
||||
"""Return a representation of the resource class identified by {name}.
|
||||
|
@ -188,6 +188,9 @@ class BaseTestCase(base.BaseTestCase):
|
||||
def resource_class_create(self, name):
|
||||
return self.openstack('resource class create ' + name)
|
||||
|
||||
def resource_class_set(self, name):
|
||||
return self.openstack('resource class set ' + name)
|
||||
|
||||
def resource_class_delete(self, name):
|
||||
return self.openstack('resource class delete ' + name)
|
||||
|
||||
|
@ -10,9 +10,15 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import uuid
|
||||
|
||||
from osc_placement.tests.functional import base
|
||||
|
||||
|
||||
CUSTOM_RC = 'CUSTOM_GPU_DEVICE_{}'.format(
|
||||
str(uuid.uuid4()).replace('-', '').upper())
|
||||
|
||||
|
||||
class TestResourceClass(base.BaseTestCase):
|
||||
VERSION = '1.2'
|
||||
|
||||
@ -33,11 +39,11 @@ class TestResourceClass(base.BaseTestCase):
|
||||
'CUSTOM_GPU.INTEL')
|
||||
|
||||
def test_create(self):
|
||||
self.resource_class_create('CUSTOM_GPU_DEVICE')
|
||||
self.resource_class_create(CUSTOM_RC)
|
||||
rcs = self.resource_class_list()
|
||||
names = [rc['name'] for rc in rcs]
|
||||
self.assertIn('CUSTOM_GPU_DEVICE', names)
|
||||
self.resource_class_delete('CUSTOM_GPU_DEVICE')
|
||||
self.assertIn(CUSTOM_RC, names)
|
||||
self.resource_class_delete(CUSTOM_RC)
|
||||
|
||||
def test_fail_show_if_unknown_class(self):
|
||||
self.assertCommandFailed('No such resource class',
|
||||
@ -54,3 +60,18 @@ class TestResourceClass(base.BaseTestCase):
|
||||
def test_fail_delete_standard_class(self):
|
||||
self.assertCommandFailed('Cannot delete standard resource class',
|
||||
self.resource_class_delete, 'VCPU')
|
||||
|
||||
|
||||
class TestResourceClass17(base.BaseTestCase):
|
||||
VERSION = '1.7'
|
||||
|
||||
def test_set_resource_class(self):
|
||||
self.resource_class_create(CUSTOM_RC)
|
||||
self.resource_class_set(CUSTOM_RC)
|
||||
self.resource_class_set(CUSTOM_RC + '1')
|
||||
rcs = self.resource_class_list()
|
||||
names = [rc['name'] for rc in rcs]
|
||||
self.assertIn(CUSTOM_RC, names)
|
||||
self.assertIn(CUSTOM_RC + '1', names)
|
||||
self.resource_class_delete(CUSTOM_RC)
|
||||
self.resource_class_delete(CUSTOM_RC + '1')
|
||||
|
@ -22,6 +22,7 @@ SUPPORTED_VERSIONS = [
|
||||
'1.4',
|
||||
'1.5',
|
||||
'1.6',
|
||||
'1.7',
|
||||
]
|
||||
|
||||
|
||||
|
11
releasenotes/notes/microversion-1.7-6be2dadd0b27910f.yaml
Normal file
11
releasenotes/notes/microversion-1.7-6be2dadd0b27910f.yaml
Normal file
@ -0,0 +1,11 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
The ``openstack resource class set {name}`` command has been added which
|
||||
requires ``--os-placement-api-version 1.7``. This command is similar to
|
||||
``openstack resource class create`` except it is idempotent if the resource
|
||||
class already exists.
|
||||
|
||||
See the `command documentation`__ for more details.
|
||||
|
||||
.. __: https://docs.openstack.org/osc-placement/latest/cli/index.html#resource-class-set
|
@ -45,6 +45,7 @@ openstack.placement.v1 =
|
||||
resource_provider_aggregate_set = osc_placement.resources.aggregate:SetAggregate
|
||||
resource_class_list = osc_placement.resources.resource_class:ListResourceClass
|
||||
resource_class_create = osc_placement.resources.resource_class:CreateResourceClass
|
||||
resource_class_set = osc_placement.resources.resource_class:SetResourceClass
|
||||
resource_class_show = osc_placement.resources.resource_class:ShowResourceClass
|
||||
resource_class_delete = osc_placement.resources.resource_class:DeleteResourceClass
|
||||
trait_list = osc_placement.resources.trait:ListTrait
|
||||
|
Loading…
x
Reference in New Issue
Block a user