diff --git a/ceph-add-node.groovy b/ceph-add-node.groovy
index b233050..f2af894 100644
--- a/ceph-add-node.groovy
+++ b/ceph-add-node.groovy
@@ -16,61 +16,62 @@
 def python = new com.mirantis.mk.Python()
 
 def pepperEnv = "pepperEnv"
+timeout(time: 12, unit: 'HOURS') {
+    node("python") {
 
-node("python") {
+        // create connection to salt master
+        python.setupPepperVirtualenv(pepperEnv, SALT_MASTER_URL, SALT_MASTER_CREDENTIALS)
 
-    // create connection to salt master
-    python.setupPepperVirtualenv(pepperEnv, SALT_MASTER_URL, SALT_MASTER_CREDENTIALS)
-
-    matches = ["osd", "mon", "rgw"]
-    def found = false
-    for (s in matches) {
-        if (HOST_TYPE.toLowerCase() == s) {
-            found = true
-        }
-    }
-
-    if (!found) {
-        common.errorMsg("No such HOST_TYPE was found. Please insert one of the following types: mon/osd/rgw")
-        throw new InterruptedException()
-    }
-
-    if (HOST_TYPE.toLowerCase() != 'osd') {
-
-        // launch VMs
-        stage('Launch VMs') {
-            salt.enforceState(pepperEnv, 'I@salt:control', 'salt.control', true)
-
-            // wait till the HOST appears in salt-key on salt-master
-            salt.minionPresent(pepperEnv, 'I@salt:master', HOST)
-        }
-    }
-
-    // run basic states
-    stage('Install infra') {
-        orchestrate.installFoundationInfraOnTarget(pepperEnv, HOST)
-    }
-
-    if (HOST_TYPE.toLowerCase() == 'osd') {
-
-        // Install Ceph osd
-        stage('Install Ceph OSD') {
-            orchestrate.installCephOsd(pepperEnv, HOST)
-        }
-    } else if (HOST_TYPE.toLowerCase() == 'mon') {
-        // Install Ceph mon
-        stage('Install Ceph MON') {
-            salt.enforceState(pepperEnv, 'I@ceph:common', 'ceph.common', true)
-            // install Ceph Mons
-            salt.enforceState(pepperEnv, 'I@ceph:mon', 'ceph.mon', true)
-            if (salt.testTarget(pepperEnv, 'I@ceph:mgr')) {
-                salt.enforceState(pepperEnv, 'I@ceph:mgr', 'ceph.mgr', true)
+        matches = ["osd", "mon", "rgw"]
+        def found = false
+        for (s in matches) {
+            if (HOST_TYPE.toLowerCase() == s) {
+                found = true
             }
         }
-    } else if (HOST_TYPE.toLowerCase() == 'rgw') {
-        // Install Ceph rgw
-        stage('Install Ceph RGW') {
-            salt.enforceState(pepperEnv, 'I@ceph:radosgw', ['keepalived', 'haproxy', 'ceph.radosgw'], true)
+
+        if (!found) {
+            common.errorMsg("No such HOST_TYPE was found. Please insert one of the following types: mon/osd/rgw")
+            throw new InterruptedException()
+        }
+
+        if (HOST_TYPE.toLowerCase() != 'osd') {
+
+            // launch VMs
+            stage('Launch VMs') {
+                salt.enforceState(pepperEnv, 'I@salt:control', 'salt.control', true)
+
+                // wait till the HOST appears in salt-key on salt-master
+                salt.minionPresent(pepperEnv, 'I@salt:master', HOST)
+            }
+        }
+
+        // run basic states
+        stage('Install infra') {
+            orchestrate.installFoundationInfraOnTarget(pepperEnv, HOST)
+        }
+
+        if (HOST_TYPE.toLowerCase() == 'osd') {
+
+            // Install Ceph osd
+            stage('Install Ceph OSD') {
+                orchestrate.installCephOsd(pepperEnv, HOST)
+            }
+        } else if (HOST_TYPE.toLowerCase() == 'mon') {
+            // Install Ceph mon
+            stage('Install Ceph MON') {
+                salt.enforceState(pepperEnv, 'I@ceph:common', 'ceph.common', true)
+                // install Ceph Mons
+                salt.enforceState(pepperEnv, 'I@ceph:mon', 'ceph.mon', true)
+                if (salt.testTarget(pepperEnv, 'I@ceph:mgr')) {
+                    salt.enforceState(pepperEnv, 'I@ceph:mgr', 'ceph.mgr', true)
+                }
+            }
+        } else if (HOST_TYPE.toLowerCase() == 'rgw') {
+            // Install Ceph rgw
+            stage('Install Ceph RGW') {
+                salt.enforceState(pepperEnv, 'I@ceph:radosgw', ['keepalived', 'haproxy', 'ceph.radosgw'], true)
+            }
         }
     }
 }
