From b5b26bfa187c4db16ed4089119371fb164da12cb Mon Sep 17 00:00:00 2001 From: Georg Kunz Date: Wed, 6 Jun 2018 15:16:06 +0200 Subject: Updating the API response validation patch Functest has switched from Tempest 14 in Danube to 17.1.0 in Fraser. This updates the patch used to disable strict API response validation. Change-Id: Ief47eba3bc91c222d5ad30e65ab1fdaf39fc169e Signed-off-by: Georg Kunz --- ...ow-additional-properties-in-API-responses.patch | 423 ++++++++++++++------- 1 file changed, 279 insertions(+), 144 deletions(-) (limited to 'etc') diff --git a/etc/patches/functest/disable-api-validation/0001-Allow-additional-properties-in-API-responses.patch b/etc/patches/functest/disable-api-validation/0001-Allow-additional-properties-in-API-responses.patch index b7a040c4..7e81f49b 100644 --- a/etc/patches/functest/disable-api-validation/0001-Allow-additional-properties-in-API-responses.patch +++ b/etc/patches/functest/disable-api-validation/0001-Allow-additional-properties-in-API-responses.patch @@ -1,45 +1,50 @@ -From 9e15ea5e8b15d42eb202363e9a83ae9bb09ccb64 Mon Sep 17 00:00:00 2001 +From 90e0e23ce73a4459d981acca588f3873eb29c770 Mon Sep 17 00:00:00 2001 From: Georg Kunz -Date: Wed, 31 Jan 2018 21:10:35 +0100 -Subject: [PATCH 1/1] Allow additional properties in API responses +Date: Wed, 6 Jun 2018 15:07:43 +0200 +Subject: [PATCH] Allow additional properties in API responses --- - .../lib/api_schema/response/compute/v2_1/agents.py | 10 ++-- - .../api_schema/response/compute/v2_1/aggregates.py | 8 +-- - .../response/compute/v2_1/availability_zone.py | 8 +-- - .../response/compute/v2_1/baremetal_nodes.py | 6 +- - .../response/compute/v2_1/certificates.py | 4 +- - .../api_schema/response/compute/v2_1/extensions.py | 4 +- - .../api_schema/response/compute/v2_1/fixed_ips.py | 4 +- - .../api_schema/response/compute/v2_1/flavors.py | 10 ++-- - .../response/compute/v2_1/flavors_access.py | 4 +- - .../response/compute/v2_1/flavors_extra_specs.py | 2 +- - .../response/compute/v2_1/floating_ips.py | 20 +++---- - .../lib/api_schema/response/compute/v2_1/hosts.py | 14 ++--- - .../response/compute/v2_1/hypervisors.py | 22 ++++---- - .../lib/api_schema/response/compute/v2_1/images.py | 16 +++--- - .../compute/v2_1/instance_usage_audit_logs.py | 8 +-- - .../api_schema/response/compute/v2_1/interfaces.py | 8 +-- - .../api_schema/response/compute/v2_1/keypairs.py | 14 ++--- - .../lib/api_schema/response/compute/v2_1/limits.py | 10 ++-- - .../api_schema/response/compute/v2_1/migrations.py | 4 +- - .../response/compute/v2_1/parameter_types.py | 4 +- - .../lib/api_schema/response/compute/v2_1/quotas.py | 4 +- - .../compute/v2_1/security_group_default_rule.py | 8 +-- - .../response/compute/v2_1/security_groups.py | 16 +++--- - .../api_schema/response/compute/v2_1/servers.py | 64 +++++++++++----------- - .../api_schema/response/compute/v2_1/services.py | 8 +-- - .../api_schema/response/compute/v2_1/snapshots.py | 6 +- - .../response/compute/v2_1/tenant_networks.py | 6 +- - .../api_schema/response/compute/v2_1/versions.py | 10 ++-- - .../api_schema/response/compute/v2_1/volumes.py | 12 ++-- - .../api_schema/response/compute/v2_16/servers.py | 14 ++--- - .../response/compute/v2_23/migrations.py | 4 +- - .../api_schema/response/compute/v2_3/servers.py | 14 ++--- - 32 files changed, 173 insertions(+), 173 deletions(-) + .../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/servers.py | 66 +++++++++---------- + .../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_47/servers.py | 2 +- + .../response/compute/v2_48/servers.py | 10 +-- + .../response/compute/v2_6/servers.py | 4 +- + 37 files changed, 187 insertions(+), 187 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 6f712b4..09feb73 100644 +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 = { @@ -84,19 +89,19 @@ index 6f712b4..09feb73 100644 } } 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 1a9fe41..4a86670 100644 +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 -@@ -26,7 +26,7 @@ aggregate_for_create = { +@@ -28,7 +28,7 @@ aggregate_for_create = { 'name': {'type': 'string'}, - 'updated_at': {'type': ['string', 'null']} + 'updated_at': parameter_types.date_time_or_null }, - 'additionalProperties': False, + 'additionalProperties': True, 'required': ['availability_zone', 'created_at', 'deleted', 'deleted_at', 'id', 'name', 'updated_at'], } -@@ -48,7 +48,7 @@ list_aggregates = { +@@ -50,7 +50,7 @@ list_aggregates = { 'items': common_aggregate_info } }, @@ -105,7 +110,7 @@ index 1a9fe41..4a86670 100644 'required': ['aggregates'], } } -@@ -60,7 +60,7 @@ get_aggregate = { +@@ -62,7 +62,7 @@ get_aggregate = { 'properties': { 'aggregate': common_aggregate_info }, @@ -124,10 +129,10 @@ index 1a9fe41..4a86670 100644 } } 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 d9aebce..7b5e03c 100644 +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 -@@ -31,19 +31,19 @@ base = { +@@ -33,19 +33,19 @@ base = { 'properties': { 'available': {'type': 'boolean'} }, @@ -150,9 +155,9 @@ index d9aebce..7b5e03c 100644 'required': ['availabilityZoneInfo'] } } -@@ -63,7 +63,7 @@ detail = { +@@ -65,7 +65,7 @@ detail = { 'active': {'type': 'boolean'}, - 'updated_at': {'type': ['string', 'null']} + 'updated_at': parameter_types.date_time_or_null }, - 'additionalProperties': False, + 'additionalProperties': True, @@ -160,7 +165,7 @@ index d9aebce..7b5e03c 100644 } } 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 d1ee877..8ab17d3 100644 +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 = { @@ -191,7 +196,7 @@ index d1ee877..8ab17d3 100644 } } 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 4e7cbe4..99f795a 100644 +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 = { @@ -209,10 +214,10 @@ index 4e7cbe4..99f795a 100644 } } 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 a6a455c..9f7395a 100644 +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 -@@ -35,13 +35,13 @@ list_extensions = { +@@ -34,13 +34,13 @@ list_extensions = { 'alias': {'type': 'string'}, 'description': {'type': 'string'} }, @@ -229,7 +234,7 @@ index a6a455c..9f7395a 100644 } } 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 a653213..b53565a 100644 +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 = { @@ -247,7 +252,7 @@ index a653213..b53565a 100644 } } 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 547d94d..76cbb8a 100644 +index 547d94d57..76cbb8a55 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 = { @@ -294,7 +299,7 @@ index 547d94d..76cbb8a 100644 } } 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 a4d6af0..958ed02 100644 +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 = { @@ -313,7 +318,7 @@ index a4d6af0..958ed02 100644 } } 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 a438d48..c8988b1 100644 +index a438d4869..c8988b1de 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 = { @@ -326,7 +331,7 @@ index a438d48..c8988b1 100644 } } 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 0c66590..39e4207 100644 +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 = { @@ -413,7 +418,7 @@ index 0c66590..39e4207 100644 } } 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 ae70ff1..d750cd0 100644 +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 = { @@ -467,11 +472,11 @@ index ae70ff1..d750cd0 100644 }, - 'additionalProperties': False, + 'additionalProperties': True, - 'required': ['host', 'maintenance_mode', 'status'] - } - } + '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 d15b4f6..5d8cf6d 100644 +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 = { @@ -571,7 +576,7 @@ index d15b4f6..5d8cf6d 100644 } # 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 f65b9d8..25d3167 100644 +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 = { @@ -643,7 +648,7 @@ index f65b9d8..25d3167 100644 # 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 15224c5..402dfea 100644 +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 = { @@ -683,7 +688,7 @@ index 15224c5..402dfea 100644 } } 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 9984750..6a989e5 100644 +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 = { @@ -723,20 +728,18 @@ index 9984750..6a989e5 100644 } } 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 9c04c79..ec5c2d3 100644 +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 -@@ -31,7 +31,7 @@ get_keypair = { +@@ -33,13 +33,13 @@ get_keypair = { 'id': {'type': 'integer'} }, - 'additionalProperties': False, + 'additionalProperties': True, - # When we run the get keypair API, response body includes - # all the above mentioned attributes. - # But in Nova API sample file, response body includes only -@@ -40,7 +40,7 @@ get_keypair = { - 'required': ['public_key', 'name', 'fingerprint'] + 'required': ['public_key', 'name', 'fingerprint', 'user_id', + 'deleted', 'created_at', 'updated_at', + 'deleted_at', 'id'] } }, - 'additionalProperties': False, @@ -744,7 +747,7 @@ index 9c04c79..ec5c2d3 100644 'required': ['keypair'] } } -@@ -59,14 +59,14 @@ create_keypair = { +@@ -58,14 +58,14 @@ create_keypair = { 'user_id': {'type': 'string'}, 'private_key': {'type': 'string'} }, @@ -761,7 +764,7 @@ index 9c04c79..ec5c2d3 100644 'required': ['keypair'] } } -@@ -92,16 +92,16 @@ list_keypairs = { +@@ -91,16 +91,16 @@ list_keypairs = { 'name': {'type': 'string'}, 'fingerprint': {'type': 'string'} }, @@ -782,7 +785,7 @@ index 9c04c79..ec5c2d3 100644 } } 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 81f175f..bc4c1e3 100644 +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 = { @@ -821,19 +824,19 @@ index 81f175f..bc4c1e3 100644 } } 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 b7d66ea..b571820 100644 +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 -@@ -35,7 +35,7 @@ list_migrations = { - 'created_at': {'type': 'string'}, - 'updated_at': {'type': ['string', 'null']} +@@ -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', -@@ -45,7 +45,7 @@ list_migrations = { +@@ -47,7 +47,7 @@ list_migrations = { } } }, @@ -843,7 +846,7 @@ index b7d66ea..b571820 100644 } } 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 3cc5ca4..73843d1 100644 +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 = { @@ -865,7 +868,7 @@ index 3cc5ca4..73843d1 100644 } } 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 7953983..f4d9153 100644 +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 = { @@ -887,7 +890,7 @@ index 7953983..f4d9153 100644 } } 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 2ec2826..1a2e19b 100644 +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 = { @@ -924,7 +927,7 @@ index 2ec2826..1a2e19b 100644 } } 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 5ed5a5c..d9f1794 100644 +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 = { @@ -994,7 +997,7 @@ index 5ed5a5c..d9f1794 100644 } } 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 63e8467..8f4b385 100644 +index 2954de005..e22fba32c 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 = { @@ -1039,16 +1042,16 @@ index 63e8467..8f4b385 100644 'required': ['id', 'links']}, {'type': ['string', 'null']} ]}, -@@ -100,7 +100,7 @@ common_show_server = { - 'id': {'type': 'string'}, - 'links': parameter_types.links - }, -- 'additionalProperties': False, -+ 'additionalProperties': True, - 'required': ['id', 'links'] +@@ -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': { -@@ -111,7 +111,7 @@ common_show_server = { + 'type': 'object', +@@ -113,7 +113,7 @@ common_show_server = { 'message': {'type': 'string'}, 'details': {'type': 'string'}, }, @@ -1057,7 +1060,7 @@ index 63e8467..8f4b385 100644 # NOTE(gmann): 'details' is not necessary to be present # in the 'fault'. So it is not defined as 'required'. 'required': ['code', 'created', 'message'] -@@ -129,7 +129,7 @@ common_show_server = { +@@ -131,7 +131,7 @@ common_show_server = { 'accessIPv4': parameter_types.access_ip_v4, 'accessIPv6': parameter_types.access_ip_v6 }, @@ -1066,7 +1069,7 @@ index 63e8467..8f4b385 100644 # 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") -@@ -150,7 +150,7 @@ update_server = { +@@ -152,7 +152,7 @@ update_server = { 'properties': { 'server': common_show_server }, @@ -1075,7 +1078,7 @@ index 63e8467..8f4b385 100644 'required': ['server'] } } -@@ -181,7 +181,7 @@ server_detail['properties'].update({ +@@ -183,7 +183,7 @@ server_detail['properties'].update({ 'properties': { 'id': {'type': 'string'} }, @@ -1084,7 +1087,7 @@ index 63e8467..8f4b385 100644 }, }, 'config_drive': {'type': 'string'} -@@ -202,7 +202,7 @@ get_server = { +@@ -204,7 +204,7 @@ get_server = { 'properties': { 'server': server_detail }, @@ -1093,7 +1096,7 @@ index 63e8467..8f4b385 100644 'required': ['server'] } } -@@ -218,7 +218,7 @@ list_servers_detail = { +@@ -220,7 +220,7 @@ list_servers_detail = { }, 'servers_links': parameter_types.links }, @@ -1102,16 +1105,16 @@ index 63e8467..8f4b385 100644 # NOTE(gmann): servers_links attribute is not necessary to be # present always So it is not 'required'. 'required': ['servers'] -@@ -241,7 +241,7 @@ rescue_server = { - 'properties': { - 'adminPass': {'type': 'string'} - }, +@@ -240,7 +240,7 @@ rescue_server = { + 'status_code': [200], + 'response_body': { + 'type': 'object', - 'additionalProperties': False, + 'additionalProperties': True, - 'required': ['adminPass'] } } -@@ -260,14 +260,14 @@ list_virtual_interfaces = { + +@@ -265,14 +265,14 @@ list_virtual_interfaces = { 'mac_address': parameter_types.mac_address, 'OS-EXT-VIF-NET:net_id': {'type': 'string'} }, @@ -1128,7 +1131,7 @@ index 63e8467..8f4b385 100644 'required': ['virtual_interfaces'] } } -@@ -280,7 +280,7 @@ common_attach_volume_info = { +@@ -285,7 +285,7 @@ common_attach_volume_info = { 'volumeId': {'type': 'string'}, 'serverId': {'type': ['integer', 'string']} }, @@ -1137,7 +1140,7 @@ index 63e8467..8f4b385 100644 # 'device' is optional in response. 'required': ['id', 'volumeId', 'serverId'] } -@@ -292,7 +292,7 @@ attach_volume = { +@@ -297,7 +297,7 @@ attach_volume = { 'properties': { 'volumeAttachment': common_attach_volume_info }, @@ -1146,7 +1149,7 @@ index 63e8467..8f4b385 100644 'required': ['volumeAttachment'] } } -@@ -315,7 +315,7 @@ list_volume_attachments = { +@@ -320,7 +320,7 @@ list_volume_attachments = { 'items': common_attach_volume_info } }, @@ -1155,7 +1158,7 @@ index 63e8467..8f4b385 100644 'required': ['volumeAttachments'] } } -@@ -335,7 +335,7 @@ list_addresses = { +@@ -340,7 +340,7 @@ list_addresses = { 'properties': { 'addresses': parameter_types.addresses }, @@ -1164,7 +1167,7 @@ index 63e8467..8f4b385 100644 'required': ['addresses'] } } -@@ -357,7 +357,7 @@ common_server_group = { +@@ -362,7 +362,7 @@ common_server_group = { }, 'metadata': {'type': 'object'} }, @@ -1173,7 +1176,7 @@ index 63e8467..8f4b385 100644 'required': ['id', 'name', 'policies', 'members', 'metadata'] } -@@ -368,7 +368,7 @@ create_show_server_group = { +@@ -373,7 +373,7 @@ create_show_server_group = { 'properties': { 'server_group': common_server_group }, @@ -1182,7 +1185,7 @@ index 63e8467..8f4b385 100644 'required': ['server_group'] } } -@@ -387,7 +387,7 @@ list_server_groups = { +@@ -392,7 +392,7 @@ list_server_groups = { 'items': common_server_group } }, @@ -1191,7 +1194,7 @@ index 63e8467..8f4b385 100644 'required': ['server_groups'] } } -@@ -403,7 +403,7 @@ instance_actions = { +@@ -408,7 +408,7 @@ instance_actions = { 'message': {'type': ['string', 'null']}, 'instance_uuid': {'type': 'string'} }, @@ -1200,8 +1203,8 @@ index 63e8467..8f4b385 100644 'required': ['action', 'request_id', 'user_id', 'project_id', 'start_time', 'message', 'instance_uuid'] } -@@ -419,7 +419,7 @@ instance_action_events = { - 'result': {'type': 'string'}, +@@ -429,7 +429,7 @@ instance_action_events = { + 'result': {'type': ['string', 'null']}, 'traceback': {'type': ['string', 'null']} }, - 'additionalProperties': False, @@ -1209,7 +1212,7 @@ index 63e8467..8f4b385 100644 'required': ['event', 'start_time', 'finish_time', 'result', 'traceback'] } -@@ -435,7 +435,7 @@ list_instance_actions = { +@@ -445,7 +445,7 @@ list_instance_actions = { 'items': instance_actions } }, @@ -1218,7 +1221,7 @@ index 63e8467..8f4b385 100644 'required': ['instanceActions'] } } -@@ -453,7 +453,7 @@ show_instance_action = { +@@ -463,7 +463,7 @@ show_instance_action = { 'properties': { 'instanceAction': instance_actions_with_events }, @@ -1227,7 +1230,7 @@ index 63e8467..8f4b385 100644 'required': ['instanceAction'] } } -@@ -465,7 +465,7 @@ show_password = { +@@ -475,7 +475,7 @@ show_password = { 'properties': { 'password': {'type': 'string'} }, @@ -1236,7 +1239,7 @@ index 63e8467..8f4b385 100644 'required': ['password'] } } -@@ -484,11 +484,11 @@ get_vnc_console = { +@@ -494,11 +494,11 @@ get_vnc_console = { 'format': 'uri' } }, @@ -1250,7 +1253,7 @@ index 63e8467..8f4b385 100644 'required': ['console'] } } -@@ -500,7 +500,7 @@ get_console_output = { +@@ -510,7 +510,7 @@ get_console_output = { 'properties': { 'output': {'type': 'string'} }, @@ -1259,7 +1262,7 @@ index 63e8467..8f4b385 100644 'required': ['output'] } } -@@ -517,7 +517,7 @@ set_server_metadata = { +@@ -527,7 +527,7 @@ set_server_metadata = { } } }, @@ -1268,7 +1271,7 @@ index 63e8467..8f4b385 100644 'required': ['metadata'] } } -@@ -542,7 +542,7 @@ set_show_server_metadata_item = { +@@ -552,7 +552,7 @@ set_show_server_metadata_item = { } } }, @@ -1277,12 +1280,21 @@ index 63e8467..8f4b385 100644 'required': ['meta'] } } +@@ -583,7 +583,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 ddef7b2..4b490d1 100644 +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 -@@ -32,13 +32,13 @@ list_services = { - 'updated_at': {'type': ['string', 'null']}, +@@ -34,13 +34,13 @@ list_services = { + 'updated_at': parameter_types.date_time_or_null, 'disabled_reason': {'type': ['string', 'null']} }, - 'additionalProperties': False, @@ -1297,7 +1309,7 @@ index ddef7b2..4b490d1 100644 'required': ['services'] } } -@@ -55,11 +55,11 @@ enable_disable_service = { +@@ -57,11 +57,11 @@ enable_disable_service = { 'binary': {'type': 'string'}, 'host': {'type': 'string'} }, @@ -1307,15 +1319,29 @@ index ddef7b2..4b490d1 100644 } }, - '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 01a524b..4638dd2 100644 +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 -@@ -24,7 +24,7 @@ common_snapshot_info = { +@@ -26,7 +26,7 @@ common_snapshot_info = { 'displayName': {'type': ['string', 'null']}, 'displayDescription': {'type': ['string', 'null']} }, @@ -1324,7 +1350,7 @@ index 01a524b..4638dd2 100644 'required': ['id', 'volumeId', 'status', 'size', 'createdAt', 'displayName', 'displayDescription'] } -@@ -36,7 +36,7 @@ create_get_snapshot = { +@@ -38,7 +38,7 @@ create_get_snapshot = { 'properties': { 'snapshot': common_snapshot_info }, @@ -1333,7 +1359,7 @@ index 01a524b..4638dd2 100644 'required': ['snapshot'] } } -@@ -51,7 +51,7 @@ list_snapshots = { +@@ -53,7 +53,7 @@ list_snapshots = { 'items': common_snapshot_info } }, @@ -1343,7 +1369,7 @@ index 01a524b..4638dd2 100644 } } 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 ddfab96..02a9382 100644 +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 = { @@ -1374,10 +1400,10 @@ index ddfab96..02a9382 100644 } } 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 08a9fab..d6c1021 100644 +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 -@@ -29,7 +29,7 @@ _version = { +@@ -31,7 +31,7 @@ _version = { 'type': {'type': 'string'}, }, 'required': ['href', 'rel'], @@ -1386,7 +1412,7 @@ index 08a9fab..d6c1021 100644 } }, 'status': {'type': 'string'}, -@@ -48,7 +48,7 @@ _version = { +@@ -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'], @@ -1395,7 +1421,7 @@ index 08a9fab..d6c1021 100644 } list_versions = { -@@ -62,7 +62,7 @@ list_versions = { +@@ -64,7 +64,7 @@ list_versions = { } }, 'required': ['versions'], @@ -1404,7 +1430,7 @@ index 08a9fab..d6c1021 100644 } } -@@ -94,7 +94,7 @@ get_version = { +@@ -96,7 +96,7 @@ get_version = { } }, 'required': ['choices'], @@ -1413,7 +1439,7 @@ index 08a9fab..d6c1021 100644 } } -@@ -105,6 +105,6 @@ get_one_version = { +@@ -107,6 +107,6 @@ get_one_version = { 'properties': { 'version': _version }, @@ -1422,10 +1448,10 @@ index 08a9fab..d6c1021 100644 } } 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 bb34acb..d854d53 100644 +index c35dae981..c487aa5a4 100644 --- a/tempest/lib/api_schema/response/compute/v2_1/volumes.py +++ b/tempest/lib/api_schema/response/compute/v2_1/volumes.py -@@ -40,7 +40,7 @@ create_get_volume = { +@@ -42,7 +42,7 @@ create_get_volume = { 'volumeId': {'type': 'string'}, 'serverId': {'type': 'string'} }, @@ -1434,7 +1460,7 @@ index bb34acb..d854d53 100644 # NOTE- If volume is not attached to any server # then, 'attachments' attributes comes as array # with empty objects "[{}]" due to that elements -@@ -50,13 +50,13 @@ create_get_volume = { +@@ -52,13 +52,13 @@ create_get_volume = { } } }, @@ -1450,7 +1476,7 @@ index bb34acb..d854d53 100644 'required': ['volume'] } } -@@ -91,7 +91,7 @@ list_volumes = { +@@ -93,7 +93,7 @@ list_volumes = { 'volumeId': {'type': 'string'}, 'serverId': {'type': 'string'} }, @@ -1459,7 +1485,7 @@ index bb34acb..d854d53 100644 # NOTE- If volume is not attached to any server # then, 'attachments' attributes comes as array # with empty object "[{}]" due to that elements -@@ -101,7 +101,7 @@ list_volumes = { +@@ -103,7 +103,7 @@ list_volumes = { } } }, @@ -1468,7 +1494,7 @@ index bb34acb..d854d53 100644 'required': ['id', 'status', 'displayName', 'availabilityZone', 'createdAt', 'displayDescription', 'volumeType', -@@ -110,7 +110,7 @@ list_volumes = { +@@ -112,7 +112,7 @@ list_volumes = { } } }, @@ -1477,8 +1503,26 @@ index bb34acb..d854d53 100644 '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 18b833bd2..885e8cdac 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 3eb658f..d0a30e3 100644 +index 3eb658f4e..d0a30e3b0 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 = { @@ -1545,7 +1589,7 @@ index 3eb658f..d0a30e3 100644 # 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 3cd0f6e..af6fd8a 100644 +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 = { @@ -1566,8 +1610,21 @@ index 3cd0f6e..af6fd8a 100644 '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 b03bdf6fa..6b3936b3c 100644 +--- a/tempest/lib/api_schema/response/compute/v2_26/servers.py ++++ b/tempest/lib/api_schema/response/compute/v2_26/servers.py +@@ -54,7 +54,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 f24103e..5b5c9c1 100644 +index f24103ea2..5b5c9c197 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 = { @@ -1633,6 +1690,84 @@ index f24103e..5b5c9c1 100644 # 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_47/servers.py b/tempest/lib/api_schema/response/compute/v2_47/servers.py +index 37a084f1c..aa2f312a4 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 59047583a..e688db305 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_6/servers.py b/tempest/lib/api_schema/response/compute/v2_6/servers.py +index 29b3e8600..4caf107a4 100644 +--- a/tempest/lib/api_schema/response/compute/v2_6/servers.py ++++ b/tempest/lib/api_schema/response/compute/v2_6/servers.py +@@ -38,11 +38,11 @@ get_remote_consoles = { + 'format': 'uri' + } + }, +- 'additionalProperties': False, ++ 'additionalProperties': True, + 'required': ['protocol', 'type', 'url'] + } + }, +- 'additionalProperties': False, ++ 'additionalProperties': True, + 'required': ['remote_console'] + } + } -- -2.7.4 +2.17.1 -- cgit 1.2.3-korg