Fix server group schema for compute microversion 2.64
For Compute microversion 2.64: 1. change policies to policy in: * GET /os-server-groups * POST /os-server-groups * GET /os-server-groups/{server_group_id} 2. add rules in: * GET /os-server-groups * POST /os-server-groups * GET /os-server-groups/{server_group_id} 3. remove metadata from: * GET /os-server-groups * POST /os-server-groups * GET /os-server-groups/{server_group_id} The testcases of create_server_group should also be modified. Co-authored-by: Ghanshyam Mann <gmann@ghanshyammann.com> Change-Id: I8fc37415c968eb64380b8bd66b713aa6b733578f
This commit is contained in:
parent
6bc98ccfaa
commit
ed6d10235c
|
@ -418,6 +418,10 @@ Microversion tests implemented in Tempest
|
||||||
|
|
||||||
.. _2.63: https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id58
|
.. _2.63: https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id58
|
||||||
|
|
||||||
|
* `2.64`_
|
||||||
|
|
||||||
|
.. _2.64: https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id59
|
||||||
|
|
||||||
* `2.70`_
|
* `2.70`_
|
||||||
|
|
||||||
.. _2.70: https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id64
|
.. _2.70: https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id64
|
||||||
|
|
|
@ -306,10 +306,18 @@ class BaseV2ComputeTest(api_version_utils.BaseMicroversionTest,
|
||||||
def create_test_server_group(cls, name="", policy=None):
|
def create_test_server_group(cls, name="", policy=None):
|
||||||
if not name:
|
if not name:
|
||||||
name = data_utils.rand_name(cls.__name__ + "-Server-Group")
|
name = data_utils.rand_name(cls.__name__ + "-Server-Group")
|
||||||
if policy is None:
|
if cls.is_requested_microversion_compatible('2.63'):
|
||||||
policy = ['affinity']
|
policy = policy or ['affinity']
|
||||||
|
if not isinstance(policy, list):
|
||||||
|
policy = [policy]
|
||||||
|
kwargs = {'policies': policy}
|
||||||
|
else:
|
||||||
|
policy = policy or 'affinity'
|
||||||
|
if isinstance(policy, list):
|
||||||
|
policy = policy[0]
|
||||||
|
kwargs = {'policy': policy}
|
||||||
body = cls.server_groups_client.create_server_group(
|
body = cls.server_groups_client.create_server_group(
|
||||||
name=name, policies=policy)['server_group']
|
name=name, **kwargs)['server_group']
|
||||||
cls.addClassResourceCleanup(
|
cls.addClassResourceCleanup(
|
||||||
test_utils.call_and_ignore_notfound_exc,
|
test_utils.call_and_ignore_notfound_exc,
|
||||||
cls.server_groups_client.delete_server_group,
|
cls.server_groups_client.delete_server_group,
|
||||||
|
|
|
@ -43,10 +43,22 @@ class ServerGroupTestJSON(base.BaseV2ComputeTest):
|
||||||
super(ServerGroupTestJSON, cls).setup_clients()
|
super(ServerGroupTestJSON, cls).setup_clients()
|
||||||
cls.client = cls.server_groups_client
|
cls.client = cls.server_groups_client
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _set_policy(cls, policy):
|
||||||
|
if not cls.is_requested_microversion_compatible('2.63'):
|
||||||
|
return policy[0]
|
||||||
|
else:
|
||||||
|
return policy
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def resource_setup(cls):
|
def resource_setup(cls):
|
||||||
super(ServerGroupTestJSON, cls).resource_setup()
|
super(ServerGroupTestJSON, cls).resource_setup()
|
||||||
cls.policy = ['affinity']
|
if cls.is_requested_microversion_compatible('2.63'):
|
||||||
|
cls.policy_field = 'policies'
|
||||||
|
cls.policy = ['affinity']
|
||||||
|
else:
|
||||||
|
cls.policy_field = 'policy'
|
||||||
|
cls.policy = 'affinity'
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(ServerGroupTestJSON, self).setUp()
|
super(ServerGroupTestJSON, self).setUp()
|
||||||
|
@ -61,9 +73,9 @@ class ServerGroupTestJSON(base.BaseV2ComputeTest):
|
||||||
|
|
||||||
def _create_server_group(self, name, policy):
|
def _create_server_group(self, name, policy):
|
||||||
# create the test server-group with given policy
|
# create the test server-group with given policy
|
||||||
server_group = {'name': name, 'policies': policy}
|
server_group = {'name': name, self.policy_field: policy}
|
||||||
body = self.create_test_server_group(name, policy)
|
body = self.create_test_server_group(name, policy)
|
||||||
for key in ['name', 'policies']:
|
for key in ['name', self.policy_field]:
|
||||||
self.assertEqual(server_group[key], body[key])
|
self.assertEqual(server_group[key], body[key])
|
||||||
return body
|
return body
|
||||||
|
|
||||||
|
@ -88,7 +100,7 @@ class ServerGroupTestJSON(base.BaseV2ComputeTest):
|
||||||
@decorators.idempotent_id('3645a102-372f-4140-afad-13698d850d23')
|
@decorators.idempotent_id('3645a102-372f-4140-afad-13698d850d23')
|
||||||
def test_create_delete_server_group_with_anti_affinity_policy(self):
|
def test_create_delete_server_group_with_anti_affinity_policy(self):
|
||||||
"""Test Create/Delete the server-group with anti-affinity policy"""
|
"""Test Create/Delete the server-group with anti-affinity policy"""
|
||||||
policy = ['anti-affinity']
|
policy = self._set_policy(['anti-affinity'])
|
||||||
self._create_delete_server_group(policy)
|
self._create_delete_server_group(policy)
|
||||||
|
|
||||||
@decorators.idempotent_id('154dc5a4-a2fe-44b5-b99e-f15806a4a113')
|
@decorators.idempotent_id('154dc5a4-a2fe-44b5-b99e-f15806a4a113')
|
||||||
|
@ -99,7 +111,7 @@ class ServerGroupTestJSON(base.BaseV2ComputeTest):
|
||||||
for _ in range(0, 2):
|
for _ in range(0, 2):
|
||||||
server_groups.append(self._create_server_group(server_group_name,
|
server_groups.append(self._create_server_group(server_group_name,
|
||||||
self.policy))
|
self.policy))
|
||||||
for key in ['name', 'policies']:
|
for key in ['name', self.policy_field]:
|
||||||
self.assertEqual(server_groups[0][key], server_groups[1][key])
|
self.assertEqual(server_groups[0][key], server_groups[1][key])
|
||||||
self.assertNotEqual(server_groups[0]['id'], server_groups[1]['id'])
|
self.assertNotEqual(server_groups[0]['id'], server_groups[1]['id'])
|
||||||
|
|
||||||
|
@ -134,3 +146,24 @@ class ServerGroupTestJSON(base.BaseV2ComputeTest):
|
||||||
server_group = (self.server_groups_client.show_server_group(
|
server_group = (self.server_groups_client.show_server_group(
|
||||||
self.created_server_group['id'])['server_group'])
|
self.created_server_group['id'])['server_group'])
|
||||||
self.assertIn(server['id'], server_group['members'])
|
self.assertIn(server['id'], server_group['members'])
|
||||||
|
|
||||||
|
|
||||||
|
class ServerGroup264TestJSON(base.BaseV2ComputeTest):
|
||||||
|
"""These tests check for the server-group APIs 2.64 microversion.
|
||||||
|
|
||||||
|
This tests is only to verify the POST, GET server-groups APIs response
|
||||||
|
schema with 2.64 microversion
|
||||||
|
"""
|
||||||
|
create_default_network = True
|
||||||
|
min_microversion = '2.64'
|
||||||
|
|
||||||
|
@decorators.idempotent_id('b52f09dd-2133-4037-9a5d-bdb260096a88')
|
||||||
|
def test_create_get_server_group(self):
|
||||||
|
# create, get the test server-group with given policy
|
||||||
|
server_group = self.create_test_server_group(
|
||||||
|
name='server-group', policy='affinity')
|
||||||
|
self.addCleanup(
|
||||||
|
self.server_groups_client.delete_server_group,
|
||||||
|
server_group['id'])
|
||||||
|
self.server_groups_client.list_server_groups()
|
||||||
|
self.server_groups_client.show_server_group(server_group['id'])
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
# Copyright 2020 ZTE Corporation. All rights reserved.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
import copy
|
||||||
|
|
||||||
|
from tempest.lib.api_schema.response.compute.v2_13 import server_groups as \
|
||||||
|
server_groupsv213
|
||||||
|
|
||||||
|
# Compute microversion 2.64:
|
||||||
|
# 1. change policies to policy in:
|
||||||
|
# * GET /os-server-groups
|
||||||
|
# * POST /os-server-groups
|
||||||
|
# * GET /os-server-groups/{server_group_id}
|
||||||
|
# 2. add rules in:
|
||||||
|
# * GET /os-server-groups
|
||||||
|
# * POST /os-server-groups
|
||||||
|
# * GET /os-server-groups/{server_group_id}
|
||||||
|
# 3. remove metadata from:
|
||||||
|
# * GET /os-server-groups
|
||||||
|
# * POST /os-server-groups
|
||||||
|
# * GET /os-server-groups/{server_group_id}
|
||||||
|
|
||||||
|
common_server_group = copy.deepcopy(server_groupsv213.common_server_group)
|
||||||
|
common_server_group['properties']['policy'] = {'type': 'string'}
|
||||||
|
common_server_group['properties']['rules'] = {'type': 'object'}
|
||||||
|
common_server_group['properties'].pop('policies')
|
||||||
|
common_server_group['properties'].pop('metadata')
|
||||||
|
common_server_group['required'].append('policy')
|
||||||
|
common_server_group['required'].append('rules')
|
||||||
|
common_server_group['required'].remove('policies')
|
||||||
|
common_server_group['required'].remove('metadata')
|
||||||
|
|
||||||
|
create_show_server_group = copy.deepcopy(
|
||||||
|
server_groupsv213.create_show_server_group)
|
||||||
|
create_show_server_group['response_body']['properties'][
|
||||||
|
'server_group'] = common_server_group
|
||||||
|
|
||||||
|
list_server_groups = copy.deepcopy(server_groupsv213.list_server_groups)
|
||||||
|
list_server_groups['response_body']['properties']['server_groups'][
|
||||||
|
'items'] = common_server_group
|
||||||
|
|
||||||
|
# NOTE(zhufl): Below are the unchanged schema in this microversion. We need
|
||||||
|
# to keep this schema in this file to have the generic way to select the
|
||||||
|
# right schema based on self.schema_versions_info mapping in service client.
|
||||||
|
delete_server_group = copy.deepcopy(server_groupsv213.delete_server_group)
|
|
@ -20,6 +20,8 @@ from tempest.lib.api_schema.response.compute.v2_1 import server_groups \
|
||||||
as schema
|
as schema
|
||||||
from tempest.lib.api_schema.response.compute.v2_13 import server_groups \
|
from tempest.lib.api_schema.response.compute.v2_13 import server_groups \
|
||||||
as schemav213
|
as schemav213
|
||||||
|
from tempest.lib.api_schema.response.compute.v2_64 import server_groups \
|
||||||
|
as schemav264
|
||||||
from tempest.lib.common import rest_client
|
from tempest.lib.common import rest_client
|
||||||
from tempest.lib.services.compute import base_compute_client
|
from tempest.lib.services.compute import base_compute_client
|
||||||
|
|
||||||
|
@ -28,7 +30,8 @@ class ServerGroupsClient(base_compute_client.BaseComputeClient):
|
||||||
|
|
||||||
schema_versions_info = [
|
schema_versions_info = [
|
||||||
{'min': None, 'max': '2.12', 'schema': schema},
|
{'min': None, 'max': '2.12', 'schema': schema},
|
||||||
{'min': '2.13', 'max': None, 'schema': schemav213}]
|
{'min': '2.13', 'max': '2.63', 'schema': schemav213},
|
||||||
|
{'min': '2.64', 'max': None, 'schema': schemav264}]
|
||||||
|
|
||||||
def create_server_group(self, **kwargs):
|
def create_server_group(self, **kwargs):
|
||||||
"""Create the server group.
|
"""Create the server group.
|
||||||
|
|
Loading…
Reference in New Issue