diff --git a/aptly-promote-pipeline.groovy b/aptly-promote-pipeline.groovy
index c196ccd..31390b0 100644
--- a/aptly-promote-pipeline.groovy
+++ b/aptly-promote-pipeline.groovy
@@ -43,6 +43,8 @@
        throw e
     } finally {
        common.sendNotification(currentBuild.result,"",["slack"])
+       def _extra_descr = "${SOURCE}=>${TARGET}:\n${COMPONENTS} ${packages}"
+       currentBuild.description = currentBuild.description ? _extra_descr + " " + currentBuild.description : _extra_descr
     }
   }
-}
\ No newline at end of file
+}
diff --git a/build-mirror-image.groovy b/build-mirror-image.groovy
index 630cafc..d9169b4 100644
--- a/build-mirror-image.groovy
+++ b/build-mirror-image.groovy
@@ -57,170 +57,173 @@
     throw new Exception("Failed after $times retries")
 }
 
-node("python&&disk-xl") {
-    try {
-        def workspace = common.getWorkspace()
-        rcFile = openstack.createOpenstackEnv(OS_URL, OS_CREDENTIALS_ID, OS_PROJECT, "default", "", "default", "2", "")
-        openstackEnv = String.format("%s/venv", workspace)
-        def openstackVersion = OS_VERSION
+timeout(time: 12, unit: 'HOURS') {
+    node("python&&disk-xl") {
+        try {
+            def workspace = common.getWorkspace()
+            rcFile = openstack.createOpenstackEnv(OS_URL, OS_CREDENTIALS_ID, OS_PROJECT, "default", "", "default", "2", "")
+            openstackEnv = String.format("%s/venv", workspace)
+            def openstackVersion = OS_VERSION
 
-        VM_IP_DELAY = VM_IP_DELAY as Integer
-        VM_IP_RETRIES = VM_IP_RETRIES as Integer
-        VM_CONNECT_DELAY = VM_CONNECT_DELAY as Integer
-        VM_CONNECT_RETRIES = VM_CONNECT_RETRIES as Integer
+            VM_IP_DELAY = VM_IP_DELAY as Integer
+            VM_IP_RETRIES = VM_IP_RETRIES as Integer
+            VM_CONNECT_DELAY = VM_CONNECT_DELAY as Integer
+            VM_CONNECT_RETRIES = VM_CONNECT_RETRIES as Integer
 
-        stage("Get templates"){
+            stage("Get templates"){
 
-            if (!fileExists("${workspace}/tmp")) {
-                sh "mkdir -p ${workspace}/tmp"
+                if (!fileExists("${workspace}/tmp")) {
+                    sh "mkdir -p ${workspace}/tmp"
+                }
+
+                sh "wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/salt-bootstrap.sh"
+                openstack.setupOpenstackVirtualenv(openstackEnv, openstackVersion)
             }
 
-            sh "wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/salt-bootstrap.sh"
-            openstack.setupOpenstackVirtualenv(openstackEnv, openstackVersion)
-        }
+            stage("Spawn Instance"){
+                privateKey = openstack.runOpenstackCommand("openstack keypair create mcp-offline-keypair-${dateTime}", rcFile, openstackEnv)
 
-        stage("Spawn Instance"){
-            privateKey = openstack.runOpenstackCommand("openstack keypair create mcp-offline-keypair-${dateTime}", rcFile, openstackEnv)
+                common.infoMsg(privateKey)
+                sh "echo '${privateKey}' > id_rsa;chmod 600 id_rsa"
 
-            common.infoMsg(privateKey)
-            sh "echo '${privateKey}' > id_rsa;chmod 600 id_rsa"
+                floatingIP = openstack.runOpenstackCommand("openstack ip floating create --format value -c floating_ip_address ${VM_FLOATING_IP_POOL}", rcFile, openstackEnv)
 
-            floatingIP = openstack.runOpenstackCommand("openstack ip floating create --format value -c floating_ip_address ${VM_FLOATING_IP_POOL}", rcFile, openstackEnv)
+                withEnv(["CLUSTER_NAME=${CLUSTER_NAME}", "CLUSTER_MODEL=${CLUSTER_MODEL}"]) {
+                    sh "envsubst < salt-bootstrap.sh > salt-bootstrap.sh.temp;mv salt-bootstrap.sh.temp salt-bootstrap.sh; cat salt-bootstrap.sh"
+                }
 
-            withEnv(["CLUSTER_NAME=${CLUSTER_NAME}", "CLUSTER_MODEL=${CLUSTER_MODEL}"]) {
-                sh "envsubst < salt-bootstrap.sh > salt-bootstrap.sh.temp;mv salt-bootstrap.sh.temp salt-bootstrap.sh; cat salt-bootstrap.sh"
+                openstackServer = openstack.runOpenstackCommand("openstack server create --key-name mcp-offline-keypair-${dateTime} --availability-zone ${VM_AVAILABILITY_ZONE} --image ${VM_IMAGE} --flavor ${VM_FLAVOR} --nic net-id=${VM_NETWORK_ID},v4-fixed-ip=${VM_IP} --user-data salt-bootstrap.sh mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
+                sleep(60)
+
+                retry(VM_IP_RETRIES, VM_IP_DELAY){
+                    openstack.runOpenstackCommand("openstack ip floating add ${floatingIP} mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
+                }
+
+                sleep(500)
+
+                retry(VM_CONNECT_RETRIES, VM_CONNECT_DELAY){
+                    sh "scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i id_rsa root@${floatingIP}:/srv/initComplete ./"
+                }
+
+                python.setupPepperVirtualenv(venvPepper, "http://${floatingIP}:6969", SALT_MASTER_CREDENTIALS)
+            }
+            stage("Prepare instance"){
+                salt.runSaltProcessStep(venvPepper, '*apt*', 'saltutil.refresh_pillar', [], null, true)
+                salt.runSaltProcessStep(venvPepper, '*apt*', 'saltutil.sync_all', [], null, true)
+                salt.enforceState(venvPepper, '*apt*', ['salt'], true, false, null, false, -1, 2)
+                salt.enforceState(venvPepper, '*apt*', ['linux'], true, false, null, false, -1, 2)
+                salt.enforceState(venvPepper, '*apt*', ['nginx'], true, false, null, false, -1, 2)
             }
 
-            openstackServer = openstack.runOpenstackCommand("openstack server create --key-name mcp-offline-keypair-${dateTime} --availability-zone ${VM_AVAILABILITY_ZONE} --image ${VM_IMAGE} --flavor ${VM_FLAVOR} --nic net-id=${VM_NETWORK_ID},v4-fixed-ip=${VM_IP} --user-data salt-bootstrap.sh mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
-            sleep(60)
-
-            retry(VM_IP_RETRIES, VM_IP_DELAY){
-                openstack.runOpenstackCommand("openstack ip floating add ${floatingIP} mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
+            stage("Create Docker Registry"){
+                common.infoMsg("Creating Docker Registry")
+                salt.enforceState(venvPepper, '*apt*', ["docker.host"], true, false, null, false, -1, 2)
+                salt.cmdRun(venvPepper, '*apt*', "docker run --restart always -d -p 5000:5000 --name registry registry:2")
+                salt.enforceState(venvPepper, '*apt*', ["docker.client.registry"], true, false, null, false, -1, 2)
+                salt.cmdRun(venvPepper, '*apt*', "docker system prune --all --force")
+                salt.cmdRun(venvPepper, '*apt*', "wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/config/interfaces -O /root/interfaces")
+                salt.cmdRun(venvPepper, '*apt*', "wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/config/minion.conf -O /root/minion.conf")
             }
 
-            sleep(500)
-
-            retry(VM_CONNECT_RETRIES, VM_CONNECT_DELAY){
-                sh "scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i id_rsa root@${floatingIP}:/srv/initComplete ./"
+            stage("Create Aptly"){
+                common.infoMsg("Creating Aptly")
+                salt.enforceState(venvPepper, '*apt*', ['aptly'], true, false, null, false, -1, 2)
+                //TODO: Do it new way
+                salt.cmdRun(venvPepper, '*apt*', "aptly_mirror_update.sh -s -v", true, null, true, ["runas=aptly"])
+                salt.cmdRun(venvPepper, '*apt*', "nohup aptly api serve --no-lock > /dev/null 2>&1 </dev/null &", true, null, true, ["runas=aptly"])
+                salt.cmdRun(venvPepper, '*apt*', "aptly-publisher --timeout=1200 publish -v -c /etc/aptly-publisher.yaml --architectures amd64 --url http://127.0.0.1:8080 --recreate --force-overwrite", true, null, true, ["runas=aptly"])
+                salt.cmdRun(venvPepper, '*apt*', "aptly db cleanup", true, null, true, ["runas=aptly"])
+                //NEW way
+                //salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.script', ['salt://aptly/files/aptly_mirror_update.sh', "args=-sv", "runas=aptly"], null, true)
+                //salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.script', ['salt://aptly/files/aptly_publish_update.sh', "args=-acrfv", "runas=aptly"], null, true)
+                salt.cmdRun(venvPepper, '*apt*', "wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/aptly/aptly-update.sh -O /srv/scripts/aptly-update.sh")
+                salt.cmdRun(venvPepper, '*apt*', "chmod +x /srv/scripts/aptly-update.sh")
             }
 
-            python.setupPepperVirtualenv(venvPepper, "http://${floatingIP}:6969", SALT_MASTER_CREDENTIALS)
-        }
-        stage("Prepare instance"){
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'saltutil.refresh_pillar', [], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'saltutil.sync_all', [], null, true)
-            salt.enforceState(venvPepper, '*apt*', ['salt'], true, false, null, false, -1, 2)
-            salt.enforceState(venvPepper, '*apt*', ['linux'], true, false, null, false, -1, 2)
-            salt.enforceState(venvPepper, '*apt*', ['nginx'], true, false, null, false, -1, 2)
-        }
-
-        stage("Create Docker Registry"){
-            common.infoMsg("Creating Docker Registry")
-            salt.enforceState(venvPepper, '*apt*', ["docker.host"], true, false, null, false, -1, 2)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["docker run --restart always -d -p 5000:5000 --name registry registry:2"], null, true)
-            salt.enforceState(venvPepper, '*apt*', ["docker.client.registry"], true, false, null, false, -1, 2)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["docker system prune --all --force"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/config/interfaces -O /root/interfaces"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/config/minion.conf -O /root/minion.conf"], null, true)
-        }
-
-        stage("Create Aptly"){
-            common.infoMsg("Creating Aptly")
-            salt.enforceState(venvPepper, '*apt*', ['aptly'], true, false, null, false, -1, 2)
-            //TODO: Do it new way
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["aptly_mirror_update.sh -s -v", "runas=aptly"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["nohup aptly api serve --no-lock > /dev/null 2>&1 </dev/null &", "runas=aptly"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["aptly-publisher --timeout=1200 publish -v -c /etc/aptly-publisher.yaml --architectures amd64 --url http://127.0.0.1:8080 --recreate --force-overwrite", "runas=aptly"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["aptly db cleanup", "runas=aptly"], null, true)
-            //NEW way
-            //salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.script', ['salt://aptly/files/aptly_mirror_update.sh', "args=-sv", "runas=aptly"], null, true)
-            //salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.script', ['salt://aptly/files/aptly_publish_update.sh', "args=-acrfv", "runas=aptly"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/aptly/aptly-update.sh -O /srv/scripts/aptly-update.sh"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["chmod +x /srv/scripts/aptly-update.sh"], null, true)
-        }
-
-        stage("Create Debmirrors"){
-            common.infoMsg("Creating Debmirrors")
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/debmirror.sh -O /srv/scripts/debmirror.sh"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["chmod +x /srv/scripts/debmirror.sh"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["export MCP_VERSION='${MCP_VERSION}';/srv/scripts/debmirror.sh"], null, true)
-        }
-
-        stage("Create Git mirror"){
-            common.infoMsg("Creating Git mirror")
-            salt.enforceState(venvPepper, '*apt*', ['git.server'], true, false, null, false, -1, 2)
-        }
-
-        stage("Create PyPi mirror"){
-            common.infoMsg("Creating PyPi mirror")
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["pip install pip2pi"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/pypi_mirror/requirements.txt -O /srv/pypi_mirror/requirements.txt"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["pip2pi /srv/pypi_mirror/packages/ -r /srv/pypi_mirror/requirements.txt"], null, true)
-        }
-
-        stage("Create mirror of images"){
-            common.infoMsg("Creating mirror of images")
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/images_mirror/images.txt -O /srv/images.txt"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/images_mirror/update-images.sh -O /srv/scripts/update-images.sh"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["chmod +x /srv/scripts/update-images.sh"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["/srv/scripts/update-images.sh -u http://ci.mcp.mirantis.net:8085/images"], null, true)
-        }
-
-        stage("Create instance snapshot"){
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["rm -rf /var/lib/cloud/sem/* /var/lib/cloud/instance /var/lib/cloud/instances/*"], null, true)
-            salt.runSaltProcessStep(venvPepper, '*apt*', 'cmd.run', ["cloud-init init"], null, true)
-
-            retry(3, 5){
-                openstack.runOpenstackCommand("openstack server stop mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
+            stage("Create Debmirrors"){
+                common.infoMsg("Creating Debmirrors")
+                salt.cmdRun(venvPepper, '*apt*', "wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/debmirror.sh -O /srv/scripts/debmirror.sh")
+                salt.cmdRun(venvPepper, '*apt*', "chmod +x /srv/scripts/debmirror.sh")
+                salt.cmdRun(venvPepper, '*apt*', "export HOME='/root';export MCP_VERSION='${MCP_VERSION}';/srv/scripts/debmirror.sh")
             }
 
-            retry(6, 30){
-                serverStatus = openstack.runOpenstackCommand("openstack server show --format value -c status mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
-                if(serverStatus != "SHUTOFF"){
-                    throw new ResourceException("Instance is not ready for image create.")
+            stage("Create Git mirror"){
+                common.infoMsg("Creating Git mirror")
+                salt.enforceState(venvPepper, '*apt*', ['git.server'], true, false, null, false, -1, 2)
+            }
+
+            stage("Create PyPi mirror"){
+                common.infoMsg("Creating PyPi mirror")
+                salt.cmdRun(venvPepper, '*apt*', "pip install pip2pi")
+                salt.cmdRun(venvPepper, '*apt*', "wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/pypi_mirror/requirements.txt -O /srv/pypi_mirror/requirements.txt")
+                salt.cmdRun(venvPepper, '*apt*', "pip2pi /srv/pypi_mirror/packages/ -r /srv/pypi_mirror/requirements.txt")
+            }
+
+            stage("Create mirror of images"){
+                common.infoMsg("Creating mirror of images")
+                salt.cmdRun(venvPepper, '*apt*', "wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/images_mirror/images.txt -O /srv/images.txt")
+                salt.cmdRun(venvPepper, '*apt*', "wget https://raw.githubusercontent.com/Mirantis/mcp-common-scripts/${SCRIPTS_REF}/mirror-image/images_mirror/update-images.sh -O /srv/scripts/update-images.sh")
+                salt.cmdRun(venvPepper, '*apt*', "chmod +x /srv/scripts/update-images.sh")
+                salt.cmdRun(venvPepper, '*apt*', "/srv/scripts/update-images.sh -u http://ci.mcp.mirantis.net:8085/images")
+            }
+
+            stage("Create instance snapshot"){
+                salt.cmdRun(venvPepper, '*apt*', "rm -rf /var/lib/cloud/sem/* /var/lib/cloud/instance /var/lib/cloud/instances/*")
+                salt.cmdRun(venvPepper, '*apt*', "cloud-init init")
+
+                retry(3, 5){
+                    openstack.runOpenstackCommand("openstack server stop mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
+                }
+
+                retry(6, 30){
+                    serverStatus = openstack.runOpenstackCommand("openstack server show --format value -c status mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
+                    if(serverStatus != "SHUTOFF"){
+                        throw new ResourceException("Instance is not ready for image create.")
+                    }
+                }
+                retry(3, 5){
+                    openstack.runOpenstackCommand("openstack server image create --name ${IMAGE_NAME}-${dateTime} --wait mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
                 }
             }
-            retry(3, 5){
-                openstack.runOpenstackCommand("openstack server image create --name ${IMAGE_NAME}-${dateTime} --wait mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
-            }
-        }
 
-        stage("Publish image"){
-            common.infoMsg("Saving image ${IMAGE_NAME}-${dateTime}")
-            retry(3, 5){
-                openstack.runOpenstackCommand("openstack image save --file ${IMAGE_NAME}-${dateTime} ${IMAGE_NAME}-${dateTime}", rcFile, openstackEnv)
-            }
-            sh "md5sum ${IMAGE_NAME}-${dateTime} > ${IMAGE_NAME}-${dateTime}.md5"
-
-            common.infoMsg("Uploading image ${IMAGE_NAME}-${dateTime}")
-            retry(3, 5){
-                uploadImageStatus = sh(script: "curl -f -T ${IMAGE_NAME}-${dateTime} ${UPLOAD_URL}", returnStatus: true)
-                if(uploadImageStatus!=0){
-                    throw new Exception("Image upload failed")
+            stage("Publish image"){
+                common.infoMsg("Saving image ${IMAGE_NAME}-${dateTime}")
+                retry(3, 5){
+                    openstack.runOpenstackCommand("openstack image save --file ${IMAGE_NAME}-${dateTime}.qcow2 ${IMAGE_NAME}-${dateTime}", rcFile, openstackEnv)
                 }
-            }
-            retry(3, 5){
-                uploadMd5Status = sh(script: "curl -f -T ${IMAGE_NAME}-${dateTime}.md5 ${UPLOAD_URL}", returnStatus: true)
-                if(uploadMd5Status != 0){
-                    throw new Exception("MD5 sum upload failed")
-                }
-            }
-        }
+                sh "md5sum ${IMAGE_NAME}-${dateTime}.qcow2 > ${IMAGE_NAME}-${dateTime}.qcow2.md5"
 
-    } catch (Throwable e) {
-        // If there was an error or exception thrown, the build failed
-        currentBuild.result = "FAILURE"
-        throw e
-    } finally {
-        stage("Cleanup"){
-            if(openstackServer != ""){
-                openstack.runOpenstackCommand("openstack ip floating remove ${floatingIP} mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
-                openstack.runOpenstackCommand("openstack server delete mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
+                common.infoMsg("Uploading image ${IMAGE_NAME}-${dateTime}")
+                retry(3, 5){
+                    uploadImageStatus = sh(script: "curl -f -T ${IMAGE_NAME}-${dateTime}.qcow2 ${UPLOAD_URL}", returnStatus: true)
+                    if(uploadImageStatus!=0){
+                        throw new Exception("Image upload failed")
+                    }
+                }
+                retry(3, 5){
+                    uploadMd5Status = sh(script: "curl -f -T ${IMAGE_NAME}-${dateTime}.qcow2.md5 ${UPLOAD_URL}", returnStatus: true)
+                    if(uploadMd5Status != 0){
+                        throw new Exception("MD5 sum upload failed")
+                    }
+                }
+                currentBuild.description = "<a href='http://ci.mcp.mirantis.net:8085/images/${IMAGE_NAME}-${dateTime}.qcow2'>${IMAGE_NAME}-${dateTime}.qcow2</a>"
             }
-            if(privateKey != ""){
-                openstack.runOpenstackCommand("openstack keypair delete mcp-offline-keypair-${dateTime}", rcFile, openstackEnv)
+
+        } catch (Throwable e) {
+            // If there was an error or exception thrown, the build failed
+            currentBuild.result = "FAILURE"
+            throw e
+        } finally {
+            stage("Cleanup"){
+                if(openstackServer != ""){
+                    openstack.runOpenstackCommand("openstack ip floating remove ${floatingIP} mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
+                    openstack.runOpenstackCommand("openstack server delete mcp-offline-mirror-${dateTime}", rcFile, openstackEnv)
+                }
+                if(privateKey != ""){
+                    openstack.runOpenstackCommand("openstack keypair delete mcp-offline-keypair-${dateTime}", rcFile, openstackEnv)
+                }
+                sh "rm -rf ./*"
             }
-            sh "rm -rf ./*"
         }
     }
 }
\ No newline at end of file
diff --git a/test-salt-models-pipeline.groovy b/test-salt-models-pipeline.groovy
index 08c37d7..3ac1275 100644
--- a/test-salt-models-pipeline.groovy
+++ b/test-salt-models-pipeline.groovy
@@ -107,6 +107,16 @@
   ]
 }
 
+def _clusterTestEnabled(infraYMLConfig){
+  if(infraYMLConfig["parameters"].containsKey("_jenkins")){
+    if(infraYMLConfig["parameters"]["_jenkins"].containsKey("tests_enabled")){
+      return infraYMLConfig["parameters"]["_jenkins"]["tests_enabled"];
+    }
+  }
+  // ci tests are enabled by default
+  return true;
+}
+
 timeout(time: 12, unit: 'HOURS') {
   node("python") {
     try{
@@ -180,21 +190,23 @@
 
           for (int i = 0; i < infraYMLs.size(); i++) {
             def infraYMLConfig = readYaml(file: infraYMLs[i])
-            if(!infraYMLConfig["parameters"].containsKey("_param")){
-                common.warningMsg("ERROR: Cannot find soft params (_param) in file " + infraYMLs[i] + " for obtain a cluster info. Skipping test.")
-                continue
-            }
-            def infraParams = infraYMLConfig["parameters"]["_param"];
-            if(!infraParams.containsKey("infra_config_hostname") || !infraParams.containsKey("cluster_name") || !infraParams.containsKey("cluster_domain")){
-                common.warningMsg("ERROR: Cannot find _param:infra_config_hostname or _param:cluster_name or _param:cluster_domain  in file " + infraYMLs[i] + " for obtain a cluster info. Skipping test.")
-                continue
-            }
-            def clusterName = infraParams["cluster_name"]
-            def clusterDomain = infraParams["cluster_domain"]
-            def configHostname = infraParams["infra_config_hostname"]
-            def testTarget = String.format("%s.%s", configHostname, clusterDomain)
+            if(_clusterTestEnabled(infraYMLConfig)){
+                if(!infraYMLConfig["parameters"].containsKey("_param")){
+                    common.warningMsg("ERROR: Cannot find soft params (_param) in file " + infraYMLs[i] + " for obtain a cluster info. Skipping test.")
+                    continue
+                }
+                def infraParams = infraYMLConfig["parameters"]["_param"];
+                if(!infraParams.containsKey("infra_config_hostname") || !infraParams.containsKey("cluster_name") || !infraParams.containsKey("cluster_domain")){
+                    common.warningMsg("ERROR: Cannot find _param:infra_config_hostname or _param:cluster_name or _param:cluster_domain  in file " + infraYMLs[i] + " for obtain a cluster info. Skipping test.")
+                    continue
+                }
+                def clusterName = infraParams["cluster_name"]
+                def clusterDomain = infraParams["cluster_domain"]
+                def configHostname = infraParams["infra_config_hostname"]
+                def testTarget = String.format("%s.%s", configHostname, clusterDomain)
 
-            futureNodes << [defaultGitUrl, defaultGitRef, clusterName, testTarget, formulasSource]
+                futureNodes << [defaultGitUrl, defaultGitRef, clusterName, testTarget, formulasSource]
+            }
           }
 
           setupRunner()
