diff --git a/jobs/templates/deploy_bm.yml b/jobs/templates/deploy_bm.yml
new file mode 100644
index 0000000..3f1d02a
--- /dev/null
+++ b/jobs/templates/deploy_bm.yml
@@ -0,0 +1,155 @@
+- job-template:
+    project-type: pipeline
+    description: '{job-description}'
+    concurrent: true
+    disabled: false
+    sandbox: true
+    triggers:
+    - timed: H(40-59) 0 * * 1-5
+    dsl: |-
+      /**
+      *
+      * Deploy the product cluster using Jenkins master on CICD cluster
+      *
+      * Expected parameters:
+      *   STACKS                        List of deployments from 'all physical' view in the Jenkins
+      They should be separated by newline
+      *   PARENT_NODE_NAME
+      *   OS_AUTH_URL                   OpenStack keystone catalog URL
+      *   OS_PROJECT_NAME               OpenStack project (tenant) name
+      *   OS_CREDENTIALS                OpenStack username and password credentials ID in Jenkins
+
+      *   TCP_QA_REFS                   Reference to the tcp-qa change on Gerrit, like refs/changes/46/418546/41
+      */
+      @Library('tcp-qa')_
+
+      common = new com.mirantis.mk.Common()
+      shared = new com.mirantis.system_qa.SharedPipeline()
+      import jenkins.model.*
+
+      def stacks = env.STACKS.readLines()
+
+      def get_last_build_time(job_name) {{
+      def job = Hudson.instance.getJob(job_name)
+      def last_build = Jenkins.instance.getItemByFullName(job.fullName).getLastBuild()
+      if (last_build == null) {{
+      return null
+      }}
+      def upStreamBuild = Jenkins.getInstance().getItemByFullName(job.fullName).getBuildByNumber(last_build.getNumber())
+      return upStreamBuild.getTime()
+      }}
+
+      @NonCPS
+      def oldest_job(map) {{
+      println map.sort({{a, b -> a.value <=> b.value}})*.value
+      return map.sort({{a, b -> a.value <=> b.value}})*.key[0]
+      }}
+
+      // ============================================================================
+      timeout(time: 15, unit: 'HOURS') {{
+      node (env.PARENT_NODE_NAME) {{
+      stage("Remove extra stacks") {{
+      withCredentials([
+      [$class          : 'UsernamePasswordMultiBinding',
+      credentialsId   : env.OS_CREDENTIALS,
+      passwordVariable: 'OS_PASSWORD',
+      usernameVariable: 'OS_USERNAME']
+      ]) {{
+      env.OS_IDENTITY_API_VERSION = 3
+      for (stack_name in stacks) {{
+      shared.run_cmd("""
+      # export OS_IDENTITY_API_VERSION=3
+      # export OS_AUTH_URL=${{OS_AUTH_URL}}
+      # export OS_USERNAME=${{OS_USERNAME}}
+      # export OS_PASSWORD=${{OS_PASSWORD}}
+      # export OS_PROJECT_NAME=${{OS_PROJECT_NAME}}
+      openstack --insecure stack delete -y ${{stack_name}} || true
+      timeout 20m /bin/bash -c "while openstack --insecure stack show ${{stack_name}} -f value -c stack_status; do sleep 10; done";
+      """)
+      }}
+      }}
+      }}
+
+      stage("Reboot HW 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"
+      ]
+
+      lab_user = "engineer"
+      lab_pass = "KBwdcRqwed3w2"
+      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")}}
+      }}
+
+      stage("Start deployment") {{
+      def jobs_map = [:]
+      for (stack_name in stacks) {{
+      println stack_name
+      println get_last_build_time(stack_name)
+      jobs_map.put ("${{stack_name}}", get_last_build_time(stack_name))
+      }}
+      stack_to_deploy = oldest_job(jobs_map)
+
+      println "Build ${{stack_to_deploy}}"
+      currentBuild.description = "${{stack_to_deploy}}"
+      // Trigger job
+      def deploy = build job: "${{stack_to_deploy}}",
+      parameters: [
+      string(name: 'PARENT_NODE_NAME', value: env.PARENT_NODE_NAME),
+      string(name: 'OS_CREDENTIALS', value: env.OS_CREDENTIALS)
+      ]
+      // currentBuild.status = deploy.status
+      }}
+      }}
+      }}
+    name: deploy_bm
+    parameters:
+    - string:
+        default: sre-qa-ci-eu
+        description: ''
+        name: OS_CREDENTIALS
+        trim: 'false'
+    - text:
+        default: |-
+          bm-cicd-pike-ovs-maas
+          bm-cicd-queens-ovs-maas
+          heat-bm-cicd-pike-contrail-sl
+          heat-bm-cicd-queens-contrail-sl
+        description: List of stacks for deployment. Separated by newline
+        name: STACKS
+        trim: 'false'
+    - string:
+        default: ''
+        description: ''
+        name: TCP_QA_REFS
+        trim: 'false'
+    - string:
+        default: sre-team-infra
+        description: ''
+        name: PARENT_NODE_NAME
+        trim: 'false'
+    - string:
+        default: https://ic-eu.ssl.mirantis.net:5000/v3
+        description: ''
+        name: OS_AUTH_URL
+        trim: 'false'
+    - string:
+        default: sre-team
+        description: ''
+        name: OS_PROJECT_NAME
+        trim: 'false'
+
