From 56c7c31129ca7942e7d658b249e32a4b05a08c94 Mon Sep 17 00:00:00 2001 From: Dovetail Date: Fri, 8 Nov 2019 07:56:32 +0000 Subject: [PATCH] Allow additional properties in API responses Signed-off-by: Dovetail --- .../response/compute/v2_1/agents.py | 10 ++-- .../response/compute/v2_1/aggregates.py | 8 +-- .../compute/v2_1/availability_zone.py | 8 +-- .../response/compute/v2_1/baremetal_nodes.py | 6 +- .../response/compute/v2_1/certificates.py | 4 +- .../response/compute/v2_1/extensions.py | 4 +- .../response/compute/v2_1/fixed_ips.py | 4 +- .../response/compute/v2_1/flavors.py | 10 ++-- .../response/compute/v2_1/flavors_access.py | 4 +- .../compute/v2_1/flavors_extra_specs.py | 2 +- .../response/compute/v2_1/floating_ips.py | 20 +++---- .../api_schema/response/compute/v2_1/hosts.py | 14 ++--- .../response/compute/v2_1/hypervisors.py | 22 +++---- .../response/compute/v2_1/images.py | 16 ++--- .../compute/v2_1/instance_usage_audit_logs.py | 8 +-- .../response/compute/v2_1/interfaces.py | 8 +-- .../response/compute/v2_1/keypairs.py | 14 ++--- .../response/compute/v2_1/limits.py | 10 ++-- .../response/compute/v2_1/migrations.py | 4 +- .../response/compute/v2_1/parameter_types.py | 4 +- .../response/compute/v2_1/quotas.py | 4 +- .../v2_1/security_group_default_rule.py | 8 +-- .../response/compute/v2_1/security_groups.py | 16 ++--- .../response/compute/v2_1/server_groups.py | 6 +- .../response/compute/v2_1/servers.py | 60 +++++++++---------- .../response/compute/v2_1/services.py | 12 ++-- .../response/compute/v2_1/snapshots.py | 6 +- .../response/compute/v2_1/tenant_networks.py | 6 +- .../response/compute/v2_1/versions.py | 10 ++-- .../response/compute/v2_1/volumes.py | 12 ++-- .../response/compute/v2_11/services.py | 4 +- .../response/compute/v2_16/servers.py | 14 ++--- .../response/compute/v2_23/migrations.py | 4 +- .../response/compute/v2_26/servers.py | 2 +- .../response/compute/v2_3/servers.py | 14 ++--- .../response/compute/v2_45/images.py | 2 +- .../response/compute/v2_47/servers.py | 2 +- .../response/compute/v2_48/servers.py | 10 ++-- .../response/compute/v2_53/services.py | 4 +- .../response/compute/v2_55/flavors.py | 10 ++-- .../response/compute/v2_6/servers.py | 4 +- .../response/compute/v2_61/flavors.py | 6 +- tempest/lib/api_schema/response/volume/qos.py | 16 ++--- 43 files changed, 206 insertions(+), 206 deletions(-) diff --git a/tempest/lib/api_schema/response/compute/v2_1/agents.py b/tempest/lib/api_schema/response/compute/v2_1/agents.py index 6f712b41e..09feb73df 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/agents.py +++ b/tempest/lib/api_schema/response/compute/v2_1/agents.py @@ -23,7 +23,7 @@ common_agent_info = { 'url': {'type': 'string', 'format': 'uri'}, 'md5hash': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['agent_id', 'hypervisor', 'os', 'architecture', 'version', 'url', 'md5hash'] } @@ -38,7 +38,7 @@ list_agents = { 'items': common_agent_info } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['agents'] } } @@ -50,7 +50,7 @@ create_agent = { 'properties': { 'agent': common_agent_info }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['agent'] } } @@ -68,11 +68,11 @@ update_agent = { 'url': {'type': 'string', 'format': 'uri'}, 'md5hash': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['agent_id', 'version', 'url', 'md5hash'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['agent'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/aggregates.py b/tempest/lib/api_schema/response/compute/v2_1/aggregates.py index 3289a34a7..021959b10 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/aggregates.py +++ b/tempest/lib/api_schema/response/compute/v2_1/aggregates.py @@ -28,7 +28,7 @@ aggregate_for_create = { 'name': {'type': 'string'}, 'updated_at': parameter_types.date_time_or_null }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['availability_zone', 'created_at', 'deleted', 'deleted_at', 'id', 'name', 'updated_at'], } @@ -50,7 +50,7 @@ list_aggregates = { 'items': common_aggregate_info } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['aggregates'], } } @@ -62,7 +62,7 @@ get_aggregate = { 'properties': { 'aggregate': common_aggregate_info }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['aggregate'], } } @@ -84,7 +84,7 @@ create_aggregate = { 'properties': { 'aggregate': aggregate_for_create }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['aggregate'], } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/availability_zone.py b/tempest/lib/api_schema/response/compute/v2_1/availability_zone.py index 0dc28c378..ded47d7c0 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/availability_zone.py +++ b/tempest/lib/api_schema/response/compute/v2_1/availability_zone.py @@ -33,19 +33,19 @@ base = { 'properties': { 'available': {'type': 'boolean'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['available'] }, # NOTE: Here is the difference between detail and # non-detail. 'hosts': {'type': 'null'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['zoneName', 'zoneState', 'hosts'] } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['availabilityZoneInfo'] } } @@ -65,7 +65,7 @@ detail = { 'active': {'type': 'boolean'}, 'updated_at': parameter_types.date_time_or_null }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['available', 'active', 'updated_at'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/baremetal_nodes.py b/tempest/lib/api_schema/response/compute/v2_1/baremetal_nodes.py index d1ee87728..8ab17d3fb 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/baremetal_nodes.py +++ b/tempest/lib/api_schema/response/compute/v2_1/baremetal_nodes.py @@ -25,7 +25,7 @@ node = { 'memory_mb': {'type': ['integer', 'string']}, 'disk_gb': {'type': ['integer', 'string']}, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'interfaces', 'host', 'task_state', 'cpus', 'memory_mb', 'disk_gb'] } @@ -40,7 +40,7 @@ list_baremetal_nodes = { 'items': node } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['nodes'] } } @@ -52,7 +52,7 @@ baremetal_node = { 'properties': { 'node': node }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['node'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/certificates.py b/tempest/lib/api_schema/response/compute/v2_1/certificates.py index 4e7cbe4d2..99f795a3b 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/certificates.py +++ b/tempest/lib/api_schema/response/compute/v2_1/certificates.py @@ -25,11 +25,11 @@ _common_schema = { 'data': {'type': 'string'}, 'private_key': {'type': 'string'}, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['data', 'private_key'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['certificate'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/extensions.py b/tempest/lib/api_schema/response/compute/v2_1/extensions.py index b5962d752..833bc9df0 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/extensions.py +++ b/tempest/lib/api_schema/response/compute/v2_1/extensions.py @@ -34,13 +34,13 @@ list_extensions = { 'alias': {'type': 'string'}, 'description': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['updated', 'name', 'links', 'namespace', 'alias', 'description'] } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['extensions'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/fixed_ips.py b/tempest/lib/api_schema/response/compute/v2_1/fixed_ips.py index a653213f0..b53565aab 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/fixed_ips.py +++ b/tempest/lib/api_schema/response/compute/v2_1/fixed_ips.py @@ -27,11 +27,11 @@ get_fixed_ip = { 'host': {'type': 'string'}, 'hostname': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['address', 'cidr', 'host', 'hostname'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['fixed_ip'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/flavors.py b/tempest/lib/api_schema/response/compute/v2_1/flavors.py index bd5e3d636..27948a784 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/flavors.py +++ b/tempest/lib/api_schema/response/compute/v2_1/flavors.py @@ -28,13 +28,13 @@ list_flavors = { 'links': parameter_types.links, 'id': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['name', 'links', 'id'] } }, 'flavors_links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): flavors_links attribute is not necessary # to be present always So it is not 'required'. 'required': ['flavors'] @@ -58,7 +58,7 @@ common_flavor_info = { 'rxtx_factor': {'type': 'number'}, 'OS-FLV-EXT-DATA:ephemeral': {'type': 'integer'} }, - 'additionalProperties': False, + 'additionalProperties': True, # 'OS-FLV-DISABLED', 'os-flavor-access', 'rxtx_factor' and # 'OS-FLV-EXT-DATA' are API extensions, so they are not 'required'. 'required': ['name', 'links', 'ram', 'vcpus', 'swap', 'disk', 'id'] @@ -77,7 +77,7 @@ list_flavors_details = { # to be present always so it is not 'required'. 'flavors_links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['flavors'] } } @@ -89,7 +89,7 @@ create_update_get_flavor_details = { 'properties': { 'flavor': common_flavor_info }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['flavor'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/flavors_access.py b/tempest/lib/api_schema/response/compute/v2_1/flavors_access.py index a4d6af0d7..958ed02b5 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/flavors_access.py +++ b/tempest/lib/api_schema/response/compute/v2_1/flavors_access.py @@ -25,12 +25,12 @@ add_remove_list_flavor_access = { 'flavor_id': {'type': 'string'}, 'tenant_id': {'type': 'string'}, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['flavor_id', 'tenant_id'], } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['flavor_access'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/flavors_extra_specs.py b/tempest/lib/api_schema/response/compute/v2_1/flavors_extra_specs.py index 3aa1edac4..081d21a92 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/flavors_extra_specs.py +++ b/tempest/lib/api_schema/response/compute/v2_1/flavors_extra_specs.py @@ -24,7 +24,7 @@ set_get_flavor_extra_specs = { } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['extra_specs'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/floating_ips.py b/tempest/lib/api_schema/response/compute/v2_1/floating_ips.py index 0c665905f..39e4207ca 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/floating_ips.py +++ b/tempest/lib/api_schema/response/compute/v2_1/floating_ips.py @@ -26,7 +26,7 @@ common_floating_ip_info = { 'ip': parameter_types.ip_address, 'fixed_ip': parameter_types.ip_address }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'pool', 'instance_id', 'ip', 'fixed_ip'], @@ -41,7 +41,7 @@ list_floating_ips = { 'items': common_floating_ip_info }, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['floating_ips'], } } @@ -53,7 +53,7 @@ create_get_floating_ip = { 'properties': { 'floating_ip': common_floating_ip_info }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['floating_ip'], } } @@ -70,12 +70,12 @@ list_floating_ip_pools = { 'properties': { 'name': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['name'], } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['floating_ip_pools'], } } @@ -96,11 +96,11 @@ create_floating_ips_bulk = { 'ip_range': {'type': 'string'}, 'pool': {'type': ['string', 'null']}, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['interface', 'ip_range', 'pool'], } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['floating_ips_bulk_create'], } } @@ -112,7 +112,7 @@ delete_floating_ips_bulk = { 'properties': { 'floating_ips_bulk_delete': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['floating_ips_bulk_delete'], } } @@ -134,7 +134,7 @@ list_floating_ips_bulk = { 'project_id': {'type': ['string', 'null']}, 'fixed_ip': parameter_types.ip_address }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE: fixed_ip is introduced after JUNO release, # So it is not defined as 'required'. 'required': ['address', 'instance_uuid', 'interface', @@ -142,7 +142,7 @@ list_floating_ips_bulk = { } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['floating_ip_info'], } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/hosts.py b/tempest/lib/api_schema/response/compute/v2_1/hosts.py index cae343597..76bf47ed1 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/hosts.py +++ b/tempest/lib/api_schema/response/compute/v2_1/hosts.py @@ -29,12 +29,12 @@ list_hosts = { 'service': {'type': 'string'}, 'zone': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['host_name', 'service', 'zone'] } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['hosts'] } } @@ -58,17 +58,17 @@ get_host_detail = { 'memory_mb': {'type': 'integer'}, 'project': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['cpu', 'disk_gb', 'host', 'memory_mb', 'project'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['resource'] } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['host'] } } @@ -81,7 +81,7 @@ startup_host = { 'host': {'type': 'string'}, 'power_action': {'enum': ['startup']} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['host', 'power_action'] } } @@ -110,7 +110,7 @@ update_host = { 'off_maintenance']}, 'status': {'enum': ['enabled', 'disabled']} }, - 'additionalProperties': False, + 'additionalProperties': True, 'anyOf': [ {'required': ['host', 'status']}, {'required': ['host', 'maintenance_mode']} diff --git a/tempest/lib/api_schema/response/compute/v2_1/hypervisors.py b/tempest/lib/api_schema/response/compute/v2_1/hypervisors.py index d15b4f66a..5d8cf6d39 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/hypervisors.py +++ b/tempest/lib/api_schema/response/compute/v2_1/hypervisors.py @@ -37,7 +37,7 @@ get_hypervisor_statistics = { 'vcpus': {'type': 'integer'}, 'vcpus_used': {'type': 'integer'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['count', 'current_workload', 'disk_available_least', 'free_disk_gb', 'free_ram_mb', 'local_gb', 'local_gb_used', @@ -45,7 +45,7 @@ get_hypervisor_statistics = { 'vcpus', 'vcpus_used'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['hypervisor_statistics'] } } @@ -78,13 +78,13 @@ hypervisor_detail = { 'id': {'type': ['integer', 'string']}, 'disabled_reason': {'type': ['string', 'null']} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['host', 'id'] }, 'vcpus': {'type': 'integer'}, 'vcpus_used': {'type': 'integer'} }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE: When loading os-hypervisor-status extension, # a response contains status and state. So these params # should not be required. @@ -107,7 +107,7 @@ list_hypervisors_detail = { 'items': hypervisor_detail } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['hypervisors'] } } @@ -119,7 +119,7 @@ get_hypervisor = { 'properties': { 'hypervisor': hypervisor_detail }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['hypervisor'] } } @@ -139,7 +139,7 @@ list_search_hypervisors = { 'id': {'type': ['integer', 'string']}, 'hypervisor_hostname': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE: When loading os-hypervisor-status extension, # a response contains status and state. So these params # should not be required. @@ -147,7 +147,7 @@ list_search_hypervisors = { } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['hypervisors'] } } @@ -166,14 +166,14 @@ get_hypervisor_uptime = { 'hypervisor_hostname': {'type': 'string'}, 'uptime': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE: When loading os-hypervisor-status extension, # a response contains status and state. So these params # should not be required. 'required': ['id', 'hypervisor_hostname', 'uptime'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['hypervisor'] } } @@ -188,7 +188,7 @@ get_hypervisors_servers['response_body']['properties']['hypervisors']['items'][ 'uuid': {'type': 'string'}, 'name': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, } } # In V2 API, if there is no servers (VM) on the Hypervisor host then 'servers' diff --git a/tempest/lib/api_schema/response/compute/v2_1/images.py b/tempest/lib/api_schema/response/compute/v2_1/images.py index 156ff4ac6..2acc12835 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/images.py +++ b/tempest/lib/api_schema/response/compute/v2_1/images.py @@ -40,13 +40,13 @@ common_image_schema = { 'id': {'type': 'string'}, 'links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'links'] }, 'OS-EXT-IMG-SIZE:size': {'type': ['integer', 'null']}, 'OS-DCF:diskConfig': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, # 'server' attributes only comes in response body if image is # associated with any server. 'OS-EXT-IMG-SIZE:size' & 'OS-DCF:diskConfig' # are API extension, So those are not defined as 'required'. @@ -62,7 +62,7 @@ get_image = { 'properties': { 'image': common_image_schema }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['image'] } } @@ -81,13 +81,13 @@ list_images = { 'links': image_links, 'name': {'type': ['string', 'null']} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'links', 'name'] } }, 'images_links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): images_links attribute is not necessary to be # present always So it is not 'required'. 'required': ['images'] @@ -120,7 +120,7 @@ image_metadata = { 'properties': { 'metadata': {'type': 'object'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['metadata'] } } @@ -132,7 +132,7 @@ image_meta_item = { 'properties': { 'meta': {'type': 'object'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['meta'] } } @@ -148,7 +148,7 @@ list_images_details = { }, 'images_links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): images_links attribute is not necessary to be # present always So it is not 'required'. 'required': ['images'] diff --git a/tempest/lib/api_schema/response/compute/v2_1/instance_usage_audit_logs.py b/tempest/lib/api_schema/response/compute/v2_1/instance_usage_audit_logs.py index 15224c5a0..402dfeac3 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/instance_usage_audit_logs.py +++ b/tempest/lib/api_schema/response/compute/v2_1/instance_usage_audit_logs.py @@ -31,7 +31,7 @@ common_instance_usage_audit_log = { 'errors': {'type': 'integer'}, 'message': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['state', 'instances', 'errors', 'message'] } } @@ -46,7 +46,7 @@ common_instance_usage_audit_log = { 'total_errors': {'type': 'integer'}, 'total_instances': {'type': 'integer'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['hosts_not_run', 'log', 'num_hosts', 'num_hosts_done', 'num_hosts_not_run', 'num_hosts_running', 'overall_status', 'period_beginning', 'period_ending', 'total_errors', @@ -60,7 +60,7 @@ get_instance_usage_audit_log = { 'properties': { 'instance_usage_audit_log': common_instance_usage_audit_log }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['instance_usage_audit_log'] } } @@ -72,7 +72,7 @@ list_instance_usage_audit_log = { 'properties': { 'instance_usage_audit_logs': common_instance_usage_audit_log }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['instance_usage_audit_logs'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/interfaces.py b/tempest/lib/api_schema/response/compute/v2_1/interfaces.py index 99847502c..6a989e5eb 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/interfaces.py +++ b/tempest/lib/api_schema/response/compute/v2_1/interfaces.py @@ -29,7 +29,7 @@ interface_common_info = { }, 'ip_address': parameter_types.ip_address }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['subnet_id', 'ip_address'] } }, @@ -37,7 +37,7 @@ interface_common_info = { 'net_id': {'type': 'string', 'format': 'uuid'}, 'mac_addr': parameter_types.mac_address }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['port_state', 'fixed_ips', 'port_id', 'net_id', 'mac_addr'] } @@ -48,7 +48,7 @@ get_create_interfaces = { 'properties': { 'interfaceAttachment': interface_common_info }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['interfaceAttachment'] } } @@ -63,7 +63,7 @@ list_interfaces = { 'items': interface_common_info } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['interfaceAttachments'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/keypairs.py b/tempest/lib/api_schema/response/compute/v2_1/keypairs.py index e7dcf791d..8a95112c2 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/keypairs.py +++ b/tempest/lib/api_schema/response/compute/v2_1/keypairs.py @@ -33,13 +33,13 @@ get_keypair = { 'id': {'type': 'integer'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['public_key', 'name', 'fingerprint', 'user_id', 'deleted', 'created_at', 'updated_at', 'deleted_at', 'id'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['keypair'] } } @@ -58,14 +58,14 @@ create_keypair = { 'user_id': {'type': 'string'}, 'private_key': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, # When create keypair API is being called with 'Public key' # (Importing keypair) then, response body does not contain # 'private_key' So it is not defined as 'required' 'required': ['fingerprint', 'name', 'public_key', 'user_id'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['keypair'] } } @@ -91,16 +91,16 @@ list_keypairs = { 'name': {'type': 'string'}, 'fingerprint': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['public_key', 'name', 'fingerprint'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['keypair'] } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['keypairs'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/limits.py b/tempest/lib/api_schema/response/compute/v2_1/limits.py index 81f175fa7..bc4c1e3d8 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/limits.py +++ b/tempest/lib/api_schema/response/compute/v2_1/limits.py @@ -43,7 +43,7 @@ get_limit = { 'maxServerGroups': {'type': 'integer'}, 'totalServerGroupsUsed': {'type': 'integer'} }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): maxServerGroupMembers, maxServerGroups # and totalServerGroupsUsed are API extension, # and some environments return a response without these @@ -86,21 +86,21 @@ get_limit = { 'verb': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, } }, 'regex': {'type': 'string'}, 'uri': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['absolute', 'rate'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['limits'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/migrations.py b/tempest/lib/api_schema/response/compute/v2_1/migrations.py index c50286d27..19922f2b4 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/migrations.py +++ b/tempest/lib/api_schema/response/compute/v2_1/migrations.py @@ -37,7 +37,7 @@ list_migrations = { 'created_at': parameter_types.date_time, 'updated_at': parameter_types.date_time_or_null }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': [ 'id', 'status', 'instance_uuid', 'source_node', 'source_compute', 'dest_node', 'dest_compute', @@ -47,7 +47,7 @@ list_migrations = { } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['migrations'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/parameter_types.py b/tempest/lib/api_schema/response/compute/v2_1/parameter_types.py index 28ed81673..dc7544581 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/parameter_types.py +++ b/tempest/lib/api_schema/response/compute/v2_1/parameter_types.py @@ -23,7 +23,7 @@ links = { }, 'rel': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['href', 'rel'] } } @@ -74,7 +74,7 @@ addresses = { ] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['version', 'addr'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/quotas.py b/tempest/lib/api_schema/response/compute/v2_1/quotas.py index 44f5bdfd2..a4515a9ea 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/quotas.py +++ b/tempest/lib/api_schema/response/compute/v2_1/quotas.py @@ -37,7 +37,7 @@ update_quota_set = { 'injected_file_content_bytes': {'type': 'integer'}, 'injected_file_path_bytes': {'type': 'integer'} }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE: server_group_members and server_groups are represented # when enabling quota_server_group extension. So they should # not be required. @@ -49,7 +49,7 @@ update_quota_set = { 'injected_file_path_bytes'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['quota_set'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/security_group_default_rule.py b/tempest/lib/api_schema/response/compute/v2_1/security_group_default_rule.py index 2ec282698..1a2e19b84 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/security_group_default_rule.py +++ b/tempest/lib/api_schema/response/compute/v2_1/security_group_default_rule.py @@ -23,12 +23,12 @@ common_security_group_default_rule_info = { 'properties': { 'cidr': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['cidr'], }, 'to_port': {'type': 'integer'}, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['from_port', 'id', 'ip_protocol', 'ip_range', 'to_port'], } @@ -40,7 +40,7 @@ create_get_security_group_default_rule = { 'security_group_default_rule': common_security_group_default_rule_info }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['security_group_default_rule'] } } @@ -59,7 +59,7 @@ list_security_group_default_rules = { 'items': common_security_group_default_rule_info } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['security_group_default_rules'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/security_groups.py b/tempest/lib/api_schema/response/compute/v2_1/security_groups.py index 5ed5a5c80..d9f1794c6 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/security_groups.py +++ b/tempest/lib/api_schema/response/compute/v2_1/security_groups.py @@ -21,7 +21,7 @@ common_security_group_rule = { 'tenant_id': {'type': 'string'}, 'name': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, }, 'ip_protocol': {'type': ['string', 'null']}, # 'parent_group_id' can be UUID so defining it as 'string' also. @@ -31,7 +31,7 @@ common_security_group_rule = { 'properties': { 'cidr': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, # When optional argument is provided in request body # like 'group_id' then, attribute 'cidr' does not # comes in response body. So it is not 'required'. @@ -50,12 +50,12 @@ common_security_group = { 'items': { 'type': ['object', 'null'], 'properties': common_security_group_rule, - 'additionalProperties': False, + 'additionalProperties': True, } }, 'description': {'type': 'string'}, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'name', 'tenant_id', 'rules', 'description'], } @@ -69,7 +69,7 @@ list_security_groups = { 'items': common_security_group } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['security_groups'] } } @@ -81,7 +81,7 @@ get_security_group = create_security_group = update_security_group = { 'properties': { 'security_group': common_security_group }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['security_group'] } } @@ -98,12 +98,12 @@ create_security_group_rule = { 'security_group_rule': { 'type': 'object', 'properties': common_security_group_rule, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['from_port', 'to_port', 'group', 'ip_protocol', 'parent_group_id', 'id', 'ip_range'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['security_group_rule'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/server_groups.py b/tempest/lib/api_schema/response/compute/v2_1/server_groups.py index 01db20b88..49a8f0d95 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/server_groups.py +++ b/tempest/lib/api_schema/response/compute/v2_1/server_groups.py @@ -29,7 +29,7 @@ common_server_group = { }, 'metadata': {'type': 'object'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'name', 'policies', 'members', 'metadata'] } @@ -40,7 +40,7 @@ create_show_server_group = { 'properties': { 'server_group': common_server_group }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['server_group'] } } @@ -59,7 +59,7 @@ list_server_groups = { 'items': common_server_group } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['server_groups'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/servers.py b/tempest/lib/api_schema/response/compute/v2_1/servers.py index 3300298d1..ac050eb43 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/servers.py +++ b/tempest/lib/api_schema/response/compute/v2_1/servers.py @@ -29,14 +29,14 @@ create_server = { 'links': parameter_types.links, 'OS-DCF:diskConfig': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE: OS-DCF:diskConfig & security_groups are API extension, # and some environments return a response without these # attributes.So they are not 'required'. 'required': ['id', 'links'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['server'] } } @@ -61,13 +61,13 @@ list_servers = { 'links': parameter_types.links, 'name': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'links', 'name'] } }, 'servers_links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): servers_links attribute is not necessary to be # present always So it is not 'required'. 'required': ['servers'] @@ -90,7 +90,7 @@ common_show_server = { 'id': {'type': 'string'}, 'links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'links']}, {'type': ['string', 'null']} ]}, @@ -103,7 +103,7 @@ common_show_server = { # NOTE(gmann): This will be empty object if there is no # flavor info present in DB. This can happen when flavor info is # deleted after server creation. - 'additionalProperties': False + 'additionalProperties': True }, 'fault': { 'type': 'object', @@ -113,7 +113,7 @@ common_show_server = { 'message': {'type': 'string'}, 'details': {'type': 'string'}, }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): 'details' is not necessary to be present # in the 'fault'. So it is not defined as 'required'. 'required': ['code', 'created', 'message'] @@ -131,7 +131,7 @@ common_show_server = { 'accessIPv4': parameter_types.access_ip_v4, 'accessIPv6': parameter_types.access_ip_v6 }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(GMann): 'progress' attribute is present in the response # only when server's status is one of the progress statuses # ("ACTIVE","BUILD", "REBUILD", "RESIZE","VERIFY_RESIZE") @@ -152,7 +152,7 @@ update_server = { 'properties': { 'server': common_show_server }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['server'] } } @@ -183,7 +183,7 @@ server_detail['properties'].update({ 'properties': { 'id': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, }, }, 'config_drive': {'type': 'string'} @@ -204,7 +204,7 @@ get_server = { 'properties': { 'server': server_detail }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['server'] } } @@ -220,7 +220,7 @@ list_servers_detail = { }, 'servers_links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): servers_links attribute is not necessary to be # present always So it is not 'required'. 'required': ['servers'] @@ -240,7 +240,7 @@ rescue_server = { 'status_code': [200], 'response_body': { 'type': 'object', - 'additionalProperties': False, + 'additionalProperties': True, } } @@ -265,14 +265,14 @@ list_virtual_interfaces = { 'mac_address': parameter_types.mac_address, 'OS-EXT-VIF-NET:net_id': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, # 'OS-EXT-VIF-NET:net_id' is API extension So it is # not defined as 'required' 'required': ['id', 'mac_address'] } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['virtual_interfaces'] } } @@ -285,7 +285,7 @@ common_attach_volume_info = { 'volumeId': {'type': 'string'}, 'serverId': {'type': ['integer', 'string']} }, - 'additionalProperties': False, + 'additionalProperties': True, # 'device' is optional in response. 'required': ['id', 'volumeId', 'serverId'] } @@ -297,7 +297,7 @@ attach_volume = { 'properties': { 'volumeAttachment': common_attach_volume_info }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['volumeAttachment'] } } @@ -320,7 +320,7 @@ list_volume_attachments = { 'items': common_attach_volume_info } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['volumeAttachments'] } } @@ -340,7 +340,7 @@ list_addresses = { 'properties': { 'addresses': parameter_types.addresses }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['addresses'] } } @@ -356,7 +356,7 @@ instance_actions = { 'message': {'type': ['string', 'null']}, 'instance_uuid': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['action', 'request_id', 'user_id', 'project_id', 'start_time', 'message', 'instance_uuid'] } @@ -377,7 +377,7 @@ instance_action_events = { 'result': {'type': ['string', 'null']}, 'traceback': {'type': ['string', 'null']} }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(zhufl): events.traceback can only be seen by admin users # with default policy.json, so it shouldn't be a required field. 'required': ['event', 'start_time', 'finish_time', 'result'] @@ -394,7 +394,7 @@ list_instance_actions = { 'items': instance_actions } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['instanceActions'] } } @@ -412,7 +412,7 @@ show_instance_action = { 'properties': { 'instanceAction': instance_actions_with_events }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['instanceAction'] } } @@ -424,7 +424,7 @@ show_password = { 'properties': { 'password': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['password'] } } @@ -443,11 +443,11 @@ get_vnc_console = { 'format': 'uri' } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['type', 'url'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['console'] } } @@ -459,7 +459,7 @@ get_console_output = { 'properties': { 'output': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['output'] } } @@ -476,7 +476,7 @@ set_server_metadata = { } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['metadata'] } } @@ -501,7 +501,7 @@ set_show_server_metadata_item = { } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['meta'] } } @@ -532,7 +532,7 @@ evacuate_server_with_admin_pass = { 'properties': { 'adminPass': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['adminPass'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/services.py b/tempest/lib/api_schema/response/compute/v2_1/services.py index 3b58ece48..b590c0221 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/services.py +++ b/tempest/lib/api_schema/response/compute/v2_1/services.py @@ -34,13 +34,13 @@ list_services = { 'updated_at': parameter_types.date_time_or_null, 'disabled_reason': {'type': ['string', 'null']} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'zone', 'host', 'state', 'binary', 'status', 'updated_at', 'disabled_reason'] } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['services'] } } @@ -57,11 +57,11 @@ enable_disable_service = { 'binary': {'type': 'string'}, 'host': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['status', 'binary', 'host'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['service'] } } @@ -79,11 +79,11 @@ disable_log_reason = { 'host': {'type': 'string'}, 'status': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['disabled_reason', 'binary', 'host', 'status'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['service'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/snapshots.py b/tempest/lib/api_schema/response/compute/v2_1/snapshots.py index 826f85413..c808f5ee5 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/snapshots.py +++ b/tempest/lib/api_schema/response/compute/v2_1/snapshots.py @@ -26,7 +26,7 @@ common_snapshot_info = { 'displayName': {'type': ['string', 'null']}, 'displayDescription': {'type': ['string', 'null']} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'volumeId', 'status', 'size', 'createdAt', 'displayName', 'displayDescription'] } @@ -38,7 +38,7 @@ create_get_snapshot = { 'properties': { 'snapshot': common_snapshot_info }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['snapshot'] } } @@ -53,7 +53,7 @@ list_snapshots = { 'items': common_snapshot_info } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['snapshots'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/tenant_networks.py b/tempest/lib/api_schema/response/compute/v2_1/tenant_networks.py index ddfab9619..02a9382ec 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/tenant_networks.py +++ b/tempest/lib/api_schema/response/compute/v2_1/tenant_networks.py @@ -19,7 +19,7 @@ param_network = { 'cidr': {'type': ['string', 'null']}, 'label': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'cidr', 'label'] } @@ -34,7 +34,7 @@ list_tenant_networks = { 'items': param_network } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['networks'] } } @@ -47,7 +47,7 @@ get_tenant_network = { 'properties': { 'network': param_network }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['network'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/versions.py b/tempest/lib/api_schema/response/compute/v2_1/versions.py index 7f5623928..b57d1b8cb 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/versions.py +++ b/tempest/lib/api_schema/response/compute/v2_1/versions.py @@ -31,7 +31,7 @@ _version = { 'type': {'type': 'string'}, }, 'required': ['href', 'rel'], - 'additionalProperties': False + 'additionalProperties': True } }, 'status': {'type': 'string'}, @@ -50,7 +50,7 @@ _version = { # so they should not be required. # NOTE(sdague): media-types only shows up in single version requests. 'required': ['id', 'links', 'status', 'updated'], - 'additionalProperties': False + 'additionalProperties': True } list_versions = { @@ -64,7 +64,7 @@ list_versions = { } }, 'required': ['versions'], - 'additionalProperties': False + 'additionalProperties': True } } @@ -96,7 +96,7 @@ get_version = { } }, 'required': ['choices'], - 'additionalProperties': False + 'additionalProperties': True } } @@ -107,6 +107,6 @@ get_one_version = { 'properties': { 'version': _version }, - 'additionalProperties': False + 'additionalProperties': True } } diff --git a/tempest/lib/api_schema/response/compute/v2_1/volumes.py b/tempest/lib/api_schema/response/compute/v2_1/volumes.py index d367f2adb..1125cbfa4 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/volumes.py +++ b/tempest/lib/api_schema/response/compute/v2_1/volumes.py @@ -42,7 +42,7 @@ create_get_volume = { 'volumeId': {'type': 'string'}, 'serverId': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE- If volume is not attached to any server # then, 'attachments' attributes comes as array # with empty objects "[{}]" due to that elements @@ -53,13 +53,13 @@ create_get_volume = { }, 'os-vol-host-attr:host': {'type': 'string'}, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'status', 'displayName', 'availabilityZone', 'createdAt', 'displayDescription', 'volumeType', 'snapshotId', 'metadata', 'size', 'attachments'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['volume'] } } @@ -94,7 +94,7 @@ list_volumes = { 'volumeId': {'type': 'string'}, 'serverId': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE- If volume is not attached to any server # then, 'attachments' attributes comes as array # with empty object "[{}]" due to that elements @@ -104,7 +104,7 @@ list_volumes = { } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'status', 'displayName', 'availabilityZone', 'createdAt', 'displayDescription', 'volumeType', @@ -113,7 +113,7 @@ list_volumes = { } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['volumes'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_11/services.py b/tempest/lib/api_schema/response/compute/v2_11/services.py index 9ece1f9b3..b17d180e3 100644 --- a/tempest/lib/api_schema/response/compute/v2_11/services.py +++ b/tempest/lib/api_schema/response/compute/v2_11/services.py @@ -36,11 +36,11 @@ update_forced_down = { 'host': {'type': 'string'}, 'forced_down': {'type': 'boolean'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['binary', 'host', 'forced_down'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['service'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_16/servers.py b/tempest/lib/api_schema/response/compute/v2_16/servers.py index fc81ff70a..495ed3ec9 100644 --- a/tempest/lib/api_schema/response/compute/v2_16/servers.py +++ b/tempest/lib/api_schema/response/compute/v2_16/servers.py @@ -32,7 +32,7 @@ server_detail = { 'id': {'type': 'string'}, 'links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'links']}, {'type': ['string', 'null']} ]}, @@ -42,7 +42,7 @@ server_detail = { 'id': {'type': 'string'}, 'links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'links'] }, 'fault': { @@ -53,7 +53,7 @@ server_detail = { 'message': {'type': 'string'}, 'details': {'type': 'string'}, }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): 'details' is not necessary to be present # in the 'fault'. So it is not defined as 'required'. 'required': ['code', 'created', 'message'] @@ -90,7 +90,7 @@ server_detail = { 'id': {'type': 'string'}, 'delete_on_termination': {'type': 'boolean'} }, - 'additionalProperties': False, + 'additionalProperties': True, }, }, 'OS-EXT-SRV-ATTR:reservation_id': {'type': ['string', 'null']}, @@ -104,7 +104,7 @@ server_detail = { # NOTE(gmann): new attributes in version 2.16 'host_status': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): 'progress' attribute is present in the response # only when server's status is one of the progress statuses # ("ACTIVE","BUILD", "REBUILD", "RESIZE","VERIFY_RESIZE") @@ -134,7 +134,7 @@ get_server = { 'properties': { 'server': server_detail }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['server'] } } @@ -150,7 +150,7 @@ list_servers_detail = { }, 'servers_links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): servers_links attribute is not necessary to be # present always So it is not 'required'. 'required': ['servers'] diff --git a/tempest/lib/api_schema/response/compute/v2_23/migrations.py b/tempest/lib/api_schema/response/compute/v2_23/migrations.py index 3cd0f6ec1..af6fd8ade 100644 --- a/tempest/lib/api_schema/response/compute/v2_23/migrations.py +++ b/tempest/lib/api_schema/response/compute/v2_23/migrations.py @@ -45,7 +45,7 @@ list_migrations = { 'migration_type': {'type': ['string', 'null']}, 'links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': [ 'id', 'status', 'instance_uuid', 'source_node', 'source_compute', 'dest_node', 'dest_compute', @@ -56,7 +56,7 @@ list_migrations = { } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['migrations'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_26/servers.py b/tempest/lib/api_schema/response/compute/v2_26/servers.py index 5a0f98732..248605b29 100644 --- a/tempest/lib/api_schema/response/compute/v2_26/servers.py +++ b/tempest/lib/api_schema/response/compute/v2_26/servers.py @@ -68,7 +68,7 @@ list_tags = { 'properties': { 'tags': tag_items, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['tags'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_3/servers.py b/tempest/lib/api_schema/response/compute/v2_3/servers.py index 1674c1b11..4dcfad49c 100644 --- a/tempest/lib/api_schema/response/compute/v2_3/servers.py +++ b/tempest/lib/api_schema/response/compute/v2_3/servers.py @@ -40,7 +40,7 @@ server_detail = { 'id': {'type': 'string'}, 'links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'links']}, {'type': ['string', 'null']} ]}, @@ -50,7 +50,7 @@ server_detail = { 'id': {'type': 'string'}, 'links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'links'] }, 'fault': { @@ -61,7 +61,7 @@ server_detail = { 'message': {'type': 'string'}, 'details': {'type': 'string'}, }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): 'details' is not necessary to be present # in the 'fault'. So it is not defined as 'required'. 'required': ['code', 'created', 'message'] @@ -99,7 +99,7 @@ server_detail = { 'id': {'type': 'string'}, 'delete_on_termination': {'type': 'boolean'} }, - 'additionalProperties': False, + 'additionalProperties': True, }, }, 'OS-EXT-SRV-ATTR:reservation_id': {'type': ['string', 'null']}, @@ -110,7 +110,7 @@ server_detail = { 'OS-EXT-SRV-ATTR:root_device_name': {'type': ['string', 'null']}, 'OS-EXT-SRV-ATTR:user_data': {'type': ['string', 'null']}, }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): 'progress' attribute is present in the response # only when server's status is one of the progress statuses # ("ACTIVE","BUILD", "REBUILD", "RESIZE","VERIFY_RESIZE") @@ -140,7 +140,7 @@ get_server = { 'properties': { 'server': server_detail }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['server'] } } @@ -156,7 +156,7 @@ list_servers_detail = { }, 'servers_links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): servers_links attribute is not necessary to be # present always So it is not 'required'. 'required': ['servers'] diff --git a/tempest/lib/api_schema/response/compute/v2_45/images.py b/tempest/lib/api_schema/response/compute/v2_45/images.py index 8a48f363e..395dd177d 100644 --- a/tempest/lib/api_schema/response/compute/v2_45/images.py +++ b/tempest/lib/api_schema/response/compute/v2_45/images.py @@ -19,7 +19,7 @@ create_image = { 'properties': { 'image_id': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['image_id'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_47/servers.py b/tempest/lib/api_schema/response/compute/v2_47/servers.py index d580f2c63..52ac89370 100644 --- a/tempest/lib/api_schema/response/compute/v2_47/servers.py +++ b/tempest/lib/api_schema/response/compute/v2_47/servers.py @@ -30,7 +30,7 @@ flavor = { } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['original_name', 'disk', 'ephemeral', 'ram', 'swap', 'vcpus'] } diff --git a/tempest/lib/api_schema/response/compute/v2_48/servers.py b/tempest/lib/api_schema/response/compute/v2_48/servers.py index e2e45bc29..3310783ed 100644 --- a/tempest/lib/api_schema/response/compute/v2_48/servers.py +++ b/tempest/lib/api_schema/response/compute/v2_48/servers.py @@ -45,7 +45,7 @@ show_server_diagnostics = { 'maximum': {'type': ['integer', 'null']}, 'used': {'type': ['integer', 'null']} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['maximum', 'used'] }, 'cpu_details': { @@ -57,7 +57,7 @@ show_server_diagnostics = { 'time': {'type': ['integer', 'null']}, 'utilisation': {'type': ['integer', 'null']} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'time', 'utilisation'] } }, @@ -79,7 +79,7 @@ show_server_diagnostics = { 'tx_packets': {'type': ['integer', 'null']}, 'tx_rate': {'type': ['integer', 'null']} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['mac_address', 'rx_octets', 'rx_errors', 'rx_drop', 'rx_packets', 'rx_rate', 'tx_octets', @@ -98,13 +98,13 @@ show_server_diagnostics = { 'write_requests': {'type': ['integer', 'null']}, 'errors_count': {'type': ['integer', 'null']} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['read_bytes', 'read_requests', 'write_bytes', 'write_requests', 'errors_count'] } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': [ 'state', 'driver', 'hypervisor', 'hypervisor_os', 'uptime', 'config_drive', 'num_cpus', 'num_nics', 'num_disks', diff --git a/tempest/lib/api_schema/response/compute/v2_53/services.py b/tempest/lib/api_schema/response/compute/v2_53/services.py index 97b0c7260..b526e638d 100644 --- a/tempest/lib/api_schema/response/compute/v2_53/services.py +++ b/tempest/lib/api_schema/response/compute/v2_53/services.py @@ -51,13 +51,13 @@ update_service = { 'zone': {'type': 'string'}, 'forced_down': {'type': 'boolean'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['id', 'binary', 'disabled_reason', 'host', 'state', 'status', 'updated_at', 'zone', 'forced_down'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['service'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_55/flavors.py b/tempest/lib/api_schema/response/compute/v2_55/flavors.py index 554f43b4c..07adf6270 100644 --- a/tempest/lib/api_schema/response/compute/v2_55/flavors.py +++ b/tempest/lib/api_schema/response/compute/v2_55/flavors.py @@ -45,13 +45,13 @@ list_flavors = { 'id': {'type': 'string'}, 'description': flavor_description }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['name', 'links', 'id', 'description'] } }, 'flavors_links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, # NOTE(gmann): flavors_links attribute is not necessary # to be present always So it is not 'required'. 'required': ['flavors'] @@ -76,7 +76,7 @@ common_flavor_info = { 'OS-FLV-EXT-DATA:ephemeral': {'type': 'integer'}, 'description': flavor_description }, - 'additionalProperties': False, + 'additionalProperties': True, # 'OS-FLV-DISABLED', 'os-flavor-access', 'rxtx_factor' and # 'OS-FLV-EXT-DATA' are API extensions. So they are not 'required'. 'required': ['name', 'links', 'ram', 'vcpus', 'swap', 'disk', 'id', @@ -96,7 +96,7 @@ list_flavors_details = { # to be present always So it is not 'required'. 'flavors_links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['flavors'] } } @@ -108,7 +108,7 @@ create_update_get_flavor_details = { 'properties': { 'flavor': common_flavor_info }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['flavor'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_6/servers.py b/tempest/lib/api_schema/response/compute/v2_6/servers.py index 922bf7923..b94050d86 100644 --- a/tempest/lib/api_schema/response/compute/v2_6/servers.py +++ b/tempest/lib/api_schema/response/compute/v2_6/servers.py @@ -50,11 +50,11 @@ get_remote_consoles = { 'format': 'uri' } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['protocol', 'type', 'url'] } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['remote_console'] } } diff --git a/tempest/lib/api_schema/response/compute/v2_61/flavors.py b/tempest/lib/api_schema/response/compute/v2_61/flavors.py index 5119466ba..6d1d8ddb5 100644 --- a/tempest/lib/api_schema/response/compute/v2_61/flavors.py +++ b/tempest/lib/api_schema/response/compute/v2_61/flavors.py @@ -58,7 +58,7 @@ common_flavor_info = { 'description': flavor_description, 'extra_specs': flavor_extra_specs }, - 'additionalProperties': False, + 'additionalProperties': True, # 'OS-FLV-DISABLED', 'os-flavor-access', 'rxtx_factor' and # 'OS-FLV-EXT-DATA' are API extensions. so they are not 'required'. 'required': ['name', 'links', 'ram', 'vcpus', 'swap', 'disk', 'id', @@ -78,7 +78,7 @@ list_flavors_details = { # to be present always so it is not 'required'. 'flavors_links': parameter_types.links }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['flavors'] } } @@ -90,7 +90,7 @@ create_update_get_flavor_details = { 'properties': { 'flavor': common_flavor_info }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['flavor'] } } diff --git a/tempest/lib/api_schema/response/volume/qos.py b/tempest/lib/api_schema/response/volume/qos.py index d1b391062..3594c3f4e 100644 --- a/tempest/lib/api_schema/response/volume/qos.py +++ b/tempest/lib/api_schema/response/volume/qos.py @@ -25,7 +25,7 @@ show_qos = { 'consumer': {'type': 'string'}, 'specs': {'type': ['object', 'null']}, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['name', 'id', 'specs'] }, 'links': { @@ -37,12 +37,12 @@ show_qos = { 'format': 'uri'}, 'rel': {'type': 'string'}, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['href', 'rel'] } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['qos_specs', 'links'] } } @@ -67,12 +67,12 @@ list_qos = { 'id': {'type': 'string', 'format': 'uuid'}, 'name': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['specs', 'id', 'name'] } } }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['qos_specs'] } } @@ -87,7 +87,7 @@ set_qos_key = { 'patternProperties': {'^.+$': {'type': 'string'}} }, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['qos_specs'] } } @@ -109,12 +109,12 @@ show_association_qos = { 'id': {'type': 'string', 'format': 'uuid'}, 'name': {'type': 'string'} }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['association_type', 'id', 'name'] } }, }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['qos_associations'] } } -- 2.20.1