diff --git a/ext_libs/__init__.py b/ext_libs/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ext_libs/__init__.py
diff --git a/run_test.py b/run_test.py
index ec77a41..a132e16 100755
--- a/run_test.py
+++ b/run_test.py
@@ -111,6 +111,17 @@
     return templ.format(data, formatter(res), "=" * 80)
 
 
+def connect_one(node):
+    try:
+        node.connection = ssh_utils.connect(node.connection_url)
+    except Exception as exc:
+        logger.exceprtion()
+
+
+def connect_all(nodes):
+    pass
+
+
 def main(argv):
     logging_conf = cfg_dict.get('logging')
     if logging_conf:
@@ -124,37 +135,36 @@
 
     if 'connect' in opts.stages:
         for node in current_data:
-            node.connection = ssh_utils.connect(node.connection_url)
 
     print "\n".join(map(str, current_data))
     return 0
-    # Discover nodes
 
-    tests = cfg_dict.get("tests", [])
+
+    # tests = cfg_dict.get("tests", [])
 
     # Deploy and start sensors
     # deploy_and_start_sensors(cfg_dict.get('sensors'), nodes_to_run)
 
-    for test_name, opts in tests.items():
-        cmd_line = " ".join(opts['opts'])
-        logger.debug("Run test with {0!r} params".format(cmd_line))
-        latest_start_time = 300 + time.time()
-        uris = [node.connection_url for node in nodes_to_run]
-        runner = ssh_runner.get_ssh_runner(uris,
-                                           latest_start_time,
-                                           opts.get('keep_temp_files'))
-        res = run_io_test(test_name,
-                          opts['opts'],
-                          runner,
-                          opts.get('keep_temp_files'))
-        logger.debug(format_result(res, get_formatter(test_name)))
+    # for test_name, opts in tests.items():
+    #     cmd_line = " ".join(opts['opts'])
+    #     logger.debug("Run test with {0!r} params".format(cmd_line))
+    #     latest_start_time = 300 + time.time()
+    #     uris = [node.connection_url for node in nodes_to_run]
+    #     runner = ssh_runner.get_ssh_runner(uris,
+    #                                        latest_start_time,
+    #                                        opts.get('keep_temp_files'))
+    #     res = run_io_test(test_name,
+    #                       opts['opts'],
+    #                       runner,
+    #                       opts.get('keep_temp_files'))
+    #     logger.debug(format_result(res, get_formatter(test_name)))
 
     # if cfg_dict.get('data_server_url'):
     #     result = json.loads(get_formatter(opts.tool_type)(res))
     #     result['name'] = opts.build_name
     #     add_test(opts.build_name, result, opts.data_server_url)
 
-    return 0
+    # return 0
 
 
 if __name__ == '__main__':
diff --git a/scripts/run_vm.sh b/scripts/run_vm.sh
index c9e5f86..f93e475 100644
--- a/scripts/run_vm.sh
+++ b/scripts/run_vm.sh
@@ -3,16 +3,19 @@
 FUEL_PASSWD=$2
 
 # VM_IP=$(nova floating-ip-create "$FLOATIN_NET" | grep "$FLOATIN_NET" | awk '{print $2}')
-VM_IP=172.16.53.26
+VM_IP=172.16.53.16
 OS_ORIGIN_IP=192.168.0.2
 OS_EXT_IP=172.16.53.2
 VM_NAME=koder-disk-test
 
-FIXED_NET_NAME="net04"
+# FIXED_NET_NAME="net04"
+FIXED_NET_NAME="novanetwork"
 FLOATING_NET="net04_ext"
 
-my_dir="$(dirname "$0")"
-source "$my_dir/config.sh"
+# my_dir="$(dirname "$0")"
+# source "$my_dir/config.sh"
+source config.sh
+
 SSH_OVER_MASTER="sshpass -p${FUEL_PASSWD} ssh root@${MASTER_IP}"
 VOLUME_NAME="test-volume"
 VOLUME_SIZE=20
