Merge "Update volume schema for microversion"
This commit is contained in:
commit
3857a50f78
|
@ -0,0 +1,69 @@
|
|||
# Copyright 2022 Red Hat, Inc.
|
||||
# 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_1 import parameter_types
|
||||
from tempest.lib.api_schema.response.volume import volumes
|
||||
|
||||
# Volume micro version 3.61:
|
||||
# 1. Add cluster_name attribute to response body of volume details
|
||||
# for admin in Active/Active HA mode.
|
||||
# https://docs.openstack.org/cinder/latest/contributor/
|
||||
# api_microversion_history.html
|
||||
|
||||
common_show_volume = copy.deepcopy(volumes.common_show_volume)
|
||||
common_show_volume['properties'].update(
|
||||
{'cluster_name': parameter_types.uuid_or_null})
|
||||
|
||||
create_volume = copy.deepcopy(volumes.create_volume)
|
||||
create_volume['response_body']['properties']['volume']['properties'].update(
|
||||
{'cluster_name': parameter_types.uuid_or_null})
|
||||
|
||||
# copy unchanged volumes schema
|
||||
attachments = copy.deepcopy(volumes.attachments)
|
||||
list_volumes_no_detail = copy.deepcopy(volumes.list_volumes_no_detail)
|
||||
# show_volume refers to common_show_volume
|
||||
show_volume = copy.deepcopy(volumes.show_volume)
|
||||
show_volume['response_body']['properties']['volume'] = common_show_volume
|
||||
# list copy refers to latest common_show_volume
|
||||
list_volumes_detail = copy.deepcopy(common_show_volume)
|
||||
list_volumes_with_detail = copy.deepcopy(volumes.list_volumes_with_detail)
|
||||
list_volumes_with_detail['response_body']['properties']['volumes']['items'] \
|
||||
= list_volumes_detail
|
||||
update_volume = copy.deepcopy(volumes.update_volume)
|
||||
delete_volume = copy.deepcopy(volumes.delete_volume)
|
||||
show_volume_summary = copy.deepcopy(volumes.show_volume_summary)
|
||||
attach_volume = copy.deepcopy(volumes.attach_volume)
|
||||
set_bootable_volume = copy.deepcopy(volumes.set_bootable_volume)
|
||||
detach_volume = copy.deepcopy(volumes.detach_volume)
|
||||
reserve_volume = copy.deepcopy(volumes.reserve_volume)
|
||||
unreserve_volume = copy.deepcopy(volumes.unreserve_volume)
|
||||
extend_volume = copy.deepcopy(volumes.extend_volume)
|
||||
reset_volume_status = copy.deepcopy(volumes.reset_volume_status)
|
||||
update_volume_readonly = copy.deepcopy(volumes.update_volume_readonly)
|
||||
force_delete_volume = copy.deepcopy(volumes.force_delete_volume)
|
||||
retype_volume = copy.deepcopy(volumes.retype_volume)
|
||||
force_detach_volume = copy.deepcopy(volumes.force_detach_volume)
|
||||
create_volume_metadata = copy.deepcopy(volumes.create_volume_metadata)
|
||||
show_volume_metadata = copy.deepcopy(volumes.show_volume_metadata)
|
||||
update_volume_metadata = copy.deepcopy(volumes.update_volume_metadata)
|
||||
update_volume_metadata_item = copy.deepcopy(
|
||||
volumes.update_volume_metadata_item)
|
||||
update_volume_image_metadata = copy.deepcopy(
|
||||
volumes.update_volume_image_metadata)
|
||||
delete_volume_image_metadata = copy.deepcopy(
|
||||
volumes.delete_volume_image_metadata)
|
||||
unmanage_volume = copy.deepcopy(volumes.unmanage_volume)
|
|
@ -0,0 +1,69 @@
|
|||
# Copyright 2022 Red Hat, Inc.
|
||||
# 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_1 import parameter_types
|
||||
from tempest.lib.api_schema.response.volume.v3_61 import volumes
|
||||
|
||||
# Volume micro version 3.63:
|
||||
# 1. Includes volume type ID in the volume-show and volume-detail-list.
|
||||
# for admin in Active/Active HA mode.
|
||||
# https://docs.openstack.org/cinder/latest/contributor/
|
||||
# api_microversion_history.html
|
||||
|
||||
common_show_volume = copy.deepcopy(volumes.common_show_volume)
|
||||
common_show_volume['properties'].update(
|
||||
{'volume_type_id': parameter_types.uuid_or_null})
|
||||
|
||||
create_volume = copy.deepcopy(volumes.create_volume)
|
||||
create_volume['response_body']['properties']['volume']['properties'].update(
|
||||
{'volume_type_id': parameter_types.uuid_or_null})
|
||||
|
||||
# copy unchanged volumes schema
|
||||
attachments = copy.deepcopy(volumes.attachments)
|
||||
list_volumes_no_detail = copy.deepcopy(volumes.list_volumes_no_detail)
|
||||
# show_volume refers to common_show_volume
|
||||
show_volume = copy.deepcopy(volumes.show_volume)
|
||||
show_volume['response_body']['properties']['volume'] = common_show_volume
|
||||
# list copy refers to latest common_show_volume
|
||||
list_volumes_detail = copy.deepcopy(common_show_volume)
|
||||
list_volumes_with_detail = copy.deepcopy(volumes.list_volumes_with_detail)
|
||||
list_volumes_with_detail['response_body']['properties']['volumes']['items'] \
|
||||
= list_volumes_detail
|
||||
update_volume = copy.deepcopy(volumes.update_volume)
|
||||
delete_volume = copy.deepcopy(volumes.delete_volume)
|
||||
show_volume_summary = copy.deepcopy(volumes.show_volume_summary)
|
||||
attach_volume = copy.deepcopy(volumes.attach_volume)
|
||||
set_bootable_volume = copy.deepcopy(volumes.set_bootable_volume)
|
||||
detach_volume = copy.deepcopy(volumes.detach_volume)
|
||||
reserve_volume = copy.deepcopy(volumes.reserve_volume)
|
||||
unreserve_volume = copy.deepcopy(volumes.unreserve_volume)
|
||||
extend_volume = copy.deepcopy(volumes.extend_volume)
|
||||
reset_volume_status = copy.deepcopy(volumes.reset_volume_status)
|
||||
update_volume_readonly = copy.deepcopy(volumes.update_volume_readonly)
|
||||
force_delete_volume = copy.deepcopy(volumes.force_delete_volume)
|
||||
retype_volume = copy.deepcopy(volumes.retype_volume)
|
||||
force_detach_volume = copy.deepcopy(volumes.force_detach_volume)
|
||||
create_volume_metadata = copy.deepcopy(volumes.create_volume_metadata)
|
||||
show_volume_metadata = copy.deepcopy(volumes.show_volume_metadata)
|
||||
update_volume_metadata = copy.deepcopy(volumes.update_volume_metadata)
|
||||
update_volume_metadata_item = copy.deepcopy(
|
||||
volumes.update_volume_metadata_item)
|
||||
update_volume_image_metadata = copy.deepcopy(
|
||||
volumes.update_volume_image_metadata)
|
||||
delete_volume_image_metadata = copy.deepcopy(
|
||||
volumes.delete_volume_image_metadata)
|
||||
unmanage_volume = copy.deepcopy(volumes.unmanage_volume)
|
|
@ -0,0 +1,48 @@
|
|||
# Copyright 2022 Red Hat, Inc.
|
||||
# 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_1 import parameter_types
|
||||
from tempest.lib.api_schema.response.volume import backups
|
||||
|
||||
# Volume micro version 3.64:
|
||||
# 1. Include the encryption_key_id in volume and backup
|
||||
# details when the associated volume is encrypted.
|
||||
# https://docs.openstack.org/cinder/latest/contributor/
|
||||
# api_microversion_history.html
|
||||
|
||||
common_show_backup = copy.deepcopy(backups.common_show_backup)
|
||||
common_show_backup['properties'].update(
|
||||
{'encryption_key_id': parameter_types.uuid_or_null})
|
||||
|
||||
create_backup = copy.deepcopy(backups.create_backup)
|
||||
update_backup = copy.deepcopy(backups.update_backup)
|
||||
restore_backup = copy.deepcopy(backups.restore_backup)
|
||||
delete_backup = copy.deepcopy(backups.delete_backup)
|
||||
# show backup refers to common_show_backup
|
||||
show_backup = copy.deepcopy(backups.show_backup)
|
||||
show_backup['response_body']['properties']['backup'] = common_show_backup
|
||||
list_backups_no_detail = copy.deepcopy(backups.list_backups_no_detail)
|
||||
# list_backups_detail refers to latest common_show_backup
|
||||
list_backups_detail = copy.deepcopy(common_show_backup)
|
||||
list_backups_detail['properties'].update({'count': {'type': 'integer'}})
|
||||
list_backups_with_detail = copy.deepcopy(backups.list_backups_with_detail)
|
||||
# list_backups_with_detail refers to latest list_backups_detail
|
||||
list_backups_with_detail['response_body']['properties']['backups']['items'] =\
|
||||
list_backups_detail
|
||||
export_backup = copy.deepcopy(backups.export_backup)
|
||||
import_backup = copy.deepcopy(backups.import_backup)
|
||||
reset_backup_status = copy.deepcopy(backups.reset_backup_status)
|
|
@ -0,0 +1,69 @@
|
|||
# Copyright 2022 Red Hat, Inc.
|
||||
# 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_1 import parameter_types
|
||||
from tempest.lib.api_schema.response.volume.v3_63 import volumes
|
||||
|
||||
# Volume micro version 3.64:
|
||||
# 1. Include the encryption_key_id in volume and backup
|
||||
# details when the associated volume is encrypted.
|
||||
# https://docs.openstack.org/cinder/latest/contributor/
|
||||
# api_microversion_history.html
|
||||
|
||||
common_show_volume = copy.deepcopy(volumes.common_show_volume)
|
||||
common_show_volume['properties'].update(
|
||||
{'encryption_key_id': parameter_types.uuid_or_null})
|
||||
|
||||
create_volume = copy.deepcopy(volumes.create_volume)
|
||||
create_volume['response_body']['properties']['volume']['properties'].update(
|
||||
{'encryption_key_id': parameter_types.uuid_or_null})
|
||||
|
||||
# copy unchanged volumes schema
|
||||
attachments = copy.deepcopy(volumes.attachments)
|
||||
list_volumes_no_detail = copy.deepcopy(volumes.list_volumes_no_detail)
|
||||
# show_volume refers to common_show_volume
|
||||
show_volume = copy.deepcopy(volumes.show_volume)
|
||||
show_volume['response_body']['properties']['volume'] = common_show_volume
|
||||
# list_volumes_detail refers to latest common_show_volume
|
||||
list_volumes_detail = copy.deepcopy(common_show_volume)
|
||||
list_volumes_with_detail = copy.deepcopy(volumes.list_volumes_with_detail)
|
||||
list_volumes_with_detail['response_body']['properties']['volumes']['items'] \
|
||||
= list_volumes_detail
|
||||
update_volume = copy.deepcopy(volumes.update_volume)
|
||||
delete_volume = copy.deepcopy(volumes.delete_volume)
|
||||
show_volume_summary = copy.deepcopy(volumes.show_volume_summary)
|
||||
attach_volume = copy.deepcopy(volumes.attach_volume)
|
||||
set_bootable_volume = copy.deepcopy(volumes.set_bootable_volume)
|
||||
detach_volume = copy.deepcopy(volumes.detach_volume)
|
||||
reserve_volume = copy.deepcopy(volumes.reserve_volume)
|
||||
unreserve_volume = copy.deepcopy(volumes.unreserve_volume)
|
||||
extend_volume = copy.deepcopy(volumes.extend_volume)
|
||||
reset_volume_status = copy.deepcopy(volumes.reset_volume_status)
|
||||
update_volume_readonly = copy.deepcopy(volumes.update_volume_readonly)
|
||||
force_delete_volume = copy.deepcopy(volumes.force_delete_volume)
|
||||
retype_volume = copy.deepcopy(volumes.retype_volume)
|
||||
force_detach_volume = copy.deepcopy(volumes.force_detach_volume)
|
||||
create_volume_metadata = copy.deepcopy(volumes.create_volume_metadata)
|
||||
show_volume_metadata = copy.deepcopy(volumes.show_volume_metadata)
|
||||
update_volume_metadata = copy.deepcopy(volumes.update_volume_metadata)
|
||||
update_volume_metadata_item = copy.deepcopy(
|
||||
volumes.update_volume_metadata_item)
|
||||
update_volume_image_metadata = copy.deepcopy(
|
||||
volumes.update_volume_image_metadata)
|
||||
delete_volume_image_metadata = copy.deepcopy(
|
||||
volumes.delete_volume_image_metadata)
|
||||
unmanage_volume = copy.deepcopy(volumes.unmanage_volume)
|
|
@ -18,6 +18,7 @@ from urllib import parse as urllib
|
|||
from oslo_serialization import jsonutils as json
|
||||
|
||||
from tempest.lib.api_schema.response.volume import backups as schema
|
||||
from tempest.lib.api_schema.response.volume.v3_64 import backups as schemav364
|
||||
from tempest.lib.common import rest_client
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest.lib.services.volume import base_client
|
||||
|
@ -26,6 +27,11 @@ from tempest.lib.services.volume import base_client
|
|||
class BackupsClient(base_client.BaseClient):
|
||||
"""Volume V3 Backups client"""
|
||||
|
||||
schema_versions_info = [
|
||||
{'min': None, 'max': '3.63', 'schema': schema},
|
||||
{'min': '3.64', 'max': None, 'schema': schemav364}
|
||||
]
|
||||
|
||||
def create_backup(self, **kwargs):
|
||||
"""Creates a backup of volume.
|
||||
|
||||
|
@ -76,6 +82,7 @@ class BackupsClient(base_client.BaseClient):
|
|||
url = "backups/%s" % backup_id
|
||||
resp, body = self.get(url)
|
||||
body = json.loads(body)
|
||||
schema = self.get_schema(self.schema_versions_info)
|
||||
self.validate_response(schema.show_backup, resp, body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
|
@ -88,6 +95,7 @@ class BackupsClient(base_client.BaseClient):
|
|||
https://docs.openstack.org/api-ref/block-storage/v3/index.html#list-backups-with-detail
|
||||
"""
|
||||
url = "backups"
|
||||
schema = self.get_schema(self.schema_versions_info)
|
||||
list_backups_schema = schema.list_backups_no_detail
|
||||
if detail:
|
||||
url += "/detail"
|
||||
|
|
|
@ -17,6 +17,9 @@ from urllib import parse as urllib
|
|||
|
||||
from oslo_serialization import jsonutils as json
|
||||
|
||||
from tempest.lib.api_schema.response.volume.v3_61 import volumes as schemav361
|
||||
from tempest.lib.api_schema.response.volume.v3_63 import volumes as schemav363
|
||||
from tempest.lib.api_schema.response.volume.v3_64 import volumes as schemav364
|
||||
from tempest.lib.api_schema.response.volume import volumes as schema
|
||||
from tempest.lib.common import rest_client
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
|
@ -26,6 +29,13 @@ from tempest.lib.services.volume import base_client
|
|||
class VolumesClient(base_client.BaseClient):
|
||||
"""Client class to send CRUD Volume V3 API requests"""
|
||||
|
||||
schema_versions_info = [
|
||||
{'min': None, 'max': '3.60', 'schema': schema},
|
||||
{'min': '3.61', 'max': '3.62', 'schema': schemav361},
|
||||
{'min': '3.63', 'max': '3.63', 'schema': schemav363},
|
||||
{'min': '3.64', 'max': None, 'schema': schemav364}
|
||||
]
|
||||
|
||||
def _prepare_params(self, params):
|
||||
"""Prepares params for use in get or _ext_get methods.
|
||||
|
||||
|
@ -56,6 +66,7 @@ class VolumesClient(base_client.BaseClient):
|
|||
https://docs.openstack.org/api-ref/block-storage/v3/index.html#list-accessible-volumes
|
||||
"""
|
||||
url = 'volumes'
|
||||
schema = self.get_schema(self.schema_versions_info)
|
||||
list_schema = schema.list_volumes_no_detail
|
||||
if detail:
|
||||
list_schema = schema.list_volumes_with_detail
|
||||
|
@ -86,6 +97,7 @@ class VolumesClient(base_client.BaseClient):
|
|||
url = "volumes/%s" % volume_id
|
||||
resp, body = self.get(url)
|
||||
body = json.loads(body)
|
||||
schema = self.get_schema(self.schema_versions_info)
|
||||
self.validate_response(schema.show_volume, resp, body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
|
@ -99,6 +111,7 @@ class VolumesClient(base_client.BaseClient):
|
|||
post_body = json.dumps({'volume': kwargs})
|
||||
resp, body = self.post('volumes', post_body)
|
||||
body = json.loads(body)
|
||||
schema = self.get_schema(self.schema_versions_info)
|
||||
self.validate_response(schema.create_volume, resp, body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
|
|
Loading…
Reference in New Issue