diff --git a/jobs/templates/deploy_bm.yml b/jobs/templates/deploy_bm.yml
index 3f1d02a..3507e54 100644
--- a/jobs/templates/deploy_bm.yml
+++ b/jobs/templates/deploy_bm.yml
@@ -1,121 +1,11 @@
 - job-template:
     project-type: pipeline
     description: '{job-description}'
-    concurrent: true
+    concurrent: false
     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:
@@ -152,4 +42,13 @@
         description: ''
         name: OS_PROJECT_NAME
         trim: 'false'
+    pipeline-scm:
+      lightweight-checkout: false
+      scm:
+        - git:
+            branches:
+              - FETCH_HEAD
+            refspec: ${{TCP_QA_REFS}}
+            url: https://gerrit.mcp.mirantis.com/mcp/tcp-qa.git
+      script-path: jobs/pipelines/rotation-released-deployment.groovy
 
