tests finally can works over pure novaclient/ssh
diff --git a/utils.py b/utils.py
index 8941ca5..0a38ad5 100644
--- a/utils.py
+++ b/utils.py
@@ -1,9 +1,21 @@
+import time
+import threading
+import contextlib
 import multiprocessing
 
+import paramiko
 
-def get_barrier(count):
-    val = multiprocessing.Value('i', count)
-    cond = multiprocessing.Condition()
+from log import log
+
+
+def get_barrier(count, threaded=False):
+    if threaded:
+        class val(object):
+            value = count
+        cond = threading.Condition()
+    else:
+        val = multiprocessing.Value('i', count)
+        cond = multiprocessing.Condition()
 
     def closure(timeout):
         with cond:
@@ -15,3 +27,62 @@
             return val.value == 0
 
     return closure
+
+
+def ssh_connect(host, user, key_file, retry_count=10, timeout=5):
+    ssh = paramiko.SSHClient()
+    ssh.load_host_keys('/dev/null')
+    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+    ssh.known_hosts = None
+
+    for i in range(retry_count):
+        try:
+            ssh.connect(host, username=user, key_filename=key_file,
+                        look_for_keys=False)
+            return ssh
+        except:
+            if i == retry_count - 1:
+                raise
+            time.sleep(timeout)
+
+
+def wait_on_barrier(barrier, latest_start_time):
+    if barrier is not None:
+        if latest_start_time is not None:
+            timeout = latest_start_time - time.time()
+        else:
+            timeout = None
+
+        if timeout is not None and timeout > 0:
+            msg = "Ready and waiting on barrier. " + \
+                  "Will wait at most {0} seconds"
+            log(msg.format(int(timeout)))
+
+            if not barrier(timeout):
+                log("Barrier timeouted")
+
+
+@contextlib.contextmanager
+def log_error(action, types=(Exception,)):
+    if not action.startswith("!"):
+        log("Starts : " + action)
+    else:
+        action = action[1:]
+
+    try:
+        yield
+    except Exception as exc:
+        if isinstance(exc, types) and not isinstance(exc, StopIteration):
+            templ = "Error during {0} stage: {1}"
+            log(templ.format(action, exc.message))
+        raise
+
+
+def run_over_ssh(conn, cmd):
+    "should be replaces by normal implementation, with select"
+
+    stdin, stdout, stderr = conn.exec_command(cmd)
+    out = stdout.read()
+    err = stderr.read()
+    code = stdout.channel.recv_exit_status()
+    return code, out, err