aboutsummaryrefslogtreecommitdiffstats
path: root/ice_validator
diff options
context:
space:
mode:
authoredan-att <eb578m@att.com>2017-09-14 16:52:18 +0300
committerEdan Binshtok <eb578m@intl.att.com>2017-09-14 17:06:32 +0300
commit14f744bd87e0ce036a2be13f0ae693638c85b1c3 (patch)
treed273f49ef65e342657c05abe71b809fb572695a0 /ice_validator
parentcc21b8b08b6dbcec577bfb26ff397ac899da8002 (diff)
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 <eb578m@intl.att.com>
Diffstat (limited to 'ice_validator')
-rw-r--r--ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_definition_3.yaml115
-rw-r--r--ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference_1.yaml134
-rw-r--r--ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/fail/missing_param_reference_2.yaml120
-rw-r--r--ice_validator/tests/fixtures/test_referenced_and_defined_parameters_match/pass/params_referenced_are_defined_and_vice_versa_2.yaml18
-rw-r--r--ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_nova_server_id_2.yaml60
-rw-r--r--ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_param_2.yaml61
-rw-r--r--ice_validator/tests/fixtures/test_volume_resource_ids/fail/mismatch_vm_type_volume_id_volume_attachment_2.yaml70
-rw-r--r--ice_validator/tests/fixtures/test_volume_resource_ids/pass/valid_template_2.yaml70
-rw-r--r--ice_validator/tests/fixtures/test_volume_resource_ids/pass/valid_template_3.yaml59
-rw-r--r--ice_validator/tests/test_volume_resource_ids.py10
-rw-r--r--ice_validator/tests/utils/nested_iterables.py6
11 files changed, 719 insertions, 4 deletions
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):