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
diff --git a/tcp_tests/templates/heat-cicd-k8s-contrail41-sl/underlay.hot b/tcp_tests/templates/heat-cicd-k8s-contrail41-sl/underlay.hot
index 9a295dc..3d9275d 100644
--- a/tcp_tests/templates/heat-cicd-k8s-contrail41-sl/underlay.hot
+++ b/tcp_tests/templates/heat-cicd-k8s-contrail41-sl/underlay.hot
@@ -549,7 +549,7 @@
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
   ceph_osd_cluster:
-    type: MCP::MultipleInstance
+    type: MCP::MultipleInstance2Volumes
     depends_on: [cfg01_node]
     properties:
       env_name: { get_param: env_name }
diff --git a/tcp_tests/templates/heat-cicd-pike-dvr-sl/salt-context-cookiecutter.yaml b/tcp_tests/templates/heat-cicd-pike-dvr-sl/salt-context-cookiecutter.yaml
index 4c27d97..6453453 100644
--- a/tcp_tests/templates/heat-cicd-pike-dvr-sl/salt-context-cookiecutter.yaml
+++ b/tcp_tests/templates/heat-cicd-pike-dvr-sl/salt-context-cookiecutter.yaml
@@ -45,15 +45,15 @@
   ceph_mon_node03_hostname: cmn03
   # Apply settings from context contexts/ceph/luminous-encrypted-devices.yml
   ceph_osd_backend: bluestore
-  ceph_osds_per_device: '1'
-  ceph_osd_data_size: ''
+  ceph_osds_per_device: '3'
+  ceph_osd_data_size: '14'
   ceph_osd_block_db_size: '3'
-  ceph_osd_dmcrypt: True
+  ceph_osd_dmcrypt: False
   ceph_osd_bond_mode: active-backup
   ceph_osd_data_partition_prefix: ""
   ceph_osd_count: '3'
-  ceph_osd_data_disks: "/dev/vdb"
-  ceph_osd_journal_or_block_db_disks: ""
+  ceph_osd_data_disks: "/dev/vdd"
+  ceph_osd_journal_or_block_db_disks: "/dev/vde"
   ceph_osd_node_count: '3'
   ceph_osd_journal_size: '3'
   ceph_osd_deploy_nic: "eth0"
diff --git a/tcp_tests/templates/heat-cicd-pike-dvr-sl/underlay.hot b/tcp_tests/templates/heat-cicd-pike-dvr-sl/underlay.hot
index 2003c57..d8359d9 100644
--- a/tcp_tests/templates/heat-cicd-pike-dvr-sl/underlay.hot
+++ b/tcp_tests/templates/heat-cicd-pike-dvr-sl/underlay.hot
@@ -806,7 +806,7 @@
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
   ceph_osd_cluster:
-    type: MCP::MultipleInstance
+    type: MCP::MultipleInstance2Volumes
     depends_on: [cfg01_node]
     properties:
       env_name: { get_param: env_name }
diff --git a/tcp_tests/templates/heat-cicd-queens-contrail41-sl/salt-context-cookiecutter-contrail.yaml b/tcp_tests/templates/heat-cicd-queens-contrail41-sl/salt-context-cookiecutter-contrail.yaml
index 7ea3233..9f1b14b 100644
--- a/tcp_tests/templates/heat-cicd-queens-contrail41-sl/salt-context-cookiecutter-contrail.yaml
+++ b/tcp_tests/templates/heat-cicd-queens-contrail41-sl/salt-context-cookiecutter-contrail.yaml
@@ -269,7 +269,7 @@
   ceph_osd_storage_address_ranges: "==IPV4_NET_CONTROL_PREFIX==.201-==IPV4_NET_CONTROL_PREFIX==.203"
   ceph_osd_backend_address_ranges: "==IPV4_NET_TENANT_PREFIX==.201-==IPV4_NET_TENANT_PREFIX==.203"
 
-  ceph_osd_data_disks: "/dev/vdb"
+  ceph_osd_data_disks: "/dev/vdd"
   ceph_osd_journal_or_block_db_disks: ""
   ceph_osd_mode: "separated"
   ceph_osd_deploy_nic: "eth0"
diff --git a/tcp_tests/templates/heat-cicd-queens-contrail41-sl/underlay.hot b/tcp_tests/templates/heat-cicd-queens-contrail41-sl/underlay.hot
index 3ffdb42..95ebe82 100644
--- a/tcp_tests/templates/heat-cicd-queens-contrail41-sl/underlay.hot
+++ b/tcp_tests/templates/heat-cicd-queens-contrail41-sl/underlay.hot
@@ -765,7 +765,7 @@
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
   ceph_osd_cluster:
-    type: MCP::MultipleInstance
+    type: MCP::MultipleInstance2Volumes
     depends_on: [cfg01_node]
     properties:
       env_name: { get_param: env_name }
diff --git a/tcp_tests/templates/heat-cicd-queens-dvr-sl/salt-context-cookiecutter.yaml b/tcp_tests/templates/heat-cicd-queens-dvr-sl/salt-context-cookiecutter.yaml
index 9b7306c..a4dbdba 100644
--- a/tcp_tests/templates/heat-cicd-queens-dvr-sl/salt-context-cookiecutter.yaml
+++ b/tcp_tests/templates/heat-cicd-queens-dvr-sl/salt-context-cookiecutter.yaml
@@ -1,3 +1,4 @@
+#Ceph Nautilus multiple osd
 default_context:
   jenkins_cfg_admin_password: r00tme
   auditd_enabled: 'False'
@@ -45,15 +46,15 @@
   ceph_mon_node03_hostname: cmn03
   # Apply changes for ceph from contexts/ceph/nautilus-encrypted-devices.yml
   ceph_osd_backend: bluestore
-  ceph_osds_per_device: '1'
-  ceph_osd_data_size: ''
+  ceph_osds_per_device: '3'
+  ceph_osd_data_size: '14'
   ceph_osd_dmcrypt: True
   ceph_osd_block_db_size: '3'
   ceph_osd_data_partition_prefix: ""
   ceph_osd_bond_mode: active-backup
   ceph_osd_count: '3'
-  ceph_osd_data_disks: "/dev/vdb"
-  ceph_osd_journal_or_block_db_disks: ""
+  ceph_osd_data_disks: "/dev/vdd"
+  ceph_osd_journal_or_block_db_disks: "/dev/vde"
   ceph_osd_mode: "separated"
   ceph_osd_node_count: '3'
   ceph_osd_journal_size: '3'
diff --git a/tcp_tests/templates/heat-cicd-queens-dvr-sl/underlay.hot b/tcp_tests/templates/heat-cicd-queens-dvr-sl/underlay.hot
index 919f2df..0d2c6bb 100644
--- a/tcp_tests/templates/heat-cicd-queens-dvr-sl/underlay.hot
+++ b/tcp_tests/templates/heat-cicd-queens-dvr-sl/underlay.hot
@@ -806,7 +806,7 @@
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
   ceph_osd_cluster:
-    type: MCP::MultipleInstance
+    type: MCP::MultipleInstance2Volumes
     depends_on: [cfg01_node]
     properties:
       env_name: { get_param: env_name }
diff --git a/tcp_tests/templates/released-heat-cicd-pike-contrail41-sl/underlay.hot b/tcp_tests/templates/released-heat-cicd-pike-contrail41-sl/underlay.hot
index 3d48557..b27c8c3 100644
--- a/tcp_tests/templates/released-heat-cicd-pike-contrail41-sl/underlay.hot
+++ b/tcp_tests/templates/released-heat-cicd-pike-contrail41-sl/underlay.hot
@@ -765,7 +765,7 @@
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
   ceph_osd_cluster:
-    type: MCP::MultipleInstance
+    type: MCP::MultipleInstance2Volumes
     depends_on: [cfg01_node]
     properties:
       env_name: { get_param: env_name }
diff --git a/tcp_tests/templates/released-heat-cicd-pike-dvr-sl/underlay.hot b/tcp_tests/templates/released-heat-cicd-pike-dvr-sl/underlay.hot
index 301f98f..8302d0a 100644
--- a/tcp_tests/templates/released-heat-cicd-pike-dvr-sl/underlay.hot
+++ b/tcp_tests/templates/released-heat-cicd-pike-dvr-sl/underlay.hot
@@ -806,7 +806,7 @@
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
   ceph_osd_cluster:
-    type: MCP::MultipleInstance
+    type: MCP::MultipleInstance2Volumes
     depends_on: [cfg01_node]
     properties:
       env_name: { get_param: env_name }
diff --git a/tcp_tests/templates/released-heat-cicd-queens-contrail41-sl/underlay.hot b/tcp_tests/templates/released-heat-cicd-queens-contrail41-sl/underlay.hot
index 53c124c..f1c94d8 100644
--- a/tcp_tests/templates/released-heat-cicd-queens-contrail41-sl/underlay.hot
+++ b/tcp_tests/templates/released-heat-cicd-queens-contrail41-sl/underlay.hot
@@ -765,7 +765,7 @@
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
   ceph_osd_cluster:
-    type: MCP::MultipleInstance
+    type: MCP::MultipleInstance2Volumes
     depends_on: [cfg01_node]
     properties:
       env_name: { get_param: env_name }
diff --git a/tcp_tests/templates/released-heat-cicd-queens-dvr-sl/underlay.hot b/tcp_tests/templates/released-heat-cicd-queens-dvr-sl/underlay.hot
index 9aca056..c48e0c2 100644
--- a/tcp_tests/templates/released-heat-cicd-queens-dvr-sl/underlay.hot
+++ b/tcp_tests/templates/released-heat-cicd-queens-dvr-sl/underlay.hot
@@ -806,7 +806,7 @@
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
   ceph_osd_cluster:
-    type: MCP::MultipleInstance
+    type: MCP::MultipleInstance2Volumes
     depends_on: [cfg01_node]
     properties:
       env_name: { get_param: env_name }