diff --git a/src/com/mirantis/mk/Test.groovy b/src/com/mirantis/mk/Test.groovy
index 4ef8b10..95a432e 100644
--- a/src/com/mirantis/mk/Test.groovy
+++ b/src/com/mirantis/mk/Test.groovy
@@ -32,25 +32,37 @@
 /**
  * Execute tempest tests
  *
- * @param tempestLink   Docker image link with rally and tempest
+ * @param dockerImageLink   Docker image link with rally and tempest
+ * @param target            Host to run tests
+ * @param pattern            If not false, will run only tests matched the pattern
  */
-def runTempestTests(master, tempestLink) {
+def runTempestTests(master, dockerImageLink, target, pattern = "false") {
     def salt = new com.mirantis.mk.Salt()
-    salt.runSaltProcessStep(master, 'ctl01*', 'cmd.run', ["docker run --rm --net=host " +
-                                                          "-e TEMPEST_CONF=mcp.conf " +
-                                                          "-e SKIP_LIST=mcp_skip.list " +
-                                                          "-e SOURCE_FILE=keystonercv3 " +
-                                                          "-v /root/:/home/rally ${tempestLink} >> docker-tempest.log"])
+    if (pattern == "false") {
+        salt.runSaltProcessStep(master, "${target}", 'cmd.run', ["docker run --rm --net=host " +
+                                                                  "-e TEMPEST_CONF=mcp.conf " +
+                                                                  "-e SKIP_LIST=mcp_skip.list " +
+                                                                  "-e SOURCE_FILE=keystonercv3 " +
+                                                                  "-v /root/:/home/rally ${dockerImageLink} >> docker-tempest.log"])
+        }
+    else {
+        salt.runSaltProcessStep(master, "${target}", 'cmd.run', ["docker run --rm --net=host " +
+                                                                  "-e TEMPEST_CONF=mcp.conf " +
+                                                                  "-e SKIP_LIST=mcp_skip.list " +
+                                                                  "-e SOURCE_FILE=keystonercv3 " +
+                                                                  "-e CUSTOM='--pattern ${pattern}' " +
+                                                                  "-v /root/:/home/rally ${dockerImageLink} >> docker-tempest.log"])
+         }
 }
 
 /**
  * Upload results to worker
  *
  */
-def copyTempestResults(master) {
+def copyTempestResults(master, target) {
     def salt = new com.mirantis.mk.Salt()
-    salt.runSaltProcessStep(master, 'ctl01*', 'cmd.run', ["scp /root/docker-tempest.log cfg01:/home/ubuntu/ && " +
-                                                          "find /root -name result.xml -exec scp {} cfg01:/home/ubuntu \\;"])
+    salt.runSaltProcessStep(master, "${target}", 'cmd.run', ["scp /root/docker-tempest.log cfg01:/home/ubuntu/ && " +
+                                                             "find /root -name result.xml -exec scp {} cfg01:/home/ubuntu \\;"])
 }
 
 
@@ -62,3 +74,13 @@
     def salt = new com.mirantis.mk.Salt()
     salt.runSaltProcessStep(master, 'cfg01*', 'cmd.run', ["cat /home/ubuntu/${image}.output"])
 }
+
+
+/** Install docker if needed
+ *
+ * @param target              Target node to install docker pkg
+ */
+def install_docker(master, target) {
+    def salt = new com.mirantis.mk.Salt()
+    salt.runSaltProcessStep(master, "${target}", 'pkg.install', ["docker.io"])
+}
