Merge "Add tools to run jenkins jobs and remote commands"
diff --git a/tcp_tests/helpers/oslo_cfg_types.py b/tcp_tests/helpers/oslo_cfg_types.py
index 8b322b7..0430076 100644
--- a/tcp_tests/helpers/oslo_cfg_types.py
+++ b/tcp_tests/helpers/oslo_cfg_types.py
@@ -102,15 +102,31 @@
"""
def __init__(self, *args, **kwargs):
- env_var_name = args[0].upper()
- if 'default' in kwargs:
- # Load a default environment variable with expected type
- kwargs['default'] = args[1](
- os.environ.get(env_var_name, kwargs.get('default', None))
- )
+ # if 'default' in kwargs:
+ # # Load a default environment variable with expected type
+ # kwargs['default'] = args[1](
+ # os.environ.get(env_var_name, kwargs.get('default', None))
+ # )
+
super(Cfg, self).__init__(*args, **kwargs)
+ env_var_name = args[0].upper()
+ if env_var_name not in os.environ:
+ env_var_name = args[0]
+ if env_var_name in os.environ:
+ self.environment_value = self.type(os.environ.get(env_var_name))
+ print('{}={} # {}'.format(env_var_name,
+ self.environment_value,
+ kwargs.get('help', '')))
+
# Print info about default environment variables to console
- print('{}={} # {}'.format(env_var_name,
- kwargs.get('default', ''),
- kwargs.get('help', '')))
+ # print('{}={} # {}'.format(env_var_name,
+ # kwargs.get('default', ''),
+ # kwargs.get('help', '')))
+
+ def _get_from_namespace(self, namespace, group_name):
+ res = super(Cfg, self)._get_from_namespace(namespace, group_name)
+ # Use the value from enviroment variable instead of config
+ if hasattr(self, 'environment_value'):
+ res = (self.environment_value, res[1])
+ return res
diff --git a/tcp_tests/managers/envmanager_devops.py b/tcp_tests/managers/envmanager_devops.py
index d17c6bd..d02cff5 100644
--- a/tcp_tests/managers/envmanager_devops.py
+++ b/tcp_tests/managers/envmanager_devops.py
@@ -307,29 +307,58 @@
raise exceptions.EnvironmentIsNotSet()
self.__env.start()
LOG.info('Environment "{0}" started'.format(self.__env.name))
+ check_cloudinit_started = '[ -f /is_cloud_init_started ]'
+ check_cloudinit_finished = '[ -f /is_cloud_init_finished ]'
+ passed = {}
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):
+ def _ssh_check(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:
+
+ # If '/is_cloud_init_started' exists, then wait for
+ # the flag /is_cloud_init_finished
+ if ssh.execute(check_cloudinit_started)['exit_code'] == 0:
+ status = ssh.execute(
+ check_cloudinit_finished)['exit_code'] == 0
+ # Else, just wait for SSH
+ else:
+ status = ssh.execute('echo ok')['exit_code'] == 0
+ return status
+
+ except (AuthenticationException, BadAuthenticationType):
return True
except Exception:
return False
- return ssh.execute('echo ok')['exit_code'] == 0
+ def _ssh_wait(host,
+ port,
+ username=settings.SSH_NODE_CREDENTIALS['login'],
+ password=settings.SSH_NODE_CREDENTIALS['password'],
+ timeout=0):
+
+ if host in passed and passed[host] >= 2:
+ # host already passed the check
+ return True
+
+ for node in self.__env.get_nodes(role__in=underlay_node_roles):
+ ip = self.node_ip(node)
+ if ip not in passed:
+ passed[ip] = 0
+ if _ssh_check(ip, port):
+ passed[ip] += 1
+ else:
+ passed[ip] = 0
helpers.wait(
lambda: _ssh_wait(self.node_ip(node), 22),