Update offline deployment test

Change-Id: I3c935be8ad6f038ce6c25221de6d09e93619c94d
diff --git a/tcp_tests/managers/envmanager_devops.py b/tcp_tests/managers/envmanager_devops.py
index 80818cf..1e7f66c 100644
--- a/tcp_tests/managers/envmanager_devops.py
+++ b/tcp_tests/managers/envmanager_devops.py
@@ -16,16 +16,21 @@
 
 from devops import error
 from devops.helpers import helpers
+from devops.helpers.helpers import ssh_client
 from devops import models
 from django import db
 from oslo_config import cfg
 
+from paramiko.ssh_exception import (
+    AuthenticationException,
+    BadAuthenticationType)
+
+from tcp_tests.helpers import env_config
+from tcp_tests.helpers import exceptions
+from tcp_tests.helpers import ext
+from tcp_tests import logger
 from tcp_tests import settings
 from tcp_tests import settings_oslo
-from tcp_tests.helpers import env_config
-from tcp_tests.helpers import ext
-from tcp_tests.helpers import exceptions
-from tcp_tests import logger
 
 LOG = logger.logger
 
@@ -305,8 +310,29 @@
         for node in self.__env.get_nodes(role__in=underlay_node_roles):
             LOG.info("Waiting for SSH on node '{0}' / {1} ...".format(
                 node.name, self.node_ip(node)))
+
+            def _ssh_wait(host,
+                          port,
+                          username=settings.SSH_NODE_CREDENTIALS['login'],
+                          password=settings.SSH_NODE_CREDENTIALS['password'],
+                          timeout=0):
+                try:
+                    ssh = ssh_client.SSHClient(
+                        host=host, port=port,
+                        auth=ssh_client.SSHAuth(
+                            username=username,
+                            password=password))
+                except AuthenticationException:
+                    return True
+                except BadAuthenticationType:
+                    return True
+                except Exception:
+                    return False
+
+                return ssh.execute('echo ok')['exit_code'] == 0
+
             helpers.wait(
-                lambda: helpers.tcp_ping(self.node_ip(node), 22),
+                lambda: _ssh_wait(self.node_ip(node), 22),
                 timeout=timeout,
                 timeout_msg="Node '{}' didn't open SSH in {} sec".format(
                     node.name, timeout
diff --git a/tcp_tests/managers/jenkins/client.py b/tcp_tests/managers/jenkins/client.py
index f781305..474713c 100644
--- a/tcp_tests/managers/jenkins/client.py
+++ b/tcp_tests/managers/jenkins/client.py
@@ -63,3 +63,6 @@
             timeout=timeout,
             timeout_msg='Timeout waiting, job {0} are not finished "{1}" build'
                         ' still'.format(name, build_id))
+
+    def get_build_output(self, name, build_id):
+        return self.__client.get_build_console_output(name, build_id)
diff --git a/tcp_tests/managers/openstack_manager.py b/tcp_tests/managers/openstack_manager.py
index 8f6b140..feb270b 100644
--- a/tcp_tests/managers/openstack_manager.py
+++ b/tcp_tests/managers/openstack_manager.py
@@ -95,19 +95,23 @@
             self,
             target='gtw01', pattern=None,
             conf_name='lvm_mcp.conf',
-            registry=None):
+            registry=None, node_name=None):
         if not registry:
             registry = ('{0}/{1}'.format(settings.DOCKER_REGISTRY,
                                          settings.DOCKER_NAME))
-        target_name = [node_name for node_name
-                       in self.__underlay.node_names() if target in node_name]
+        if node_name is None and target is not None:
+            target_name = next(
+                name for name in self.__underlay.node_names()
+                if target in name)
+        else:
+            target_name = node_name
 
         cmd = ("apt-get -y install docker.io")
-        with self.__underlay.remote(node_name=target_name[0]) as node_remote:
+        with self.__underlay.remote(node_name=target_name) as node_remote:
             result = node_remote.execute(cmd, verbose=True)
 
         cmd_iptables = "iptables --policy FORWARD ACCEPT"
-        with self.__underlay.remote(node_name=target_name[0]) as node_remote:
+        with self.__underlay.remote(node_name=target_name) as node_remote:
             result = node_remote.execute(cmd_iptables, verbose=True)
 
         with self.__underlay.remote(
diff --git a/tcp_tests/managers/saltmanager.py b/tcp_tests/managers/saltmanager.py
index 06e7d0b..2b06dc3 100644
--- a/tcp_tests/managers/saltmanager.py
+++ b/tcp_tests/managers/saltmanager.py
@@ -198,10 +198,20 @@
                 'password': settings.SSH_NODE_CREDENTIALS['password']
             }
 
-        return [
-            host(k, next(i for i in v['ipv4'] if i in pool_net))
-            for k, v in hosts.items()
-            if next(i for i in v['ipv4'] if i in pool_net)]
+        try:
+            ret = [
+                host(k, next(i for i in v['ipv4'] if i in pool_net))
+                for k, v in hosts.items()
+                if next(i for i in v['ipv4'] if i in pool_net)]
+            LOG.debug("Fetched ssh data from salt grains - {}".format(ret))
+            return ret
+        except StopIteration:
+            msg = ("Can't match nodes ip address with network cidr\n"
+                   "Managment network - {net}\n"
+                   "Host with address - {host_list}".format(
+                       net=pool_net,
+                       host_list={k: v['ipv4'] for k, v in hosts.items()}))
+            raise StopIteration(msg)
 
     def service_status(self, tgt, service):
         result = self.local(tgt=tgt, fun='service.status', args=service)
diff --git a/tcp_tests/managers/underlay_ssh_manager.py b/tcp_tests/managers/underlay_ssh_manager.py
index fce80cc..2c9ed55 100644
--- a/tcp_tests/managers/underlay_ssh_manager.py
+++ b/tcp_tests/managers/underlay_ssh_manager.py
@@ -175,6 +175,7 @@
                     else:
                         ssh_data = ssh
         if ssh_data is None:
+            LOG.debug("config_ssh - {}".format(self.config_ssh))
             raise Exception('Auth data for node was not found using '
                             'node_name="{}" , host="{}" , address_pool="{}"'
                             .format(node_name, host, address_pool))