From ceabc1753cb6c44f70fd45682b494f86abef6e72 Mon Sep 17 00:00:00 2001 From: jichenjc Date: Thu, 27 Jul 2017 23:44:39 +0800 Subject: [PATCH] Move common definition into common layer move common definition into common layer, as dependency patches like I64ad387ec7b532e9dbc791f683a005587825ff61 plan to use the definitions of the schema, this patch moves these definitions as common ones Change-Id: I17c2937e6b8ac3d09fabe273c50c81dd9b0babb6 --- nova/api/openstack/compute/schemas/servers.py | 106 +++++++++--------- nova/api/validation/parameter_types.py | 9 ++ 2 files changed, 60 insertions(+), 55 deletions(-) diff --git a/nova/api/openstack/compute/schemas/servers.py b/nova/api/openstack/compute/schemas/servers.py index b6a2c54a84..35b3e42119 100644 --- a/nova/api/openstack/compute/schemas/servers.py +++ b/nova/api/openstack/compute/schemas/servers.py @@ -269,19 +269,15 @@ trigger_crash_dump = { 'additionalProperties': False } -# NOTE: We don't check actual values of queries on params -# which are defined as the following common_param. -common_param = multi_params({'type': 'string'}) -common_regex_param = multi_params({'type': 'string', 'format': 'regex'}) JOINED_TABLE_QUERY_PARAMS_SERVERS = { - 'block_device_mapping': common_param, - 'services': common_param, - 'metadata': common_param, - 'system_metadata': common_param, - 'info_cache': common_param, - 'security_groups': common_param, - 'pci_devices': common_param + 'block_device_mapping': parameter_types.common_query_param, + 'services': parameter_types.common_query_param, + 'metadata': parameter_types.common_query_param, + 'system_metadata': parameter_types.common_query_param, + 'info_cache': parameter_types.common_query_param, + 'security_groups': parameter_types.common_query_param, + 'pci_devices': parameter_types.common_query_param } # These fields are valid values for sort_keys before we start @@ -313,59 +309,59 @@ VALID_SORT_KEYS = { query_params_v21 = { 'type': 'object', 'properties': { - 'user_id': common_param, - 'project_id': common_param, + 'user_id': parameter_types.common_query_param, + 'project_id': parameter_types.common_query_param, # The alias of project_id. It should be removed in the # future with microversion bump. - 'tenant_id': common_param, - 'launch_index': common_param, + 'tenant_id': parameter_types.common_query_param, + 'launch_index': parameter_types.common_query_param, # The alias of image. It should be removed in the # future with microversion bump. - 'image_ref': common_param, - 'image': common_param, - 'kernel_id': common_regex_param, - 'ramdisk_id': common_regex_param, - 'hostname': common_regex_param, - 'key_name': common_regex_param, - 'power_state': common_regex_param, - 'vm_state': common_param, - 'task_state': common_param, - 'host': common_param, - 'node': common_regex_param, - 'flavor': common_regex_param, - 'reservation_id': common_regex_param, - 'launched_at': common_regex_param, - 'terminated_at': common_regex_param, - 'availability_zone': common_regex_param, + 'image_ref': parameter_types.common_query_param, + 'image': parameter_types.common_query_param, + 'kernel_id': parameter_types.common_query_regex_param, + 'ramdisk_id': parameter_types.common_query_regex_param, + 'hostname': parameter_types.common_query_regex_param, + 'key_name': parameter_types.common_query_regex_param, + 'power_state': parameter_types.common_query_regex_param, + 'vm_state': parameter_types.common_query_param, + 'task_state': parameter_types.common_query_param, + 'host': parameter_types.common_query_param, + 'node': parameter_types.common_query_regex_param, + 'flavor': parameter_types.common_query_regex_param, + 'reservation_id': parameter_types.common_query_regex_param, + 'launched_at': parameter_types.common_query_regex_param, + 'terminated_at': parameter_types.common_query_regex_param, + 'availability_zone': parameter_types.common_query_regex_param, # NOTE(alex_xu): This is pattern matching, it didn't get any benefit # from DB index. - 'name': common_regex_param, + 'name': parameter_types.common_query_regex_param, # The alias of name. It should be removed in the future # with microversion bump. - 'display_name': common_regex_param, - 'description': common_regex_param, + 'display_name': parameter_types.common_query_regex_param, + 'description': parameter_types.common_query_regex_param, # The alias of description. It should be removed in the # future with microversion bump. - 'display_description': common_regex_param, - 'locked_by': common_regex_param, - 'uuid': common_param, - 'root_device_name': common_regex_param, - 'config_drive': common_regex_param, - 'access_ip_v4': common_regex_param, - 'access_ip_v6': common_regex_param, - 'auto_disk_config': common_regex_param, - 'progress': common_regex_param, + 'display_description': parameter_types.common_query_regex_param, + 'locked_by': parameter_types.common_query_regex_param, + 'uuid': parameter_types.common_query_param, + 'root_device_name': parameter_types.common_query_regex_param, + 'config_drive': parameter_types.common_query_regex_param, + 'access_ip_v4': parameter_types.common_query_regex_param, + 'access_ip_v6': parameter_types.common_query_regex_param, + 'auto_disk_config': parameter_types.common_query_regex_param, + 'progress': parameter_types.common_query_regex_param, 'sort_key': multi_params(VALID_SORT_KEYS), - 'sort_dir': common_param, - 'all_tenants': common_param, - 'deleted': common_param, - 'status': common_param, + 'sort_dir': parameter_types.common_query_param, + 'all_tenants': parameter_types.common_query_param, + 'deleted': parameter_types.common_query_param, + 'status': parameter_types.common_query_param, 'changes-since': multi_params({'type': 'string', 'format': 'date-time'}), # NOTE(alex_xu): The ip and ip6 are implemented in the python. - 'ip': common_regex_param, - 'ip6': common_regex_param, - 'created_at': common_regex_param, + 'ip': parameter_types.common_query_regex_param, + 'ip6': parameter_types.common_query_regex_param, + 'created_at': parameter_types.common_query_regex_param, }, # For backward-compatible additionalProperties is set to be True here. # And we will either strip the extra params out or raise HTTP 400 @@ -373,7 +369,7 @@ query_params_v21 = { 'additionalProperties': True, # Prevent internal-attributes that are started with underscore from # being striped out in schema validation, and raise HTTP 400 in API. - 'patternProperties': {"^_": common_param} + 'patternProperties': {"^_": parameter_types.common_query_param} } # Update the joined-table fields to the list so it will not be @@ -387,8 +383,8 @@ query_params_v21['properties'].update( query_params_v226 = copy.deepcopy(query_params_v21) query_params_v226['properties'].update({ - 'tags': common_regex_param, - 'tags-any': common_regex_param, - 'not-tags': common_regex_param, - 'not-tags-any': common_regex_param, + 'tags': parameter_types.common_query_regex_param, + 'tags-any': parameter_types.common_query_regex_param, + 'not-tags': parameter_types.common_query_regex_param, + 'not-tags-any': parameter_types.common_query_regex_param, }) diff --git a/nova/api/validation/parameter_types.py b/nova/api/validation/parameter_types.py index 15935cbd82..d87d2d8269 100644 --- a/nova/api/validation/parameter_types.py +++ b/nova/api/validation/parameter_types.py @@ -42,6 +42,15 @@ def multi_params(schema): return {'type': 'array', 'items': schema} +# NOTE: We don't check actual values of queries on params +# which are defined as the following common_param. +# Please note those are for backward compatible existing +# query parameters because previously multiple parameters +# might be input and accepted. +common_query_param = multi_params({'type': 'string'}) +common_query_regex_param = multi_params({'type': 'string', 'format': 'regex'}) + + class ValidationRegex(object): def __init__(self, regex, reason): self.regex = regex