Merge "Add DHCP discovery for ens6 interface on contrail envs"
diff --git a/checklist.yaml b/checklist.yaml
index 7757900..107c75f 100644
--- a/checklist.yaml
+++ b/checklist.yaml
@@ -1,5 +1,24 @@
 tests:
 
+  - title: deployment_*
+    errors:
+      - 'special characters are not allowed'
+    status: ProdFailed
+    defects: PROD-0
+
+  - title: deployment_*
+    errors:
+      - "SaltReqTimeoutError: Message timed out"
+    status: ProdFailed
+    defects: PROD-35053
+
+  - title: deployment_*
+    errors:
+      - "Exception: Step 'Configure salt-minion on osd"
+      - No space left on device
+    status: ProdFailed
+    defects: PROD-36101
+
   - title: 'tempest.api.network.admin.test_routers.RoutersAdminTest.test_update_router_set_gateway[id-6cc285d8-46bf-4f36-9b1a-783e3008ba79]'
     errors:
       - 'testtools.matchers._impl.MismatchError: 0 != 1'
diff --git a/jobs/pipelines/deploy-cicd-and-run-tests.groovy b/jobs/pipelines/deploy-cicd-and-run-tests.groovy
index 1e35c9e..10536c7 100644
--- a/jobs/pipelines/deploy-cicd-and-run-tests.groovy
+++ b/jobs/pipelines/deploy-cicd-and-run-tests.groovy
@@ -32,18 +32,6 @@
             shared.prepare_working_dir(env_manager)
         }
 
-        // Reboot Hardware before the BM deployments
-        if ("$ENV_NAME".contains("bm-")){
-            reboot_hw_nodes = env.REBOOT_HW_NODES ?: false
-            stage("Reboot HW nodes") {
-                if (reboot_hw_nodes) {
-                    shared.reboot_hardware_nodes()
-                } else {
-                    common.printMsg("REBOOT_HW_NODES is disabled. Skipping this stage...", "blue")
-                }
-            }
-        }
-
         stage("Create environment, generate model, bootstrap the salt-cluster") {
             // steps: "hardware,create_model,salt"
             if (env_manager == 'devops') {
diff --git a/jobs/pipelines/run-test-scenarios.groovy b/jobs/pipelines/run-test-scenarios.groovy
index f62825f..31aff06 100644
--- a/jobs/pipelines/run-test-scenarios.groovy
+++ b/jobs/pipelines/run-test-scenarios.groovy
@@ -48,12 +48,13 @@
                     }
                 } catch (e) {
                     common.printMsg("Tests are failed: " + e.message, "purple")
+                    currentBuild.result = 'FAILURE'
                 }
             } // stage("Run tests")
 
             stage("Archive all xml reports") {
                 dir("${env.slave_workdir }") {
-                    archiveArtifacts artifacts: "**/*.xml,**/*.ini,**/*.log,**/*.tar.gz"
+                    archiveArtifacts artifacts: "**/*.xml,**/*.log"
                     }
             }
 
diff --git a/jobs/pipelines/swarm-bootstrap-salt-cluster-heat.groovy b/jobs/pipelines/swarm-bootstrap-salt-cluster-heat.groovy
index 7ae510e..e652b72 100644
--- a/jobs/pipelines/swarm-bootstrap-salt-cluster-heat.groovy
+++ b/jobs/pipelines/swarm-bootstrap-salt-cluster-heat.groovy
@@ -284,7 +284,7 @@
                         [ -d /home/jenkins/venv_testrail_analyzer ] || virtualenv --python=python3 /home/jenkins/venv_testrail_analyzer
                     """, true, false, true)
                     shared.run_cmd("""\
-                        . /home/jenkins/venv_testrail_analyzer/bin/activate; pip install git+https://github.com/ibumarskov/testrail-reporter
+                        . /home/jenkins/venv_testrail_analyzer/bin/activate; pip install git+https://review.gerrithub.io/ibumarskov/testrail-reporter@refs/changes/94/514594/3
                     """)
                     shared.update_working_dir()
                 }
diff --git a/jobs/pipelines/swarm-testrail-report.groovy b/jobs/pipelines/swarm-testrail-report.groovy
index 4af60af..dc9ed1f 100644
--- a/jobs/pipelines/swarm-testrail-report.groovy
+++ b/jobs/pipelines/swarm-testrail-report.groovy
@@ -89,6 +89,9 @@
                     ]
                     ret = shared.upload_results_to_testrail(deployment_report_name, testPlanName, testSuiteName, methodname, testrail_name_template, reporter_extra_options)
                     common.printMsg(ret.stdout, "blue")
+                    marked = shared.mark_test_results(testPlanName, testSuiteName)
+                    common.printMsg(marked.stdout, "blue")
+
                     report_url = ret.stdout.split("\n").each {
                         if (it.contains("[TestRun URL]")) {
                             common.printMsg("Found report URL: " + it.trim().split().last(), "blue")
@@ -102,7 +105,7 @@
             if (tcpqa_report_name) {
                 stage("tcp-qa cases report") {
                     testSuiteName = "[MCP_X] integration cases"
-                    methodname = "{methodname}"
+                    methodname = "{classname}.{methodname}"
                     testrail_name_template = "{title}"
                     reporter_extra_options = [
                       "--testrail-add-missing-cases",
@@ -110,6 +113,9 @@
                     ]
                     ret = shared.upload_results_to_testrail(tcpqa_report_name, testPlanName, testSuiteName, methodname, testrail_name_template, reporter_extra_options)
                     common.printMsg(ret.stdout, "blue")
+                    marked = shared.mark_test_results(testPlanName, testSuiteName)
+                    common.printMsg(marked.stdout, "blue")
+
                     report_url = ret.stdout.split("\n").each {
                         if (it.contains("[TestRun URL]")) {
                             common.printMsg("Found report URL: " + it.trim().split().last(), "blue")
diff --git a/jobs/project.yaml b/jobs/project.yaml
index 77a0e12..3e0f38c 100644
--- a/jobs/project.yaml
+++ b/jobs/project.yaml
@@ -20,6 +20,8 @@
       - bm-cicd-queens-ovs-maas
       - heat-bm-cicd-pike-contrail-sl
       - heat-bm-cicd-queens-contrail-sl
+      - bm-e7-cicd-pike-ovs-maas:
+          disabled: false
       - released-bm-pike-ovs
       # --- Released envs ------
       - deploy-released:
@@ -51,6 +53,7 @@
       # - diff_params_reclass_system - can't moved to JJB, unsupported parameters
       - environment-template-ci
       - self-deploy-jobs
+      - self-deploy-virtualenvs
       - tcp-qa-ci
       - test_cleanup
       # - testrail-reporter-ci - can't moved to JJB, unsupported parameters
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 fbd3355..f4bbdb7 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
@@ -171,7 +171,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/,
           for example: microcloud-8116.env
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 26c84d9..dee912d 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
@@ -171,7 +171,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/,
           for example: microcloud-8116.env
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 91895e8..d70132c 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
@@ -171,7 +171,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/,
           for example: microcloud-8116.env
diff --git a/jobs/templates/bm-cicd-pike-ovs-maas.yml b/jobs/templates/bm-cicd-pike-ovs-maas.yml
index 6b30a2a..cd44b20 100644
--- a/jobs/templates/bm-cicd-pike-ovs-maas.yml
+++ b/jobs/templates/bm-cicd-pike-ovs-maas.yml
@@ -159,7 +159,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/
           , for example: microcloud-8116.env
@@ -199,10 +199,6 @@
         default: true
         description: 'Works starting from MCP 2019.2.10 or master. Whether to apply saltstack updates on all nodes in cluster before deployment'
         name: UPGRADE_SALTSTACK
-    - bool:
-        default: true
-        description: Reboot hardware servers and set boot to PXE before the deployment
-        name: REBOOT_HW_NODES
     pipeline-scm:
       lightweight-checkout: false
       scm:
diff --git a/jobs/templates/bm-cicd-queens-ovs-maas.yml b/jobs/templates/bm-cicd-queens-ovs-maas.yml
index 95b0343..b8f2ccc 100644
--- a/jobs/templates/bm-cicd-queens-ovs-maas.yml
+++ b/jobs/templates/bm-cicd-queens-ovs-maas.yml
@@ -159,7 +159,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/
           , for example: microcloud-8116.env
@@ -212,10 +212,6 @@
         default: false
         description: 'Works starting from MCP 2019.2.10 or master. Whether to apply saltstack updates on all nodes in cluster before deployment'
         name: UPGRADE_SALTSTACK
-    - bool:
-        default: true
-        description: Reboot hardware servers and set boot to PXE before the deployment
-        name: REBOOT_HW_NODES
     pipeline-scm:
       lightweight-checkout: false
       scm:
diff --git a/jobs/templates/bm-e7-cicd-pike-ovs-maas.yml b/jobs/templates/bm-e7-cicd-pike-ovs-maas.yml
new file mode 100644
index 0000000..c85ff11
--- /dev/null
+++ b/jobs/templates/bm-e7-cicd-pike-ovs-maas.yml
@@ -0,0 +1,211 @@
+- job-template:
+    project-type: pipeline
+    description: '{job-description}'
+    concurrent: true
+    disabled: false
+    name: bm-e7-cicd-pike-ovs-maas
+    parameters:
+    - string:
+        default: bm-e7-cicd-pike-ovs-maas
+        description: ''
+        name: LAB_CONFIG_NAME
+        trim: 'false'
+    - string:
+        default: core,kvm,cicd
+        description: Comma-separated list of stacks to deploy the drivetrain (salt
+          cluster and cicd nodes)
+        name: DRIVETRAIN_STACK_INSTALL
+        trim: 'false'
+    - string:
+        default: '24000'
+        description: ''
+        name: DRIVETRAIN_STACK_INSTALL_TIMEOUT
+        trim: 'false'
+    - string:
+        default: openstack,ovs,stacklight
+        description: Comma-separated list of stacks to deploy the target platform
+          (openstack and additional components)
+        name: PLATFORM_STACK_INSTALL
+        trim: 'false'
+    - string:
+        default: '24000'
+        description: ''
+        name: PLATFORM_STACK_INSTALL_TIMEOUT
+        trim: 'false'
+    - string:
+        default: 2019.2.0
+        description: ''
+        name: MCP_VERSION
+        trim: 'false'
+    - string:
+        default: sre-team-infra
+        description: ''
+        name: NODE_NAME
+        trim: 'false'
+    - string:
+        default: /home/jenkins/images/ubuntu-16-04-x64-mcp2019.2.0.qcow2
+        description: ''
+        name: MCP_IMAGE_PATH1604
+        trim: 'false'
+    - string:
+        default: /home/jenkins/images/cfg01-day01.qcow2
+        description: ''
+        name: IMAGE_PATH_CFG01_DAY01
+        trim: 'false'
+    - string:
+        default: cfg01.${{LAB_CONFIG_NAME}}-config-drive.iso
+        description: ISO name that will be generated and downloaded to the /home/jenkins/images/
+        name: CFG01_CONFIG_IMAGE_NAME
+        trim: 'false'
+    - string:
+        default: bm-e7-cicd-pike-ovs-maas
+        description: ''
+        name: ENV_NAME
+        trim: 'false'
+    - string:
+        default: ''
+        description: |-
+          Example: refs/changes/89/411189/36
+          (for now - only one reference allowed)
+        name: TCP_QA_REFS
+        trim: 'false'
+    - string:
+        default: refs/heads/release/2019.2.0
+        description: reference to patchset in pipeline-library
+        name: PIPELINE_LIBRARY_REF
+        trim: 'false'
+    - string:
+        default: refs/heads/release/2019.2.0
+        description: reference to patchset in mk-pipelines
+        name: MK_PIPELINES_REF
+        trim: 'false'
+    - string:
+        default: release/2019.2.0
+        description: Can be 'master' or 'proposed'. If empty, then takes ${{MCP_VERSION}}
+          value
+        name: COOKIECUTTER_TEMPLATE_COMMIT
+        trim: 'false'
+    - string:
+        default: release/2019.2.0
+        description: Can be 'master' or 'proposed'. If empty, then takes ${{MCP_VERSION}}
+          value
+        name: SALT_MODELS_SYSTEM_COMMIT
+        trim: 'false'
+    - string:
+        default: -m "run_cvp_func_sanity|run_cvp_tempest|run_stacklight"
+        description: |-
+          Pytest option -k or -m, with expression to select necessary tests.
+          Additional pytest options are allowed.
+        name: RUN_TEST_OPTS
+        trim: 'false'
+    - bool:
+        default: true
+        description: ''
+        name: SHUTDOWN_ENV_ON_TEARDOWN
+    - string:
+        default: ''
+        description: ''
+        name: COOKIECUTTER_REF_CHANGE
+        trim: 'false'
+    - string:
+        default: ''
+        description: ''
+        name: ENVIRONMENT_TEMPLATE_REF_CHANGE
+        trim: 'false'
+    - string:
+        default: '[MCP1.1_PIKE]Tempest'
+        description: ''
+        name: TEMPEST_TEST_SUITE_NAME
+        trim: 'false'
+    - string:
+        default: pike
+        description: ''
+        name: TEMPEST_IMAGE_VERSION
+        trim: 'false'
+    - string:
+        default: proposed
+        description: ''
+        name: UPDATE_REPO_CUSTOM_TAG
+        trim: 'false'
+    - bool:
+        default: true
+        description: If set, reports will be created in TestRail for this build
+        name: REPORT_TO_TESTRAIL
+    - choice:
+        choices:
+        - heat
+        - devops
+        description: ''
+        name: ENV_MANAGER
+    - string:
+        default: https://ic-eu.ssl.mirantis.net:5000/v3
+        description: 'Openstack keystone catalog endpoint, for example https://10.90.0.80:5000/v3'
+        name: OS_AUTH_URL
+        trim: 'false'
+    - string:
+        default: sre-team
+        description: OpenStack project (tenant) name
+        name: OS_PROJECT_NAME
+        trim: 'false'
+    - string:
+        default: default
+        description: OpenStack user domain name
+        name: OS_USER_DOMAIN_NAME
+        trim: 'false'
+    - string:
+        default: sre-qa-ci-eu
+        description: Jenkins credentials ID with username and password to create a
+          heat stack in OpenStack
+        name: OS_CREDENTIALS
+        trim: 'false'
+    - string:
+        default: eu-cloud.env
+        description: |-
+          Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/
+          , for example: microcloud-8116.env
+        name: LAB_PARAM_DEFAULTS
+        trim: 'false'
+    - string:
+        default: release/2019.2.0
+        description: ''
+        name: JENKINS_PIPELINE_BRANCH
+        trim: 'false'
+    - string:
+        default: refs/heads/release/2019.2.0
+        description: ''
+        name: MCP_COMMON_SCRIPTS_REFS
+        trim: 'false'
+    - string:
+        default: proposed
+        description: ''
+        name: UPDATE_VERSION
+        trim: 'false'
+    - password:
+        name: IPMI_USER
+        default: 'engineer'
+    - password:
+        name: IPMI_PASS
+        default: 'K7wy5Y39g6Ii'
+    - string:
+        default: ''
+        description: ''
+        name: BATCH_SIZE
+        trim: 'false'
+    - bool:
+        default: true
+        description: Whether to perform dist-upgrade on virtual nodes during deployment
+        name: DIST_UPGRADE_NODES
+    - bool:
+        default: true
+        description: 'Works starting from MCP 2019.2.10 or master. Whether to apply saltstack updates on all nodes in cluster before deployment'
+        name: UPGRADE_SALTSTACK
+    pipeline-scm:
+      lightweight-checkout: false
+      scm:
+      - git:
+          branches:
+          - FETCH_HEAD
+          refspec: ${{TCP_QA_REFS}}
+          url: https://gerrit.mcp.mirantis.com/mcp/tcp-qa
+      script-path: jobs/pipelines/deploy-cicd-and-run-tests.groovy
+
diff --git a/jobs/templates/heat-bm-cicd-pike-contrail-sl.yml b/jobs/templates/heat-bm-cicd-pike-contrail-sl.yml
index 531b1e9..ba5b6da 100644
--- a/jobs/templates/heat-bm-cicd-pike-contrail-sl.yml
+++ b/jobs/templates/heat-bm-cicd-pike-contrail-sl.yml
@@ -166,7 +166,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/
           , for example: microcloud-8116.env
@@ -225,10 +225,6 @@
         default: true
         description: 'Works starting from MCP 2019.2.10 or master. Whether to apply saltstack updates on all nodes in cluster before deployment'
         name: UPGRADE_SALTSTACK
-    - bool:
-        default: true
-        description: Reboot hardware servers and set boot to PXE before the deployment
-        name: REBOOT_HW_NODES
     pipeline-scm:
       lightweight-checkout: false
       scm:
diff --git a/jobs/templates/heat-bm-cicd-queens-contrail-sl.yml b/jobs/templates/heat-bm-cicd-queens-contrail-sl.yml
index 09cd0fb..a46b7c1 100644
--- a/jobs/templates/heat-bm-cicd-queens-contrail-sl.yml
+++ b/jobs/templates/heat-bm-cicd-queens-contrail-sl.yml
@@ -167,7 +167,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/
           , for example: microcloud-8116.env
@@ -226,10 +226,6 @@
         default: false
         description: 'Works starting from MCP 2019.2.10 or master. Whether to apply saltstack updates on all nodes in cluster before deployment'
         name: UPGRADE_SALTSTACK
-    - bool:
-        default: true
-        description: Reboot hardware servers and set boot to PXE before the deployment
-        name: REBOOT_HW_NODES
     pipeline-scm:
       lightweight-checkout: false
       scm:
diff --git a/jobs/templates/heat-cicd-pike-dvr-sl.yml b/jobs/templates/heat-cicd-pike-dvr-sl.yml
index 5128bd5..31623fc 100644
--- a/jobs/templates/heat-cicd-pike-dvr-sl.yml
+++ b/jobs/templates/heat-cicd-pike-dvr-sl.yml
@@ -176,7 +176,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/
           , for example: microcloud-8116.env
diff --git a/jobs/templates/heat-cicd-queens-contrail41-sl.yml b/jobs/templates/heat-cicd-queens-contrail41-sl.yml
index 029c090..3a17c80 100644
--- a/jobs/templates/heat-cicd-queens-contrail41-sl.yml
+++ b/jobs/templates/heat-cicd-queens-contrail41-sl.yml
@@ -169,7 +169,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/,
           for example: microcloud-8116.env
diff --git a/jobs/templates/heat-cicd-queens-dvr-sl.yml b/jobs/templates/heat-cicd-queens-dvr-sl.yml
index d3bb4c6..e138c6e 100644
--- a/jobs/templates/heat-cicd-queens-dvr-sl.yml
+++ b/jobs/templates/heat-cicd-queens-dvr-sl.yml
@@ -170,7 +170,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/,
           for example: microcloud-8116.env
diff --git a/jobs/templates/released-bm-pike-ovs.yml b/jobs/templates/released-bm-pike-ovs.yml
index 4c96960..5daf58b 100644
--- a/jobs/templates/released-bm-pike-ovs.yml
+++ b/jobs/templates/released-bm-pike-ovs.yml
@@ -154,7 +154,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/
           , for example: microcloud-8116.env
diff --git a/jobs/templates/released-heat-cicd-pike-contrail41-sl.yml b/jobs/templates/released-heat-cicd-pike-contrail41-sl.yml
index 7789c7d..fbd19fd 100644
--- a/jobs/templates/released-heat-cicd-pike-contrail41-sl.yml
+++ b/jobs/templates/released-heat-cicd-pike-contrail41-sl.yml
@@ -186,7 +186,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/
           , for example: microcloud-8116.env
diff --git a/jobs/templates/released-heat-cicd-pike-dvr-sl.yml b/jobs/templates/released-heat-cicd-pike-dvr-sl.yml
index be08433..ad28b00 100644
--- a/jobs/templates/released-heat-cicd-pike-dvr-sl.yml
+++ b/jobs/templates/released-heat-cicd-pike-dvr-sl.yml
@@ -185,7 +185,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/
           , for example: microcloud-8116.env
diff --git a/jobs/templates/released-heat-cicd-queens-contrail41-sl.yml b/jobs/templates/released-heat-cicd-queens-contrail41-sl.yml
index 60a4372..585b2c9 100644
--- a/jobs/templates/released-heat-cicd-queens-contrail41-sl.yml
+++ b/jobs/templates/released-heat-cicd-queens-contrail41-sl.yml
@@ -183,7 +183,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/,
           for example: microcloud-8116.env
diff --git a/jobs/templates/released-heat-cicd-queens-dvr-sl.yml b/jobs/templates/released-heat-cicd-queens-dvr-sl.yml
index 0c0cb08..6caec65 100644
--- a/jobs/templates/released-heat-cicd-queens-dvr-sl.yml
+++ b/jobs/templates/released-heat-cicd-queens-dvr-sl.yml
@@ -185,7 +185,7 @@
         name: OS_CREDENTIALS
         trim: 'false'
     - string:
-        default: eu-cloud.env
+        default: eu-cloud-low-flavors.env
         description: |-
           Heat template environment filename with 'parameter_defaults' dict, placed in tcp_tests/templates/_heat_environments/
           , for example: microcloud-8116.env
diff --git a/jobs/templates/self-deploy-virtulenvs.yaml b/jobs/templates/self-deploy-virtulenvs.yaml
new file mode 100644
index 0000000..eb2c89b
--- /dev/null
+++ b/jobs/templates/self-deploy-virtulenvs.yaml
@@ -0,0 +1,24 @@
+---
+- job-template:
+    concurrent: false
+    disabled: false
+    description: '{job-description}'
+    name: self-deploy-virtualenvs
+    display-name: Update virtualenvs on SRE CI
+    parameters:
+    - string:
+        default: 'master'
+        description: 'tcp-qa review refspec'
+        name: TCP_QA_REFS
+        trim: 'true'
+    scm:
+      - git:
+          branches:
+            - FETCH_HEAD
+          refspec: '${{TCP_QA_REFS}}'
+          url: https://gerrit.mcp.mirantis.com/mcp/tcp-qa
+    builders:
+      - shell: "chmod +x tcp_tests/templates/_packer/scripts/jenkins_virtualenvs.sh"
+      - shell: "export CHANGE_RIGHTS=false ; ./tcp_tests/templates/_packer/scripts/jenkins_virtualenvs.sh"
+
+
diff --git a/jobs/templates/test-scenarios.yml b/jobs/templates/test-scenarios.yml
index 730341e..e6a8f06 100644
--- a/jobs/templates/test-scenarios.yml
+++ b/jobs/templates/test-scenarios.yml
@@ -62,17 +62,30 @@
     name: 'backup-tests'
     test_scenario:
 
-      - backup-saltmaster-queens-dvr-sl:
+      - backup-saltmaster:
           run-test-opts: '-k TestBackupRestoreMaster'
           deployment: heat-cicd-queens-dvr-sl
+          display-name: Backup/Restore SaltMaster
 
-      - backup-saltmaster-pike-dvr-sl:
+      - backup-saltmaster-with-maas:
          run-test-opts: '-k TestBackupRestoreMaster'
-         deployment: heat-cicd-pike-dvr-sl
+         deployment: bm-cicd-queens-ovs-maas
+         display-name: Backup/Restore SaltMaster (with MAAS)
 
       - backup-cassandra-queens-contrail-sl:
          run-test-opts: '-k TestBackupRestoreCassandra'
          deployment: heat-cicd-queens-contrail41-sl
+         display-name: Backup/restore Cassandra
+
+      - backup-galera-queens-sl:
+          run-test-opts: '-k TestBackupRestoreGalera'
+          deployment: heat-cicd-queens-dvr-sl
+          display-name: Backup/restore Galera
+
+      - backup-zookeeper-queens-sl:
+          run-test-opts: '-k TestBackupRestoreZooKeeper'
+          deployment: heat-cicd-queens-contrail41-sl
+          display-name: Backup/restore Zookeeper
 
     jobs:
       - '{test_scenario}'
@@ -81,8 +94,17 @@
     name: 'ceph-tests'
     test_scenario:
       - ceph_osd-queens-dvr-sl:
-         run-test-opts: '-k TestCephOsd'
-         deployment: heat-cicd-queens-dvr-sl
+          run-test-opts: '-k TestCephOsd'
+          deployment: heat-cicd-queens-dvr-sl
+          display-name: Add/Remove OSD node
+      - ceph_cmn-queens-dvr-sl:
+          run-test-opts: '-k TestCephMon'
+          deployment: heat-cicd-queens-dvr-sl
+          display-name: Add/Remove CMN node
+      - ceph_mgr-queens-dvr-sl:
+          run-test-opts: '-k TestCephMgr'
+          deployment: heat-cicd-queens-dvr-sl
+          display-name: Add/Remove MGR node
     jobs:
       - '{test_scenario}'
 
@@ -119,30 +141,36 @@
           deployment: released-heat-cicd-pike-dvr-sl
           disabled: true
           run-test-opts: '{test-opt}'
+          display-name: MCP update (pike)
 
       - mcp-update-queens-dvr-sl:
           deployment: released-heat-cicd-queens-dvr-sl
           disabled: true
           run-test-opts: '{test-opt}'
+          display-name: MCP update (queens)
 
       - mcp-update-pike-contrail-sl:
           deployment: released-heat-cicd-pike-contrail41-sl
           disabled: true
           run-test-opts: '{test-opt-with-contrail}'
+          display-name: MCP update (pike + OC)
 
       - mcp-update-queens-contrail-sl:
           deployment: released-heat-cicd-queens-contrail41-sl
           disabled: true
           run-test-opts: '{test-opt-with-contrail}'
+          display-name: MCP update (queens + OC)
 
       - os-update-pike-to-queens:
           deployment: heat-cicd-pike-dvr-sl
           run-test-opts: '-k TestUpdatePikeToQueens'
+          display-name: Update Pike -> Queens
 
       - ceph-update-luminous-to-nautilus:
           deployment: heat-cicd-pike-dvr-sl
           disabled: true
-          run-test-opts: '-k TestCephUpdate'
+          run-test-opts: '-k TestCephLuminousUpgrade'
+          display-name: Update Ceph Luminous -> Nautilus
 
     jobs:
       - '{test_scenario}'
@@ -150,6 +178,7 @@
 ###################### JOB TEMPLATE ###################
 - job-template:
     name: '{test_scenario}'
+    display-name: '{display-name}'
     project-type: pipeline
     concurrent: false
     disabled: '{disabled|false}'
@@ -192,12 +221,6 @@
         name: ENV_NAME
         trim: 'false'
     - string:
-        default: ''
-        description: 'Example: refs/changes/89/411189/36
-                       (for now - only one reference allowed)'
-        name: TCP_QA_REFS
-        trim: 'false'
-    - string:
         default: 'openstack_slave_{deployment}'
         description: 'Required: Name of the jenkins slave to create the environment
                       To be set by the parent deployment job.'
@@ -210,6 +233,11 @@
         name: PARENT_WORKSPACE
         trim: 'false'
     - string:
+        default: '2019.2.0'
+        description: 'MCP version'
+        name: MCP_VERSION
+        trim: 'false'
+    - string:
         default: ''
         description: 'Completed steps to install components on the environment.
                       If tests require some additional components, it may be installed in
diff --git a/jobs/view.yaml b/jobs/view.yaml
index fc30261..fdf9f3c 100644
--- a/jobs/view.yaml
+++ b/jobs/view.yaml
@@ -23,12 +23,8 @@
     view-type: list
     description: |
       Managed by JJB <br>
-      <b>!!! Jobs run on manual trigger, deploy 2019.2.4 release with enabled Q4 updates repos from http://mirror.mirantis.com/update/2019.2.0/ !!!</b><br>
+      <b>!!! Jobs run on manual trigger, deploy 2019.2.4 release with enabled Q4 updates repos from http://mirror.mirantis.com/update/2019.2.4/ !!!</b><br>
       see deploy details To enable deploy from tags 2019.2.4<br>
-      SALT_MODELS_SYSTEM_COMMIT: fe72c46d604dcf1d44e4478d60204846b899a77a<br>
-      COOKIECUTTER_TEMPLATE_COMMIT:1deaf78727cb3bad748fbd73bcfb6af451a046c1<br>
-      MK_PIPELINES_REF: refs/tags/2019.2.4<br>
-      PIPELINE_LIBRARY_REF: refs/tags/2019.2.4<br>
     filter-executors: true
     filter-queue: true
     job-name:
@@ -71,11 +67,12 @@
     name: self-deploy
     view-type: list
     description: |
-      MCP-2019.2.x-proposed-updates, managed by JJB
+      Jobs to update SRE CI configuration
     filter-executors: true
     filter-queue: true
     job-name:
       - self-deploy-jobs
+      - self-deploy-virtualenvs
     columns:
       - status
       - weather
diff --git a/src/com/mirantis/system_qa/SharedPipeline.groovy b/src/com/mirantis/system_qa/SharedPipeline.groovy
index c42d43f..72ff052 100644
--- a/src/com/mirantis/system_qa/SharedPipeline.groovy
+++ b/src/com/mirantis/system_qa/SharedPipeline.groovy
@@ -780,33 +780,3 @@
     return ret
   }
 }
-
-def reboot_hardware_nodes() {
-    bm_ips = [
-        "185.8.59.227",
-        "185.8.59.229",
-        "5.43.225.88",
-        "5.43.225.112",
-        "5.43.225.208",
-        "5.43.227.118",
-        "185.8.58.248",
-        "185.8.59.222",
-        "5.43.225.228",
-        "5.43.229.28",
-        "5.43.225.23",
-        "185.8.58.9",
-        "185.8.58.246",
-        "185.8.58.243",
-        "185.8.58.244"
-        ]
-
-    withCredentials([
-       [$class          : 'UsernamePasswordMultiBinding',
-       credentialsId   : 'lab_engineer',
-       passwordVariable: 'lab_pass',
-       usernameVariable: 'lab_user']
-    ]) {
-        for (ip in bm_ips) { sh ("ipmitool -H ${ip} -U ${lab_user} -P ${lab_pass} chassis power off")}
-        for (ip in bm_ips) { sh ("ipmitool -H ${ip} -U ${lab_user} -P ${lab_pass} chassis bootdev pxe")}
-    }
-}
\ No newline at end of file
diff --git a/tcp_tests/managers/jenkins/client.py b/tcp_tests/managers/jenkins/client.py
index 79b248c..a31bbc8 100644
--- a/tcp_tests/managers/jenkins/client.py
+++ b/tcp_tests/managers/jenkins/client.py
@@ -4,6 +4,7 @@
 
 import jenkins
 import json
+import yaml
 import requests
 
 from devops.helpers import helpers
@@ -99,16 +100,47 @@
         job_params = job_params['parameterDefinitions']
         return job_params
 
-    def make_defults_params(self, name):
+    def make_defaults_params(self, name):
         job_params = self.job_params(name)
         def_params = dict(
             [(j['name'], j['defaultParameterValue']['value'])
              for j in job_params])
         return def_params
 
+    def _correct_yaml_params(self, job_name, params):
+        """
+        Params can be defined as a nested dict.
+        In that case 2nd-layer dict will be translated to YAML text and
+        added to default parameter value
+
+        :param job_name: Job name
+        :param params: dict of JenkinsJobs parameters
+        :return: nothing
+        """
+        for param_name, param_value in params.items():
+            if not isinstance(param_value, dict):
+                continue
+            default_param = self.make_defaults_params(job_name).get(param_name)
+            if default_param is None:
+                print("{param} param of {job} job doesn't exist. "
+                      "Ignoring enriching it with {value}".format(
+                        param=param_name,
+                        job=job_name,
+                        value=param_value
+                        ))
+                continue
+            yaml_param = yaml.load(default_param)
+            yaml_param.update(param_value)
+            params[param_name] = yaml.dump(yaml_param,
+                                           default_flow_style=False)
+        return params
+
     @retry()
     def run_build(self, name, params=None, timeout=600, verbose=False):
-        params = params or self.make_defults_params(name)
+        params = params or self.make_defaults_params(name)
+        params = self._correct_yaml_params(job_name=name,
+                                           params=params)
+
         num = self.__client.build_job(name, params)
         time.sleep(2)  # wait while job is started
 
diff --git a/tcp_tests/managers/reclass_manager.py b/tcp_tests/managers/reclass_manager.py
index 56116fc..7c75086 100644
--- a/tcp_tests/managers/reclass_manager.py
+++ b/tcp_tests/managers/reclass_manager.py
@@ -155,6 +155,7 @@
                 value,
                 short_path
             ))
+            return
 
         self.ssh.check_call(
             "{reclass_tools} add-key classes {value} \
@@ -164,6 +165,23 @@
                 path=short_path
             ))
 
+    def delete_class(self, value, short_path):
+        """
+        Shows warning if class doesn't exist
+        :param value: role to delete from 'classes' parameter in the reclass
+        :param short_path: path to reclass yaml file.
+            It takes into account default path where the reclass locates.
+            May look like cluster/*/cicd/control/leader.yml
+        :return: None
+        """
+        self.ssh.check_call(
+            "{reclass_tools} del-key classes {value} \
+            /srv/salt/reclass/classes/{path}".format(
+                reclass_tools=self.reclass_tools_cmd,
+                value=value,
+                path=short_path
+            ))
+
     def delete_key(self, key, short_path):
         """
         Remove key from the provided file
diff --git a/tcp_tests/templates/_heat_environments/eu-cloud-low-flavors.env b/tcp_tests/templates/_heat_environments/eu-cloud-low-flavors.env
new file mode 100644
index 0000000..f764165
--- /dev/null
+++ b/tcp_tests/templates/_heat_environments/eu-cloud-low-flavors.env
@@ -0,0 +1,48 @@
+
+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::FoundationNodeWithFloating": fragments/FoundationNodeWithFloating.yaml
+  "MCP::VsrxNode": fragments/VsrxNode.yaml
+  "MCP::Subnets": fragments/Subnets.yaml
+  "MCP::SubnetsWithFloating": fragments/SubnetsWithFloating.yaml
+
+parameter_defaults:
+
+  cfg_flavor: 8cpu16ram50stor0epf
+  ctl_flavor: 8cpu16ram50stor0epf
+  cid_flavor: 8cpu16ram50stor0epf
+  ntw_flavor: 8cpu16ram50stor0epf
+  nal_flavor: 8cpu16ram50stor0epf
+  dbs_flavor: 8cpu16ram50stor0epf
+  msg_flavor: 8cpu16ram50stor0epf
+  mon_flavor: 8cpu16ram50stor0epf
+  mdb_flavor: 8cpu16ram50stor0epf
+  log_flavor: 8cpu16ram50stor0epf
+  mtr_flavor: 8cpu16ram50stor0epf
+  cmp_flavor: 4cpu8ram100stor10epf
+  cmn_flavor: 4cpu8ram40stor0epf
+  rgw_flavor: 4cpu8ram40stor0epf
+  osd_flavor: 4cpu8ram40stor0epf
+  dns_flavor: 2cpu4ram30stor0epf
+  kmn_flavor: 4cpu8ram40stor0epf
+  prx_flavor: 4cpu8ram40stor0epf
+  gtw_flavor: 4cpu8ram40stor0epf
+  kvm_fake_flavor: 2cpu4ram30stor0epf
+  foundation_flavor: 4cpu8ram100stor10epf
+  vsrx_flavor: oc_vsrx
+
+  key_pair: system_key_8133
+  bm_availability_zone: nova
+  vm_availability_zone: nova
+  net_public: public
+
+  foundation_image: system.foundation01
+  nameservers: 172.18.176.6,172.18.224.6
diff --git a/tcp_tests/templates/_heat_environments/eu-cloud.env b/tcp_tests/templates/_heat_environments/eu-cloud.env
index bdcbc3a..7b77db1 100644
--- a/tcp_tests/templates/_heat_environments/eu-cloud.env
+++ b/tcp_tests/templates/_heat_environments/eu-cloud.env
@@ -13,6 +13,10 @@
   "MCP::VsrxNode": fragments/VsrxNode.yaml
   "MCP::Subnets": fragments/Subnets.yaml
   "MCP::SubnetsWithFloating": fragments/SubnetsWithFloating.yaml
+# E/// Heat config
+  "MCP::SubnetsE7": fragments/E7/Subnets.yaml
+  "MCP::FoundationNodeE7": fragments/E7/FoundationNode.yaml
+  "MCP::MasterNodeE7": fragments/E7/MasterNode.yaml
 
 parameter_defaults:
 
diff --git a/tcp_tests/templates/_heat_environments/fragments/E7/FoundationNode.yaml b/tcp_tests/templates/_heat_environments/fragments/E7/FoundationNode.yaml
new file mode 100644
index 0000000..cb8cbcc
--- /dev/null
+++ b/tcp_tests/templates/_heat_environments/fragments/E7/FoundationNode.yaml
@@ -0,0 +1,93 @@
+heat_template_version: queens
+
+description: Single server instance fragment
+
+parameters:
+  instance_flavor:
+    type: string
+  instance_image:
+    type: string
+  instance_name:
+    type: string
+  instance_config_host:
+    type: string
+  management_net:
+    type: string
+  key_pair:
+    type: string
+  instance_domain:
+    type: string
+  net_public:
+    type: string
+  management_net_static_ip:
+    type: string
+  management_subnet_gateway_ip:
+    type: string
+  nameservers:
+    type: string
+  underlay_userdata:
+    type: string
+  env_name:
+    type: string
+  mcp_version:
+    type: string
+  role:
+    type: comma_delimited_list
+    default: [foundation_jenkins_slave]
+  availability_zone:
+    type: string
+
+resources:
+  instance_port01:
+    type: OS::Neutron::Port
+    properties:
+      port_security_enabled: false
+      network_id: { get_param: management_net }
+      fixed_ips:
+        - ip_address: { get_param: management_net_static_ip }
+
+  instance_instance:
+    type: OS::Nova::Server
+    properties:
+      image_update_policy: REBUILD
+      flavor: { get_param: instance_flavor }
+      image: { get_param: instance_image }
+      key_name: { get_param: key_pair }
+      availability_zone: { get_param: availability_zone }
+      name:
+        list_join:
+        - '.'
+        - [ { get_param: instance_name }, { get_param: env_name } ]
+      networks:
+      - port: { get_resource: instance_port01 }
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          #template: { get_file: underlay--user-data-cfg01--heat.yaml }
+          #template: { get_file: ../underlay-userdata.yaml }
+          template: { get_param: underlay_userdata }
+          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 }
+            $management_static_ip: { get_param: management_net_static_ip }
+            $management_gw: { get_param: management_subnet_gateway_ip }
+            $dnsaddress: { get_param: nameservers }
+      metadata:
+        roles: { get_param: role }
+
+outputs:
+
+  instance_address:
+    value:
+      get_attr:
+      - instance_instance
+      - addresses
+      - { get_param: management_net }
+      - 0
+      - addr
+    description: "Instance's management IP address"
+  instance:
+    value: { get_resource: instance_instance }
+    description: "Instance"
diff --git a/tcp_tests/templates/_heat_environments/fragments/E7/MasterNode.yaml b/tcp_tests/templates/_heat_environments/fragments/E7/MasterNode.yaml
new file mode 100644
index 0000000..e736f5e
--- /dev/null
+++ b/tcp_tests/templates/_heat_environments/fragments/E7/MasterNode.yaml
@@ -0,0 +1,75 @@
+heat_template_version: queens
+
+description: Single server instance fragment
+
+parameters:
+  management_subnet_cfg01_ip:
+    type: string
+  management_net:
+    type: string
+  cfg01_flavor:
+    type: string
+  instance_name:
+    type: string
+  key_pair:
+    type: string
+  instance_domain:
+    type: string
+  net_public:
+    type: string
+  mcp_version:
+    type: string
+  env_name:
+    type: string
+  role:
+    type: comma_delimited_list
+    default: [salt_master]
+  availability_zone:
+    type: string
+
+resources:
+  instance_port01:
+    type: OS::Neutron::Port
+    properties:
+      port_security_enabled: false
+      network_id: { get_param: management_net }
+      fixed_ips:
+        - ip_address: { get_param: management_subnet_cfg01_ip }
+
+  instance_instance:
+    type: OS::Nova::Server
+    properties:
+      image_update_policy: REBUILD
+      flavor: { get_param: cfg01_flavor }
+      image: { list_join: ['', [ 'cfg01-day01-', { 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 }
+      block_device_mapping_v2:
+      - device_name: /dev/cdrom
+        device_type: cdrom
+        boot_index: -1
+        delete_on_termination: true
+        image: { list_join: ['', [ 'cfg01.', { get_param: env_name }, '-config-drive.iso' ]] }
+        volume_size: 1
+      metadata:
+        roles: { get_param: role }
+
+outputs:
+  instance_address:
+    value:
+      get_attr:
+      - instance_instance
+      - addresses
+      - { get_param: 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/E7/Subnets.yaml b/tcp_tests/templates/_heat_environments/fragments/E7/Subnets.yaml
new file mode 100644
index 0000000..5f49059
--- /dev/null
+++ b/tcp_tests/templates/_heat_environments/fragments/E7/Subnets.yaml
@@ -0,0 +1,55 @@
+---
+heat_template_version: queens
+
+description: Subnets fragment
+
+parameters:
+  env_name:
+    type: string
+  stack_name:
+    type: string
+  management_net:
+    type: string
+  management_subnet_cidr:
+    type: string
+  management_subnet_gateway_ip:
+    type: string
+  management_net_dhcp:
+    type: boolean
+    default: false
+  management_subnet_pool_start:
+    type: string
+  management_subnet_pool_end:
+    type: string
+  nameservers:
+    type: comma_delimited_list
+
+resources:
+
+  management_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      gateway_ip: { get_param: management_subnet_gateway_ip }
+      name: { list_join: ['-', [ { get_param: management_net }, 'subnet', { get_param: env_name } ]] }
+      network: { get_param: management_net }
+      cidr: { get_param: management_subnet_cidr }
+      enable_dhcp: { get_param: management_net_dhcp }
+      allocation_pools:
+        - start: { get_param: management_subnet_pool_start }
+          end: { get_param: management_subnet_pool_end }
+      dns_nameservers: { get_param: nameservers }
+      tags:
+      - admin-pool01
+
+outputs:
+  network:
+    value: { get_param: stack_name }
+  management_net_prefix:
+    value:
+      list_join:
+        - '.'
+        - - str_split: ['.', { get_param: management_subnet_cidr }, 0]
+          - str_split: ['.', { get_param: management_subnet_cidr }, 1]
+          - str_split: ['.', { get_param: management_subnet_cidr }, 2]
+
+...
diff --git a/tcp_tests/templates/_heat_environments/fragments/Instance2Volumes.yaml b/tcp_tests/templates/_heat_environments/fragments/Instance2Volumes.yaml
index 31fa18d..08612a9 100644
--- a/tcp_tests/templates/_heat_environments/fragments/Instance2Volumes.yaml
+++ b/tcp_tests/templates/_heat_environments/fragments/Instance2Volumes.yaml
@@ -90,14 +90,14 @@
     properties:
       volume_id: { get_resource: volume01 }
       instance_uuid: { get_resource: instance_instance }
-      mountpoint: /dev/vdd
+      mountpoint: /dev/vdc
   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
+      mountpoint: /dev/vdd
 
   instance_instance:
     type: OS::Nova::Server
diff --git a/tcp_tests/templates/_heat_environments/us-cloud-low-flavors.env b/tcp_tests/templates/_heat_environments/us-cloud-low-flavors.env
new file mode 100644
index 0000000..f38ce92
--- /dev/null
+++ b/tcp_tests/templates/_heat_environments/us-cloud-low-flavors.env
@@ -0,0 +1,48 @@
+
+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::FoundationNodeWithFloating": fragments/FoundationNodeWithFloating.yaml
+  "MCP::VsrxNode": fragments/VsrxNode.yaml
+  "MCP::Subnets": fragments/Subnets.yaml
+  "MCP::SubnetsWithFloating": fragments/SubnetsWithFloating.yaml
+
+parameter_defaults:
+
+  cfg_flavor: 8cpu16ram50stor0epf
+  ctl_flavor: 8cpu16ram50stor0epf
+  cid_flavor: 8cpu16ram50stor0epf
+  ntw_flavor: 8cpu16ram50stor0epf
+  nal_flavor: 8cpu16ram50stor0epf
+  dbs_flavor: 8cpu16ram50stor0epf
+  msg_flavor: 8cpu16ram50stor0epf
+  mon_flavor: 8cpu16ram50stor0epf
+  mdb_flavor: 8cpu16ram50stor0epf
+  log_flavor: 8cpu16ram50stor0epf
+  mtr_flavor: 8cpu16ram50stor0epf
+  cmp_flavor: 4cpu8ram100stor10epf
+  cmn_flavor: 4cpu8ram40stor0epf
+  rgw_flavor: 4cpu8ram40stor0epf
+  osd_flavor: 4cpu8ram40stor0epf
+  dns_flavor: 2cpu4ram30stor0epf
+  kmn_flavor: 4cpu8ram40stor0epf
+  prx_flavor: 4cpu8ram40stor0epf
+  gtw_flavor: 4cpu8ram40stor0epf
+  kvm_fake_flavor: 2cpu4ram30stor0epf
+  foundation_flavor: 4cpu8ram100stor10epf
+  vsrx_flavor: oc_vsrx
+
+  key_pair: system-key-8133
+  bm_availability_zone: nova
+  vm_availability_zone: nova
+  net_public: public
+
+  foundation_image: system.foundation01
+  nameservers: 172.18.224.6,172.18.176.6
diff --git a/tcp_tests/templates/_heat_environments/us-cloud.env b/tcp_tests/templates/_heat_environments/us-cloud.env
index 54556a8..44c79dd 100644
--- a/tcp_tests/templates/_heat_environments/us-cloud.env
+++ b/tcp_tests/templates/_heat_environments/us-cloud.env
@@ -13,6 +13,10 @@
   "MCP::VsrxNode": fragments/VsrxNode.yaml
   "MCP::Subnets": fragments/Subnets.yaml
   "MCP::SubnetsWithFloating": fragments/SubnetsWithFloating.yaml
+# E/// Heat config
+  "MCP::SubnetsE7": fragments/E7/Subnets.yaml
+  "MCP::FoundationNodeE7": fragments/E7/FoundationNode.yaml
+  "MCP::MasterNodeE7": fragments/E7/MasterNode.yaml
 
 parameter_defaults:
 
diff --git a/tcp_tests/templates/_packer/scripts/jenkins_virtualenvs.sh b/tcp_tests/templates/_packer/scripts/jenkins_virtualenvs.sh
index b949cfb..1e0d43e 100644
--- a/tcp_tests/templates/_packer/scripts/jenkins_virtualenvs.sh
+++ b/tcp_tests/templates/_packer/scripts/jenkins_virtualenvs.sh
@@ -5,6 +5,10 @@
 REPORT_VENV_PATH=/home/jenkins/venv_testrail_reporter
 TESTMARKER_VENV_PATH=/home/jenkins/venv_testrail_analyzer
 
+if [ ! "$CHANGE_RIGHTS" ]; then
+    CHANGE_RIGHTS=true
+fi
+
 if [ ! -d ${DEVOPS_VENV_PATH} ]; then
     virtualenv ${DEVOPS_VENV_PATH}
 fi
@@ -29,7 +33,11 @@
 
 # Install testRail analyzer
 . ${TESTMARKER_VENV_PATH}/bin/activate
-pip install git+https://github.com/ibumarskov/testrail-reporter -U
+#pip install git+https://github.com/ibumarskov/testrail-reporter -U
+# Pull from review to test changes in testrail-reporter before their merging
+pip install git+https://review.gerrithub.io/ibumarskov/testrail-reporter@refs/changes/94/514594/3
 deactivate
 
-chown -R jenkins:jenkins /home/jenkins/
+if [ "$CHANGE_RIGHTS" = true ]; then
+  chown -R jenkins:jenkins /home/jenkins/
+fi
diff --git a/tcp_tests/templates/bm-cicd-pike-ovs-maas/salt.yaml b/tcp_tests/templates/bm-cicd-pike-ovs-maas/salt.yaml
index a31051f..f0b727e 100644
--- a/tcp_tests/templates/bm-cicd-pike-ovs-maas/salt.yaml
+++ b/tcp_tests/templates/bm-cicd-pike-ovs-maas/salt.yaml
@@ -5,6 +5,7 @@
 {% import 'shared-salt.yaml' as SHARED with context %}
 {% import 'shared-test-tools.yaml' as SHARED_TEST_TOOLS with context %}
 {% import 'shared-workarounds.yaml' as SHARED_WORKAROUNDS with context %}
+{% import 'shared-maas.yaml' as SHARED_MAAS with context %}
 
 - description: Wait for salt-master is ready after configdrive user-data
   cmd: |
@@ -14,6 +15,24 @@
   skip_fail: false
 
 {{ SHARED.MACRO_INSTALL_SALT_MINIONS() }}
+{{ SHARED_MAAS.REBOOT_HW_NODES('engineer', 'KBwdcRqwed3w2',
+  [
+      "185.8.59.227",
+      "185.8.59.229",
+      "5.43.225.88",
+      "5.43.225.112",
+      "5.43.225.208",
+      "5.43.227.118",
+      "185.8.58.248",
+      "185.8.59.222",
+      "5.43.225.228",
+      "5.43.229.28",
+      "5.43.225.23",
+      "185.8.58.9",
+      "185.8.58.246",
+      "185.8.58.243",
+      "185.8.58.244"
+  ]) }}
 
 {{SHARED.MACRO_CHECK_SALT_VERSION_SERVICES_ON_CFG()}}
 
diff --git a/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt.yaml b/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt.yaml
index 9fc0dfe..f008071 100644
--- a/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt.yaml
+++ b/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt.yaml
@@ -5,6 +5,7 @@
 {% import 'shared-salt.yaml' as SHARED with context %}
 {% import 'shared-test-tools.yaml' as SHARED_TEST_TOOLS with context %}
 {% import 'shared-workarounds.yaml' as SHARED_WORKAROUNDS with context %}
+{% import 'shared-maas.yaml' as SHARED_MAAS with context %}
 
 - description: Wait for salt-master is ready after configdrive user-data
   cmd: |
@@ -14,6 +15,24 @@
   skip_fail: false
 
 {{ SHARED.MACRO_INSTALL_SALT_MINIONS() }}
+{{ SHARED_MAAS.REBOOT_HW_NODES('engineer', 'KBwdcRqwed3w2',
+  [
+      "185.8.59.227",
+      "185.8.59.229",
+      "5.43.225.88",
+      "5.43.225.112",
+      "5.43.225.208",
+      "5.43.227.118",
+      "185.8.58.248",
+      "185.8.59.222",
+      "5.43.225.228",
+      "5.43.229.28",
+      "5.43.225.23",
+      "185.8.58.9",
+      "185.8.58.246",
+      "185.8.58.243",
+      "185.8.58.244"
+  ]) }}
 
 {{SHARED.MACRO_CHECK_SALT_VERSION_SERVICES_ON_CFG()}}
 
diff --git a/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/encryption-key.asc b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/encryption-key.asc
new file mode 100644
index 0000000..381eb77
--- /dev/null
+++ b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/encryption-key.asc
@@ -0,0 +1,56 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+lQcYBFyBRcUBEACmP/muUIwbEg6Z7dA3c9I2NadcjDHXKg/ViXwaOB4KSd9/FC0o
+KSBPccWb+1sm+zdUy2f/LC5r8RvU7yZd4Mbzz8R1DQncXg4nG7bppW7oAcHpc0jk
+pV/SvdMYxuXsrbKbpoGEquwVkbb4oTv2MLSBfGfFzBeQfiwGEWm1xPLSeXc4biLC
+FatCU7w4LS1U4BEOqRCp6lW/hQFLoX+j6rNT8TwC5AeFpKgUWuQZGOO4fZKpbvo2
+sCvF5VA1HSVXlZtzum6pL1yzLL/SoyLrYOy1KrZQmSBHG9htCZQVmvYK7U5WtWE4
+Ws5IAj+HwvgKyzXE2Srsirj1NqauQRsk+1riQk3rpDrX2BeXNUSoHR5M/RDY0gCc
+8P6heanQRnyFtjUSoovkQsydY77+QVxe0MCs+lZlg31fL+wJVG7FIbIKKwR5sj8i
+/JqhWE+t2ZzIrQ/7o7fRk7hv/u69Vb/t/Nt7fkbn53zoubqi3kNgXf6hwhTUtfW/
+lE9cc4JTzis4i/RnILUDnAwos1c0Z+tGCUo4pbiP71VfU8L259g+clPFXOIkqA9t
+L9JSZQfhH/lRj3Abs57OvZjN7/D1h8PWB+8nTB8bkoUt45SubgQb0Y9maWUcwjxw
+AcJSIk6mq8vVdBu7zOuslDjMnoUZbtJwcSwQQOnb9UUppjs3CjbcH80ttQARAQAB
+AA/9ExdprtDlJf6u2pJqxNNyInOK4p/e4VydMOJ28/PZz0iod8lzXhdK9JSWItF8
+qD9VHVG2gaErO44Wqh9EgqdbcYg8gUycA0hxy5/tI2uyDsaU5CAvEMLE/Eh8Q24j
+3UgdKK64VOnj7p4rKuYpIp55PB1zNU24rwkuOQwq3Yreb7kvLbXIHA2s+xLunGzj
+tcl9a/eSSFD2w+WcPnkvVT2QlmUvhQ12p6w++QdvBkrLa9ZPz1FFPp6AiFtLGK5e
+KW6uyV1xc9BSjujmpmPBkNIynKNpCFxtTn0uH2doMAr5kkuqIV726SfUZISNkyOa
+pHKtnAtsWHmdv9skzQIBAgAzcXTBGbdDxRj6QR+ohqbsCzfu3z9QHSbXUmxezti9
+bQqpsU1SIg8z2oDARFR6KlRzhnfpPvan+Gp9TvYsvxrXe61HpxRMdLj6Gt2Ibruf
+YHCtr1S9J5CzTTOurlIKpACUYIqgVXfgIkQzqiYX8e56PiDTUB++OqEg66i0orXB
+nbHAD2vu16CNvcaNqsak3DWkHMwmEfsuxqyUXNte0eYu9SCHtnNoYT/D7A72gK4b
+Gqg80J8ZCpo1ilIX3xUq8WsH+CoXs0X7hy6Cbi22AqnHFRYmrgoIWmRzJonp393b
+yqmTV+QsKQRpmwdX4hiH78zJLnLEUQMn8CuHAGwaJCzk4okIAMKNrIQZhkdbCCe4
+IrLuMKn4aQj3c22SMXNmu78/0cP9Rtsm3ChjzzelLO7NjvPm0nIvEcThFSIZIXCv
+iWGZCXFCKn3WtA5xWuMFNXsEQcc3AG/qRODdDSeFpo+VH/9IwppAc3zI2jxe1PRD
+G2DnheLaLIKgHunsCYxpftJDod/vRqRHeU7ulMVJfEKVxdzrCbKGiIOXSyS6KowQ
+JOxF/80ocq/25Zc/oH25Y2r/0y+xzDpOHBgU0ndrCZf2z8oOuECJTxcq83UDyJzT
+HrG/hTrU83YsQMZ0AwBrYxpzUfdH7b6y60VE19FrwmMDK6Fz8I/x4Ai0sNkI3QLR
+NntY9fsIANrB3QM8CtsdxXsFvdTEwNLsG8LMdn3loCH6Cq3ejkEKa69Uua+sB6ND
+wYOXWzyksLZJyfxIXux/hMlK/kO3ohGcEFiMUaDZndJy8IKUlDrhwcUZqm7dXMDU
+CIf0T3rOEzOXbNu3UTds3j/ruSvA5KmjzOa4Qnb41CyL5Fh7x0R8Rux3NzAn6Ecx
+Y+nAWRtI/Yz7zdL8zuHaJfbVuxAPJ+ImcXAS7cX6T9dM3tWRlam1+0Ezhdb4F8i5
+lcY7sMu95scDwhV7qOmln6wtGSkBPZgE0+TqRuELZrPvlcIRRIM42UwPWhYO2PG8
+kKd2i5teweDnhzN8+E87VV2BQhP9DA8H/0+ZiXsvaG60JGqNmWzVbB6U1qgwrFOR
+VcuzIWpdZyQR8Ok63GXuA0odoqReolba9R6fVlXchj6INBz2WY2F0twwCRPx7tRg
+Pyq4PaTA8ZYYjAVWVCd9k97gY2i80p4MPzQCnE8g4n6OWGY47pcTwSkm4HBoGoam
+igIRn3Soz7CXGF+PvSGi1T0jpwM5IWfM3IwEUPdPTIJuA2iD/9zSKDvhsP+trJ1Y
+TMe9CW3Llf5mFbHLRZ7LfMOLIngKOIxBAxHiT8wUrIRaH78wHdz8ALDsC+LNP6rK
+hKb8h/VHXaqmf0BlNjGpO7XZXfxXWJ0oTUG5Z+jKz2Ir14HYLZI1GlOA8bQlZXhh
+bXBsZS5jb20gPHNhbHQtbWFzdGVyQGV4YW1wbGUuY29tPokCTgQTAQgAOBYhBLaR
+Vrvqyq56MiGjUvXLKtw2FZsDBQJcgUXFAhsvBQsJCAcCBhUKCQgLAgQWAgMBAh4B
+AheAAAoJEPXLKtw2FZsDpi4P/1kmvlpkbOhrL73zAPyMzYa4Yo2Pi/BoMbyEKNKO
+K3wLCdP6xLGecVIt8pANosksDSGlWAnWj36/jfgt/aZisx1u6MTYaOEHkXahxOX4
+ghDW1cTbdtz7Uy5Ah9O3WNI+ejmOpCtuc3P/XOkdttKZLuCNCs6ocgCsejpNHcFK
+vMhOhnRKV8kcBrG2QLyfSyafBtM/zV+NR4Wrng71Za8fiXHlDanmrAIyuSnD538r
+hTwSFe0C9HntwuF6W+UShN7c+jPJaKQjKbZy9fuFp33NcTSPCB5dH9yrhQvOeFQo
+dFzEabMDFVGPfUVWR+TH39dWYOsq5zFmgQAbOB/vHdmEtrYNrxX0AiCZZHQHTUb9
+oBK68V8eVeFdoRLcMORBZ2RCqkQTOQoAF7o772knltjtsymnI0XNvVC/XCnZv89Q
+/eoivrd/rMMpTFOGcys6EAnSUWx0ZG/JCkezQqnx9U219BvqKNOZ60aOeOYHKpsX
+Ha8Nr72YRmtm0UMsDjEUyLOj+o06XnN7uafMv2bZpjWh2hfOrkAbxe41z6t+78ho
+P+C5vSvp01OmAt71iq+62MXVcLVKEWDpiuZSj8m83RlY5AGIaPaGX9LKPcHdGxKw
+QSczgB/jI3G08vWaq82he6UJuYexbYe1iJXfvcx8kThwZ1nXQJm+7UsISUsh8/NZ
+x0n/
+=uxDD
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/salt-context-cookiecutter-openstack_ovs.yaml b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/salt-context-cookiecutter-openstack_ovs.yaml
new file mode 100644
index 0000000..48ee357
--- /dev/null
+++ b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/salt-context-cookiecutter-openstack_ovs.yaml
@@ -0,0 +1,499 @@
+default_context:
+  jenkins_cfg_admin_password: r00tme
+  bmk_enabled: 'False'
+  cicd_control_node01_address: 10.167.11.91
+  cicd_control_node01_hostname: cid01
+  cicd_control_node02_address: 10.167.11.92
+  cicd_control_node02_hostname: cid02
+  cicd_control_node03_address: 10.167.11.93
+  cicd_control_node03_hostname: cid03
+  cicd_control_vip_address: 10.167.11.90
+  cicd_control_vip_hostname: cid
+  cicd_enabled: 'True'
+  infra_config_address: 172.16.162.66
+  cluster_domain: bm-e7-cicd-pike-ovs-maas.local
+  cluster_name: bm-e7-cicd-pike-ovs-maas
+  compute_bond_mode: active-backup
+  compute_primary_first_nic: eth1
+  context_seed: zEFbUBMME6LFdiL0rJWFgHMdQGgywnDSE9vFYvHgEBeYHb4QJsDl3HqpdaTgqYlF
+  compute_primary_second_nic: eth2
+  control_network_netmask: 255.255.255.0
+  control_network_subnet: 10.167.11.0/24
+  control_vlan: '2404'
+  cookiecutter_template_branch: proposed
+  jenkins_pipelines_branch: 'release/2019.2.0'
+  cookiecutter_template_credentials: gerrit
+  cookiecutter_template_url: https://gerrit.mcp.mirantis.com/mk/cookiecutter-templates.git
+  deploy_network_gateway: 172.16.162.65
+  deploy_network_netmask: 255.255.255.192
+  deploy_network_subnet: 172.16.162.64/26
+  deployment_type: physical
+  dns_server01: 172.18.176.6
+  dns_server02: 172.18.224.6
+  email_address: test@mirantis.com
+  gateway_primary_first_nic: eth1
+  gateway_primary_second_nic: eth2
+  infra_bond_mode: active-backup
+  infra_deploy_nic: eth0
+  infra_kvm01_control_address: 10.167.11.241
+  infra_kvm01_deploy_address: 172.16.162.67
+  infra_kvm01_hostname: kvm01
+  infra_kvm02_control_address: 10.167.11.242
+  infra_kvm02_deploy_address: 172.16.162.68
+  infra_kvm02_hostname: kvm02
+  infra_kvm03_control_address: 10.167.11.243
+  infra_kvm03_deploy_address: 172.16.162.69
+  infra_kvm03_hostname: kvm03
+  infra_kvm_vip_address: 10.167.11.240
+  infra_primary_first_nic: eth1
+  infra_primary_second_nic: eth2
+  kubernetes_enabled: 'False'
+  local_repositories: 'False'
+  maas_enabled: 'True'
+  maas_deploy_address: 172.16.162.66
+  maas_deploy_cidr: 172.16.162.64/26
+  maas_deploy_gateway: 172.16.162.65
+  maas_deploy_range_end: 172.16.162.125
+  maas_deploy_range_start: 172.16.162.82
+  maas_deploy_vlan: '0'
+  maas_dhcp_enabled: 'True'
+  maas_fabric_name: fabric-0
+  maas_hostname: cfg01
+  maas_manage_deploy_network: 'True'
+  maas_machines: |
+        kvm01: # #cz7694
+          distro_series: "xenial"
+          # hwe_kernel: "hwe-16.04"
+          pxe_interface_mac: "0c:c4:7a:34:66:fe"
+          interfaces:
+            one1:
+              mac: "0c:c4:7a:34:66:fe"
+              mode: "static"
+              ip: "172.16.162.67"
+              subnet: ${maas:region:subnets:deploy_network:cidr} # create it manually... in UI
+              gateway: ${_param:deploy_network_gateway}
+              name: one1
+            one2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:34:66:ff"
+              name: one2
+            ten1:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:1e:3e:cc"
+              name: ten1
+            ten2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:1e:3e:cd"
+              name: ten2
+          power_parameters:
+            power_address: "5.43.225.16"
+            power_pass: ==IPMI_PASS==
+            power_type: ipmi
+            power_user: ==IPMI_USER==
+        kvm02: # #cz7950
+          distro_series: "xenial"
+          # hwe_kernel: "hwe-16.04"
+          pxe_interface_mac: "0c:c4:7a:6c:83:60"
+          interfaces:
+            one1:
+              mac: "0c:c4:7a:6c:83:60"
+              mode: "static"
+              ip: "172.16.162.68"
+              subnet: ${maas:region:subnets:deploy_network:cidr} # create it manually... in UI
+              gateway: ${_param:deploy_network_gateway}
+              name: one1
+            one2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:6c:83:61"
+              name: one2
+            ten1:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:1e:9d:42"
+              name: ten1
+            ten2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:1e:9d:43"
+              name: ten2
+          power_parameters:
+            power_address: "5.43.225.172"
+            power_pass: ==IPMI_PASS==
+            power_type: ipmi
+            power_user: ==IPMI_USER==
+        kvm03: # #cz7739
+          distro_series: "xenial"
+          # hwe_kernel: "hwe-16.04"
+          pxe_interface_mac: "0c:c4:7a:34:52:0c"
+          interfaces:
+            one1:
+              mac: "0c:c4:7a:34:52:0c"
+              mode: "static"
+              ip: "172.16.162.69"
+              subnet: ${maas:region:subnets:deploy_network:cidr} # create it manually... in UI
+              gateway: ${_param:deploy_network_gateway}
+              name: one1
+            one2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:34:52:0d"
+              name: one2
+            ten1:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:58:e9:66"
+              name: ten1
+            ten2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:58:e9:67"
+              name: ten2
+          power_parameters:
+            power_address: "5.43.225.74"
+            power_pass: ==IPMI_PASS==
+            power_type: ipmi
+            power_user: ==IPMI_USER==
+        gtw01: # #cz7675
+          distro_series: "xenial"
+          # hwe_kernel: "hwe-16.04"
+          # pxe_interface_mac:
+          pxe_interface_mac: "0c:c4:7a:33:26:74"
+          interfaces:
+            one1:
+              mac: "0c:c4:7a:33:26:74"
+              mode: "static"
+              ip: "172.16.162.70"
+              subnet: ${maas:region:subnets:deploy_network:cidr} # create it manually... in UI
+              gateway: ${_param:deploy_network_gateway}
+              name: one1
+            one2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:33:26:75"
+              name: one2
+            ten1:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:1d:f3:3e"
+              name: ten1
+            ten2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:1d:f3:3f"
+              name: ten2
+          power_parameters:
+            power_address: "176.74.217.64"
+            power_pass: ==IPMI_PASS==
+            power_type: ipmi
+            power_user: ==IPMI_USER==
+        gtw02: # #cz7626
+          distro_series: "xenial"
+          # hwe_kernel: "hwe-16.04"
+          pxe_interface_mac: "0c:c4:7a:33:25:c2"
+          interfaces:
+            one1:
+              mac: "0c:c4:7a:33:25:c2"
+              mode: "static"
+              ip: "172.16.162.71"
+              subnet: ${maas:region:subnets:deploy_network:cidr} # create it manually... in UI
+              gateway: ${_param:deploy_network_gateway}
+              name: one1
+            one2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:33:25:c3"
+              name: one2
+            ten1:
+              mode: UNCONFIGURED
+              mac: "00:25:90:61:c9:e0"
+              name: ten1
+            ten2:
+              mode: UNCONFIGURED
+              mac: "00:25:90:61:c9:e1"
+              name: ten2
+          power_parameters:
+            power_address: "185.8.59.228"
+            power_pass: ==IPMI_PASS==
+            power_type: ipmi
+            power_user: ==IPMI_USER==
+        gtw03: # #cz7757
+          distro_series: "xenial"
+          # hwe_kernel: "hwe-16.04"
+          pxe_interface_mac: "0c:c4:7a:69:a0:50"
+          interfaces:
+            one1:
+              mac: "0c:c4:7a:69:a0:50"
+              mode: "static"
+              ip: "172.16.162.72"
+              subnet: ${maas:region:subnets:deploy_network:cidr} # create it manually... in UI
+              gateway: ${_param:deploy_network_gateway}
+              name: one1
+            one2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:69:a0:51"
+              name: one2
+            ten1:
+              mode: UNCONFIGURED
+              mac: "00:25:90:3a:f0:38"
+              name: ten1
+            ten2:
+              mode: UNCONFIGURED
+              mac: "00:25:90:3a:f0:39"
+              name: ten2
+          power_parameters:
+            power_address: "5.43.225.89"
+            power_pass: ==IPMI_PASS==
+            power_type: ipmi
+            power_user: ==IPMI_USER==
+        cmp001: # #cz7899
+          distro_series: "xenial"
+          # hwe_kernel: "hwe-16.04"
+          # pxe_interface_mac:
+          pxe_interface_mac: "0c:c4:7a:6d:3d:fa"
+          interfaces:
+            one1:
+              mac: "0c:c4:7a:6d:3d:fa"
+              mode: "static"
+              ip: "172.16.162.73"
+              subnet: ${maas:region:subnets:deploy_network:cidr} # create it manually... in UI
+              gateway: ${_param:deploy_network_gateway}
+              name: one1
+            one2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:6d:3d:fb"
+              name: one2
+            ten1:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:1e:41:88"
+              name: ten1
+            ten2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:1e:41:89"
+              name: ten2
+          power_parameters:
+            power_address: "5.43.227.11"
+            power_pass: ==IPMI_PASS==
+            power_type: ipmi
+            power_user: ==IPMI_USER==
+        cmp002: # #cz7909
+          distro_series: "xenial"
+          # hwe_kernel: "hwe-16.04"
+          pxe_interface_mac: "0c:c4:7a:34:53:2a"
+          interfaces:
+            one1:
+              mac: "0c:c4:7a:34:53:2a"
+              mode: "static"
+              ip: "172.16.162.74"
+              subnet: ${maas:region:subnets:deploy_network:cidr} # create it manually... in UI
+              gateway: ${_param:deploy_network_gateway}
+              name: one1
+            one2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:34:53:2b"
+              name: one2
+            ten1:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:1d:92:c8"
+              name: ten1
+            ten2:
+              mode: UNCONFIGURED
+              mac: "0c:c4:7a:1d:92:c9"
+              name: ten2
+          power_parameters:
+            power_address: "5.43.227.19"
+            power_pass: ==IPMI_PASS==
+            power_type: ipmi
+            power_user: ==IPMI_USER==
+
+  mcp_version: proposed
+  mcp_docker_registry: docker-prod-local.docker.mirantis.net
+  mcp_common_scripts_branch: ''
+  offline_deployment: 'False'
+  opencontrail_enabled: 'False'
+  openldap_domain: bm-e7-cicd-pike-ovs-maas.local
+  openldap_enabled: 'True'
+  openldap_organisation: ${_param:cluster_name}
+  openstack_benchmark_node01_address: 10.167.11.95
+  openstack_benchmark_node01_hostname: bmk01
+  openstack_cluster_size: compact
+  openstack_compute_count: '2'
+  openstack_compute_rack01_hostname: cmp
+  openstack_compute_single_address_ranges: 10.167.11.15-10.167.11.16
+  openstack_compute_deploy_address_ranges: 172.16.162.73-172.16.162.74
+  openstack_compute_tenant_address_ranges: 10.167.13.15-10.167.13.16
+  openstack_compute_backend_address_ranges: 10.167.13.15-10.167.13.16
+  openstack_control_address: 10.167.11.10
+  openstack_control_hostname: ctl
+  openstack_control_node01_address: 10.167.11.11
+  openstack_control_node01_hostname: ctl01
+  openstack_control_node02_address: 10.167.11.12
+  openstack_control_node02_hostname: ctl02
+  openstack_control_node03_address: 10.167.11.13
+  openstack_control_node03_hostname: ctl03
+  openstack_database_address: 10.167.11.50
+  openstack_database_hostname: dbs
+  openstack_database_node01_address: 10.167.11.51
+  openstack_database_node01_hostname: dbs01
+  openstack_database_node02_address: 10.167.11.52
+  openstack_database_node02_hostname: dbs02
+  openstack_database_node03_address: 10.167.11.53
+  openstack_database_node03_hostname: dbs03
+  openstack_enabled: 'True'
+  openstack_gateway_node01_hostname: gtw01
+  openstack_gateway_node01_deploy_address: 172.16.162.70
+  openstack_gateway_node01_address: 10.167.11.224
+  openstack_gateway_node01_tenant_address: 10.167.12.9
+  openstack_gateway_node02_hostname: gtw02
+  openstack_gateway_node02_deploy_address: 172.16.162.71
+  openstack_gateway_node02_address: 10.167.11.225
+  openstack_gateway_node02_tenant_address: 10.167.12.10
+  openstack_gateway_node03_hostname: gtw03
+  openstack_gateway_node03_deploy_address: 172.16.162.72
+  openstack_gateway_node03_address: 10.167.11.226
+  openstack_gateway_node03_tenant_address: 10.167.12.11
+  openstack_message_queue_address: 10.167.11.40
+  openstack_message_queue_hostname: msg
+  openstack_message_queue_node01_address: 10.167.11.41
+  openstack_message_queue_node01_hostname: msg01
+  openstack_message_queue_node02_address: 10.167.11.42
+  openstack_message_queue_node02_hostname: msg02
+  openstack_message_queue_node03_address: 10.167.11.43
+  openstack_message_queue_node03_hostname: msg03
+  openstack_network_engine: ovs
+  openstack_neutron_qos: 'True'
+  openstack_neutron_vlan_aware_vms: 'True'
+  openstack_nfv_dpdk_enabled: 'False'
+  openstack_nfv_sriov_enabled: 'False'
+  openstack_nova_compute_hugepages_count: '16'
+  openstack_nova_compute_nfv_req_enabled: 'False'
+  openstack_nfv_sriov_network: physnet2
+  openstack_nfv_sriov_numvfs: '7'
+  openstack_nfv_sriov_pf_nic: enp5s0f1
+  openstack_nova_cpu_pinning: 6,7,8,9,10,11
+  openstack_nova_compute_reserved_host_memory_mb: '900'
+  openstack_ovs_dvr_enabled: 'True'
+  openstack_ovs_encapsulation_type: vxlan
+  openstack_ovs_encapsulation_vlan_range: 2402:2406
+  openstack_proxy_address: 10.167.11.80
+  openstack_proxy_hostname: prx
+  openstack_proxy_node01_address: 10.167.11.81
+  openstack_proxy_node01_hostname: prx01
+  openstack_proxy_node02_address: 10.167.11.82
+  openstack_proxy_node02_hostname: prx02
+  openstack_upgrade_node01_address: 10.167.11.19
+  openstack_version: pike
+  cinder_version: ${_param:openstack_version}
+  oss_enabled: 'False'
+  oss_node03_address: ${_param:stacklight_monitor_node03_address}
+  platform: openstack_enabled
+  public_host: ${_param:openstack_proxy_address}
+  publication_method: email
+  reclass_repository: https://github.com/Mirantis/mk-lab-salt-model.git
+  salt_api_password: HlcaUHzUnsWsg62uhF8ua5KEbqRbzijz
+  salt_api_password_hash: $6$qdIFillN$XnzP7oIXRcbroVch7nlthyrSekjKlWND8q2MtoMF3Wz2ymepjAOjyqpyR55nmbH9OQzS8EcQJ6sfr5hWKDesV1
+  salt_master_address: 172.16.162.66
+  salt_master_hostname: cfg01
+  salt_master_management_address: 172.16.162.66
+  shared_reclass_branch: proposed
+  shared_reclass_url: https://gerrit.mcp.mirantis.com/salt-models/reclass-system.git
+  stacklight_enabled: 'True'
+  stacklight_log_address: 10.167.11.60
+  stacklight_log_hostname: log
+  stacklight_log_node01_address: 10.167.11.61
+  stacklight_log_node01_hostname: log01
+  stacklight_log_node02_address: 10.167.11.62
+  stacklight_log_node02_hostname: log02
+  stacklight_log_node03_address: 10.167.11.63
+  stacklight_log_node03_hostname: log03
+  stacklight_long_term_storage_type: prometheus
+  stacklight_monitor_address: 10.167.11.70
+  stacklight_monitor_hostname: mon
+  stacklight_monitor_node01_address: 10.167.11.71
+  stacklight_monitor_node01_hostname: mon01
+  stacklight_monitor_node02_address: 10.167.11.72
+  stacklight_monitor_node02_hostname: mon02
+  stacklight_monitor_node03_address: 10.167.11.73
+  stacklight_monitor_node03_hostname: mon03
+  stacklight_telemetry_address: 10.167.11.96
+  stacklight_telemetry_hostname: mtr
+  stacklight_telemetry_node01_address: 10.167.11.97
+  stacklight_telemetry_node01_hostname: mtr01
+  stacklight_telemetry_node02_address: 10.167.11.98
+  stacklight_telemetry_node02_hostname: mtr02
+  stacklight_telemetry_node03_address: 10.167.11.99
+  stacklight_telemetry_node03_hostname: mtr03
+  stacklight_version: '2'
+  static_ips_on_deploy_network_enabled: 'False'
+  tenant_network_gateway: 10.167.13.1
+  tenant_network_netmask: 255.255.255.0
+  tenant_network_subnet: 10.167.13.0/24
+  tenant_vlan: '2406'
+  upstream_proxy_enabled: 'False'
+  use_default_network_scheme: 'True'
+  sriov_network_subnet: 192.168.10.0/24
+  ceph_enabled: 'False'
+
+  rsync_fernet_rotation: 'True'
+  compute_padding_with_zeros: True
+  designate_backend: powerdns
+  designate_enabled: 'True'
+  openstack_dns_node01_address: 10.167.11.113
+  openstack_dns_node02_address: 10.167.11.114
+  nova_vnc_tls_enabled: 'True'
+  galera_ssl_enabled: 'True'
+  openstack_mysql_x509_enabled: 'True'
+  rabbitmq_ssl_enabled: 'True'
+  openstack_rabbitmq_x509_enabled: 'True'
+  openstack_internal_protocol: 'https'
+  tenant_telemetry_enabled: 'True'
+  openstack_telemetry_address: 10.167.11.83
+  openstack_telemetry_hostname: mdb
+  openstack_telemetry_node01_address: 10.167.11.84
+  openstack_telemetry_node01_hostname: mdb01
+  openstack_telemetry_node02_address: 10.167.11.85
+  openstack_telemetry_node02_hostname: mdb02
+  openstack_telemetry_node03_address: 10.167.11.86
+  openstack_telemetry_node03_hostname: mdb03
+  barbican_backend: dogtag
+  barbican_enabled: 'True'
+  barbican_integration_enabled: 'False'
+  openstack_barbican_address: 10.167.11.44
+  openstack_barbican_hostname: kmn
+  openstack_barbican_node01_address: 10.167.11.45
+  openstack_barbican_node01_hostname: kmn01
+  openstack_barbican_node02_address: 10.167.11.46
+  openstack_barbican_node02_hostname: kmn02
+  openstack_barbican_node03_address: 10.167.11.47
+  openstack_barbican_node03_hostname: kmn03
+  openstack_create_public_network: 'True'
+  openstack_public_neutron_subnet_gateway: 172.17.42.65
+  openstack_public_neutron_subnet_cidr: 172.17.42.64/26
+  openstack_public_neutron_subnet_allocation_start: 172.17.42.82
+  openstack_public_neutron_subnet_allocation_end: 172.17.42.112
+  backend_vlan: '2402'
+  storage_vlan: '2405'  # not implemented yet, placeholder
+  kqueen_custom_mail_enabled: 'False'
+  kqueen_enabled: 'False'
+  manila_enabled: 'False'
+  openscap_enabled: 'True'
+  octavia_health_manager_node01_address: 192.168.1.10
+  octavia_health_manager_node02_address: 192.168.1.11
+  octavia_health_manager_node03_address: 192.168.1.12
+  octavia_manager_cluster: 'False'
+  octavia_spare_amphora_pool_size: 0
+  octavia_hm_bind_ip: 192.168.1.12
+  octavia_lb_mgmt_cidr: 192.168.1.0/24
+  octavia_lb_mgmt_allocation_pool_start: 192.168.1.2
+  octavia_lb_mgmt_allocation_pool_end: 192.168.1.200
+  openstack_octavia_enabled: 'True'
+  openstack_keystone_security:
+    disable_user_account_days_inactive: 7
+    lockout_failure_attempts: 60
+    lockout_duration: 600
+    password_expires_days: 730
+    unique_last_password_count: 5
+    minimum_password_age: 0
+    password_regex: "'^[a-zA-Z0-9~!@#%^&\\*_=+]{32,}$$'"
+    password_regex_description: "Your password could contains capital letters, lowercase letters, digits, symbols '~ ! @ # % ^ & * _ = +' and have a minimum length of 32 characters"
+    change_password_upon_first_use: False
+  secrets_encryption_enabled: 'True'
+  secrets_encryption_key_id: 'F5CB2ADC36159B03'
+  # Used on CI only.
+  secrets_encryption_private_key: ''
+  stacklight_ssl_enabled: 'True'
+
+  # Enable Mirantis repo with CVE fixes for xenial
+  updates_mirantis_login: "root"
+  updates_mirantis_password: "r00tme"
+  updates_mirantis_version: "staging"
\ No newline at end of file
diff --git a/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/salt-context-environment.yaml b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/salt-context-environment.yaml
new file mode 100644
index 0000000..b3849e4
--- /dev/null
+++ b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/salt-context-environment.yaml
@@ -0,0 +1,102 @@
+nodes:
+    cfg01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: infra_config_node01
+      roles:
+      - infra_config
+      - linux_system_codename_xenial
+      - features_runtest_cfg
+      interfaces:
+        ens3:
+          role: single_static_mgm
+
+    # Physical nodes
+    kvm01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: infra_kvm_node01
+      roles:
+      - infra_kvm
+      - linux_system_codename_xenial
+      interfaces:
+        one1:
+          role: single_mgm_dhcp
+        ten1:
+          role: bond_ctl_lacp
+        ten2:
+          role: bond_ctl_lacp
+
+    kvm02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: infra_kvm_node02
+      roles:
+      - infra_kvm
+      - linux_system_codename_xenial
+      interfaces:
+        one1:
+          role: single_mgm_dhcp
+        ten1:
+          role: bond_ctl_lacp
+        ten2:
+          role: bond_ctl_lacp
+
+    kvm03.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: infra_kvm_node03
+      roles:
+      - infra_kvm
+      - linux_system_codename_xenial
+      interfaces:
+        one1:
+          role: single_mgm_dhcp
+        ten1:
+          role: bond_ctl_lacp
+        ten2:
+          role: bond_ctl_lacp
+
+    cmp<<count>>:
+      reclass_storage_name: openstack_compute_rack01
+      roles:
+      - openstack_compute
+      - linux_system_codename_xenial
+      interfaces:
+        one1:
+          role: single_mgm_dhcp
+        ten1:
+          role: bond_ctl_lacp
+        ten2:
+          role: bond_ctl_lacp
+
+    gtw01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_gateway_node01
+      roles:
+      - openstack_gateway
+      - linux_system_codename_xenial
+      interfaces:
+        one1:
+          role: single_mgm_dhcp
+        ten1:
+          role: bond_ctl_lacp
+        ten2:
+          role: bond_ctl_lacp
+
+    gtw02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_gateway_node02
+      roles:
+      - openstack_gateway
+      - linux_system_codename_xenial
+      interfaces:
+        one1:
+          role: single_mgm_dhcp
+        ten1:
+          role: bond_ctl_lacp
+        ten2:
+          role: bond_ctl_lacp
+
+    gtw03.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_gateway_node03
+      roles:
+      - openstack_gateway
+      - linux_system_codename_xenial
+      interfaces:
+        one1:
+          role: single_mgm_dhcp
+        ten1:
+          role: bond_ctl_lacp
+        ten2:
+          role: bond_ctl_lacp
diff --git a/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/salt-context-vcp-environment.yaml b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/salt-context-vcp-environment.yaml
new file mode 100644
index 0000000..0e40c3a
--- /dev/null
+++ b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/salt-context-vcp-environment.yaml
@@ -0,0 +1,341 @@
+nodes:
+    ctl01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_control_node01
+      roles:
+      - openstack_control_leader
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    ctl02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_control_node02
+      roles:
+      - openstack_control
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    ctl03.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_control_node03
+      roles:
+      - openstack_control
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    dbs01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_database_node01
+      roles:
+      - openstack_database_leader
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    dbs02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_database_node02
+      roles:
+      - openstack_database
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    dbs03.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_database_node03
+      roles:
+      - openstack_database
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    msg01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_message_queue_node01
+      roles:
+      - openstack_message_queue
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    msg02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_message_queue_node02
+      roles:
+      - openstack_message_queue
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    msg03.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_message_queue_node03
+      roles:
+      - openstack_message_queue
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    prx01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_proxy_node01
+      roles:
+      - openstack_proxy
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    prx02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_proxy_node02
+      roles:
+      - openstack_proxy
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    cid01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: cicd_control_node01
+      roles:
+      - cicd_control_leader
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    cid02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: cicd_control_node02
+      roles:
+      - cicd_control_manager
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    cid03.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: cicd_control_node03
+      roles:
+      - cicd_control_manager
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    mon01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: stacklight_server_node01
+      roles:
+      - stacklightv2_server_leader
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    mon02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: stacklight_server_node02
+      roles:
+      - stacklightv2_server
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    mon03.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: stacklight_server_node03
+      roles:
+      - stacklightv2_server
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    mtr01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: stacklight_telemetry_node01
+      roles:
+      - stacklight_telemetry
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    mtr02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: stacklight_telemetry_node02
+      roles:
+      - stacklight_telemetry
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    mtr03.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: stacklight_telemetry_node03
+      roles:
+      - stacklight_telemetry
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    log01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: stacklight_log_node01
+      roles:
+      - stacklight_log_leader_v2
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    log02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: stacklight_log_node02
+      roles:
+      - stacklight_log
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    log03.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: stacklight_log_node03
+      roles:
+      - stacklight_log
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    mdb01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_telemetry_node01
+      roles:
+      - linux_system_codename_xenial
+      - openstack_telemetry
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    mdb02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_telemetry_node02
+      roles:
+      - linux_system_codename_xenial
+      - openstack_telemetry
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    mdb03.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_telemetry_node03
+      roles:
+      - linux_system_codename_xenial
+      - openstack_telemetry
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    dns01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_dns_node01
+      roles:
+      - openstack_dns
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    dns02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_dns_node02
+      roles:
+      - openstack_dns
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    kmn01.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_barbican_node01
+      roles:
+      - openstack_barbican
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    kmn02.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_barbican_node02
+      roles:
+      - openstack_barbican
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
+
+    kmn03.bm-e7-cicd-pike-ovs-maas.local:
+      reclass_storage_name: openstack_barbican_node03
+      roles:
+      - openstack_barbican
+      - linux_system_codename_xenial
+      interfaces:
+        ens2:
+          role: single_dhcp
+        ens3:
+          role: single_ctl
diff --git a/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/salt.yaml b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/salt.yaml
new file mode 100644
index 0000000..fb60947
--- /dev/null
+++ b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/salt.yaml
@@ -0,0 +1,97 @@
+{% set HOSTNAME_CFG01='cfg01.bm-e7-cicd-pike-ovs-maas.local' %}
+{% set LAB_CONFIG_NAME='bm-e7-cicd-pike-ovs-maas' %}
+{% set DOMAIN_NAME='bm-e7-cicd-pike-ovs-maas.local' %}
+
+{% import 'shared-salt.yaml' as SHARED with context %}
+{% import 'shared-test-tools.yaml' as SHARED_TEST_TOOLS with context %}
+{% import 'shared-workarounds.yaml' as SHARED_WORKAROUNDS with context %}
+{% import 'shared-maas.yaml' as SHARED_MAAS with context %}
+
+- description: Wait for salt-master is ready after configdrive user-data
+  cmd: |
+    timeout 120 salt-call test.ping
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 2, delay: 5}
+  skip_fail: false
+
+{{ SHARED.MACRO_INSTALL_SALT_MINIONS() }}
+{{ SHARED_MAAS.REBOOT_HW_NODES('engineer', 'K7wy5Y39g6Ii',
+  [
+      "176.74.217.64",
+      "185.8.59.228",
+      "5.43.225.89",
+      "5.43.227.11",
+      "5.43.227.19",
+      "5.43.225.74",
+      "5.43.225.16",
+      "5.43.225.172"
+  ]) }}
+
+
+{{SHARED.MACRO_CHECK_SALT_VERSION_SERVICES_ON_CFG()}}
+
+{{SHARED.MACRO_CHECK_SALT_VERSION_ON_NODES()}}
+
+- description: Generate a public key for machines in MAAS
+  cmd: |
+    ssh-keygen -y -f ~root/.ssh/id_rsa > ~root/.ssh/id_rsa.pub
+    maas mirantis sshkeys create key="$(cat ~root/.ssh/id_rsa.pub)"
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 1, delay: 5}
+  skip_fail: false
+
+- description: Run comissioning of BM nodes
+  cmd: |
+    salt-call maas.process_machines
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 1, delay: 5}
+  skip_fail: false
+
+- description: Wait for machines ready
+  cmd: |
+    salt-call maas.machines_status && timeout 120 salt-call state.sls maas.machines.wait_for_ready
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 7, delay: 5}
+  skip_fail: false
+
+- description: Enforce the interfaces configuration defined in the model for servers
+  cmd: |
+    salt-call state.sls maas.machines.assign_ip;
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 1, delay: 5}
+  skip_fail: false
+
+- description: Assign drive partitions to machines
+  cmd: salt-call state.sls maas.machines.storage
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 1, delay: 5}
+  skip_fail: false
+
+- description: Remove all the salt-minions and re-register the cfg01 minion
+  cmd: |
+    salt-key -y -D;
+    salt-call test.ping
+    sleep 5
+    # Check that the cfg01 is registered
+    salt-key | grep cfg01
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 1, delay: 5}
+  skip_fail: false
+
+- description: provision the automatically commissioned physical nodes through MAAS
+  cmd: |
+    salt-call maas.deploy_machines;
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 3, delay: 5}
+  skip_fail: false
+
+- description: Wait for machines deployed
+  cmd: |
+    salt-call maas.machines_status && timeout 300 salt-call state.sls maas.machines.wait_for_deployed
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 6, delay: 5}
+  skip_fail: false
+
+{{SHARED_TEST_TOOLS.MACRO_INSTALL_RECLASS_TOOLS()}}
+{{ SHARED_WORKAROUNDS.MACRO_CEPH_SET_PGNUM() }}
+{{ SHARED_WORKAROUNDS.CLEAR_CEPH_OSD_DRIVES() }}
diff --git a/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/tempest_skip.list b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/tempest_skip.list
new file mode 100644
index 0000000..c3799f2
--- /dev/null
+++ b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/tempest_skip.list
@@ -0,0 +1,25 @@
+# Globally disabled inside the 'ci-tempest' docker image
+tempest.api.object_storage.test_object_version.ContainerTest.test_versioned_container
+tempest.api.object_storage.test_healthcheck.HealthcheckTest.test_get_healthcheck
+tempest.api.object_storage.test_container_sync_middleware.ContainerSyncMiddlewareTest.test_container_synchronization
+tempest.api.object_storage.test_crossdomain.CrossdomainTest.test_get_crossdomain_policy
+tempest.api.object_storage.test_container_services_negative.ContainerNegativeTest.test_create_container_metadata_value_exceeds_max_length
+tempest.api.object_storage.test_container_services_negative.ContainerNegativeTest.test_create_container_metadata_name_exceeds_max_length
+tempest.api.object_storage.test_container_services_negative.ContainerNegativeTest.test_create_container_metadata_exceeds_overall_metadata_count
+tempest.api.object_storage.test_container_services.ContainerTest.test_create_container_with_metadata_value
+tempest.api.object_storage.test_account_services_negative.AccountNegativeTest.test_list_containers_with_non_authorized_user
+tempest.api.object_storage.test_account_quotas.AccountQuotasTest.test_admin_modify_quota\b
+tempest.api.object_storage.test_account_quotas.AccountQuotasTest.test_upload_valid_object\b
+tempest.api.object_storage.test_account_quotas_negative.AccountQuotasNegativeTest.test_user_modify_quota
+
+# PROD-22111 Need to align integration CI labs configuration to pass Tempest tests with WaitCondition
+heat_tempest_plugin.tests.functional.test_os_wait_condition.OSWaitCondition.test_create_stack_with_multi_signal_waitcondition
+heat_tempest_plugin.tests.scenario.test_server_cfn_init.CfnInitIntegrationTest.test_server_cfn_init\b
+heat_tempest_plugin.tests.scenario.test_server_signal.ServerSignalIntegrationTest.test_server_signal_userdata_format_raw
+heat_tempest_plugin.tests.scenario.test_server_signal.ServerSignalIntegrationTest.test_server_signal_userdata_format_software_config
+
+heat_tempest_plugin.tests.scenario.test_server_signal.ServerSignalIntegrationTest.test_server_signal_userdata_format_software_config
+heat_tempest_plugin.tests.scenario.test_autoscaling_lbv2.AutoscalingLoadBalancerv2Test.test_autoscaling_loadbalancer_neutron
+
+# PROD-29650 failed with PortNotFound
+tempest.api.compute.servers.test_attach_interfaces.AttachInterfacesTestJSON.test_create_list_show_delete_interfaces_by_fixed_ip
diff --git a/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/underlay--user-data-foundation.yaml b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/underlay--user-data-foundation.yaml
new file mode 100644
index 0000000..e52d56d
--- /dev/null
+++ b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/underlay--user-data-foundation.yaml
@@ -0,0 +1,74 @@
+#cloud-config, see http://cloudinit.readthedocs.io/en/latest/topics/examples.html
+
+ssh_pwauth: True
+users:
+  - name: root
+    sudo: ALL=(ALL) NOPASSWD:ALL
+    shell: /bin/bash
+  - name: jenkins
+    sudo: ALL=(ALL) NOPASSWD:ALL
+    shell: /bin/bash
+    ssh_authorized_keys:
+      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFSxeuXh2sO4VYL8N2dlNFVyNcr2RvoH4MeDD/cV2HThfU4/BcH6IOOWXSDibIU279bWVKCL7QUp3mf0Vf7HPuyFuC12QM+l7MwT0jCYh5um3hmAvM6Ga0nkhJygHexe9/rLEYzZJkIjP9/IS/YXSv8rhHg484wQ6qkEuq15nyMqil8tbDQCq0XQ+AWEpNpIa4pUoKmFMsOP8lq10KZXIXsJyZxizadr6Bh4Lm9LWrk8YCw7qP3rmgWxK/s8qXQh1ISZe6ONfcmk6p03qbh4H3CwKyWzxmnIHQvE6PgN/O+PuAZj3PbR2mkkJjYX4jNPlxvj8uTStaVPhAwfR9Spdx jenkins@cz8133
+
+disable_root: false
+chpasswd:
+  list: |
+    root:r00tme
+    jenkins:qalab
+  expire: False
+
+packages:
+  - openjdk-8-jre-headless
+  - libyaml-dev
+  - libffi-dev
+  - libvirt-dev
+  - python-dev
+  - python-pip
+  - python-virtualenv
+  #- python-psycopg2
+  - pkg-config
+  - vlan
+  - bridge-utils
+  - ebtables
+
+bootcmd:
+  # Enable root access
+  - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
+  - service sshd restart
+output:
+  all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
+
+runcmd:
+  # Create swap
+  - fallocate -l 16G /swapfile
+  - chmod 600 /swapfile
+  - mkswap /swapfile
+  - swapon /swapfile
+  - echo "/swapfile   none    swap    defaults   0   0" >> /etc/fstab
+  - find /etc/network/interfaces.d/ -type f -delete
+  - kill $(pidof /sbin/dhclient) || /bin/true
+  - ip a flush dev ens3
+  - rm -f /var/run/network/ifstate.ens3
+  - ip route delete default || /bin/true
+  - ifup ens3
+
+write_files:
+  - path: /etc/default/grub.d/97-enable-grub-menu.cfg
+    content: |
+      GRUB_RECORDFAIL_TIMEOUT=30
+      GRUB_TIMEOUT=3
+      GRUB_TIMEOUT_STYLE=menu
+
+  - path: /etc/network/interfaces
+    content: |
+      auto ens3
+      iface ens3 inet static
+      address $management_static_ip
+      netmask 255.255.255.192
+      gateway $management_gw
+      dns-nameservers $dnsaddress
+
+  - path: /etc/bash_completion.d/fuel_devops30_activate
+    content: |
+      source /home/jenkins/fuel-devops30/bin/activate
diff --git a/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/underlay-userdata.yaml b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/underlay-userdata.yaml
new file mode 100644
index 0000000..567a445
--- /dev/null
+++ b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/underlay-userdata.yaml
@@ -0,0 +1,78 @@
+#cloud-config, see http://cloudinit.readthedocs.io/en/latest/topics/examples.html
+
+ssh_pwauth: True
+users:
+   - name: root
+     sudo: ALL=(ALL) NOPASSWD:ALL
+     shell: /bin/bash
+
+disable_root: false
+chpasswd:
+   list: |
+    root:r00tme
+   expire: False
+
+bootcmd:
+   # Enable root access
+   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
+   - service sshd restart
+output:
+    all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
+
+runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
+   - export TERM=linux
+   - export LANG=C
+   # Configure dhclient
+   - sudo resolvconf -u
+   #- sudo echo "nameserver {gateway}" >> /etc/resolvconf/resolv.conf.d/base
+   # Enable grub menu using updated config below
+   - update-grub
+
+   # Prepare network connection
+   - sudo ifup ens3
+   #- sudo route add default gw {gateway} {interface_name}
+
+   # Create swap
+   - fallocate -l 16G /swapfile
+   - chmod 600 /swapfile
+   - mkswap /swapfile
+   - swapon /swapfile
+   - echo "/swapfile   none    swap    defaults   0   0" >> /etc/fstab
+
+write_files:
+   - path: /etc/default/grub.d/97-enable-grub-menu.cfg
+     content: |
+         GRUB_RECORDFAIL_TIMEOUT=30
+         GRUB_TIMEOUT=3
+         GRUB_TIMEOUT_STYLE=menu
+
+   - path: /etc/network/interfaces
+     content: |
+          auto ens3
+          iface ens3 inet dhcp
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '65%VG'
+       home:
+         size: '1%VG'
+       var_log:
+         size: '10%VG'
+       var_log_audit:
+         size: '5%VG'
+       var_tmp:
+         size: '10%VG'
+       tmp:
+         size: '5%VG'
+     owner: root:root
+
+growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/underlay.hot b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/underlay.hot
new file mode 100644
index 0000000..67940c7
--- /dev/null
+++ b/tcp_tests/templates/bm-e7-cicd-pike-ovs-maas/underlay.hot
@@ -0,0 +1,111 @@
+---
+
+heat_template_version: queens
+
+description: MCP environment for bm-e7-cicd-pike-ovs-maas
+
+parameters:
+  instance_domain:
+    type: string
+    default: bm-e7-cicd-pike-ovs-maas.local
+  mcp_version:
+    type: string
+  env_name:
+    type: string
+  key_pair:
+    type: string
+  cfg_flavor:
+    type: string
+  foundation_image:
+    type: string
+  foundation_flavor:
+    type: string
+  bm_availability_zone:
+    type: string
+  control_subnet_cidr:
+    type: string
+    default: "10.167.11.0/24"
+  tenant_subnet_cidr:
+    type: string
+    default: "10.167.13.0/24"
+  external_subnet_cidr:
+    type: string
+    default: "172.17.42.64/26"
+  management_subnet_cidr:
+    type: string
+    default: "172.16.162.64/26"
+  management_subnet_cfg01_ip:
+    type: string
+    default: 172.16.162.66
+  management_subnet_gateway_ip:
+    type: string
+    default: 172.16.162.65
+  management_subnet_pool_start:
+    type: string
+    default: 172.16.162.67
+  management_subnet_pool_end:
+    type: string
+    default: 172.16.162.100
+  salt_master_control_ip:
+    type: string
+    default: 172.16.162.66
+  deploy_empty_node:
+    type: boolean
+    default: False
+
+
+resources:
+  subnets:
+    type: MCP::SubnetsE7
+    properties:
+      stack_name: { get_param: "OS::stack_name" }
+      env_name: { get_param: env_name }
+      management_net: 'system-phys-430'
+      management_subnet_cidr: { get_param: management_subnet_cidr }
+      management_subnet_gateway_ip: { get_param: management_subnet_gateway_ip }
+      management_subnet_pool_start: { get_param: management_subnet_pool_start }
+      management_subnet_pool_end: { get_param: management_subnet_pool_end }
+
+  #flavors:
+  #  type: MCP::Flavors
+
+  cfg01_node:
+    type: MCP::MasterNodeE7
+    depends_on: [subnets]
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      cfg01_flavor: { get_param: cfg_flavor }
+      availability_zone: { get_param: bm_availability_zone }
+      management_net: 'system-phys-430'
+      management_subnet_cfg01_ip: { get_param: management_subnet_cfg01_ip }
+      instance_name: cfg01
+      instance_domain: {get_param: instance_domain}
+
+  foundation_node:
+    type: MCP::FoundationNodeE7
+    depends_on: [subnets]
+    properties:
+      env_name: { get_param: env_name }
+      mcp_version: { get_param: mcp_version }
+      instance_domain: {get_param: instance_domain}
+      instance_name: foundation
+      availability_zone: { get_param: bm_availability_zone }
+      management_net: 'system-phys-430'
+      management_subnet_gateway_ip: { get_param: management_subnet_gateway_ip }
+      instance_image: { get_param: foundation_image }
+      instance_flavor: {get_param: foundation_flavor}
+      underlay_userdata: { get_file: ./underlay--user-data-foundation.yaml }
+      management_net_static_ip:
+        list_join:
+        - '.'
+        - [ { get_attr: [subnets, management_net_prefix] }, '126' ]
+      instance_config_host: { get_attr: [cfg01_node, instance_address] }
+outputs:
+  foundation_public_ip:
+    description: foundation node IP address (management)
+    value:
+      get_attr:
+      - foundation_node
+      - instance_address
+...
diff --git a/tcp_tests/templates/cookied-model-generator/salt_bm-e7-cicd-pike-ovs-maas.yaml b/tcp_tests/templates/cookied-model-generator/salt_bm-e7-cicd-pike-ovs-maas.yaml
new file mode 100644
index 0000000..ae0c90b
--- /dev/null
+++ b/tcp_tests/templates/cookied-model-generator/salt_bm-e7-cicd-pike-ovs-maas.yaml
@@ -0,0 +1,62 @@
+{% from 'cookied-model-generator/underlay.yaml' import HOSTNAME_CFG01 with context %}
+{% from 'cookied-model-generator/underlay.yaml' import DOMAIN_NAME with context %}
+
+# Other salt model repository parameters see in shared-salt.yaml
+{% set LAB_CONFIG_NAME = 'bm-e7-cicd-pike-ovs-maas' %}
+# Name of the context file (without extension, that is fixed .yaml) used to render the Environment model
+{% set ENVIRONMENT_MODEL_INVENTORY_NAME = os_env('ENVIRONMENT_MODEL_INVENTORY_NAME','bm-e7-cicd-pike-ovs-maas') %}
+# Path to the context files used to render Cluster and Environment models
+{%- set CLUSTER_CONTEXT_NAME = 'salt-context-cookiecutter-openstack_ovs.yaml' %}
+{%- set ENVIRONMENT_CONTEXT_NAMES = ['salt-context-vcp-environment.yaml', 'salt-context-environment.yaml','salt-context-cookiecutter-openstack_ovs.yaml'] %}
+{%- set CONTROL_VLAN = os_env('CONTROL_VLAN', '2404') %}
+{%- set TENANT_VLAN = os_env('TENANT_VLAN', '2406') %}
+
+{%- set IPMI_USER = os_env('IPMI_USER', 'mcp-qa') %}
+{%- set IPMI_PASS = os_env('IPMI_PASS', 'password') %}
+
+
+{% import 'shared-salt.yaml' as SHARED with context %}
+
+{{ SHARED.MACRO_INSTALL_PACKAGES_ON_NODES(HOSTNAME_CFG01) }}
+
+{{ SHARED.MACRO_INSTALL_FORMULAS_FROM_UPDATE() }}
+
+{{ SHARED.MACRO_INSTALL_FORMULAS('\*') }}
+
+{{ SHARED.MACRO_UPLOAD_AND_IMPORT_GPG_ENCRYPTION_KEY() }}
+
+{{ SHARED.MACRO_GENERATE_COOKIECUTTER_MODEL(CONTROL_VLAN=CONTROL_VLAN, TENANT_VLAN=TENANT_VLAN) }}
+
+{{ SHARED.MACRO_GENERATE_AND_ENABLE_ENVIRONMENT_MODEL(KNOWN_HOST_AUTOPOPULATION=false) }}
+
+
+- description: Temporary WR for correct bridge name according to envoronment templates
+  cmd: |
+    sed -i 's/br\-ctl/br\_ctl/g' /srv/salt/reclass/classes/cluster/{{ LAB_CONFIG_NAME }}/infra/kvm.yml;
+    sed -i 's/br\-mgm/br\_mgm/g' /srv/salt/reclass/classes/cluster/{{ LAB_CONFIG_NAME }}/infra/kvm.yml;
+    sed -i 's/br\-ctl/br\_ctl/g' /srv/salt/reclass/classes/cluster/{{ LAB_CONFIG_NAME }}/openstack/gateway.yml;
+    salt '*' saltutil.refresh_pillar;
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 1, delay: 10}
+  skip_fail: false
+
+{{ SHARED.MACRO_GENERATE_INVENTORY(RERUN_SALTMASTER_STATE=true) }}
+
+- description: Defining username and password params for IPMI access
+  cmd: |
+    sed -i 's/==IPMI_USER==/${_param:power_user}/g' /srv/salt/reclass/classes/cluster/{{ LAB_CONFIG_NAME }}/infra/maas_machines.yml;
+    sed -i 's/==IPMI_PASS==/${_param:power_password}/g' /srv/salt/reclass/classes/cluster/{{ LAB_CONFIG_NAME }}/infra/maas_machines.yml;
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 1, delay: 10}
+  skip_fail: false
+
+- description: "Add user/password for IPMI access"
+  cmd: |
+    set -e;
+    set -x;
+    . /root/venv-reclass-tools/bin/activate;
+    reclass-tools add-key parameters._param.power_user {{ IPMI_USER }} /srv/salt/reclass/classes/cluster/{{ LAB_CONFIG_NAME }}/infra/maas_machines.yml;
+    reclass-tools add-key parameters._param.power_password {{ IPMI_PASS }} /srv/salt/reclass/classes/cluster/{{ LAB_CONFIG_NAME }}/infra/maas_machines.yml;
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 1, delay: 5}
+  skip_fail: false
\ No newline at end of file
diff --git a/tcp_tests/templates/heat-bm-cicd-pike-contrail-sl/salt.yaml b/tcp_tests/templates/heat-bm-cicd-pike-contrail-sl/salt.yaml
index 46393c3..d069df0 100644
--- a/tcp_tests/templates/heat-bm-cicd-pike-contrail-sl/salt.yaml
+++ b/tcp_tests/templates/heat-bm-cicd-pike-contrail-sl/salt.yaml
@@ -7,6 +7,7 @@
 {% import 'shared-salt.yaml' as SHARED with context %}
 {% import 'shared-test-tools.yaml' as SHARED_TEST_TOOLS with context %}
 {% import 'shared-workarounds.yaml' as SHARED_WORKAROUNDS with context %}
+{% import 'shared-maas.yaml' as SHARED_MAAS with context %}
 
 - description: Wait for salt-master is ready after configdrive user-data
   cmd: |
@@ -16,6 +17,24 @@
   skip_fail: false
 
 {{ SHARED.MACRO_INSTALL_SALT_MINIONS() }}
+{{ SHARED_MAAS.REBOOT_HW_NODES('engineer', 'KBwdcRqwed3w2',
+  [
+      "185.8.59.227",
+      "185.8.59.229",
+      "5.43.225.88",
+      "5.43.225.112",
+      "5.43.225.208",
+      "5.43.227.118",
+      "185.8.58.248",
+      "185.8.59.222",
+      "5.43.225.228",
+      "5.43.229.28",
+      "5.43.225.23",
+      "185.8.58.9",
+      "185.8.58.246",
+      "185.8.58.243",
+      "185.8.58.244"
+  ]) }}
 
 {{SHARED.MACRO_CHECK_SALT_VERSION_SERVICES_ON_CFG()}}
 
diff --git a/tcp_tests/templates/heat-bm-cicd-queens-contrail-sl/salt.yaml b/tcp_tests/templates/heat-bm-cicd-queens-contrail-sl/salt.yaml
index 8dbf61a..06b692c 100644
--- a/tcp_tests/templates/heat-bm-cicd-queens-contrail-sl/salt.yaml
+++ b/tcp_tests/templates/heat-bm-cicd-queens-contrail-sl/salt.yaml
@@ -7,6 +7,7 @@
 {% import 'shared-salt.yaml' as SHARED with context %}
 {% import 'shared-test-tools.yaml' as SHARED_TEST_TOOLS with context %}
 {% import 'shared-workarounds.yaml' as SHARED_WORKAROUNDS with context %}
+{% import 'shared-maas.yaml' as SHARED_MAAS with context %}
 
 - description: Wait for salt-master is ready after configdrive user-data
   cmd: |
@@ -16,6 +17,24 @@
   skip_fail: false
 
 {{ SHARED.MACRO_INSTALL_SALT_MINIONS() }}
+{{ SHARED_MAAS.REBOOT_HW_NODES('engineer', 'KBwdcRqwed3w2',
+  [
+      "185.8.59.227",
+      "185.8.59.229",
+      "5.43.225.88",
+      "5.43.225.112",
+      "5.43.225.208",
+      "5.43.227.118",
+      "185.8.58.248",
+      "185.8.59.222",
+      "5.43.225.228",
+      "5.43.229.28",
+      "5.43.225.23",
+      "185.8.58.9",
+      "185.8.58.246",
+      "185.8.58.243",
+      "185.8.58.244"
+  ]) }}
 
 {{SHARED.MACRO_CHECK_SALT_VERSION_SERVICES_ON_CFG()}}
 
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 554a306..8ad96c6 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
@@ -52,8 +52,8 @@
   ceph_osd_bond_mode: active-backup
   ceph_osd_data_partition_prefix: ""
   ceph_osd_count: '3'
-  ceph_osd_data_disks: "/dev/vdd"
-  ceph_osd_journal_or_block_db_disks: "/dev/vde"
+  ceph_osd_data_disks: "/dev/vdc"
+  ceph_osd_journal_or_block_db_disks: "/dev/vdd"
   ceph_osd_node_count: '3'
   ceph_osd_journal_size: '3'
   ceph_osd_deploy_nic: "eth0"
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 a3b6311..63f0f22 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
@@ -270,7 +270,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/vdd"
+  ceph_osd_data_disks: "/dev/vdc"
   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-dvr-sl/salt-context-cookiecutter.yaml b/tcp_tests/templates/heat-cicd-queens-dvr-sl/salt-context-cookiecutter.yaml
index 378fde9..4522bd7 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
@@ -59,8 +59,8 @@
   ceph_osd_data_partition_prefix: ""
   ceph_osd_bond_mode: active-backup
   ceph_osd_count: '3'
-  ceph_osd_data_disks: "/dev/vdd"
-  ceph_osd_journal_or_block_db_disks: "/dev/vde"
+  ceph_osd_data_disks: "/dev/vdc"
+  ceph_osd_journal_or_block_db_disks: "/dev/vdd"
   ceph_osd_mode: "separated"
   ceph_osd_node_count: '3'
   ceph_osd_journal_size: '3'
diff --git a/tcp_tests/templates/released-heat-cicd-pike-contrail41-sl/salt-context-cookiecutter-contrail.yaml b/tcp_tests/templates/released-heat-cicd-pike-contrail41-sl/salt-context-cookiecutter-contrail.yaml
index 47e1c66..39eb138 100644
--- a/tcp_tests/templates/released-heat-cicd-pike-contrail41-sl/salt-context-cookiecutter-contrail.yaml
+++ b/tcp_tests/templates/released-heat-cicd-pike-contrail41-sl/salt-context-cookiecutter-contrail.yaml
@@ -275,7 +275,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/vdd"
+  ceph_osd_data_disks: "/dev/vdc"
   ceph_osd_journal_or_block_db_disks: ""
   ceph_osd_mode: "separated"
   ceph_osd_deploy_nic: "eth0"
diff --git a/tcp_tests/templates/released-heat-cicd-pike-dvr-sl/salt-context-cookiecutter.yaml b/tcp_tests/templates/released-heat-cicd-pike-dvr-sl/salt-context-cookiecutter.yaml
index e8afd72..c62c526 100644
--- a/tcp_tests/templates/released-heat-cicd-pike-dvr-sl/salt-context-cookiecutter.yaml
+++ b/tcp_tests/templates/released-heat-cicd-pike-dvr-sl/salt-context-cookiecutter.yaml
@@ -50,8 +50,8 @@
   ceph_osd_bond_mode: active-backup
   ceph_osd_data_partition_prefix: ""
   ceph_osd_count: '3'
-  ceph_osd_data_disks: "/dev/vdd"
-  ceph_osd_journal_or_block_db_disks: "/dev/vde"
+  ceph_osd_data_disks: "/dev/vdc"
+  ceph_osd_journal_or_block_db_disks: "/dev/vdd"
   ceph_osd_node_count: '3'
   ceph_osd_journal_size: '3'
   ceph_osd_deploy_nic: "eth0"
diff --git a/tcp_tests/templates/released-heat-cicd-queens-contrail41-sl/salt-context-cookiecutter-contrail.yaml b/tcp_tests/templates/released-heat-cicd-queens-contrail41-sl/salt-context-cookiecutter-contrail.yaml
index b66aec1..5d791e8 100644
--- a/tcp_tests/templates/released-heat-cicd-queens-contrail41-sl/salt-context-cookiecutter-contrail.yaml
+++ b/tcp_tests/templates/released-heat-cicd-queens-contrail41-sl/salt-context-cookiecutter-contrail.yaml
@@ -264,8 +264,8 @@
   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_journal_or_block_db_disks: "/dev/vdb"
+  ceph_osd_data_disks: "/dev/vdc"
+  ceph_osd_journal_or_block_db_disks: "/dev/vdd"
   ceph_osd_mode: "separated"
   ceph_osd_deploy_nic: "eth0"
   ceph_osd_primary_first_nic: "eth1"
diff --git a/tcp_tests/templates/released-heat-cicd-queens-dvr-sl/salt-context-cookiecutter.yaml b/tcp_tests/templates/released-heat-cicd-queens-dvr-sl/salt-context-cookiecutter.yaml
index f382627..d14b2e9 100644
--- a/tcp_tests/templates/released-heat-cicd-queens-dvr-sl/salt-context-cookiecutter.yaml
+++ b/tcp_tests/templates/released-heat-cicd-queens-dvr-sl/salt-context-cookiecutter.yaml
@@ -60,8 +60,8 @@
   ceph_osd_data_partition_prefix: ""
   ceph_osd_bond_mode: active-backup
   ceph_osd_count: '3'
-  ceph_osd_data_disks: "/dev/vdd"
-  ceph_osd_journal_or_block_db_disks: "/dev/vde"
+  ceph_osd_data_disks: "/dev/vdc"
+  ceph_osd_journal_or_block_db_disks: "/dev/vdd"
   ceph_osd_mode: "separated"
   ceph_osd_node_count: '3'
   ceph_osd_journal_size: '3'
diff --git a/tcp_tests/templates/shared-maas.yaml b/tcp_tests/templates/shared-maas.yaml
index 0becf80..02778ea 100644
--- a/tcp_tests/templates/shared-maas.yaml
+++ b/tcp_tests/templates/shared-maas.yaml
@@ -1,5 +1,23 @@
 {# Collection of common macroses shared across MaaS #}
 
+
+{%- macro REBOOT_HW_NODES(ipmi_user, ipmi_password, ipmi_devices=['']) %}
+
+- description: Reboot hardware computes and set to PXE boot. It needs for clean deployment
+  cmd: |
+    {%- for device in ipmi_devices %}
+      ipmitool -H {{ device }} -U {{ ipmi_user }} -P {{ ipmi_password }} -I lanplus chassis power off
+    {%- endfor %}
+    {%- for device in ipmi_devices %}
+      ipmitool -H {{ device }} -U {{ ipmi_user }} -P {{ ipmi_password }} -I lanplus chassis bootdev pxe
+    {%- endfor %}
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 1, delay: 5}
+  skip_fail: false
+
+{%- endmacro %}
+
+
 {%- macro AUTH_IN_MAAS() %}
 
 - description: MaaS auth
diff --git a/tcp_tests/templates/shared-salt.yaml b/tcp_tests/templates/shared-salt.yaml
index 412c7ca..5621b02 100644
--- a/tcp_tests/templates/shared-salt.yaml
+++ b/tcp_tests/templates/shared-salt.yaml
@@ -583,7 +583,7 @@
 {%- endmacro %}
 
 
-{%- macro MACRO_GENERATE_AND_ENABLE_ENVIRONMENT_MODEL() %}
+{%- macro MACRO_GENERATE_AND_ENABLE_ENVIRONMENT_MODEL(KNOWN_HOST_AUTOPOPULATION=true) %}
 {########################################################}
 
 - description: "[EXPERIMENTAL] Clone 'environment-template' repository to cfg01.{{ DOMAIN_NAME }}"
@@ -681,6 +681,18 @@
   retry: {count: 1, delay: 5}
   skip_fail: false
 
+- description: "[EXPERIMENTAL] Disable known_host_autopopulation if its not enabled"
+  cmd: |
+    {%- if not KNOWN_HOST_AUTOPOPULATION  %}
+    set -e;
+    set -x;
+    . /root/venv-reclass-tools/bin/activate;
+    reclass-tools add-bool-key parameters.reclass.storage.node.infra_config_node01.parameters.openssh.client.known_hosts_autopopulation false /srv/salt/reclass/classes/environment/{{ ENVIRONMENT_MODEL_INVENTORY_NAME }}/init.yml
+    {%- endif %}
+  node_name: {{ HOSTNAME_CFG01 }}
+  retry: {count: 1, delay: 5}
+  skip_fail: false
+
 - description: Modify generated model and reclass-system
   cmd: |
     export REPLACE_DIRS="/srv/salt/reclass/classes/ /srv/salt/reclass/nodes/"
diff --git a/tcp_tests/tests/system/test_backup_restore.py b/tcp_tests/tests/system/test_backup_restore.py
index c47f8aa..7d29e4f 100644
--- a/tcp_tests/tests/system/test_backup_restore.py
+++ b/tcp_tests/tests/system/test_backup_restore.py
@@ -165,15 +165,17 @@
         :param reclass: ReclassManager, tcp-qa Reclass-tools manager
         :param path: str, path to YAML file to update
         """
-        reclass.add_bool_key("parameters.backupninja.enabled", "True", path)
-        reclass.add_key(
-            "parameters.backupninja.client.backup_times.hour",
-            "\"'*'\"",
-            path)
-        reclass.add_key(
-            "parameters.backupninja.client.backup_times.minute",
-            "\"'*/10'\"",
-            path)
+        backup_params = """
+        parameters:
+          backupninja:
+            enabled: True
+            client:
+              backup_times:
+                hour: *
+                minute: 10
+        """
+
+        reclass.merge_context(backup_params, path)
 
     def _precreate_test_files(self, salt, ssh, base_dirs, test_files):
         """Prepare test files for scenarios
diff --git a/tcp_tests/tests/system/test_ceph_luminous_upgrade.py b/tcp_tests/tests/system/test_ceph_luminous_upgrade.py
index 8e06888..bf7346c 100644
--- a/tcp_tests/tests/system/test_ceph_luminous_upgrade.py
+++ b/tcp_tests/tests/system/test_ceph_luminous_upgrade.py
@@ -19,9 +19,9 @@
         Scenario:
             1. Chenge parameters in reclass
             2. Run Pipeline Ceph - upgrade
-        https://docs.mirantis.com/mcp/master/mcp-operations-guide/
-            update-upgrade/major-upgrade/ceph-upgrade/upgrade-ceph.html
-        """
+        https://docs.mirantis.com/mcp/master/mcp-operations-guide/ update-upgrade/major-upgrade/ceph-upgrade/upgrade-ceph.html
+        """  # noqa: E501
+
         salt = salt_actions
         reclass = reclass_actions
         dt = drivetrain_actions
@@ -60,7 +60,8 @@
             "WAIT_FOR_HEALTHY": True,
             "ASK_CONFIRMATION": False
         }
-        upgrade_ceph = dt.start_job_on_jenkins(
+        job_result, job_description = dt.start_job_on_jenkins(
             job_name='ceph-upgrade',
             job_parameters=job_parameters)
-        assert upgrade_ceph == 'SUCCESS'
+
+        assert job_result == 'SUCCESS', job_description
diff --git a/tcp_tests/tests/system/test_ceph_operations.py b/tcp_tests/tests/system/test_ceph_operations.py
index 02a6888..6f2fb52 100644
--- a/tcp_tests/tests/system/test_ceph_operations.py
+++ b/tcp_tests/tests/system/test_ceph_operations.py
@@ -66,7 +66,7 @@
 """
 
 
-@pytest.fixture(scope='module')
+@pytest.fixture(scope='session')
 def add_xtra_node_to_salt(salt_actions, underlay_actions,
                           config, reclass_actions):
     """
@@ -80,6 +80,15 @@
     cfg_node = [node['node_name'] for node in config.underlay.ssh
                 if 'salt_master' in node.get('roles')][0]
 
+    salt_actions.enforce_state("*", "reclass")
+    reclass_actions.add_class(
+        "environment.heat-cicd-queens-dvr-sl.linux_network_interface",
+        short_path="../nodes/_generated/xtra.*.yml")
+    reclass_actions.add_class("environment.heat-cicd-queens-dvr-sl.overrides",
+                              short_path="../nodes/_generated/xtra.*.yml")
+    reclass_actions.merge_context(yaml_context=xtra_network_interface,
+                                  short_path="../nodes/_generated/xtra.*.yml")
+
     underlay_actions.check_call(
             "salt-key -a {node} --include-all -y".format(node=xtra_node),
             node_name=cfg_node,
@@ -90,9 +99,8 @@
         node_name=xtra_node,
         raise_on_err=False)
     salt_actions.enforce_state("I@salt:master", "reclass")
-
-    reclass_actions.merge_context(yaml_context=xtra_network_interface,
-                                  short_path="../nodes/_generated/xtra.*.yml")
+    salt_actions.enforce_state("xtra*", "linux")
+    salt_actions.enforce_state("xtra*", "openssh")
 
     yield
 
@@ -103,6 +111,12 @@
     #         raise_on_err=False)
 
 
+@pytest.fixture(scope='session')
+def wa_prod36167(reclass_actions):
+    reclass_actions.delete_class("system.salt.control.virt",
+                                 "classes/cluster/*/infra/kvm.yml")
+
+
 @pytest.mark.usefixtures("add_xtra_node_to_salt")
 class TestCephOsd(object):
 
@@ -310,6 +324,12 @@
     def test_add_node_process(self,
                               drivetrain_actions,
                               describe_node_in_reclass):
+        """
+        https://docs.mirantis.com/mcp/q4-18/mcp-operations-guide/openstack-operations/ceph-operations/manage-nodes/add-mon-nodes.html
+        :param drivetrain_actions:
+        :param describe_node_in_reclass:
+        :return:
+        """
         dt = drivetrain_actions
 
         job_name = "ceph-add-node"
@@ -340,6 +360,139 @@
         assert job_result == 'SUCCESS', job_description
 
 
+add_rgw_ceph_init_yml = """
+parameters:
+    _param:
+        ceph_rgw_node04_hostname: xtra
+        ceph_rgw_node04_address: 10.6.0.205
+        ceph_rgw_node04_ceph_public_address: 10.166.49.209
+    linux:
+        network:
+            host:
+                rgw04:
+                    address: ${_param:ceph_rgw_node04_address}
+                    names:
+                    - ${_param:ceph_rgw_node04_hostname}
+                    - ${_param:ceph_rgw_node04_hostname}.${_param:cluster_domain}
+"""  # noqa: E501
+
+add_rgw_ceph_rgw_yml = """
+parameters:
+  _param:
+    cluster_node04_hostname: ${_param:ceph_rgw_node04_hostname}
+    cluster_node04_address: ${_param:ceph_rgw_node04_address}
+  ceph:
+    common:
+      keyring:
+        rgw.xtra:
+          caps:
+            mon: "allow rw"
+            osd: "allow rwx"
+  haproxy:
+    proxy:
+      listen:
+        radosgw:
+          servers:
+            - name: ${_param:cluster_node04_hostname}
+              host: ${_param:cluster_node04_address}
+              port: ${_param:haproxy_radosgw_source_port}
+              params: check
+"""
+
+add_rgw_config_init_yml = """
+parameters:
+  reclass:
+    storage:
+      node:
+        ceph_rgw_node04:
+          name: ${_param:ceph_rgw_node04_hostname}
+          domain: ${_param:cluster_domain}
+          classes:
+          - cluster.${_param:cluster_name}.ceph.rgw
+          params:
+            salt_master_host: ${_param:reclass_config_master}
+            linux_system_codename:  ${_param:ceph_rgw_system_codename}
+            single_address: ${_param:ceph_rgw_node04_address}
+            deploy_address: ${_param:ceph_rgw_node04_deploy_address}
+            ceph_public_address: ${_param:ceph_rgw_node04_public_address}
+            keepalived_vip_priority: 104
+"""
+
+
+@pytest.mark.usefixtures("add_xtra_node_to_salt")
+class TestCephRgw(object):
+    @pytest.fixture
+    def describe_node_in_reclass(self,
+                                 reclass_actions, salt_actions):
+        LOG.info("Executing pytest SETUP "
+                 "from describe_node_in_reclass fixture")
+        reclass = reclass_actions
+        # ---- cluster/*/ceph/init.yml --------------
+        reclass.merge_context(yaml_context=add_rgw_ceph_init_yml,
+                              short_path="cluster/*/ceph/init.yml")
+
+        reclass.merge_context(yaml_context=add_rgw_ceph_rgw_yml,
+                              short_path="cluster/*/ceph/rgw.yml")
+
+        reclass.merge_context(yaml_context=add_rgw_config_init_yml,
+                              short_path="cluster/*/infra/config/init.yml")
+
+        salt_actions.run_state("*", "saltutil.refresh_pillar")
+
+    @pytest.fixture
+    def remove_node_from_reclass(self,
+                                 reclass_actions, salt_actions):
+        LOG.info("Executing pytest SETUP "
+                 "from remove_node_from_reclass fixture")
+        # reclass = reclass_actions
+        # reclass.delete_key(
+        #     key="parameters.reclass.storage.node.ceph_rgw_node04",
+        #     short_path="cluster/*/infra/config/init.yml")
+        # reclass.delete_key(
+        #     key="parameters.linux.network.host.xtra",
+        #     short_path="cluster/*/ceph/init.yml"
+        # )
+
+    def test_add_node_process(self,
+                              drivetrain_actions,
+                              describe_node_in_reclass):
+        """
+        https://docs.mirantis.com/mcp/q4-18/mcp-operations-guide/openstack-operations/ceph-operations/manage-nodes/add-rgw-nodes.html
+        :param drivetrain_actions:
+        :param describe_node_in_reclass:
+        :return:
+        """
+        dt = drivetrain_actions
+
+        job_name = "ceph-add-node"
+        job_parameters = {
+            'HOST': 'xtra*',
+            'USE_UPMAP': True
+            }
+        job_result, job_description = dt.start_job_on_jenkins(
+            job_name=job_name,
+            job_parameters=job_parameters,
+            verbose=True)
+        assert job_result == 'SUCCESS', job_description
+
+    def test_delete_node_process(self,
+                                 remove_node_from_reclass,
+                                 drivetrain_actions):
+        dt = drivetrain_actions
+
+        job_name = "ceph-remove-node"
+        job_parameters = {
+            'HOST': 'xtra*',
+            'USE_UPMAP': True
+            }
+        job_result, job_description = dt.start_job_on_jenkins(
+            job_name=job_name,
+            job_parameters=job_parameters,
+            verbose=True)
+        assert job_result == 'SUCCESS', job_description
+
+
+@pytest.mark.usefixtures("add_xtra_node_to_salt")
 class TestCephMgr(object):
     def test_add_node(self):
         pass
diff --git a/tcp_tests/tests/system/test_failover_ceph.py b/tcp_tests/tests/system/test_failover_ceph.py
index 44658ea..a89d711 100644
--- a/tcp_tests/tests/system/test_failover_ceph.py
+++ b/tcp_tests/tests/system/test_failover_ceph.py
@@ -126,31 +126,31 @@
 
         # Run Tempest smoke test suite
         show_step(5)
-        status = dt.start_job_on_jenkins(
+        job_result, job_description = dt.start_job_on_jenkins(
             job_name=self.TEMPEST_JOB_NAME,
             job_parameters=self.TEMPEST_JOB_PARAMETERS,
             start_timeout=self.JENKINS_START_TIMEOUT,
             build_timeout=self.JENKINS_BUILD_TIMEOUT
         )
 
-        assert status == 'SUCCESS', (
+        assert job_result == 'SUCCESS', (
             "'{0}' job run status is {1} after executing Tempest smoke "
             "tests".format(
-                self.TEMPEST_JOB_NAME, status)
+                self.TEMPEST_JOB_NAME, job_description)
         )
 
         # Run Sanity test
         show_step(6)
-        status = dt.start_job_on_jenkins(
+        job_result, job_description = dt.start_job_on_jenkins(
             job_name=self.SANITY_JOB_NAME,
             job_parameters=self.SANITY_JOB_PARAMETERS,
             start_timeout=self.JENKINS_START_TIMEOUT,
             build_timeout=self.JENKINS_BUILD_TIMEOUT
         )
-        assert status == 'SUCCESS', (
+        assert job_result == 'SUCCESS', (
             "'{0}' job run status is {1} after executing selected sanity "
             "tests".format(
-                self.SANITY_JOB_NAME, status)
+                self.SANITY_JOB_NAME, job_description)
         )
 
     @pytest.mark.grab_versions
@@ -222,31 +222,31 @@
 
         # Run Tempest smoke test suite
         show_step(5)
-        status = dt.start_job_on_jenkins(
+        job_result, job_description = dt.start_job_on_jenkins(
             job_name=self.TEMPEST_JOB_NAME,
             job_parameters=self.TEMPEST_JOB_PARAMETERS,
             start_timeout=self.JENKINS_START_TIMEOUT,
             build_timeout=self.JENKINS_BUILD_TIMEOUT
         )
 
-        assert status == 'SUCCESS', (
+        assert job_result == 'SUCCESS', (
             "'{0}' job run status is {1} after executing Tempest smoke "
             "tests".format(
-                self.TEMPEST_JOB_NAME, status)
+                self.TEMPEST_JOB_NAME, job_description)
         )
 
         # Run Sanity test
         show_step(6)
-        status = dt.start_job_on_jenkins(
+        job_result, job_description = dt.start_job_on_jenkins(
             job_name=self.SANITY_JOB_NAME,
             job_parameters=self.SANITY_JOB_PARAMETERS,
             start_timeout=self.JENKINS_START_TIMEOUT,
             build_timeout=self.JENKINS_BUILD_TIMEOUT
         )
-        assert status == 'SUCCESS', (
+        assert job_result == 'SUCCESS', (
             "'{0}' job run status is {1} after executing selected sanity "
             "tests".format(
-                self.SANITY_JOB_NAME, status)
+                self.SANITY_JOB_NAME, job_description)
         )
 
     @pytest.mark.grab_versions
@@ -317,31 +317,31 @@
 
         # Run Tempest smoke test suite
         show_step(5)
-        status = dt.start_job_on_jenkins(
+        job_result, job_description = dt.start_job_on_jenkins(
             job_name=self.TEMPEST_JOB_NAME,
             job_parameters=self.TEMPEST_JOB_PARAMETERS,
             start_timeout=self.JENKINS_START_TIMEOUT,
             build_timeout=self.JENKINS_BUILD_TIMEOUT
         )
 
-        assert status == 'SUCCESS', (
+        assert job_result == 'SUCCESS', (
             "'{0}' job run status is {1} after executing Tempest smoke "
             "tests".format(
-                self.TEMPEST_JOB_NAME, status)
+                self.TEMPEST_JOB_NAME, job_description)
         )
 
         # Run Sanity test
         show_step(6)
-        status = dt.start_job_on_jenkins(
+        job_result, job_description = dt.start_job_on_jenkins(
             job_name=self.SANITY_JOB_NAME,
             job_parameters=self.SANITY_JOB_PARAMETERS,
             start_timeout=self.JENKINS_START_TIMEOUT,
             build_timeout=self.JENKINS_BUILD_TIMEOUT
         )
-        assert status == 'SUCCESS', (
+        assert job_result == 'SUCCESS', (
             "'{0}' job run status is {1} after executing selected sanity "
             "tests".format(
-                self.SANITY_JOB_NAME, status)
+                self.SANITY_JOB_NAME, job_description)
         )
 
     # #######################################################################
diff --git a/tcp_tests/tests/system/test_install_mcp_ovs_pike.py b/tcp_tests/tests/system/test_install_mcp_ovs_pike.py
index 0c74d20..f3de4eb 100644
--- a/tcp_tests/tests/system/test_install_mcp_ovs_pike.py
+++ b/tcp_tests/tests/system/test_install_mcp_ovs_pike.py
@@ -331,7 +331,7 @@
             host='http://{}:8081'.format(config.salt.salt_master_host),
             username='admin',
             password='r00tme')
-        params = jenkins.make_defults_params('deploy_openstack')
+        params = jenkins.make_defaults_params('deploy_openstack')
         params['SALT_MASTER_URL'] = salt_api
         params['STACK_INSTALL'] = 'core,cicd'
 
@@ -432,7 +432,7 @@
             host='http://{}:8081'.format(config.salt.salt_master_host),
             username='admin',
             password='r00tme')
-        params = jenkins.make_defults_params('deploy_openstack')
+        params = jenkins.make_defaults_params('deploy_openstack')
         params['SALT_MASTER_URL'] = salt_api
         params['STACK_INSTALL'] = 'core,cicd'
 
diff --git a/tcp_tests/tests/system/test_k8s_actions.py b/tcp_tests/tests/system/test_k8s_actions.py
index c6d61dd..e265af5 100644
--- a/tcp_tests/tests/system/test_k8s_actions.py
+++ b/tcp_tests/tests/system/test_k8s_actions.py
@@ -490,7 +490,7 @@
             username=jenkins_info['username'],
             password=jenkins_info['password'])
 
-        params = jenkins.make_defults_params('deploy-k8s-upgrade')
+        params = jenkins.make_defaults_params('deploy-k8s-upgrade')
         params['SALT_MASTER_URL'] = salt_api
         params['SALT_MASTER_CREDENTIALS'] = 'salt'
         params['CONFORMANCE_RUN_AFTER'] = True
diff --git a/tcp_tests/tests/system/test_mcp_update.py b/tcp_tests/tests/system/test_mcp_update.py
index 240b481..c1456be 100644
--- a/tcp_tests/tests/system/test_mcp_update.py
+++ b/tcp_tests/tests/system/test_mcp_update.py
@@ -234,7 +234,12 @@
         job_parameters = {
             'GIT_REFSPEC': 'release/proposed/2019.2.0',
             'MK_PIPELINES_REFSPEC': 'release/proposed/2019.2.0',
-            'TARGET_MCP_VERSION': '2019.2.0'
+            'TARGET_MCP_VERSION': '2019.2.0',
+            "DRIVE_TRAIN_PARAMS": {
+                        "OS_DIST_UPGRADE": True,
+                        "OS_UPGRADE": True,
+                        "BATCH_SIZE": 10
+                        }
         }
         job_result, job_description = dt.start_job_on_jenkins(
             job_name=job_name,
@@ -346,7 +351,9 @@
 
         job_name = 'deploy-upgrade-galera'
         job_parameters = {
-            'INTERACTIVE': 'false'
+            'INTERACTIVE': 'false',
+            'OS_DIST_UPGRADE': 'true',
+            'OS_UPGRADE': 'true'
         }
 
         job_result, job_description = dt.start_job_on_jenkins(
@@ -480,7 +487,9 @@
         # ########### Start Deploy - upgrade RabbitMQ pipeline  ############
         show_step(3)
         job_parameters = {
-            'INTERACTIVE': 'false'
+            'INTERACTIVE': 'false',
+            'OS_DIST_UPGRADE': 'true',
+            'OS_UPGRADE': 'true'
         }
 
         job_result, job_description = dt.start_job_on_jenkins(
@@ -542,7 +551,9 @@
         job_parameters = {
             "STAGE_UPGRADE_DOCKER_COMPONENTS": True,
             "STAGE_UPGRADE_ES_KIBANA": True,
-            "STAGE_UPGRADE_SYSTEM_PART": True
+            "STAGE_UPGRADE_SYSTEM_PART": True,
+            'OS_DIST_UPGRADE': 'true',
+            'OS_UPGRADE': 'true'
         }
         job_result, job_description = drivetrain.start_job_on_jenkins(
             job_name="stacklight-upgrade",
diff --git a/tcp_tests/tests/system/test_offline.py b/tcp_tests/tests/system/test_offline.py
index d19316b..7ea9c11 100644
--- a/tcp_tests/tests/system/test_offline.py
+++ b/tcp_tests/tests/system/test_offline.py
@@ -150,7 +150,7 @@
                 host=day1_cfg_config.config.salt.salt_master_host),
             username='admin',
             password='r00tme')
-        params = jenkins.make_defults_params('deploy_openstack')
+        params = jenkins.make_defaults_params('deploy_openstack')
         params['SALT_MASTER_URL'] = result
         params['STACK_INSTALL'] = "core,openstack,ovs"
         build = jenkins.run_build('deploy_openstack', params)
@@ -212,7 +212,7 @@
             host='http://172.16.44.33:8081',
             username='admin',
             password='r00tme')
-        params = jenkins.make_defults_params('deploy_openstack')
+        params = jenkins.make_defaults_params('deploy_openstack')
         params['SALT_MASTER_URL'] = salt_api
         if settings.STACK_INSTALL:
             params['STACK_INSTALL'] = settings.STACK_INSTALL
@@ -271,7 +271,7 @@
         except LookupError:
             ntp_skipped_nodes = ''
 
-        params = jenkins.make_defults_params('cvp-sanity')
+        params = jenkins.make_defaults_params('cvp-sanity')
         params['TESTS_SETTINGS'] = (
             'drivetrain_version={0};{1}'
             .format(settings.MCP_VERSION, ntp_skipped_nodes))
diff --git a/tcp_tests/tests/system/test_pipeline_deploy.py b/tcp_tests/tests/system/test_pipeline_deploy.py
index 9852f5f..bfc7d8c 100644
--- a/tcp_tests/tests/system/test_pipeline_deploy.py
+++ b/tcp_tests/tests/system/test_pipeline_deploy.py
@@ -49,7 +49,7 @@
             password='r00tme')
 
         # Creating param list for openstack deploy
-        params = jenkins.make_defults_params('deploy_openstack')
+        params = jenkins.make_defaults_params('deploy_openstack')
         params['SALT_MASTER_URL'] = salt_api
         params['STACK_INSTALL'] = 'core,kvm,openstack,ovs'
         show_step(4)
@@ -99,7 +99,7 @@
             host='http://172.16.49.2:8081',
             username='admin',
             password='r00tme')
-        params = jenkins.make_defults_params('deploy_openstack')
+        params = jenkins.make_defaults_params('deploy_openstack')
         params['SALT_MASTER_URL'] = salt_api
         params['STACK_INSTALL'] = 'core,kvm,cicd'
 
diff --git a/tcp_tests/utils/run_jenkins_job.py b/tcp_tests/utils/run_jenkins_job.py
index e0e7f69..bf3bb01 100755
--- a/tcp_tests/utils/run_jenkins_job.py
+++ b/tcp_tests/utils/run_jenkins_job.py
@@ -123,7 +123,7 @@
         username=username,
         password=password)
 
-    job_params = jenkins.make_defults_params(job_name)
+    job_params = jenkins.make_defaults_params(job_name)
     if job_parameters is not None:  # job_parameters = {}
         job_params.update(job_parameters)