Add cinder volumes for OSD nodes

PROD:PROD-35107

Change-Id: I0784192cc62a8f015b9bd6ce361ec70531d0cf0c
diff --git a/tcp_tests/templates/_heat_environments/eu-cloud.env b/tcp_tests/templates/_heat_environments/eu-cloud.env
index a22b8c7..218f04b 100644
--- a/tcp_tests/templates/_heat_environments/eu-cloud.env
+++ b/tcp_tests/templates/_heat_environments/eu-cloud.env
@@ -1,11 +1,13 @@
 
 resource_registry:
   "MCP::MultipleInstance": fragments/MultipleInstance.yaml
+  "MCP::MultipleInstance2Volumes": fragments/MultipleInstance2Volumes.yaml
   #"MCP::Flavors": fragments/Flavors.yaml
   "MCP::MasterNode": fragments/MasterNode.yaml
   "MCP::Compute": fragments/Compute.yaml
   "MCP::Networks": fragments/Networks.yaml
   "MCP::SingleInstance": fragments/Instance.yaml
+  "MCP::SingleInstance2Volumes": fragments/Instance2Volumes.yaml
   "MCP::FoundationNode": fragments/FoundationNode.yaml
   "MCP::VsrxNode": fragments/VsrxNode.yaml
   "MCP::Subnets": fragments/Subnets.yaml
diff --git a/tcp_tests/templates/_heat_environments/fragments/Instance2Volumes.yaml b/tcp_tests/templates/_heat_environments/fragments/Instance2Volumes.yaml
new file mode 100644
index 0000000..31fa18d
--- /dev/null
+++ b/tcp_tests/templates/_heat_environments/fragments/Instance2Volumes.yaml
@@ -0,0 +1,145 @@
+heat_template_version: queens
+
+description: Single server instance fragment with 2 Cinder volumes attached
+
+parameters:
+  instance_flavor:
+    type: string
+  instance_name:
+    type: string
+  instance_config_host:
+    type: string
+  key_pair:
+    type: string
+  instance_domain:
+    type: string
+  net_public:
+    type: string
+  control_net_static_ip:
+    type: string
+  tenant_net_static_ip:
+    type: string
+  external_net_static_ip:
+    type: string
+  underlay_userdata:
+    type: string
+  mcp_version:
+    type: string
+  env_name:
+    type: string
+  role:
+    type: comma_delimited_list
+    default: [salt_minion]
+  availability_zone:
+    type: string
+  volume_size_db:
+    type: number
+    default: 10
+  volume_size_data:
+    type: number
+    default: 45
+
+resources:
+  instance_port01:
+    type: OS::Neutron::Port
+    properties:
+      port_security_enabled: false
+      network_id: { list_join: ['-', [ 'management_net', { get_param: env_name } ]] }
+  instance_port02:
+    type: OS::Neutron::Port
+    properties:
+      port_security_enabled: false
+      network_id: { list_join: ['-', [ 'control_net', { get_param: env_name } ]] }
+      fixed_ips:
+        - ip_address: { get_param: control_net_static_ip }
+  instance_port03:
+    type: OS::Neutron::Port
+    properties:
+      port_security_enabled: false
+      network_id: { list_join: ['-', [ 'tenant_net', { get_param: env_name } ]] }
+      fixed_ips:
+        - ip_address: { get_param: tenant_net_static_ip }
+  instance_port04:
+    type: OS::Neutron::Port
+    properties:
+      port_security_enabled: false
+      network_id: { list_join: ['-', [ 'external_net', { get_param: env_name } ]] }
+      fixed_ips:
+        - ip_address: { get_param: external_net_static_ip }
+  volume01:
+    type: OS::Cinder::Volume
+    depends_on: instance_instance
+    properties:
+      name:
+        list_join:
+        - '.'
+        - [ "volume01", { get_param: instance_name }, { get_param: instance_domain } ]
+      size: { get_param: volume_size_data }
+  volume02:
+    type: OS::Cinder::Volume
+    depends_on: instance_instance
+    properties:
+      name:
+        list_join:
+        - '.'
+        - [ "volume02", { get_param: instance_name }, { get_param: instance_domain } ]
+      size: { get_param: volume_size_db }
+  instance_volume01:
+    type: OS::Cinder::VolumeAttachment
+    depends_on: volume01
+    properties:
+      volume_id: { get_resource: volume01 }
+      instance_uuid: { get_resource: instance_instance }
+      mountpoint: /dev/vdd
+  instance_volume02:
+    type: OS::Cinder::VolumeAttachment
+    depends_on: [ volume02, instance_volume01 ]
+    properties:
+      volume_id: { get_resource: volume02 }
+      instance_uuid: { get_resource: instance_instance }
+      mountpoint: /dev/vde
+
+  instance_instance:
+    type: OS::Nova::Server
+    properties:
+      image_update_policy: REBUILD
+      flavor: { get_param: instance_flavor }
+      image: { list_join: ['', [ 'ubuntu-vcp-', { get_param: mcp_version } ]] }
+      key_name: { get_param: key_pair }
+      availability_zone: { get_param: availability_zone }
+      name:
+        list_join:
+        - '.'
+        - [ { get_param: instance_name }, { get_param: instance_domain } ]
+      networks:
+      - port: { get_resource: instance_port01 }
+      - port: { get_resource: instance_port02 }
+      - port: { get_resource: instance_port03 }
+      - port: { get_resource: instance_port04 }
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          #template: { get_file: underlay--user-data-cfg01--heat.yaml }
+          template: { get_param: underlay_userdata }
+          #template: { get_file: ../../templates/{ get_param: lab_config_name }/underlay-userdata.yaml }
+          params:
+            hostname: { list_join: ['.', [ { get_param: instance_name }, { get_param: instance_domain } ]] }
+            $node_hostname: { get_param: instance_name }
+            $node_domain: { get_param: instance_domain }
+            $config_host: { get_param: instance_config_host }
+      metadata:
+        roles: { get_param: role }
+
+outputs:
+  instance_address:
+    value:
+      get_attr:
+      - instance_instance
+      - addresses
+      - 'management_net'
+      - 0
+      - addr
+    description: "Instance's private IP address"
+  instance:
+    value: { get_resource: instance_instance }
+    description: "Instance"
diff --git a/tcp_tests/templates/_heat_environments/fragments/MultipleInstance.yaml b/tcp_tests/templates/_heat_environments/fragments/MultipleInstance.yaml
index c6fcc02..5393e3a 100644
--- a/tcp_tests/templates/_heat_environments/fragments/MultipleInstance.yaml
+++ b/tcp_tests/templates/_heat_environments/fragments/MultipleInstance.yaml
@@ -53,7 +53,6 @@
   availability_zone:
     type: string
 
-
 resources:
   instance01:
     type: MCP::SingleInstance
diff --git a/tcp_tests/templates/_heat_environments/fragments/MultipleInstance2Volumes.yaml b/tcp_tests/templates/_heat_environments/fragments/MultipleInstance2Volumes.yaml
new file mode 100644
index 0000000..003e91e
--- /dev/null
+++ b/tcp_tests/templates/_heat_environments/fragments/MultipleInstance2Volumes.yaml
@@ -0,0 +1,106 @@
+heat_template_version: queens
+
+description: 3 single nodes fragment
+
+parameters:
+  key_pair:
+    type: string
+  instance01_name:
+    type: string
+  instance02_name:
+    type: string
+  instance03_name:
+    type: string
+  instance_domain:
+    type: string
+  instance_flavor:
+    type: string
+  instance_config_host:
+    type: string
+  instance01_control_net_static_ip:
+    type: string
+  instance02_control_net_static_ip:
+    type: string
+  instance03_control_net_static_ip:
+    type: string
+  instance01_tenant_net_static_ip:
+    type: string
+  instance02_tenant_net_static_ip:
+    type: string
+  instance03_tenant_net_static_ip:
+    type: string
+  instance01_external_net_static_ip:
+    type: string
+  instance02_external_net_static_ip:
+    type: string
+  instance03_external_net_static_ip:
+    type: string
+  instance01_role:
+    type: comma_delimited_list
+    default: [salt_minion]
+  instance02_role:
+    type: comma_delimited_list
+    default: [salt_minion]
+  instance03_role:
+    type: comma_delimited_list
+    default: [salt_minion]
+  underlay_userdata:
+    type: string
+  mcp_version:
+    type: string
+  env_name:
+    type: string
+  availability_zone:
+    type: string
+
+resources:
+  instance01:
+    type: MCP::SingleInstance2Volumes
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      key_pair: { get_param: key_pair }
+      availability_zone: { get_param: availability_zone }
+      control_net_static_ip: {get_param: instance01_control_net_static_ip }
+      tenant_net_static_ip: {get_param: instance01_tenant_net_static_ip }
+      external_net_static_ip: {get_param: instance01_external_net_static_ip }
+      instance_name: { get_param: instance01_name }
+      role: { get_param: instance01_role }
+      instance_domain: { get_param: instance_domain }
+      instance_flavor: { get_param: instance_flavor }
+      instance_config_host: { get_param: instance_config_host }
+      underlay_userdata: { get_param: underlay_userdata }
+
+  instance02:
+    type: MCP::SingleInstance2Volumes
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      key_pair: { get_param: key_pair }
+      availability_zone: { get_param: availability_zone }
+      control_net_static_ip: {get_param: instance02_control_net_static_ip }
+      tenant_net_static_ip: {get_param: instance02_tenant_net_static_ip }
+      external_net_static_ip: {get_param: instance02_external_net_static_ip }
+      instance_name: { get_param: instance02_name }
+      role: { get_param: instance02_role }
+      instance_domain: { get_param: instance_domain }
+      instance_flavor: { get_param: instance_flavor }
+      instance_config_host: { get_param: instance_config_host }
+      underlay_userdata: { get_param: underlay_userdata }
+
+  instance03:
+    type: MCP::SingleInstance2Volumes
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      key_pair: { get_param: key_pair }
+      availability_zone: { get_param: availability_zone }
+      control_net_static_ip: {get_param: instance03_control_net_static_ip }
+      tenant_net_static_ip: {get_param: instance03_tenant_net_static_ip }
+      external_net_static_ip: {get_param: instance03_external_net_static_ip }
+      instance_name: { get_param: instance03_name }
+      role: { get_param: instance03_role }
+      instance_domain: { get_param: instance_domain }
+      instance_flavor: { get_param: instance_flavor }
+      instance_config_host: { get_param: instance_config_host }
+      underlay_userdata: { get_param: underlay_userdata }
diff --git a/tcp_tests/templates/_heat_environments/us-cloud.env b/tcp_tests/templates/_heat_environments/us-cloud.env
index 2c194c6..b5d0961 100644
--- a/tcp_tests/templates/_heat_environments/us-cloud.env
+++ b/tcp_tests/templates/_heat_environments/us-cloud.env
@@ -1,11 +1,13 @@
 
 resource_registry:
   "MCP::MultipleInstance": fragments/MultipleInstance.yaml
+  "MCP::MultipleInstance2Volumes": fragments/MultipleInstance2Volumes.yaml
   #"MCP::Flavors": fragments/Flavors.yaml
   "MCP::MasterNode": fragments/MasterNode.yaml
   "MCP::Compute": fragments/Compute.yaml
   "MCP::Networks": fragments/Networks.yaml
   "MCP::SingleInstance": fragments/Instance.yaml
+  "MCP::SingleInstance2Volumes": fragments/Instance2Volumes.yaml
   "MCP::FoundationNode": fragments/FoundationNode.yaml
   "MCP::VsrxNode": fragments/VsrxNode.yaml
   "MCP::Subnets": fragments/Subnets.yaml