add rally to the run
diff --git a/tcp_tests/managers/rallymanager.py b/tcp_tests/managers/rallymanager.py
index bd937d5..af3e68d 100644
--- a/tcp_tests/managers/rallymanager.py
+++ b/tcp_tests/managers/rallymanager.py
@@ -11,6 +11,10 @@
 #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 #    License for the specific language governing permissions and limitations
 #    under the License.
+import datetime
+import json
+
+from junit_xml import TestSuite, TestCase
 
 from tcp_tests import logger
 from tcp_tests import settings
@@ -25,9 +29,9 @@
     image_name = 'rallyforge/rally'
     image_version = '0.5.0'
 
-    def __init__(self, underlay, admin_node_name):
+    def __init__(self, underlay, admin_host):
         super(RallyManager, self).__init__()
-        self._admin_node_name = admin_node_name
+        self._admin_host = admin_host
         self._underlay = underlay
 
     def prepare(self):
@@ -40,17 +44,13 @@
 rally verify genconfig
 rally verify showconfig"""
         cmd = "cat > {path} << EOF\n{content}\nEOF".format(
-            path='/home/{user}/rally/install_tempest.sh'.format(
-                user=settings.SSH_LOGIN), content=content)
-        cmd1 = "chmod +x /home/{user}/rally/install_tempest.sh".format(
-            user=settings.SSH_LOGIN)
-        cmd2 = "cp /home/{user}/openrc-* /home/{user}/rally/openrc".format(
-            user=settings.SSH_LOGIN)
+            path='/root/rally/install_tempest.sh', content=content)
+        cmd1 = "chmod +x /root/rally/install_tempest.sh"
+        cmd2 = "scp ctl01:/root/keystonerc /root/rally/openrc"
 
-        with self._underlay.remote(node_name=self._admin_node_name) as remote:
+        with self._underlay.remote(host=self._admin_host) as remote:
             LOG.info("Create rally workdir")
-            remote.check_call('mkdir -p /home/{user}/rally'.format(
-                user=settings.SSH_LOGIN))
+            remote.check_call('mkdir -p /root/rally')
             LOG.info("Create install_tempest.sh")
             remote.check_call(cmd)
             LOG.info("Chmod +x install_tempest.sh")
@@ -61,14 +61,15 @@
     def pull_image(self, version=None):
         version = version or self.image_version
         image = self.image_name
-        cmd = "docker pull {image}:{version}".format(image=image,
-                                                     version=version)
-        with self._underlay.remote(node_name=self._admin_node_name) as remote:
+        cmd = ("apt-get -y install docker.io &&"
+               " docker pull {image}:{version}".format(image=image,
+                                                       version=version))
+        with self._underlay.remote(host=self._admin_host) as remote:
             LOG.info("Pull {image}:{version}".format(image=image,
                                                      version=version))
             remote.check_call(cmd)
 
-        with self._underlay.remote(node_name=self._admin_node_name) as remote:
+        with self._underlay.remote(host=self._admin_host) as remote:
             LOG.info("Getting image id")
             cmd = "docker images | grep 0.5.0| awk '{print $3}'"
             res = remote.check_call(cmd)
@@ -76,10 +77,9 @@
             LOG.info("Image ID is {}".format(self.image_id))
 
     def run(self):
-        with self._underlay.remote(node_name=self._admin_node_name) as remote:
-            cmd = ("docker run --net host -v /home/{user}/rally:/home/rally "
-                   "-tid -u root {image_id}".format(
-                       user=settings.SSH_LOGIN, image_id=self.image_id))
+        with self._underlay.remote(host=self._admin_host) as remote:
+            cmd = ("docker run --net host -v /root/rally:/home/rally "
+                   "-tid -u root {image_id}".format(image_id=self.image_id))
             LOG.info("Run Rally container")
             remote.check_call(cmd)
 
@@ -92,27 +92,80 @@
             LOG.info("Container ID is {}".format(self.docker_id))
 
     def run_tempest(self, test=''):
-        docker_exec = ('source /home/{user}/rally/openrc; '
+        docker_exec = ('source /root/rally/openrc; '
                        'docker exec -i {docker_id} bash -c "{cmd}"')
         commands = [
             docker_exec.format(cmd="./install_tempest.sh",
-                               user=settings.SSH_LOGIN,
                                docker_id=self.docker_id),
             docker_exec.format(
                 cmd="source /home/rally/openrc && "
                     "rally verify start {test}".format(test=test),
-                user=settings.SSH_LOGIN,
                 docker_id=self.docker_id),
             docker_exec.format(
                 cmd="rally verify results --json --output-file result.json",
-                user=settings.SSH_LOGIN,
                 docker_id=self.docker_id),
             docker_exec.format(
                 cmd="rally verify results --html --output-file result.html",
-                user=settings.SSH_LOGIN,
                 docker_id=self.docker_id),
         ]
-        with self._underlay.remote(node_name=self._admin_node_name) as remote:
+        with self._underlay.remote(host=self._admin_host) as remote:
             LOG.info("Run tempest inside Rally container")
             for cmd in commands:
                 remote.check_call(cmd, verbose=True)
+
+    def get_results(self, store=True, store_file='tempest.xml'):
+        LOG.info('Storing tests results...')
+        res_file_name = 'result.json'
+        file_prefix = 'results_' + datetime.datetime.now().strftime(
+            '%Y%m%d_%H%M%S') + '_'
+        file_dst = '{0}/logs/{1}{2}'.format(
+            settings.LOGS_DIR, file_prefix, res_file_name)
+        with self._underlay.remote(host=self._admin_host) as remote:
+            remote.download(
+                '/root/rally/{1}'.format(res_file_name),
+                file_dst)
+            res = json.load(remote.open('/root/rally/result.json'))
+        if not store:
+            return res
+
+        formatted_tc = []
+        failed_cases = [res['test_cases'][case]
+                        for case in res['test_cases']
+                        if res['test_cases'][case]['status']
+                        in 'fail']
+        for case in failed_cases:
+            if case:
+                tc = TestCase(case['name'])
+                tc.add_failure_info(case['traceback'])
+                formatted_tc.append(tc)
+
+        skipped_cases = [res['test_cases'][case]
+                         for case in res['test_cases']
+                         if res['test_cases'][case]['status'] in 'skip']
+        for case in skipped_cases:
+            if case:
+                tc = TestCase(case['name'])
+                tc.add_skipped_info(case['reason'])
+                formatted_tc.append(tc)
+
+        error_cases = [res['test_cases'][case] for case in res['test_cases']
+                       if res['test_cases'][case]['status'] in 'error']
+
+        for case in error_cases:
+            if case:
+                tc = TestCase(case['name'])
+                tc.add_error_info(case['traceback'])
+                formatted_tc.append(tc)
+
+        success = [res['test_cases'][case] for case in res['test_cases']
+                   if res['test_cases'][case]['status'] in 'success']
+        for case in success:
+            if case:
+                tc = TestCase(case['name'])
+                formatted_tc.append(tc)
+
+        ts = TestSuite("tempest", formatted_tc)
+        with open(store_file, 'w') as f:
+            ts.to_file(f, [ts], prettyprint=False)
+
+        return res