Merge "Adds validation schema for compute"

This commit is contained in:
Zuul 2024-05-21 10:12:14 +00:00 committed by Gerrit Code Review
commit 06831f9811
6 changed files with 136 additions and 3 deletions

View File

@ -0,0 +1,40 @@
# 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_59 import migrations
###########################################################################
#
# 2.80:
#
# The user_id and project_id value is now returned in the response body in
# addition to the migration id for the following API responses:
#
# - GET /os-migrations
#
###########################################################################
user_id = {'type': 'string'}
project_id = {'type': 'string'}
list_migrations = copy.deepcopy(migrations.list_migrations)
list_migrations['response_body']['properties']['migrations']['items'][
'properties'].update({
'user_id': user_id,
'project_id': project_id
})
list_migrations['response_body']['properties']['migrations']['items'][
'required'].extend(['user_id', 'project_id'])

View File

@ -0,0 +1,84 @@
# 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_79 import servers as servers279
###########################################################################
#
# 2.89:
#
# The attachment_id and bdm_uuid parameter is now returned in the response body
# of the following calls:
#
# - GET /servers/{server_id}/os-volume_attachments
# - GET /servers/{server_id}/os-volume_attachments/{volume_id}
# - POST /servers/{server_id}/os-volume_attachments
###########################################################################
attach_volume = copy.deepcopy(servers279.attach_volume)
show_volume_attachment = copy.deepcopy(servers279.show_volume_attachment)
list_volume_attachments = copy.deepcopy(servers279.list_volume_attachments)
# Remove properties
# 'id' is available unti v2.88
show_volume_attachment['response_body']['properties'][
'volumeAttachment']['properties'].pop('id')
show_volume_attachment['response_body']['properties'][
'volumeAttachment']['required'].remove('id')
list_volume_attachments['response_body']['properties'][
'volumeAttachments']['items']['properties'].pop('id')
list_volume_attachments['response_body']['properties'][
'volumeAttachments']['items']['required'].remove('id')
# Add new properties
new_properties = {
'attachment_id': {'type': 'string', 'format': 'uuid'},
'bdm_uuid': {'type': 'string', 'format': 'uuid'}
}
show_volume_attachment['response_body']['properties'][
'volumeAttachment']['properties'].update(new_properties)
show_volume_attachment['response_body']['properties'][
'volumeAttachment']['required'].extend(new_properties.keys())
list_volume_attachments['response_body']['properties'][
'volumeAttachments']['items']['properties'].update(new_properties)
list_volume_attachments['response_body']['properties'][
'volumeAttachments']['items']['required'].extend(new_properties.keys())
# 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.
# ****** Schemas unchanged since microversion 2.75 ***
rebuild_server = copy.deepcopy(servers279.rebuild_server)
rebuild_server_with_admin_pass = copy.deepcopy(
servers279.rebuild_server_with_admin_pass)
update_server = copy.deepcopy(servers279.update_server)
get_server = copy.deepcopy(servers279.get_server)
list_servers_detail = copy.deepcopy(servers279.list_servers_detail)
list_servers = copy.deepcopy(servers279.list_servers)
show_server_diagnostics = copy.deepcopy(servers279.show_server_diagnostics)
get_remote_consoles = copy.deepcopy(servers279.get_remote_consoles)
list_tags = copy.deepcopy(servers279.list_tags)
update_all_tags = copy.deepcopy(servers279.update_all_tags)
delete_all_tags = copy.deepcopy(servers279.delete_all_tags)
check_tag_existence = copy.deepcopy(servers279.check_tag_existence)
update_tag = copy.deepcopy(servers279.update_tag)
delete_tag = copy.deepcopy(servers279.delete_tag)
show_instance_action = copy.deepcopy(servers279.show_instance_action)
create_backup = copy.deepcopy(servers279.create_backup)

View File

@ -21,6 +21,8 @@ from tempest.lib.api_schema.response.compute.v2_23 import migrations \
as schemav223
from tempest.lib.api_schema.response.compute.v2_59 import migrations \
as schemav259
from tempest.lib.api_schema.response.compute.v2_80 import migrations \
as schemav280
from tempest.lib.common import rest_client
from tempest.lib.services.compute import base_compute_client
@ -29,7 +31,8 @@ class MigrationsClient(base_compute_client.BaseComputeClient):
schema_versions_info = [
{'min': None, 'max': '2.22', 'schema': schema},
{'min': '2.23', 'max': '2.58', 'schema': schemav223},
{'min': '2.59', 'max': None, 'schema': schemav259}]
{'min': '2.59', 'max': '2.79', 'schema': schemav259},
{'min': '2.80', 'max': None, 'schema': schemav280}]
def list_migrations(self, **params):
"""List all migrations.

View File

@ -43,6 +43,7 @@ from tempest.lib.api_schema.response.compute.v2_73 import servers as schemav273
from tempest.lib.api_schema.response.compute.v2_75 import servers as schemav275
from tempest.lib.api_schema.response.compute.v2_79 import servers as schemav279
from tempest.lib.api_schema.response.compute.v2_8 import servers as schemav28
from tempest.lib.api_schema.response.compute.v2_89 import servers as schemav289
from tempest.lib.api_schema.response.compute.v2_9 import servers as schemav29
from tempest.lib.common import rest_client
from tempest.lib.services.compute import base_compute_client
@ -73,7 +74,8 @@ class ServersClient(base_compute_client.BaseComputeClient):
{'min': '2.71', 'max': '2.72', 'schema': schemav271},
{'min': '2.73', 'max': '2.74', 'schema': schemav273},
{'min': '2.75', 'max': '2.78', 'schema': schemav275},
{'min': '2.79', 'max': None, 'schema': schemav279}]
{'min': '2.79', 'max': '2.88', 'schema': schemav279},
{'min': '2.89', 'max': None, 'schema': schemav289}]
def __init__(self, auth_provider, service, region,
enable_instance_password=True, **kwargs):
@ -896,7 +898,11 @@ class ServersClient(base_compute_client.BaseComputeClient):
API reference:
https://docs.openstack.org/api-ref/compute/#evacuate-server-evacuate-action
"""
if self.enable_instance_password:
api_version = self.get_headers().get(self.api_microversion_header_name)
if not api_version and self.enable_instance_password:
evacuate_schema = schema.evacuate_server_with_admin_pass
elif api_version < '2.14':
evacuate_schema = schema.evacuate_server_with_admin_pass
else:
evacuate_schema = schema.evacuate_server