fixeg code
diff --git a/.gitignore b/.gitignore
index 3a71c42..d912518 100644
--- a/.gitignore
+++ b/.gitignore
@@ -52,6 +52,6 @@
 
 # PyBuilder
 target/
-.idea//sensor_report.txt
+.idea/
 
 .env/
diff --git a/.idea/dictionaries/koder.xml b/.idea/dictionaries/koder.xml
deleted file mode 100644
index 06a695a..0000000
--- a/.idea/dictionaries/koder.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<component name="ProjectDictionaryState">
-  <dictionary name="koder">
-    <words>
-      <w>ceph</w>
-      <w>creds</w>
-      <w>fname</w>
-      <w>fnames</w>
-      <w>fstats</w>
-      <w>iface</w>
-      <w>openrc</w>
-      <w>openstack</w>
-      <w>osd</w>
-      <w>osds</w>
-      <w>prebuild</w>
-      <w>prefill</w>
-      <w>proc</w>
-      <w>stdin</w>
-      <w>templ</w>
-      <w>testrun</w>
-      <w>vals</w>
-    </words>
-  </dictionary>
-</component>
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
deleted file mode 100644
index 97626ba..0000000
--- a/.idea/encodings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="Encoding">
-    <file url="PROJECT" charset="UTF-8" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 5d99657..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
-    <OptionsSetting value="true" id="Add" />
-    <OptionsSetting value="true" id="Remove" />
-    <OptionsSetting value="true" id="Checkout" />
-    <OptionsSetting value="true" id="Update" />
-    <OptionsSetting value="true" id="Status" />
-    <OptionsSetting value="true" id="Edit" />
-    <ConfirmationsSetting value="0" id="Add" />
-    <ConfirmationsSetting value="0" id="Remove" />
-  </component>
-  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.5.2 virtualenv at ~/workspace/wally/.env" project-jdk-type="Python SDK" />
-</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index c32b72a..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/wally.iml" filepath="$PROJECT_DIR$/.idea/wally.iml" />
-    </modules>
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$" vcs="Git" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/wally.iml b/.idea/wally.iml
deleted file mode 100644
index a7375ed..0000000
--- a/.idea/wally.iml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="PYTHON_MODULE" version="4">
-  <component name="NewModuleRootManager">
-    <content url="file://$MODULE_DIR$" />
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-  <component name="TemplatesService">
-    <option name="TEMPLATE_CONFIGURATION" value="Jinja2" />
-    <option name="TEMPLATE_FOLDERS">
-      <list>
-        <option value="$MODULE_DIR$/web_app/templates" />
-      </list>
-    </option>
-  </component>
-  <component name="TestRunnerService">
-    <option name="PROJECT_TEST_RUNNER" value="Unittests" />
-  </component>
-</module>
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
deleted file mode 100644
index 8764363..0000000
--- a/.idea/workspace.xml
+++ /dev/null
@@ -1,937 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ChangeListManager">
-    <list default="true" id="5dc8824c-962c-4037-8fd3-3bfab4758a44" name="Default" comment="">
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/__init__.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/api.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/cp_protocol.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/cp_transport.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/daemonize.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/discover.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/main.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/protocol.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/sensors/__init__.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/sensors/io_sensors.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/sensors/net_sensors.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/sensors/pscpu_sensors.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/sensors/psram_sensors.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/sensors/syscpu_sensors.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/sensors/sysram_sensors.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors/sensors/utils.py" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/wally/sensors_utils.py" afterPath="" />
-      <change type="MOVED" beforePath="$PROJECT_DIR$/wally/discover/node.py" afterPath="$PROJECT_DIR$/wally/node.py" />
-      <change type="MOVED" beforePath="$PROJECT_DIR$/wally/sensors/webui/sensors.html" afterPath="$PROJECT_DIR$/scripts/sensors_webui.html" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/fio_binaries/fio_trusty_x86_64.bz2" afterPath="$PROJECT_DIR$/fio_binaries/fio_trusty_x86_64.bz2" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/requirements.txt" afterPath="$PROJECT_DIR$/requirements.txt" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/v2_plans.md" afterPath="$PROJECT_DIR$/v2_plans.md" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/config.py" afterPath="$PROJECT_DIR$/wally/config.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/discover/ceph.py" afterPath="$PROJECT_DIR$/wally/discover/ceph.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/discover/discover.py" afterPath="$PROJECT_DIR$/wally/discover/discover.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/discover/fuel.py" afterPath="$PROJECT_DIR$/wally/discover/fuel.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/discover/openstack.py" afterPath="$PROJECT_DIR$/wally/discover/openstack.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/fuel_rest_api.py" afterPath="$PROJECT_DIR$/wally/fuel_rest_api.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/hw_info.py" afterPath="$PROJECT_DIR$/wally/hw_info.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/keystone.py" afterPath="$PROJECT_DIR$/wally/keystone.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/main.py" afterPath="$PROJECT_DIR$/wally/main.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/meta_info.py" afterPath="$PROJECT_DIR$/wally/meta_info.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/pretty_yaml.py" afterPath="$PROJECT_DIR$/wally/pretty_yaml.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/report.py" afterPath="$PROJECT_DIR$/wally/report.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/run_test.py" afterPath="$PROJECT_DIR$/wally/run_test.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/ssh_utils.py" afterPath="$PROJECT_DIR$/wally/ssh_utils.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/start_vms.py" afterPath="$PROJECT_DIR$/wally/start_vms.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/suits/io/fio.py" afterPath="$PROJECT_DIR$/wally/suits/io/fio.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/suits/io/fio_task_parser.py" afterPath="$PROJECT_DIR$/wally/suits/io/fio_task_parser.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/suits/io/rrd.cfg" afterPath="$PROJECT_DIR$/wally/suits/io/rrd.cfg" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/suits/itest.py" afterPath="$PROJECT_DIR$/wally/suits/itest.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/wally/utils.py" afterPath="$PROJECT_DIR$/wally/utils.py" />
-    </list>
-    <ignored path="wally.iws" />
-    <ignored path=".idea/workspace.xml" />
-    <ignored path=".idea/dataSources.local.xml" />
-    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
-    <option name="TRACKING_ENABLED" value="true" />
-    <option name="SHOW_DIALOG" value="false" />
-    <option name="HIGHLIGHT_CONFLICTS" value="true" />
-    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
-    <option name="LAST_RESOLUTION" value="IGNORE" />
-  </component>
-  <component name="CreatePatchCommitExecutor">
-    <option name="PATCH_PATH" value="" />
-  </component>
-  <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
-  <component name="FavoritesManager">
-    <favorites_list name="wally" />
-  </component>
-  <component name="FileEditorManager">
-    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
-      <file leaf-file-name="sensors.py" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wally/sensors.py">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="19">
-              <caret line="1" column="0" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="run_test.py" pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/wally/run_test.py">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="-7195">
-              <caret line="186" column="32" selection-start-line="186" selection-start-column="32" selection-end-line="186" selection-end-column="32" />
-              <folding>
-                <element signature="e#0#9#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="meta_info.py" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wally/meta_info.py">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="475">
-              <caret line="27" column="70" selection-start-line="27" selection-start-column="70" selection-end-line="27" selection-end-column="70" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="main.py" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wally/main.py">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="-2888">
-              <caret line="34" column="0" selection-start-line="34" selection-start-column="0" selection-end-line="34" selection-end-column="0" />
-              <folding>
-                <element signature="e#0#9#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="main.py" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/build/lib.linux-x86_64-2.7/wally/main.py">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="270">
-              <caret line="205" column="20" selection-start-line="205" selection-start-column="20" selection-end-line="205" selection-end-column="20" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="config.py" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wally/config.py">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="-1178">
-              <caret line="31" column="34" selection-start-line="31" selection-start-column="34" selection-end-line="31" selection-end-column="34" />
-              <folding>
-                <element signature="e#0#9#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="test_run_class.py" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wally/test_run_class.py">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="0">
-              <caret line="0" column="13" selection-start-line="0" selection-start-column="6" selection-end-line="0" selection-end-column="13" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="inode.py" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/wally/inode.py">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="798">
-              <caret line="42" column="23" selection-start-line="42" selection-start-column="23" selection-end-line="42" selection-end-column="23" />
-              <folding>
-                <element signature="e#0#10#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-    </leaf>
-  </component>
-  <component name="Git.Settings">
-    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
-  </component>
-  <component name="IdeDocumentHistory">
-    <option name="CHANGED_PATHS">
-      <list>
-        <option value="$PROJECT_DIR$/wally/ssh_utils.py" />
-        <option value="$PROJECT_DIR$/wally/main.py" />
-        <option value="$PROJECT_DIR$/wally/test_run_class.py" />
-        <option value="$PROJECT_DIR$/wally/discover/ceph.py" />
-        <option value="$PROJECT_DIR$/requirements.txt" />
-        <option value="$PROJECT_DIR$/wally/discover/discover.py" />
-        <option value="$PROJECT_DIR$/wally/discover/fuel.py" />
-        <option value="$PROJECT_DIR$/wally/discover/openstack.py" />
-        <option value="$PROJECT_DIR$/wally/hw_info.py" />
-        <option value="$PROJECT_DIR$/wally/node.py" />
-        <option value="$PROJECT_DIR$/wally/fuel_rest_api.py" />
-        <option value="$PROJECT_DIR$/wally/keystone.py" />
-        <option value="$PROJECT_DIR$/wally/pretty_yaml.py" />
-        <option value="$PROJECT_DIR$/wally/start_vms.py" />
-        <option value="$PROJECT_DIR$/wally/report.py" />
-        <option value="$PROJECT_DIR$/wally/meta_info.py" />
-        <option value="$PROJECT_DIR$/wally/suits/itest.py" />
-        <option value="$PROJECT_DIR$/wally/utils.py" />
-        <option value="$PROJECT_DIR$/wally/suits/io/rpc_plugin.py" />
-        <option value="$PROJECT_DIR$/wally/suits/io/fio.py" />
-        <option value="$PROJECT_DIR$/wally/suits/io/fio_task_parser.py" />
-        <option value="$PROJECT_DIR$/wally/inode.py" />
-        <option value="$PROJECT_DIR$/wally/config.py" />
-        <option value="$PROJECT_DIR$/wally/sensors.py" />
-        <option value="$PROJECT_DIR$/wally/run_test.py" />
-      </list>
-    </option>
-  </component>
-  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
-  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
-  <component name="JsGulpfileManager">
-    <detection-done>true</detection-done>
-    <sorting>DEFINITION_ORDER</sorting>
-  </component>
-  <component name="ProjectFrameBounds">
-    <option name="x" value="65" />
-    <option name="y" value="24" />
-    <option name="width" value="2495" />
-    <option name="height" value="1416" />
-  </component>
-  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
-    <OptionsSetting value="true" id="Add" />
-    <OptionsSetting value="true" id="Remove" />
-    <OptionsSetting value="true" id="Checkout" />
-    <OptionsSetting value="true" id="Update" />
-    <OptionsSetting value="true" id="Status" />
-    <OptionsSetting value="true" id="Edit" />
-    <ConfirmationsSetting value="1" id="Add" />
-    <ConfirmationsSetting value="0" id="Remove" />
-  </component>
-  <component name="ProjectView">
-    <navigator currentView="ProjectPane" proportions="" version="1">
-      <flattenPackages />
-      <showMembers />
-      <showModules />
-      <showLibraryContents />
-      <hideEmptyPackages />
-      <abbreviatePackageNames />
-      <autoscrollToSource />
-      <autoscrollFromSource />
-      <sortByType />
-      <manualOrder />
-      <foldersAlwaysOnTop value="true" />
-    </navigator>
-    <panes>
-      <pane id="Scope" />
-      <pane id="ProjectPane">
-        <subPane>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="wally" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="wally" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="wally" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="wally" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="wally" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="wally" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="wally" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="wally" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="wally" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="suits" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="wally" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="wally" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="wally" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="suits" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="io" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-        </subPane>
-      </pane>
-      <pane id="Scratches" />
-    </panes>
-  </component>
-  <component name="PropertiesComponent">
-    <property name="last_opened_file_path" value="$PROJECT_DIR$/../pet/agent" />
-    <property name="WebServerToolWindowFactoryState" value="false" />
-    <property name="js-jscs-nodeInterpreter" value="/usr/bin/node" />
-    <property name="settings.editor.selected.configurable" value="preferences.keymap" />
-    <property name="settings.editor.splitter.proportion" value="0.2" />
-  </component>
-  <component name="RecentsManager">
-    <key name="MoveFile.RECENT_KEYS">
-      <recent name="$PROJECT_DIR$/wally" />
-    </key>
-  </component>
-  <component name="RunManager" selected="Python.wally">
-    <configuration default="true" type="DjangoTestsConfigurationType" factoryName="Django tests">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs>
-        <env name="PYTHONUNBUFFERED" value="1" />
-      </envs>
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="wally" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="TARGET" value="" />
-      <option name="SETTINGS_FILE" value="" />
-      <option name="CUSTOM_SETTINGS" value="false" />
-      <option name="USE_OPTIONS" value="false" />
-      <option name="OPTIONS" value="" />
-      <method />
-    </configuration>
-    <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
-      <method />
-    </configuration>
-    <configuration default="true" type="PyBehaveRunConfigurationType" factoryName="Behave">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="wally" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="ADDITIONAL_ARGS" value="" />
-      <method />
-    </configuration>
-    <configuration default="true" type="PyLettuceRunConfigurationType" factoryName="Lettuce">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="wally" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="ADDITIONAL_ARGS" value="" />
-      <method />
-    </configuration>
-    <configuration default="true" type="PythonConfigurationType" factoryName="Python">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs>
-        <env name="PYTHONUNBUFFERED" value="1" />
-      </envs>
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="wally" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="PARAMETERS" value="" />
-      <option name="SHOW_COMMAND_LINE" value="false" />
-      <method />
-    </configuration>
-    <configuration default="true" type="Tox" factoryName="Tox">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <module name="wally" />
-      <method />
-    </configuration>
-    <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
-      <node-interpreter>project</node-interpreter>
-      <node-options />
-      <gulpfile />
-      <tasks />
-      <arguments />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="js.build_tools.npm" factoryName="npm">
-      <command value="run-script" />
-      <scripts />
-      <node-interpreter value="project" />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="tests" factoryName="Attests">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="wally" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="CLASS_NAME" value="" />
-      <option name="METHOD_NAME" value="" />
-      <option name="FOLDER_NAME" value="" />
-      <option name="TEST_TYPE" value="TEST_SCRIPT" />
-      <option name="PATTERN" value="" />
-      <option name="USE_PATTERN" value="false" />
-      <method />
-    </configuration>
-    <configuration default="true" type="tests" factoryName="Doctests">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="wally" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="CLASS_NAME" value="" />
-      <option name="METHOD_NAME" value="" />
-      <option name="FOLDER_NAME" value="" />
-      <option name="TEST_TYPE" value="TEST_SCRIPT" />
-      <option name="PATTERN" value="" />
-      <option name="USE_PATTERN" value="false" />
-      <method />
-    </configuration>
-    <configuration default="true" type="tests" factoryName="Nosetests">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="wally" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="CLASS_NAME" value="" />
-      <option name="METHOD_NAME" value="" />
-      <option name="FOLDER_NAME" value="" />
-      <option name="TEST_TYPE" value="TEST_SCRIPT" />
-      <option name="PATTERN" value="" />
-      <option name="USE_PATTERN" value="false" />
-      <option name="PARAMS" value="" />
-      <option name="USE_PARAM" value="false" />
-      <method />
-    </configuration>
-    <configuration default="true" type="tests" factoryName="Unittests">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="wally" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="CLASS_NAME" value="" />
-      <option name="METHOD_NAME" value="" />
-      <option name="FOLDER_NAME" value="" />
-      <option name="TEST_TYPE" value="TEST_SCRIPT" />
-      <option name="PATTERN" value="" />
-      <option name="USE_PATTERN" value="false" />
-      <option name="PUREUNITTEST" value="true" />
-      <option name="PARAMS" value="" />
-      <option name="USE_PARAM" value="false" />
-      <method />
-    </configuration>
-    <configuration default="true" type="tests" factoryName="py.test">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="wally" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="CLASS_NAME" value="" />
-      <option name="METHOD_NAME" value="" />
-      <option name="FOLDER_NAME" value="" />
-      <option name="TEST_TYPE" value="TEST_SCRIPT" />
-      <option name="PATTERN" value="" />
-      <option name="USE_PATTERN" value="false" />
-      <option name="testToRun" value="" />
-      <option name="keywords" value="" />
-      <option name="params" value="" />
-      <option name="USE_PARAM" value="false" />
-      <option name="USE_KEYWORD" value="false" />
-      <method />
-    </configuration>
-    <configuration default="false" name="wally" type="PythonConfigurationType" factoryName="Python" singleton="true">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs>
-        <env name="PYTHONUNBUFFERED" value="1" />
-      </envs>
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="wally" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/web_app/app.py" />
-      <option name="PARAMETERS" value="" />
-      <option name="SHOW_COMMAND_LINE" value="false" />
-      <method />
-    </configuration>
-    <list size="1">
-      <item index="0" class="java.lang.String" itemvalue="Python.wally" />
-    </list>
-  </component>
-  <component name="ShelveChangesManager" show_recycled="false">
-    <option name="remove_strategy" value="false" />
-  </component>
-  <component name="SvnConfiguration">
-    <configuration />
-  </component>
-  <component name="TaskManager">
-    <task active="true" id="Default" summary="Default task">
-      <changelist id="5dc8824c-962c-4037-8fd3-3bfab4758a44" name="Default" comment="" />
-      <created>1476553126420</created>
-      <option name="number" value="Default" />
-      <option name="presentableId" value="Default" />
-      <updated>1476553126420</updated>
-    </task>
-    <servers />
-  </component>
-  <component name="ToolWindowManager">
-    <frame x="65" y="24" width="2495" height="1416" extended-state="6" />
-    <editor active="true" />
-    <layout>
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.19158317" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
-      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
-      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32925585" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
-      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32960477" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
-      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
-      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
-      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-    </layout>
-  </component>
-  <component name="Vcs.Log.UiProperties">
-    <option name="RECENTLY_FILTERED_USER_GROUPS">
-      <collection />
-    </option>
-    <option name="RECENTLY_FILTERED_BRANCH_GROUPS">
-      <collection />
-    </option>
-  </component>
-  <component name="VcsContentAnnotationSettings">
-    <option name="myLimit" value="2678400000" />
-  </component>
-  <component name="XDebuggerManager">
-    <breakpoint-manager />
-    <watches-manager />
-  </component>
-  <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/wally/node.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/ssh_utils.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="8721">
-          <caret line="472" column="16" selection-start-line="472" selection-start-column="4" selection-end-line="472" selection-end-column="16" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/discover/ceph.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="171">
-          <caret line="9" column="42" selection-start-line="9" selection-start-column="42" selection-end-line="9" selection-end-column="42" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/discover/openstack.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-380">
-          <caret line="28" column="0" selection-start-line="28" selection-start-column="0" selection-end-line="28" selection-end-column="0" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/requirements.txt">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="190">
-          <caret line="10" column="0" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/ssh_utils.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="247">
-          <caret line="317" column="21" selection-start-line="317" selection-start-column="21" selection-end-line="317" selection-end-column="25" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/discover/fuel.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="38">
-          <caret line="3" column="0" selection-start-line="3" selection-start-column="0" selection-end-line="3" selection-end-column="33" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/discover/discover.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="304">
-          <caret line="16" column="9" selection-start-line="16" selection-start-column="9" selection-end-line="16" selection-end-column="9" />
-          <folding>
-            <element signature="e#0#14#0" expanded="false" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/hw_info.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="57">
-          <caret line="177" column="34" selection-start-line="177" selection-start-column="33" selection-end-line="177" selection-end-column="34" />
-          <folding>
-            <element signature="e#0#9#0" expanded="false" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/node.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="38">
-          <caret line="2" column="24" selection-start-line="2" selection-start-column="24" selection-end-line="2" selection-end-column="24" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/fuel_rest_api.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="76">
-          <caret line="4" column="21" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="21" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/pretty_yaml.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="228">
-          <caret line="39" column="14" selection-start-line="39" selection-start-column="10" selection-end-line="39" selection-end-column="14" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/sensors_utils.py" />
-    <entry file="file://$PROJECT_DIR$/wally/start_vms.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-5286">
-          <caret line="376" column="75" selection-start-line="376" selection-start-column="75" selection-end-line="376" selection-end-column="75" />
-          <folding>
-            <element signature="e#0#9#0" expanded="false" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/sensors/main.py" />
-    <entry file="file://$PROJECT_DIR$/wally/sensors/cp_protocol.py" />
-    <entry file="file://$PROJECT_DIR$/wally/sensors/api.py" />
-    <entry file="file://$PROJECT_DIR$/wally/sensors/protocol.py" />
-    <entry file="file://$PROJECT_DIR$/wally/sensors/discover.py" />
-    <entry file="file://$PROJECT_DIR$/wally/sensors/webui/sensors.html" />
-    <entry file="file://$PROJECT_DIR$/wally/sensors/sensors/__init__.py" />
-    <entry file="file://$PROJECT_DIR$/wally/node_rpc.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding>
-            <element signature="e#0#9#0" expanded="false" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/report.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="6631">
-          <caret line="349" column="0" selection-start-line="349" selection-start-column="0" selection-end-line="349" selection-end-column="0" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/sensors/sensors/io_sensors.py" />
-    <entry file="file://$PROJECT_DIR$/wally/sensors/sensors/net_sensors.py" />
-    <entry file="file://$PROJECT_DIR$/wally/sensors/sensors/pscpu_sensors.py" />
-    <entry file="file://$PROJECT_DIR$/wally/sensors/sensors/psram_sensors.py" />
-    <entry file="file://$PROJECT_DIR$/wally/sensors/sensors/syscpu_sensors.py" />
-    <entry file="file://$PROJECT_DIR$/wally/sensors/sensors/sysram_sensors.py" />
-    <entry file="file://$PROJECT_DIR$/wally/sensors/sensors/utils.py" />
-    <entry file="file://$PROJECT_DIR$/wally/__init__.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/keystone.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="437">
-          <caret line="65" column="59" selection-start-line="65" selection-start-column="45" selection-end-line="65" selection-end-column="59" />
-          <folding>
-            <element signature="e#0#11#0" expanded="false" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/suits/io/__init__.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/timeseries.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding>
-            <element signature="e#0#12#0" expanded="false" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/statistic.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding>
-            <element signature="e#0#11#0" expanded="false" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/__main__.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding>
-            <element signature="e#0#10#0" expanded="false" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/utils.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="893">
-          <caret line="57" column="57" selection-start-line="57" selection-start-column="57" selection-end-line="57" selection-end-column="57" />
-          <folding>
-            <element signature="e#0#9#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/suits/io/defaults.cfg">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/suits/io/defaults_qd.cfg">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="323">
-          <caret line="17" column="7" selection-start-line="17" selection-start-column="0" selection-end-line="17" selection-end-column="7" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/suits/io/fio_task_parser.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="7220">
-          <caret line="380" column="0" selection-start-line="380" selection-start-column="0" selection-end-line="380" selection-end-column="0" />
-          <folding>
-            <element signature="e#24#33#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/suits/io/rpc_plugin.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="209">
-          <caret line="11" column="0" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/suits/itest.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-756">
-          <caret line="149" column="35" selection-start-line="149" selection-start-column="35" selection-end-line="149" selection-end-column="35" />
-          <folding>
-            <element signature="e#0#10#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/suits/io/fio.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="16758">
-          <caret line="882" column="62" selection-start-line="882" selection-start-column="62" selection-end-line="882" selection-end-column="62" />
-          <folding>
-            <element signature="e#0#9#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/inode.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="798">
-          <caret line="42" column="23" selection-start-line="42" selection-start-column="23" selection-end-line="42" selection-end-column="23" />
-          <folding>
-            <element signature="e#0#10#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/build/lib.linux-x86_64-2.7/wally/main.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="270">
-          <caret line="205" column="20" selection-start-line="205" selection-start-column="20" selection-end-line="205" selection-end-column="20" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/sensors.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="19">
-          <caret line="1" column="0" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/main.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-2888">
-          <caret line="34" column="0" selection-start-line="34" selection-start-column="0" selection-end-line="34" selection-end-column="0" />
-          <folding>
-            <element signature="e#0#9#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/meta_info.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="475">
-          <caret line="27" column="70" selection-start-line="27" selection-start-column="70" selection-end-line="27" selection-end-column="70" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/config.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-1178">
-          <caret line="31" column="34" selection-start-line="31" selection-start-column="34" selection-end-line="31" selection-end-column="34" />
-          <folding>
-            <element signature="e#0#9#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/test_run_class.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="13" selection-start-line="0" selection-start-column="6" selection-end-line="0" selection-end-column="13" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/wally/run_test.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="-7195">
-          <caret line="186" column="32" selection-start-line="186" selection-start-column="32" selection-end-line="186" selection-end-column="32" />
-          <folding>
-            <element signature="e#0#9#0" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-  </component>
-</project>
\ No newline at end of file
diff --git a/configs-examples/default.yaml b/configs-examples/default.yaml
index 8750bc3..de17d30 100644
--- a/configs-examples/default.yaml
+++ b/configs-examples/default.yaml
@@ -1,19 +1,22 @@
-settings:
-    collect_info: false
-    suspend_unused_vms: false
-    results_storage: /var/wally_results
-    log_level: DEBUG
+#  ------------------------------------    CONFIGS   -------------------------------------------------------------------
+collect_info: true
+var_dir_root: /tmp/perf_tests
+settings_dir: ~/.wally
+
+logging:
+    extra_logs: 1
+    level: DEBUG
 
 vm_configs:
-    keypair_file_private: wally_vm_key.pem
-    keypair_file_public: wally_vm_key.pub
+    keypair_file_private: wally_vm_key_perf3.pem
+    keypair_file_public: wally_vm_key_perf3.pub
     keypair_name: wally_vm_key
 
     wally_1024:
         image:
             name: wally_ubuntu
+            user: ubuntu
             url: https://cloud-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img
-            creds: "ssh://ubuntu@{ip}::{private_key_path}"
 
         flavor:
             name: wally_1024
@@ -25,3 +28,55 @@
         name_templ: wally-{group}-{id}
         aa_group_name: wally-aa-{0}
         security_group: wally_ssh_to_everyone
+
+
+ceph_settings: nodeep-scrub, noscrub
+
+#-----------------------------------------    STEPS   ------------------------------------------------------------------
+
+sensors:
+   online: true
+   roles_mapping:
+       testnode: system-cpu, block-io, net-io
+       ceph-osd: system-cpu, block-io, net-io, ceph
+       compute:
+            system-cpu: *
+            block-io: sd*
+            net-io: *
+
+#----------------------------------   TEST PROFILES --------------------------------------------------------------------
+profiles:
+    spawn:
+        OS_1_to_1:
+            openstack:
+                count: "=1"
+                cfg_name: wally_1024
+                network_zone_name: net04
+                flt_ip_pool: net04_ext
+                skip_preparation: true
+
+    test:
+        ceph_vdb:
+            - io:
+                load: ceph
+                params:
+                    FILENAME: /dev/vdb
+                    TEST_FILE_SIZE: AUTO
+
+        cinder_iscsi_vdb:
+            - io:
+                load: cinder_iscsi
+                params:
+                    FILENAME: /dev/vdb
+                    TEST_FILE_SIZE: AUTO
+
+        nova_io:
+            - io:
+                load: hdd
+                params:
+                    FILENAME: /dev/vdb
+                    TEST_FILE_SIZE: AUTO
+
+    openstack_ceph: OS_1_to_1 + ceph_vdb
+    openstack_cinder: OS_1_to_1 + ceph_iscsi_vdb
+    openstack_nova: OS_1_to_1 + nova_io
diff --git a/configs-examples/local_lxc_ceph.yaml b/configs-examples/local_lxc_ceph.yaml
index e69de29..03b5185 100644
--- a/configs-examples/local_lxc_ceph.yaml
+++ b/configs-examples/local_lxc_ceph.yaml
@@ -0,0 +1,4 @@
+include: default.yaml
+
+ceph:
+    root_node: local
diff --git a/tests/test_rpc.py b/tests/test_rpc.py
new file mode 100644
index 0000000..fd35555
--- /dev/null
+++ b/tests/test_rpc.py
@@ -0,0 +1,38 @@
+import contextlib
+
+from wally import ssh_utils, node, node_interfaces
+
+
+CONNECT_URI = "localhost"
+
+
+@contextlib.contextmanager
+def rpc_conn_ctx(uri):
+    creds = ssh_utils.parse_ssh_uri(uri)
+    rpc_code, modules = node.get_rpc_server_code()
+
+    ssh_conn = node.connect(node_interfaces.NodeInfo(creds, set()))
+    try:
+        rpc_conn = node.setup_rpc(ssh_conn, rpc_code, plugins=modules)
+        try:
+            yield rpc_conn
+        finally:
+            rpc_conn.conn.server.stop()
+            rpc_conn.disconnect()
+    finally:
+        ssh_conn.disconnect()
+
+
+def test_rpc_simple():
+    with rpc_conn_ctx(CONNECT_URI) as conn:
+        names = conn.conn.server.rpc_info()
+        assert 'server.list_modules' in names
+        assert 'server.load_module' in names
+        assert 'server.rpc_info' in names
+        assert 'server.stop' in names
+
+
+def test_rpc_plugins():
+    with rpc_conn_ctx(CONNECT_URI) as conn:
+        print(conn.conn.server.rpc_info())
+        assert conn.conn.fs.file_exists("/")
diff --git a/tests/test_ssh.py b/tests/test_ssh.py
index efc5f09..43cc9bd 100644
--- a/tests/test_ssh.py
+++ b/tests/test_ssh.py
@@ -1,33 +1,77 @@
-import getpass
+import os
+import contextlib
+from unittest.mock import patch
+from typing import Iterator
 
-from oktest import ok
 
-from wally import ssh_utils, ssh
+from wally import ssh_utils, ssh, node, node_interfaces
 
 
 creds = "root@osd-0"
 
 
 def test_ssh_url_parser():
-    curr_user = getpass.getuser()
-    creds = {
-        "test": ssh_utils.ConnCreds("test", curr_user, port=23),
-        "test:13": ssh_utils.ConnCreds("test", curr_user, port=13),
-        "test::xxx.key": ssh_utils.ConnCreds("test", curr_user, port=23, key_file="xxx.key"),
-        "test:123:xxx.key": ssh_utils.ConnCreds("test", curr_user, port=123, key_file="xxx.key"),
-        "user@test": ssh_utils.ConnCreds("test", "user", port=23),
-        "user@test:13": ssh_utils.ConnCreds("test", "user", port=13),
-        "user@test::xxx.key": ssh_utils.ConnCreds("test", "user", port=23, key_file="xxx.key"),
-        "user@test:123:xxx.key": ssh_utils.ConnCreds("test", "user", port=123, key_file="xxx.key"),
-        "user:passwd:@test": ssh_utils.ConnCreds("test", curr_user, port=23, passwd="passwd:"),
-        "user:passwd:@test:123": ssh_utils.ConnCreds("test", curr_user, port=123, passwd="passwd:"),
-    }
+    default_user = "default_user"
 
-    for uri, expected in creds.items():
-        parsed = ssh_utils.parse_ssh_uri(uri)
-        ok(parsed.user) == expected.user
-        ok(parsed.addr.port) == expected.addr.port
-        ok(parsed.addr.host) == expected.addr.host
-        ok(parsed.key_file) == expected.key_file
-        ok(parsed.passwd) == expected.passwd
+    creds = [
+        ("test", ssh_utils.ConnCreds("test", default_user, port=22)),
+        ("test:13", ssh_utils.ConnCreds("test", default_user, port=13)),
+        ("test::xxx.key", ssh_utils.ConnCreds("test", default_user, port=22, key_file="xxx.key")),
+        ("test:123:xxx.key", ssh_utils.ConnCreds("test", default_user, port=123, key_file="xxx.key")),
+        ("user@test", ssh_utils.ConnCreds("test", "user", port=22)),
+        ("user@test:13", ssh_utils.ConnCreds("test", "user", port=13)),
+        ("user@test::xxx.key", ssh_utils.ConnCreds("test", "user", port=22, key_file="xxx.key")),
+        ("user@test:123:xxx.key", ssh_utils.ConnCreds("test", "user", port=123, key_file="xxx.key")),
+        ("user:passwd@test", ssh_utils.ConnCreds("test", "user", port=22, passwd="passwd")),
+        ("user:passwd:@test", ssh_utils.ConnCreds("test", "user", port=22, passwd="passwd:")),
+        ("user:passwd:@test:123", ssh_utils.ConnCreds("test", "user", port=123, passwd="passwd:"))
+    ]
 
+    for uri, expected in creds:
+        with patch('getpass.getuser', lambda : default_user):
+            parsed = ssh_utils.parse_ssh_uri(uri)
+
+        assert parsed.user == expected.user, uri
+        assert parsed.addr.port == expected.addr.port, uri
+        assert parsed.addr.host == expected.addr.host, uri
+        assert parsed.key_file == expected.key_file, uri
+        assert parsed.passwd == expected.passwd, uri
+
+
+CONNECT_URI = "localhost"
+
+
+@contextlib.contextmanager
+def conn_ctx(uri, *args):
+    creds = ssh_utils.parse_ssh_uri(CONNECT_URI)
+    node_info = node_interfaces.NodeInfo(creds, set())
+    conn = node.connect(node_info, *args)
+    try:
+        yield conn
+    finally:
+        conn.disconnect()
+
+
+def test_ssh_connect():
+    with conn_ctx(CONNECT_URI) as conn:
+        assert set(conn.run("ls -1 /").split()) == set(fname for fname in os.listdir("/") if not fname.startswith('.'))
+
+
+def test_ssh_complex():
+    pass
+
+
+def test_file_copy():
+    data1 = b"-" * 1024
+    data2 = b"+" * 1024
+
+    with conn_ctx(CONNECT_URI) as conn:
+        path = conn.put_to_file(None, data1)
+        assert data1 == open(path, 'rb').read()
+
+        assert path == conn.put_to_file(path, data2)
+        assert data2 == open(path, 'rb').read()
+
+        assert len(data2) > 10
+        assert path == conn.put_to_file(path, data2[10:])
+        assert data2[10:] == open(path, 'rb').read()
diff --git a/wally/ceph.py b/wally/ceph.py
index e23343e..1e79126 100644
--- a/wally/ceph.py
+++ b/wally/ceph.py
@@ -85,7 +85,7 @@
             if key is None:
                 key = "/etc/ceph/{}.client.admin.keyring".format(cluster)
 
-            with setup_rpc(connect(info), ctx.rpc_code) as node:
+            with setup_rpc(connect(info), ctx.rpc_code, ctx.default_rpc_plugins) as node:
 
                 # new_nodes.extend(ceph.discover_ceph_nodes(ceph_root_conn, cluster=cluster, conf=conf, key=key))
                 ssh_key = node.get_file_content("~/.ssh/id_rsa")
diff --git a/wally/fuel.py b/wally/fuel.py
index 040dcf4..1680d29 100644
--- a/wally/fuel.py
+++ b/wally/fuel.py
@@ -77,7 +77,7 @@
             if discover_nodes:
 
                 try:
-                    fuel_rpc = setup_rpc(connect(fuel_node_info), ctx.rpc_code)
+                    fuel_rpc = setup_rpc(connect(fuel_node_info), ctx.rpc_code, ctx.default_rpc_plugins)
                 except AuthenticationException:
                     raise StopTestError("Wrong fuel credentials")
                 except Exception:
diff --git a/wally/main.py b/wally/main.py
index 14da140..9a453fb 100644
--- a/wally/main.py
+++ b/wally/main.py
@@ -1,5 +1,4 @@
 import os
-import sys
 import time
 import signal
 import logging
@@ -28,8 +27,9 @@
 except ImportError:
     faulthandler = None
 
+import agent
 
-from . import utils, run_test, pretty_yaml
+from . import utils, node
 from .storage import make_storage, Storage
 from .config import Config
 from .logger import setup_loggers
@@ -125,13 +125,13 @@
     test_parser.add_argument("-d", '--dont-discover-nodes', action='store_true',
                              help="Don't connect/discover fuel nodes")
     test_parser.add_argument('--no-report', action='store_true', help="Skip report stages")
-    test_parser.add_argument('-r', '--resume', default=None, help="Resume previously stopped test, stored in DIR",
-                             metavar="DIR")
     test_parser.add_argument('--result-dir', default=None, help="Save results to DIR", metavart="DIR")
     test_parser.add_argument("comment", help="Test information")
     test_parser.add_argument("config_file", help="Yaml config file", nargs='?', default=None)
 
     # ---------------------------------------------------------------------
+    test_parser = subparsers.add_parser('resume', help='resume tests')
+    test_parser.add_argument("storage_dir", help="Path to test directory")
 
     return parser.parse_args(argv[1:])
 
@@ -152,7 +152,6 @@
         faulthandler.register(signal.SIGUSR1, all_threads=True)
 
     opts = parse_args(argv)
-
     stages = []  # type: List[Stage]
 
     # stop mypy from telling that config & storage might be undeclared
@@ -160,28 +159,23 @@
     storage = None  # type: Storage
 
     if opts.subparser_name == 'test':
-        if opts.resume:
-            storage = make_storage(opts.resume, existing=True)
-            config = storage.load(Config, 'config')
-        else:
-            file_name = os.path.abspath(opts.config_file)
-            with open(file_name) as fd:
-                config = Config(yaml_load(fd.read()))  # type: ignore
+        file_name = os.path.abspath(opts.config_file)
+        with open(file_name) as fd:
+            config = Config(yaml_load(fd.read()))  # type: ignore
 
-            config.storage_url, config.run_uuid = utils.get_uniq_path_uuid(config.results_dir)
-            config.comment = opts.comment
-            config.keep_vm = opts.keep_vm
-            config.no_tests = opts.no_tests
-            config.dont_discover_nodes = opts.dont_discover_nodes
-            config.build_id = opts.build_id
-            config.build_description = opts.build_description
-            config.build_type = opts.build_type
-            config.settings_dir = get_config_path(config, opts.settings_dir)
+        config.storage_url, config.run_uuid = utils.get_uniq_path_uuid(config.results_dir)
+        config.comment = opts.comment
+        config.keep_vm = opts.keep_vm
+        config.no_tests = opts.no_tests
+        config.dont_discover_nodes = opts.dont_discover_nodes
+        config.build_id = opts.build_id
+        config.build_description = opts.build_description
+        config.build_type = opts.build_type
+        config.settings_dir = get_config_path(config, opts.settings_dir)
 
-            storage = make_storage(config.storage_url)
+        storage = make_storage(config.storage_url)
 
-            storage['config'] = config  # type: ignore
-
+        storage['config'] = config  # type: ignore
 
         stages.append(DiscoverCephStage)  # type: ignore
         stages.append(DiscoverOSStage)  # type: ignore
@@ -195,6 +189,14 @@
         if not opts.dont_collect:
             stages.append(CollectInfoStage)   # type: ignore
 
+        storage['cli'] = argv
+
+    elif opts.subparser_name == 'resume':
+        storage = make_storage(opts.storage_dir, existing=True)
+        config = storage.load(Config, 'config')
+        # TODO: fix this
+        raise NotImplementedError("Resume in not fully implemented")
+
     elif opts.subparser_name == 'ls':
         tab = texttable.Texttable(max_width=200)
         tab.set_deco(tab.HEADER | tab.VLINES | tab.BORDER)
@@ -230,6 +232,7 @@
     logger.info("All info would be stored into %r", config.storage_url)
 
     ctx = TestRun(config, storage)
+    ctx.rpc_code, ctx.default_rpc_plugins = node.get_rpc_server_code()
 
     stages.sort(key=lambda x: x.priority)
 
@@ -237,8 +240,12 @@
     failed = False
     cleanup_stages = []
     for stage in stages:
+        if stage.config_block is not None:
+            if stage.config_block not in ctx.config:
+                continue
+
+        cleanup_stages.append(stage)
         try:
-            cleanup_stages.append(stage)
             with log_stage(stage):
                 stage.run(ctx)
         except:
diff --git a/wally/node.py b/wally/node.py
index fae7879..54a6291 100644
--- a/wally/node.py
+++ b/wally/node.py
@@ -4,7 +4,7 @@
 import socket
 import logging
 import subprocess
-from typing import Union, cast, Any
+from typing import Union, cast, Any, Optional, Tuple, Dict, List
 
 
 import agent
@@ -26,11 +26,16 @@
     def __str__(self) -> str:
         return self.info.node_id()
 
-    def put_to_file(self, path: str, content: bytes) -> None:
+    def put_to_file(self, path: Optional[str], content: bytes) -> str:
+        if path is None:
+            path = self.run("mktemp").strip()
+
         with self.conn.open_sftp() as sftp:
             with sftp.open(path, "wb") as fd:
                 fd.write(content)
 
+        return path
+
     def disconnect(self):
         self.conn.close()
 
@@ -53,10 +58,10 @@
 
             while True:
                 try:
-                    ndata = session.recv(1024)
-                    output += ndata
-                    if "" == ndata:
+                    ndata = session.recv(1024).decode("utf-8")
+                    if not ndata:
                         break
+                    output += ndata
                 except socket.timeout:
                     pass
 
@@ -97,7 +102,9 @@
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.STDOUT)
 
-        stdout_data, _ = proc.communicate()
+        stdout_data_b, _ = proc.communicate()
+        stdout_data = stdout_data_b.decode("utf8")
+
         if proc.returncode != 0:
             templ = "SSH:{0} Cmd {1!r} failed with code {2}. Output: {3}"
             raise OSError(templ.format(self, cmd, proc.returncode, stdout_data))
@@ -108,6 +115,25 @@
         pass
 
 
+def get_rpc_server_code() -> Tuple[bytes, Dict[str, bytes]]:
+    # setup rpc data
+    if agent.__file__.endswith(".pyc"):
+        path = agent.__file__[:-1]
+    else:
+        path = agent.__file__
+
+    master_code = open(path, "rb").read()
+
+    plugins = {}  # type: Dict[str, bytes]
+    cli_path = os.path.join(os.path.dirname(path), "cli_plugin.py")
+    plugins["cli"] = open(cli_path, "rb").read()
+
+    fs_path = os.path.join(os.path.dirname(path), "fs_plugin.py")
+    plugins["fs"] = open(fs_path, "rb").read()
+
+    return master_code, plugins
+
+
 def connect(info: Union[str, NodeInfo], conn_timeout: int = 60) -> ISSHHost:
     if info == 'local':
         return LocalHost()
@@ -119,12 +145,12 @@
 class RPCNode(IRPCNode):
     """Node object"""
 
-    def __init__(self, conn: agent.Client, info: NodeInfo) -> None:
+    def __init__(self, conn: agent.SimpleRPCClient, info: NodeInfo) -> None:
         self.info = info
         self.conn = conn
 
     def __str__(self) -> str:
-        return "<Node: url={!s} roles={!r} hops=/>".format(self.info.ssh_creds, ",".join(self.info.roles))
+        return "Node(url={!r}, roles={!r})".format(self.info.ssh_creds, ",".join(self.info.roles))
 
     def __repr__(self) -> str:
         return str(self)
@@ -138,7 +164,7 @@
     def copy_file(self, local_path: str, remote_path: str = None) -> str:
         raise NotImplementedError()
 
-    def put_to_file(self, path: str, content: bytes) -> None:
+    def put_to_file(self, path: Optional[str], content: bytes) -> str:
         raise NotImplementedError()
 
     def get_interface(self, ip: str) -> str:
@@ -148,27 +174,35 @@
         raise NotImplementedError()
 
     def disconnect(self) -> str:
-        raise NotImplementedError()
+        self.conn.disconnect()
+        self.conn = None
 
 
-def setup_rpc(node: ISSHHost, rpc_server_code: bytes, port: int = 0) -> IRPCNode:
-    code_file = node.run("mktemp").strip()
+def setup_rpc(node: ISSHHost, rpc_server_code: bytes, plugins: Dict[str, bytes] = None, port: int = 0) -> IRPCNode:
     log_file = node.run("mktemp").strip()
-    node.put_to_file(code_file, rpc_server_code)
-    cmd = "python {code_file} server --listen-addr={listen_ip}:{port} --daemon " + \
-          "--show-settings --stdout-file={out_file}"
-
+    code_file = node.put_to_file(None, rpc_server_code)
     ip = node.info.ssh_creds.addr.host
 
-    params_js = node.run(cmd.format(code_file=code_file,
-                                    listen_addr=ip,
-                                    out_file=log_file,
-                                    port=port)).strip()
+    cmd = "python {code_file} server --listen-addr={listen_ip}:{port} --daemon " + \
+          "--show-settings --stdout-file={out_file}"
+    cmd = cmd.format(code_file=code_file, listen_ip=ip, out_file=log_file, port=port)
+    params_js = node.run(cmd).strip()
     params = json.loads(params_js)
     params['log_file'] = log_file
+    node.info.params.update(params)
+
     port = int(params['addr'].split(":")[1])
     rpc_conn = agent.connect((ip, port))
-    node.info.params.update(params)
+
+    if plugins is not None:
+        try:
+            for name, code in plugins.items():
+                rpc_conn.server.load_module(name, None, code)
+        except Exception:
+            rpc_conn.server.stop()
+            rpc_conn.disconnect()
+            raise
+
     return RPCNode(rpc_conn, node.info)
 
 
diff --git a/wally/node_interfaces.py b/wally/node_interfaces.py
index ac83267..bc9ba28 100644
--- a/wally/node_interfaces.py
+++ b/wally/node_interfaces.py
@@ -1,5 +1,5 @@
 import abc
-from typing import Any, Set, Optional, List, Dict, Callable, NamedTuple
+from typing import Any, Set, Optional, Dict, NamedTuple, Optional
 from .ssh_utils import ConnCreds
 from .common_types import IPAddr
 
@@ -40,7 +40,7 @@
         pass
 
     @abc.abstractmethod
-    def put_to_file(self, path: str, content: bytes) -> None:
+    def put_to_file(self, path: Optional[str], content: bytes) -> str:
         pass
 
     def __enter__(self) -> 'ISSHHost':
@@ -69,7 +69,7 @@
         pass
 
     @abc.abstractmethod
-    def put_to_file(self, path:str, content: bytes) -> None:
+    def put_to_file(self, path: Optional[str], content: bytes) -> str:
         pass
 
     @abc.abstractmethod
diff --git a/wally/run_test.py b/wally/run_test.py
index 1a645b6..8b54f8b 100755
--- a/wally/run_test.py
+++ b/wally/run_test.py
@@ -38,8 +38,7 @@
             def connect_ext(node_info: NodeInfo) -> Tuple[bool, Union[IRPCNode, NodeInfo]]:
                 try:
                     ssh_node = connect(node_info, conn_timeout=ctx.config.connect_timeout)
-                    # TODO(koder): need to pass all required rpc bytes to this call
-                    return True, setup_rpc(ssh_node, b"")
+                    return True, setup_rpc(ssh_node, ctx.rpc_code, ctx.default_rpc_plugins)
                 except Exception as exc:
                     logger.error("During connect to {}: {!s}".format(node, exc))
                     return False, node_info
diff --git a/wally/ssh_utils.py b/wally/ssh_utils.py
index 43ba44a..24fc178 100644
--- a/wally/ssh_utils.py
+++ b/wally/ssh_utils.py
@@ -46,13 +46,16 @@
                  key_file: str = None, key: bytes = None) -> None:
         self.user = user
         self.passwd = passwd
-        self.addr = IPAddr(host, port)
+        self.addr = IPAddr(host, int(port))
         self.key_file = key_file
         self.key = key
 
     def __str__(self) -> str:
         return "{}@{}:{}".format(self.user, self.addr.host, self.addr.port)
 
+    def __repr__(self) -> str:
+        return str(self)
+
 
 def parse_ssh_uri(uri: str) -> ConnCreds:
     """Parse ssh connection URL from one of following form
@@ -63,13 +66,12 @@
     if uri.startswith("ssh://"):
         uri = uri[len("ssh://"):]
 
-    res = ConnCreds("", getpass.getuser())
-
     for rr in URIsNamespace.uri_reg_exprs:
         rrm = re.match(rr, uri)
         if rrm is not None:
-            res.__dict__.update(rrm.groupdict())
-            return res
+            params = {"user": getpass.getuser()}
+            params.update(rrm.groupdict())
+            return ConnCreds(**params)
 
     raise ValueError("Can't parse {0!r} as ssh uri value".format(uri))
 
diff --git a/wally/storage_structure.txt b/wally/storage_structure.txt
index 5715046..dfbb49f 100644
--- a/wally/storage_structure.txt
+++ b/wally/storage_structure.txt
@@ -1,5 +1,6 @@
 config: Config - full configuration
 all_nodes: List[NodeInfo] - all nodes
+cli: List[str] - cli options
 
 fuel:
     version: List[int] - FUEL master node version
diff --git a/wally/test_run_class.py b/wally/test_run_class.py
index 30c46e7..a731b5a 100644
--- a/wally/test_run_class.py
+++ b/wally/test_run_class.py
@@ -29,6 +29,7 @@
         self.os_connection = None  # type: Optional[OSConnection]
         self.fuel_conn = None  # type: Optional[Connection]
         self.rpc_code = None  # type: bytes
+        self.default_rpc_plugins = None  # type: Dict[str, bytes]
 
         self.storage = storage
         self.config = config