Merge "Add secured Mirantis repo to deployments' CC"
diff --git a/jobs/pipelines/deploy-cicd-and-run-tests.groovy b/jobs/pipelines/deploy-cicd-and-run-tests.groovy
index 07684cf..1e35c9e 100644
--- a/jobs/pipelines/deploy-cicd-and-run-tests.groovy
+++ b/jobs/pipelines/deploy-cicd-and-run-tests.groovy
@@ -1,3 +1,7 @@
+/*
+*   DEPLOY_EMPTY_NODE             Add extra node to heat stack. Node without a role and with salt-minion
+*/
+
 @Library('tcp-qa')_
 
 def common = new com.mirantis.mk.Common()
diff --git a/jobs/pipelines/swarm-bootstrap-salt-cluster-heat.groovy b/jobs/pipelines/swarm-bootstrap-salt-cluster-heat.groovy
index ba52899..7ae510e 100644
--- a/jobs/pipelines/swarm-bootstrap-salt-cluster-heat.groovy
+++ b/jobs/pipelines/swarm-bootstrap-salt-cluster-heat.groovy
@@ -30,6 +30,7 @@
  *   JENKINS_PIPELINE_BRANCH       Should be set in release/proposed/2019.2.0 when we test non-released version
  *   UPDATE_VERSION                Version of update to deploy
  *   LAB_PARAM_DEFAULTS            Filename placed in tcp_tests/templates/_heat_environments, with default parameters for the heat template
+ *   DEPLOY_EMPTY_NODE             Add extra node to heat stack. Node without a role and with salt-minion
  *
  *   CREATE_JENKINS_NODE_CREDENTIALS   Jenkins username and password with rights to add/delete Jenkins agents
  */
@@ -162,6 +163,7 @@
                             export ENV_NAME=${ENV_NAME}
                             export LAB_CONFIG_NAME=${LAB_CONFIG_NAME}
                             export LAB_PARAM_DEFAULTS=${LAB_PARAM_DEFAULTS}
+                            export DEPLOY_EMPTY_NODE=${DEPLOY_EMPTY_NODE}
                             export LOG_NAME=swarm_test_create_environment.log
                             py.test --cache-clear -vvv -s -p no:django -p no:ipdb --junit-xml=deploy_hardware.xml -k \${TEST_GROUP}
                         """)
diff --git a/jobs/templates/2019.2.0-heat-cicd-pike-dvr-sl.yml b/jobs/templates/2019.2.0-heat-cicd-pike-dvr-sl.yml
index 4a8ebfd..fbd3355 100644
--- a/jobs/templates/2019.2.0-heat-cicd-pike-dvr-sl.yml
+++ b/jobs/templates/2019.2.0-heat-cicd-pike-dvr-sl.yml
@@ -105,6 +105,10 @@
         default: true
         description: ''
         name: SHUTDOWN_ENV_ON_TEARDOWN
+    - bool:
+        default: false
+        description: 'Add extra node to heat stack. Node without a role and with salt-minion'
+        name: DEPLOY_EMPTY_NODE
     - string:
         default: ''
         description: ''
diff --git a/jobs/templates/2019.2.0-heat-cicd-queens-contrail41-sl.yml b/jobs/templates/2019.2.0-heat-cicd-queens-contrail41-sl.yml
index 4da28d4..26c84d9 100644
--- a/jobs/templates/2019.2.0-heat-cicd-queens-contrail41-sl.yml
+++ b/jobs/templates/2019.2.0-heat-cicd-queens-contrail41-sl.yml
@@ -65,6 +65,10 @@
         description: ''
         name: ENV_NAME
         trim: 'false'
+    - bool:
+        default: false
+        description: 'Add extra node to heat stack. Node without a role and with salt-minion'
+        name: DEPLOY_EMPTY_NODE
     - string:
         default: ''
         description: |-
diff --git a/jobs/templates/2019.2.0-heat-cicd-queens-dvr-sl.yml b/jobs/templates/2019.2.0-heat-cicd-queens-dvr-sl.yml
index 2374cb4..91895e8 100644
--- a/jobs/templates/2019.2.0-heat-cicd-queens-dvr-sl.yml
+++ b/jobs/templates/2019.2.0-heat-cicd-queens-dvr-sl.yml
@@ -65,6 +65,10 @@
         description: ''
         name: ENV_NAME
         trim: 'false'
+    - bool:
+        default: false
+        description: 'Add extra node to heat stack. Node without a role and with salt-minion'
+        name: DEPLOY_EMPTY_NODE
     - string:
         default: ''
         description: |-
diff --git a/jobs/templates/heat-cicd-pike-dvr-sl.yml b/jobs/templates/heat-cicd-pike-dvr-sl.yml
index f3baf7e..5128bd5 100644
--- a/jobs/templates/heat-cicd-pike-dvr-sl.yml
+++ b/jobs/templates/heat-cicd-pike-dvr-sl.yml
@@ -70,6 +70,10 @@
         description: ''
         name: ENV_NAME
         trim: 'false'
+    - bool:
+        default: false
+        description: 'Add extra node to heat stack. Node without a role and with salt-minion'
+        name: DEPLOY_EMPTY_NODE
     - string:
         default: ''
         description: |-
diff --git a/jobs/templates/heat-cicd-queens-contrail41-sl.yml b/jobs/templates/heat-cicd-queens-contrail41-sl.yml
index 71f1f6a..029c090 100644
--- a/jobs/templates/heat-cicd-queens-contrail41-sl.yml
+++ b/jobs/templates/heat-cicd-queens-contrail41-sl.yml
@@ -65,6 +65,10 @@
         description: ''
         name: ENV_NAME
         trim: 'false'
+    - bool:
+        default: false
+        description: 'Add extra node to heat stack. Node without a role and with salt-minion'
+        name: DEPLOY_EMPTY_NODE
     - string:
         default: ''
         description: |-
diff --git a/jobs/templates/heat-cicd-queens-dvr-sl.yml b/jobs/templates/heat-cicd-queens-dvr-sl.yml
index b0afc13..d3bb4c6 100644
--- a/jobs/templates/heat-cicd-queens-dvr-sl.yml
+++ b/jobs/templates/heat-cicd-queens-dvr-sl.yml
@@ -64,6 +64,10 @@
         description: ''
         name: ENV_NAME
         trim: 'false'
+    - bool:
+        default: true
+        description: 'Add extra node to heat stack. Node without a role and with salt-minion'
+        name: DEPLOY_EMPTY_NODE
     - string:
         default: ''
         description: |-
diff --git a/jobs/templates/released-heat-cicd-pike-contrail41-sl.yml b/jobs/templates/released-heat-cicd-pike-contrail41-sl.yml
index 9d87587..7789c7d 100644
--- a/jobs/templates/released-heat-cicd-pike-contrail41-sl.yml
+++ b/jobs/templates/released-heat-cicd-pike-contrail41-sl.yml
@@ -62,6 +62,10 @@
         description: ''
         name: ENV_NAME
         trim: 'false'
+    - bool:
+        default: false
+        description: 'Add extra node to heat stack. Node without a role and with salt-minion'
+        name: DEPLOY_EMPTY_NODE
     - string:
         default: ''
         description: |-
diff --git a/jobs/templates/released-heat-cicd-pike-dvr-sl.yml b/jobs/templates/released-heat-cicd-pike-dvr-sl.yml
index 8b0c773..be08433 100644
--- a/jobs/templates/released-heat-cicd-pike-dvr-sl.yml
+++ b/jobs/templates/released-heat-cicd-pike-dvr-sl.yml
@@ -62,6 +62,10 @@
         description: ''
         name: ENV_NAME
         trim: 'false'
+    - bool:
+        default: false
+        description: 'Add extra node to heat stack. Node without a role and with salt-minion'
+        name: DEPLOY_EMPTY_NODE
     - string:
         default: ''
         description: |-
diff --git a/jobs/templates/released-heat-cicd-queens-contrail41-sl.yml b/jobs/templates/released-heat-cicd-queens-contrail41-sl.yml
index 983fb11..60a4372 100644
--- a/jobs/templates/released-heat-cicd-queens-contrail41-sl.yml
+++ b/jobs/templates/released-heat-cicd-queens-contrail41-sl.yml
@@ -62,6 +62,10 @@
         description: ''
         name: ENV_NAME
         trim: 'false'
+    - bool:
+        default: false
+        description: 'Add extra node to heat stack. Node without a role and with salt-minion'
+        name: DEPLOY_EMPTY_NODE
     - string:
         default: ''
         description: |-
diff --git a/jobs/templates/released-heat-cicd-queens-dvr-sl.yml b/jobs/templates/released-heat-cicd-queens-dvr-sl.yml
index f263ac3..0c0cb08 100644
--- a/jobs/templates/released-heat-cicd-queens-dvr-sl.yml
+++ b/jobs/templates/released-heat-cicd-queens-dvr-sl.yml
@@ -62,6 +62,10 @@
         description: ''
         name: ENV_NAME
         trim: 'false'
+    - bool:
+        default: false
+        description: 'Add extra node to heat stack. Node without a role and with salt-minion'
+        name: DEPLOY_EMPTY_NODE
     - string:
         default: ''
         description: |-
diff --git a/src/com/mirantis/system_qa/SharedPipeline.groovy b/src/com/mirantis/system_qa/SharedPipeline.groovy
index 4ff3f68..ec8d7b7 100644
--- a/src/com/mirantis/system_qa/SharedPipeline.groovy
+++ b/src/com/mirantis/system_qa/SharedPipeline.groovy
@@ -309,6 +309,7 @@
                 string(name: 'LAB_PARAM_DEFAULTS', value: "${LAB_PARAM_DEFAULTS}"),
                 string(name: 'JENKINS_PIPELINE_BRANCH', value: "${jenkins_pipelines_branch}"),
                 booleanParam(name: 'SHUTDOWN_ENV_ON_TEARDOWN', value: false),
+                booleanParam(name: 'DEPLOY_EMPTY_NODE', value: false),
             ]
 
         build_pipeline_job('swarm-bootstrap-salt-cluster-heat', parameters)
diff --git a/tcp_tests/managers/envmanager_heat.py b/tcp_tests/managers/envmanager_heat.py
index 1d5c852..5fe143a 100644
--- a/tcp_tests/managers/envmanager_heat.py
+++ b/tcp_tests/managers/envmanager_heat.py
@@ -557,6 +557,7 @@
             'parameters': {
                 'mcp_version': mcp_version,
                 'env_name': settings.ENV_NAME,
+                'deploy_empty_node': bool(settings.DEPLOY_EMPTY_NODE)
             }
         }
 
diff --git a/tcp_tests/settings.py b/tcp_tests/settings.py
index 5e60b86..18548fb 100644
--- a/tcp_tests/settings.py
+++ b/tcp_tests/settings.py
@@ -33,6 +33,7 @@
 ENV_NAME = os.environ.get("ENV_NAME", None)
 MAKE_SNAPSHOT_STAGES = get_var_as_bool("MAKE_SNAPSHOT_STAGES", True)
 SHUTDOWN_ENV_ON_TEARDOWN = get_var_as_bool('SHUTDOWN_ENV_ON_TEARDOWN', True)
+DEPLOY_EMPTY_NODE = get_var_as_bool('DEPLOY_EMPTY_NODE', False)
 
 LAB_CONFIG_NAME = os.environ.get('LAB_CONFIG_NAME', 'mk22-lab-basic')
 DOMAIN_NAME = os.environ.get('DOMAIN_NAME',
diff --git a/tcp_tests/templates/heat-cicd-pike-dvr-sl/salt.yaml b/tcp_tests/templates/heat-cicd-pike-dvr-sl/salt.yaml
index 8fa87c5..4796bf0 100644
--- a/tcp_tests/templates/heat-cicd-pike-dvr-sl/salt.yaml
+++ b/tcp_tests/templates/heat-cicd-pike-dvr-sl/salt.yaml
@@ -15,6 +15,7 @@
 {{SHARED.MACRO_CHECK_SALT_VERSION_ON_NODES()}}
 
 {{SHARED.MACRO_IPFLUSH_TENANTS_IFACES()}}
+{{SHARED.DISABLE_EMPTY_NODE()}}
 
 {{SHARED_TEST_TOOLS.MACRO_INSTALL_RECLASS_TOOLS()}}
 
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 4c5e949..c7f6ea6 100644
--- a/tcp_tests/templates/heat-cicd-pike-dvr-sl/underlay.hot
+++ b/tcp_tests/templates/heat-cicd-pike-dvr-sl/underlay.hot
@@ -39,6 +39,9 @@
   salt_master_control_ip:
     type: string
     default: 10.6.0.15
+  deploy_empty_node:
+    type: boolean
+    default: False
 
   key_pair:
     type: string
@@ -1065,6 +1068,35 @@
 
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
+  empty_node:
+    type: MCP::SingleInstance2Volumes
+    depends_on: [cfg01_node]
+    condition: { get_param: deploy_empty_node }
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      instance_domain: {get_param: instance_domain}
+      instance_name: xtra
+      role: none
+      instance_flavor: {get_param: osd_flavor}
+      availability_zone: { get_param: vm_availability_zone }
+      underlay_userdata: { get_file: ./underlay-userdata.yaml }
+      control_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, control_net_prefix] }, '205' ]
+      tenant_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, tenant_net_prefix] }, '205' ]
+      external_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, external_net_prefix] }, '205' ]
+
+      instance_config_host: { get_attr: [cfg01_node, instance_address] }
+
+
 outputs:
   foundation_public_ip:
     description: foundation node IP address (floating) from external network
diff --git a/tcp_tests/templates/heat-cicd-queens-contrail41-sl/salt.yaml b/tcp_tests/templates/heat-cicd-queens-contrail41-sl/salt.yaml
index b5958c1..8a1000e 100644
--- a/tcp_tests/templates/heat-cicd-queens-contrail41-sl/salt.yaml
+++ b/tcp_tests/templates/heat-cicd-queens-contrail41-sl/salt.yaml
@@ -10,6 +10,7 @@
 {{ SHARED.MACRO_INSTALL_SALT_MINIONS() }}
 
 {{SHARED.MACRO_CHECK_SALT_VERSION_SERVICES_ON_CFG()}}
+{{SHARED.DISABLE_EMPTY_NODE()}}
 
 {{SHARED.MACRO_CHECK_SALT_VERSION_ON_NODES()}}
 
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 e00f801..0c92b47 100644
--- a/tcp_tests/templates/heat-cicd-queens-contrail41-sl/underlay.hot
+++ b/tcp_tests/templates/heat-cicd-queens-contrail41-sl/underlay.hot
@@ -39,6 +39,9 @@
   salt_master_control_ip:
     type: string
     default: 10.6.0.15
+  deploy_empty_node:
+    type: boolean
+    default: False
 
   key_pair:
     type: string
@@ -983,6 +986,35 @@
         - [ { get_attr: [subnets, external_net_prefix] }, '220' ]
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
+  empty_node:
+    type: MCP::SingleInstance2Volumes
+    depends_on: [cfg01_node]
+    condition: { get_param: deploy_empty_node }
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      instance_domain: {get_param: instance_domain}
+      instance_name: xtra
+      role: none
+      instance_flavor: {get_param: osd_flavor}
+      availability_zone: { get_param: vm_availability_zone }
+      underlay_userdata: { get_file: ./underlay-userdata.yaml }
+      control_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, control_net_prefix] }, '205' ]
+      tenant_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, tenant_net_prefix] }, '205' ]
+      external_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, external_net_prefix] }, '205' ]
+
+      instance_config_host: { get_attr: [cfg01_node, instance_address] }
+
+
 outputs:
   foundation_public_ip:
     description: foundation node IP address (floating) from external network
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 c3e09fa..5775174 100644
--- a/tcp_tests/templates/heat-cicd-queens-dvr-sl/underlay.hot
+++ b/tcp_tests/templates/heat-cicd-queens-dvr-sl/underlay.hot
@@ -7,7 +7,7 @@
 parameters:
   instance_domain:
     type: string
-    default: heat-cicd-queens-dvr-sl.local
+    default: heat-cicd-queens-dvr-sl-test.local
   mcp_version:
     type: string
   env_name:
@@ -39,6 +39,9 @@
   salt_master_control_ip:
     type: string
     default: 10.6.0.15
+  deploy_empty_node:
+    type: boolean
+    default: False
 
   key_pair:
     type: string
@@ -1068,6 +1071,7 @@
   empty_node:
     type: MCP::SingleInstance2Volumes
     depends_on: [cfg01_node]
+    condition: { get_param: deploy_empty_node }
     properties:
       env_name: { get_param: env_name }
       mcp_version: { get_param: mcp_version }
diff --git a/tcp_tests/templates/released-heat-cicd-pike-contrail41-sl/salt.yaml b/tcp_tests/templates/released-heat-cicd-pike-contrail41-sl/salt.yaml
index 710f01d..ad307da 100644
--- a/tcp_tests/templates/released-heat-cicd-pike-contrail41-sl/salt.yaml
+++ b/tcp_tests/templates/released-heat-cicd-pike-contrail41-sl/salt.yaml
@@ -12,5 +12,6 @@
 {{ SHARED.MACRO_CHECK_SALT_VERSION_SERVICES_ON_CFG() }}
 
 {{ SHARED.MACRO_CHECK_SALT_VERSION_ON_NODES() }}
+{{SHARED.DISABLE_EMPTY_NODE()}}
 
 {{ SHARED_TEST_TOOLS.MACRO_INSTALL_RECLASS_TOOLS() }}
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 789f6a5..8fc50af 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
@@ -39,6 +39,9 @@
   salt_master_control_ip:
     type: string
     default: 10.6.0.15
+  deploy_empty_node:
+    type: boolean
+    default: False
 
   key_pair:
     type: string
@@ -983,6 +986,35 @@
         - [ { get_attr: [subnets, external_net_prefix] }, '220' ]
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
+  empty_node:
+    type: MCP::SingleInstance2Volumes
+    depends_on: [cfg01_node]
+    condition: { get_param: deploy_empty_node }
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      instance_domain: {get_param: instance_domain}
+      instance_name: xtra
+      role: none
+      instance_flavor: {get_param: osd_flavor}
+      availability_zone: { get_param: vm_availability_zone }
+      underlay_userdata: { get_file: ./underlay-userdata.yaml }
+      control_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, control_net_prefix] }, '205' ]
+      tenant_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, tenant_net_prefix] }, '205' ]
+      external_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, external_net_prefix] }, '205' ]
+
+      instance_config_host: { get_attr: [cfg01_node, instance_address] }
+
+
 outputs:
   foundation_public_ip:
     description: foundation node IP address (floating) from external network
diff --git a/tcp_tests/templates/released-heat-cicd-pike-dvr-sl/salt.yaml b/tcp_tests/templates/released-heat-cicd-pike-dvr-sl/salt.yaml
index 9e648aa..fd3eac2 100644
--- a/tcp_tests/templates/released-heat-cicd-pike-dvr-sl/salt.yaml
+++ b/tcp_tests/templates/released-heat-cicd-pike-dvr-sl/salt.yaml
@@ -15,6 +15,7 @@
 {{ SHARED.MACRO_CHECK_SALT_VERSION_ON_NODES() }}
 
 {{ SHARED.MACRO_IPFLUSH_TENANTS_IFACES() }}
+{{SHARED.DISABLE_EMPTY_NODE()}}
 
 {{ SHARED_TEST_TOOLS.MACRO_INSTALL_RECLASS_TOOLS() }}
 {{ SHARED_WORKAROUNDS.MACRO_CEPH_SET_PGNUM() }}
\ No newline at end of file
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 6d4be47..95fc69e 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
@@ -39,6 +39,9 @@
   salt_master_control_ip:
     type: string
     default: 10.6.0.15
+  deploy_empty_node:
+    type: boolean
+    default: False
 
   key_pair:
     type: string
@@ -1065,6 +1068,35 @@
 
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
+  empty_node:
+    type: MCP::SingleInstance2Volumes
+    depends_on: [cfg01_node]
+    condition: { get_param: deploy_empty_node }
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      instance_domain: {get_param: instance_domain}
+      instance_name: xtra
+      role: none
+      instance_flavor: {get_param: osd_flavor}
+      availability_zone: { get_param: vm_availability_zone }
+      underlay_userdata: { get_file: ./underlay-userdata.yaml }
+      control_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, control_net_prefix] }, '205' ]
+      tenant_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, tenant_net_prefix] }, '205' ]
+      external_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, external_net_prefix] }, '205' ]
+
+      instance_config_host: { get_attr: [cfg01_node, instance_address] }
+
+
 outputs:
   foundation_public_ip:
     description: foundation node IP address (floating) from external network
diff --git a/tcp_tests/templates/released-heat-cicd-queens-contrail41-sl/salt.yaml b/tcp_tests/templates/released-heat-cicd-queens-contrail41-sl/salt.yaml
index de5cfac..f68e844 100644
--- a/tcp_tests/templates/released-heat-cicd-queens-contrail41-sl/salt.yaml
+++ b/tcp_tests/templates/released-heat-cicd-queens-contrail41-sl/salt.yaml
@@ -12,5 +12,6 @@
 {{ SHARED.MACRO_CHECK_SALT_VERSION_SERVICES_ON_CFG() }}
 
 {{ SHARED.MACRO_CHECK_SALT_VERSION_ON_NODES() }}
+{{SHARED.DISABLE_EMPTY_NODE()}}
 
 {{ SHARED_TEST_TOOLS.MACRO_INSTALL_RECLASS_TOOLS() }}
\ No newline at end of file
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 e860b6b..d9da3dd 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
@@ -39,6 +39,9 @@
   salt_master_control_ip:
     type: string
     default: 10.6.0.15
+  deploy_empty_node:
+    type: boolean
+    default: False
 
   key_pair:
     type: string
@@ -983,6 +986,35 @@
         - [ { get_attr: [subnets, external_net_prefix] }, '220' ]
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
+  empty_node:
+    type: MCP::SingleInstance2Volumes
+    depends_on: [cfg01_node]
+    condition: { get_param: deploy_empty_node }
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      instance_domain: {get_param: instance_domain}
+      instance_name: xtra
+      role: none
+      instance_flavor: {get_param: osd_flavor}
+      availability_zone: { get_param: vm_availability_zone }
+      underlay_userdata: { get_file: ./underlay-userdata.yaml }
+      control_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, control_net_prefix] }, '205' ]
+      tenant_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, tenant_net_prefix] }, '205' ]
+      external_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, external_net_prefix] }, '205' ]
+
+      instance_config_host: { get_attr: [cfg01_node, instance_address] }
+
+
 outputs:
   foundation_public_ip:
     description: foundation node IP address (floating) from external network
diff --git a/tcp_tests/templates/released-heat-cicd-queens-dvr-sl/salt.yaml b/tcp_tests/templates/released-heat-cicd-queens-dvr-sl/salt.yaml
index d4eeaac..2a94e69 100644
--- a/tcp_tests/templates/released-heat-cicd-queens-dvr-sl/salt.yaml
+++ b/tcp_tests/templates/released-heat-cicd-queens-dvr-sl/salt.yaml
@@ -13,5 +13,6 @@
 {{ SHARED.MACRO_CHECK_SALT_VERSION_ON_NODES() }}
 
 {{ SHARED.MACRO_IPFLUSH_TENANTS_IFACES() }}
+{{SHARED.DISABLE_EMPTY_NODE()}}
 
 {{ SHARED_TEST_TOOLS.MACRO_INSTALL_RECLASS_TOOLS() }}
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 5ecf130..88997d7 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
@@ -39,6 +39,9 @@
   salt_master_control_ip:
     type: string
     default: 10.6.0.15
+  deploy_empty_node:
+    type: boolean
+    default: False
 
   key_pair:
     type: string
@@ -1065,6 +1068,35 @@
 
       instance_config_host: { get_attr: [cfg01_node, instance_address] }
 
+  empty_node:
+    type: MCP::SingleInstance2Volumes
+    depends_on: [cfg01_node]
+    condition: { get_param: deploy_empty_node }
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      instance_domain: {get_param: instance_domain}
+      instance_name: xtra
+      role: none
+      instance_flavor: {get_param: osd_flavor}
+      availability_zone: { get_param: vm_availability_zone }
+      underlay_userdata: { get_file: ./underlay-userdata.yaml }
+      control_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, control_net_prefix] }, '205' ]
+      tenant_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, tenant_net_prefix] }, '205' ]
+      external_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, external_net_prefix] }, '205' ]
+
+      instance_config_host: { get_attr: [cfg01_node, instance_address] }
+
+
 outputs:
   foundation_public_ip:
     description: foundation node IP address (floating) from external network