From 14f744bd87e0ce036a2be13f0ae693638c85b1c3 Mon Sep 17 00:00:00 2001 From: edan-att Date: Thu, 14 Sep 2017 16:52:18 +0300 Subject: [PATCH] Commit test list join for availability_zone These changes were imported from upstream @ commit e38076e29ef8c86c510fca3141954d10602040bb - Updated `nested_iterables` to parse list_join if available in the templates - Updated `test_volume_resource_ids` to allow volume ids to be provided as a parameter list - Appropriate fixture additions and changes Change-Id: Ia2187fe4eb7a389c8df01061be229246262d9a24 Issue-Id: VVP-29 Signed-off-by: Edan Binshtok --- .../fail/missing_param_definition_3.yaml | 115 ++++++++++++++++++ .../fail/missing_param_reference_1.yaml | 134 +++++++++++++++++++++ .../fail/missing_param_reference_2.yaml | 120 ++++++++++++++++++ ...ms_referenced_are_defined_and_vice_versa_2.yaml | 18 ++- ...ismatch_vm_type_volume_id_nova_server_id_2.yaml | 60 +++++++++ .../fail/mismatch_vm_type_volume_id_param_2.yaml | 61 ++++++++++ ...atch_vm_type_volume_id_volume_attachment_2.yaml | 70 +++++++++++ .../pass/valid_template_2.yaml | 70 +++++++++++ .../pass/valid_template_3.yaml | 59 +++++++++ ice_validator/tests/test_volume_resource_ids.py | 10 +- ice_validator/tests/utils/nested_iterables.py | 6 + 11 files changed, 719 insertions(+), 4 deletions(-) create mode 100644 ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_definition_3.yaml create mode 100644 ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference_1.yaml create mode 100644 ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference_2.yaml create mode 100644 ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_nova_server_id_2.yaml create mode 100644 ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_param_2.yaml create mode 100644 ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_volume_attachment_2.yaml create mode 100644 ice_validator/tests/fixtures/test_volume_resource_ids/pass/valid_template_2.yaml create mode 100644 ice_validator/tests/fixtures/test_volume_resource_ids/pass/valid_template_3.yaml diff --git a/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_definition_3.yaml b/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_definition_3.yaml new file mode 100644 index 0000000..37374db --- /dev/null +++ b/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_definition_3.yaml @@ -0,0 +1,115 @@ +heat_template_version: 2013-05-23 + +description: Simple template to deploy a single compute instance + +parameters: + vnf_id: + description: Unique ID for this VNF + type: string + vf_module_id: + description: Unique ID for this VF module + type: string + vnf_name: + type: string + description: Unique name for this VNF instance + ex_image_name: + type: string + label: Image name or ID + description: Image to be used for compute instance + ex_flavor_name: + type: string + label: Flavor + description: Type of instance (flavor) to be used + ex_key: + type: string + label: key pair + description: Name of the key apir the nova server will use + ex_vm_name: + type: string + description: Name of the VM + ex1_vm_names: + type: comma_delimited_list + description: Name of the VM + ex1_image_name: + type: string + label: Image name or ID + description: Image to be used for compute instance + ex1_flavor_name: + type: string + label: Flavor + description: Type of instance (flavor) to be used + ex1_key: + type: string + label: key pair + description: Name of the key apir the nova server will use + int_network_net_id: + type: string + label: Network name + description: Name of the network the nova server will connect to + ex1_server_index: + type: number + label: server index + description: Index of server + constraint: + - range: { min: 1, max: 100 } + availability_zone_0: + type: string + description: availabilityzone name + + +resources: + ex_software_config_0: + type: OS::Heat::SoftwareConfig + properties: + group: ungrouped + config: + params: + $stack_name: { get_param: 'OS::stack_name' } + + ex_nova_serverGroup: + type: OS::Nova::ServerGroup + properties: + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + vnf_name: { get_param: vnf_name } + availability_zones: { list_join: [',', [ { get_param: availability_zone_0 }, { get_param: availability_zone_1 } ] ] } + + ex_nova_server_0: + type: OS::Nova::Server + properties: + name: { get_param: ex_vm_name } + metadata: + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + vnf_name: { get_param: vnf_name } + image: { get_param: ex_image_name } + flavor: { get_param: ex_flavor_name } + key_name: { get_param: ex_key } + networks: + - network: { get_param: int_network_net_id } + user_data: + get_resource: ex_software_config_0 + + ex1_nova_server_0: + type: OS::Nova::Server + properties: + name: { get_param: [ ex1_vm_names, 0 ] } + metadata: + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + vnf_name: { get_param: vnf_name } + image: { get_param: ex1_image_name} + flavor: { get_param: ex1_flavor_name } + key_name: { get_param: ex1_key } + + ex1_nova_server_1: + type: OS::Nova::Server + properties: + name: { get_param: [ ex1_vm_names, { get_param: ex1_server_index } ] } + metadata: + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + vnf_name: { get_param: vnf_name } + image: { get_param: ex1_image_name} + flavor: { get_param: ex1_flavor_name } + key_name: { get_param: ex1_key } diff --git a/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference_1.yaml b/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference_1.yaml new file mode 100644 index 0000000..101a01d --- /dev/null +++ b/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference_1.yaml @@ -0,0 +1,134 @@ +# -*- coding: utf8 -*- +# ============LICENSE_START======================================================= +# org.onap.vvp/validation-scripts +# =================================================================== +# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# =================================================================== +# +# Unless otherwise specified, all software contained herein is licensed +# under the Apache License, Version 2.0 (the “License”); +# you may not use this software except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# Unless otherwise specified, all documentation contained herein is licensed +# under the Creative Commons License, Attribution 4.0 Intl. (the “License”); +# you may not use this documentation except in compliance with the License. +# You may obtain a copy of the License at +# +# https://creativecommons.org/licenses/by/4.0/ +# +# Unless required by applicable law or agreed to in writing, documentation +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ============LICENSE_END============================================ +# +# ECOMP is a trademark and service mark of AT&T Intellectual Property. +# +--- +heat_template_version: 2013-05-23 + +description: Simple template to deploy a single compute instance + +parameters: + vnf_id: + description: Unique ID for this VNF + type: string + vf_module_id: + description: Unique ID for this VF module + type: string + vnf_name: + type: string + description: Unique name for this VNF instance + ex_image_name: + type: string + label: Image name or ID + description: Image to be used for compute instance + ex_key: + type: string + label: key pair + description: Name of the key apir the nova server will use + ex_vm_name: + type: string + description: Name of the VM + ex1_vm_names: + type: comma_delimited_list + description: Name of the VM + ex1_image_name: + type: string + label: Image name or ID + description: Image to be used for compute instance + ex1_flavor_name: + type: string + label: Flavor + description: Type of instance (flavor) to be used + ex1_key: + type: string + label: key pair + description: Name of the key apir the nova server will use + ex1_server_index: + type: number + label: server index + description: Index of server + constraint: + - range: { min: 1, max: 100 } + +resources: + ex_software_config_0: + type: OS::Heat::SoftwareConfig + properties: + group: ungrouped + config: + params: + $stack_name: { get_param: 'OS::stack_name' } + + ex_nova_server_0: + type: OS::Nova::Server + properties: + name: { get_param: ex_vm_name } + metadata: + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + vnf_name: { get_param: vnf_name } + image: { get_param: ex_image_name } + flavor: { get_param: ex_flavor_name } + key_name: { get_param: ex_key } + user_data: + get_resource: ex_software_config_0 + + ex1_nova_server_0: + type: OS::Nova::Server + properties: + name: { get_param: [ ex1_vm_names, 0 ] } + metadata: + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + vnf_name: { get_param: vnf_name } + project_id: { get_param: "OS::project_id" } + image: { get_param: ex1_image_name } + flavor: { get_param: ex1_flavor_name } + key_name: { get_param: ex1_key } + + ex1_nova_server_1: + type: OS::Nova::Server + properties: + name: { get_param: [ ex1_vm_names, { get_param: ex1_server_index } ] } + metadata: + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + vnf_name: { get_param: vnf_name } + image: { get_param: ex1_image_name} + flavor: { get_param: ex1_flavor_name } + key_name: { get_param: ex1_key } diff --git a/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference_2.yaml b/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference_2.yaml new file mode 100644 index 0000000..10dd0dd --- /dev/null +++ b/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference_2.yaml @@ -0,0 +1,120 @@ +heat_template_version: 2013-05-23 + +description: Simple template to deploy a single compute instance + +parameters: + vnf_id: + description: Unique ID for this VNF + type: string + vf_module_id: + description: Unique ID for this VF module + type: string + vnf_name: + type: string + description: Unique name for this VNF instance + ex_image_name: + type: string + label: Image name or ID + description: Image to be used for compute instance + ex_flavor_name: + type: string + label: Flavor + description: Type of instance (flavor) to be used + ex_key: + type: string + label: key pair + description: Name of the key apir the nova server will use + ex_vm_name: + type: string + description: Name of the VM + ex1_vm_names: + type: comma_delimited_list + description: Name of the VM + ex1_image_name: + type: string + label: Image name or ID + description: Image to be used for compute instance + ex1_flavor_name: + type: string + label: Flavor + description: Type of instance (flavor) to be used + ex1_key: + type: string + label: key pair + description: Name of the key apir the nova server will use + int_network_net_id: + type: string + label: Network name + description: Name of the network the nova server will connect to + ex1_server_index: + type: number + label: server index + description: Index of server + constraint: + - range: { min: 1, max: 100 } + availability_zone_0: + type: string + description: availabilityzone name + availability_zone_1: + type: string + description: availabilityzone name + availability_zone_2: + type: string + description: availabilityzone name + +resources: + ex_software_config_0: + type: OS::Heat::SoftwareConfig + properties: + group: ungrouped + config: + params: + $stack_name: { get_param: 'OS::stack_name' } + + ex_nova_serverGroup: + type: OS::Nova::ServerGroup + properties: + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + vnf_name: { get_param: vnf_name } + availability_zones: { list_join: [',', [ { get_param: availability_zone_0 }, { get_param: availability_zone_2 } ] ] } + + ex_nova_server_0: + type: OS::Nova::Server + properties: + name: { get_param: ex_vm_name } + metadata: + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + vnf_name: { get_param: vnf_name } + image: { get_param: ex_image_name } + flavor: { get_param: ex_flavor_name } + key_name: { get_param: ex_key } + networks: + - network: { get_param: int_network_net_id } + user_data: + get_resource: ex_software_config_0 + + ex1_nova_server_0: + type: OS::Nova::Server + properties: + name: { get_param: [ ex1_vm_names, 0 ] } + metadata: + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + vnf_name: { get_param: vnf_name } + image: { get_param: ex1_image_name} + flavor: { get_param: ex1_flavor_name } + key_name: { get_param: ex1_key } + + ex1_nova_server_1: + type: OS::Nova::Server + properties: + name: { get_param: [ ex1_vm_names, { get_param: ex1_server_index } ] } + metadata: + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + vnf_name: { get_param: vnf_name } + image: { get_param: ex1_image_name} + flavor: { get_param: ex1_flavor_name } + key_name: { get_param: ex1_key } diff --git a/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/pass/params_referenced_are_defined_and_vice_versa_2.yaml b/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/pass/params_referenced_are_defined_and_vice_versa_2.yaml index 46ea4cd..8f1e3bb 100644 --- a/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/pass/params_referenced_are_defined_and_vice_versa_2.yaml +++ b/ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/pass/params_referenced_are_defined_and_vice_versa_2.yaml @@ -77,7 +77,7 @@ parameters: ex1_flavor_name: type: string label: Flavor - description: Type of instance (flavor) to be used + description: Type of instance (flavor) to be used ex1_key: type: string label: key pair @@ -92,6 +92,12 @@ parameters: description: Index of server constraint: - range: { min: 1, max: 100 } + availability_zone_0: + type: string + description: availabilityzone name + availability_zone_1: + type: string + description: availabilityzone name resources: ex_software_config_0: @@ -102,6 +108,14 @@ resources: params: $stack_name: { get_param: 'OS::stack_name' } + ex_nova_serverGroup: + type: OS::Nova::ServerGroup + properties: + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + vnf_name: { get_param: vnf_name } + availability_zones: { list_join: [',', [ { get_param: availability_zone_0 }, { get_param: availability_zone_1 } ] ] } + ex_nova_server_0: type: OS::Nova::Server properties: @@ -140,4 +154,4 @@ resources: vnf_name: { get_param: vnf_name } image: { get_param: ex1_image_name} flavor: { get_param: ex1_flavor_name } - key_name: { get_param: ex1_key } \ No newline at end of file + key_name: { get_param: ex1_key } diff --git a/ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_nova_server_id_2.yaml b/ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_nova_server_id_2.yaml new file mode 100644 index 0000000..935c867 --- /dev/null +++ b/ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_nova_server_id_2.yaml @@ -0,0 +1,60 @@ +heat_template_version: 2015-04-30 + +description: Heat template description + +parameters: + + vnf_id: + type: string + description: Unique ID for this VNF instance + + vf_module_id: + type: string + description: Unique ID for this VF module + + vnf_name: + type: string + description: Unique name for this VNF instance + + admin_names: + type: comma_delimited_list + description: Names attribute for the VMs + + availability_zone_0: + type: string + description: availability zone to be used + + admin_flavor_name: + type: string + description: flavor to be used to create this vm must be one of the following flavors + + admin_volume_ids: + type: json + description: Unique IDs for volumes + + +resources: + + admin_server_0: + type: OS::Nova::Server + properties: + availability_zone: { get_param: availability_zone_0 } + name: { get_param: [admin2_names, 0] } + block_device_mapping: [{ device_name: "vda", volume_id: { get_param : [admin_volume_ids, 0] }, delete_on_termination : "false" }] + flavor: { get_param: admin2_flavor_name} + metadata: + vnf_name: { get_param: vnf_name } + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + + admin_server_1: + type: OS::Nova::Server + properties: + availability_zone: { get_param: availability_zone_0 } + name: { get_param: [admin_names, 1] } + block_device_mapping: [{ device_name: "vda", volume_id : { get_param : [admin_volume_ids, 1] }, delete_on_termination : "false" }] + flavor: { get_param: admin_flavor_name} + metadata: + vnf_name: { get_param: vnf_name } + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } diff --git a/ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_param_2.yaml b/ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_param_2.yaml new file mode 100644 index 0000000..05b760c --- /dev/null +++ b/ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_param_2.yaml @@ -0,0 +1,61 @@ +heat_template_version: 2015-04-30 + +description: Heat template description + +parameters: + + vnf_id: + type: string + description: Unique ID for this VNF instance + + vf_module_id: + type: string + description: Unique ID for this VF module + + vnf_name: + type: string + description: Unique name for this VNF instance + + admin_names: + type: comma_delimited_list + description: Names attribute for the VMs + + availability_zone_0: + type: string + description: availability zone to be used + + admin_flavor_name: + type: string + description: flavor to be used to create this vm must be one of the following flavors + + admin_volume_ids: + type: json + description: Unique IDs for volumes + + + +resources: + + admin_server_0: + type: OS::Nova::Server + properties: + availability_zone: { get_param: availability_zone_0 } + name: { get_param: [admin_names, 0] } + block_device_mapping: [{ device_name: "vda", volume_id: { get_param : [admin2_volume_ids, 0] }, delete_on_termination : "false" }] + flavor: { get_param: admin_flavor_name} + metadata: + vnf_name: { get_param: vnf_name } + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + + admin_server_1: + type: OS::Nova::Server + properties: + availability_zone: { get_param: availability_zone_0 } + name: { get_param: [admin_names, 1] } + block_device_mapping: [{ device_name: "vda", volume_id : { get_param : [admin_volume_ids, 1] }, delete_on_termination : "false" }] + flavor: { get_param: admin_flavor_name} + metadata: + vnf_name: { get_param: vnf_name } + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } diff --git a/ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_volume_attachment_2.yaml b/ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_volume_attachment_2.yaml new file mode 100644 index 0000000..673a8db --- /dev/null +++ b/ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_volume_attachment_2.yaml @@ -0,0 +1,70 @@ +heat_template_version: 2015-04-30 + +description: Heat template using json string for volumes + +parameters: + + vnf_id: + type: string + description: Unique ID for this VNF instance + + vf_module_id: + type: string + description: Unique ID for this VF module + + vnf_name: + type: string + description: Unique name for this VNF instance + + admin_names: + type: comma_delimited_list + description: Names attribute for the VMs + + availability_zone_0: + type: string + description: availability zone to be used + + admin_flavor_name: + type: string + description: flavor to be used to create this vm must be one of the following flavors + + admin_volume_ids: + type: json + description: Unique IDs for volumes + + +resources: + + admin_server_0: + type: OS::Nova::Server + properties: + availability_zone: { get_param: availability_zone_0 } + name: { get_param: [admin_names, 0] } + flavor: { get_param: admin_flavor_name} + metadata: + vnf_name: { get_param: vnf_name } + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + + admin_server_1: + type: OS::Nova::Server + properties: + availability_zone: { get_param: availability_zone_0 } + name: { get_param: [admin_names, 1] } + flavor: { get_param: admin_flavor_name} + metadata: + vnf_name: { get_param: vnf_name } + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + + admin_volume_attachment_0: + type: OS::Cinder::VolumeAttachment + properties: + volume_id: {get_param: [admin_volume_ids, 0]} + instance_uuid: {get_resource: admin_server_0} + + admin_volume_attachment_1: + type: OS::Cinder::VolumeAttachment + properties: + volume_id: {get_param: [admin2_volume_ids, 1]} + instance_uuid: {get_resource: admin_server_1} diff --git a/ice_validator/tests/fixtures/test_volume_resource_ids/pass/valid_template_2.yaml b/ice_validator/tests/fixtures/test_volume_resource_ids/pass/valid_template_2.yaml new file mode 100644 index 0000000..d1ca7d5 --- /dev/null +++ b/ice_validator/tests/fixtures/test_volume_resource_ids/pass/valid_template_2.yaml @@ -0,0 +1,70 @@ +heat_template_version: 2015-04-30 + +description: Heat template using json string for volumes + +parameters: + + vnf_id: + type: string + description: Unique ID for this VNF instance + + vf_module_id: + type: string + description: Unique ID for this VF module + + vnf_name: + type: string + description: Unique name for this VNF instance + + admin_names: + type: comma_delimited_list + description: Names attribute for the VMs + + availability_zone_0: + type: string + description: availability zone to be used + + admin_flavor_name: + type: string + description: flavor to be used to create this vm must be one of the following flavors + + admin_volume_ids: + type: json + description: Unique IDs for volumes + + +resources: + + admin_server_0: + type: OS::Nova::Server + properties: + availability_zone: { get_param: availability_zone_0 } + name: { get_param: [admin_names, 0] } + flavor: { get_param: admin_flavor_name} + metadata: + vnf_name: { get_param: vnf_name } + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + + admin_server_1: + type: OS::Nova::Server + properties: + availability_zone: { get_param: availability_zone_0 } + name: { get_param: [admin_names, 1] } + flavor: { get_param: admin_flavor_name} + metadata: + vnf_name: { get_param: vnf_name } + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + + admin_volume_attachment_0: + type: OS::Cinder::VolumeAttachment + properties: + volume_id: {get_param: [admin_volume_ids, 0]} + instance_uuid: {get_resource: admin_server_0} + + admin_volume_attachment_1: + type: OS::Cinder::VolumeAttachment + properties: + volume_id: {get_param: [admin_volume_ids, 1]} + instance_uuid: {get_resource: admin_server_1} diff --git a/ice_validator/tests/fixtures/test_volume_resource_ids/pass/valid_template_3.yaml b/ice_validator/tests/fixtures/test_volume_resource_ids/pass/valid_template_3.yaml new file mode 100644 index 0000000..c6d9d87 --- /dev/null +++ b/ice_validator/tests/fixtures/test_volume_resource_ids/pass/valid_template_3.yaml @@ -0,0 +1,59 @@ +heat_template_version: 2015-04-30 + +description: Heat template description + +parameters: + + vnf_id: + type: string + description: Unique ID for this VNF instance + + vf_module_id: + type: string + description: Unique ID for this VF module + + vnf_name: + type: string + description: Unique name for this VNF instance + + admin_names: + type: comma_delimited_list + description: Names attribute for the VMs + + availability_zone_0: + type: string + description: availability zone to be used + + admin_flavor_name: + type: string + description: flavor to be used to create this vm must be one of the following flavors + + admin_volume_ids: + type: json + description: Unique IDs for volumes + +resources: + + admin_server_0: + type: OS::Nova::Server + properties: + availability_zone: { get_param: availability_zone_0 } + name: { get_param: [admin_names, 0] } + block_device_mapping: [{ device_name: "vda", volume_id: { get_param : [admin_volume_ids, 0] }, delete_on_termination : "false" }] + flavor: { get_param: admin_flavor_name} + metadata: + vnf_name: { get_param: vnf_name } + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } + + admin_server_1: + type: OS::Nova::Server + properties: + availability_zone: { get_param: availability_zone_0 } + name: { get_param: [admin_names, 1] } + block_device_mapping: [{ device_name: "vda", volume_id : { get_param : [admin_volume_ids, 1] }, delete_on_termination : "false" }] + flavor: { get_param: admin_flavor_name} + metadata: + vnf_name: { get_param: vnf_name } + vnf_id: { get_param: vnf_id } + vf_module_id: { get_param: vf_module_id } diff --git a/ice_validator/tests/test_volume_resource_ids.py b/ice_validator/tests/test_volume_resource_ids.py index 3f0acda..a6a7334 100644 --- a/ice_validator/tests/test_volume_resource_ids.py +++ b/ice_validator/tests/test_volume_resource_ids.py @@ -97,7 +97,10 @@ def test_volume_resource_ids(heat_template): v3.get('get_resource')) if not volume_id: continue - volume_id = volume_id.lower() + if isinstance(volume_id, list): + volume_id = volume_id[0].lower() + else: + volume_id = volume_id.lower() if vm_type+"_" not in volume_id: invalid_volumes.append(volume_id) @@ -137,7 +140,10 @@ def test_volume_resource_ids(heat_template): properties['volume_id'].get('get_resource')) if not volume_id: continue - volume_id = volume_id.lower() + if isinstance(volume_id, list): + volume_id = volume_id[0].lower() + else: + volume_id = volume_id.lower() # do not test the case when the instance_uuid and # volume_id are not defined diff --git a/ice_validator/tests/utils/nested_iterables.py b/ice_validator/tests/utils/nested_iterables.py index 47b0609..19290c0 100644 --- a/ice_validator/tests/utils/nested_iterables.py +++ b/ice_validator/tests/utils/nested_iterables.py @@ -79,6 +79,12 @@ def find_all_get_param_in_yml(yml): elif isinstance(item, str): params.append(item) continue + elif k == 'list_join': + for item in (v if isinstance(v, list) else [v]): + if isinstance(item, list): + for d in item: + params.extend(find_all_get_param_in_yml(d)) + continue if isinstance(v, dict): params.extend(find_all_get_param_in_yml(v)) elif isinstance(v, list): -- 2.16.6