diff options
Diffstat (limited to 'func')
-rw-r--r-- | func/args_handler.py | 11 | ||||
-rw-r--r-- | func/cli.py | 8 | ||||
-rw-r--r-- | func/driver.py | 29 | ||||
-rw-r--r-- | func/env_setup.py | 69 |
4 files changed, 52 insertions, 65 deletions
diff --git a/func/args_handler.py b/func/args_handler.py index f2726eb8..57ecfcbd 100644 --- a/func/args_handler.py +++ b/func/args_handler.py @@ -48,12 +48,15 @@ def prepare_ansible_env(benchmark_test_case): return benchmark, benchmark_details, proxy_info, env_setup -def run_benchmark(benchmark, benchmark_details, proxy_info, env_setup, benchmark_test_case): +def run_benchmark(installer_type, pwd, benchmark, benchmark_details, + proxy_info, env_setup, benchmark_test_case): driver = Driver() - driver.drive_bench(benchmark, env_setup.roles_dict.items(), _get_f_name(benchmark_test_case), + driver.drive_bench(installer_type, pwd, benchmark, + env_setup.roles_dict.items(), _get_f_name(benchmark_test_case), benchmark_details, env_setup.ip_pw_dict.items(), proxy_info) -def prepare_and_run_benchmark(benchmark_test_case): +def prepare_and_run_benchmark(installer_type, pwd, benchmark_test_case): benchmark, benchmark_details, proxy_info, env_setup = prepare_ansible_env(benchmark_test_case) - run_benchmark(benchmark, benchmark_details, proxy_info, env_setup, benchmark_test_case) + run_benchmark(installer_type, pwd, benchmark, benchmark_details, + proxy_info, env_setup, benchmark_test_case) diff --git a/func/cli.py b/func/cli.py index 01694a9b..66ab2277 100644 --- a/func/cli.py +++ b/func/cli.py @@ -8,6 +8,7 @@ ############################################################################## import sys +import os import args_handler import argparse @@ -37,12 +38,12 @@ class cli: args = self._parse_args(args) if not args_handler.check_suit_in_test_list(args.file): - print '\n\n ERROR: Test File Does not exist in test_list/ please enter correct file \n\n' + print('\n\n ERROR: Test File Does not exist in test_list/ please enter correct file \n\n') sys.exit(0) if not args_handler.check_lab_name(args.lab): - print '\n\n You have specified a lab that is not present in test_cases/ please enter \ - correct file. If unsure how to proceed, use -l default.\n\n' + print('\n\n You have specified a lab that is not present in test_cases/ please enter \ + correct file. If unsure how to proceed, use -l default.\n\n') sys.exit(0) suite = args.file benchmarks = args_handler.get_files_in_test_list(suite) @@ -50,6 +51,7 @@ class cli: benchmarks_list = filter(lambda x: x in test_cases, benchmarks) map(lambda x: args_handler.prepare_and_run_benchmark( + os.environ['INSTALLER_TYPE'], os.environ['PWD'], args_handler.get_benchmark_path(args.lab.lower(), suite, x)), benchmarks_list) print('{0} is not a Template in the Directory Enter a Valid file name.' diff --git a/func/driver.py b/func/driver.py index f26f63db..859e7f34 100644 --- a/func/driver.py +++ b/func/driver.py @@ -6,9 +6,8 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## -import os -import json import logging +from func.ansible_api import AnsibleApi class Driver: @@ -30,14 +29,15 @@ class Driver: z.update(y) return z - def get_common_var_json(self, benchmark_fname, benchmark_detail, pip_dict, proxy_info): + def get_common_var_json(self, installer_type, pwd, benchmark_fname, + benchmark_detail, pip_dict, proxy_info): common_json = {'Dest_dir': 'results', 'ip1': '', 'ip2': '', - 'installer': str(os.environ['INSTALLER_TYPE']), - 'workingdir': str(os.environ['PWD']), + 'installer': str(installer_type), + 'workingdir': str(pwd), 'fname': str(benchmark_fname), - 'username': self.installer_username[str(os.environ['INSTALLER_TYPE'])]} + 'username': self.installer_username[str(installer_type)]} common_json.update(benchmark_detail) if benchmark_detail else None common_json.update(proxy_info) if proxy_info else None return common_json @@ -54,18 +54,19 @@ class Driver: return special_json def run_ansible_playbook(self, benchmark, extra_vars): - extra_vars_json = json.dumps(dict(extra_vars.items())) - logging.info(extra_vars_json) - run_play = 'ansible-playbook ./benchmarks/playbooks/{0}.yaml' \ - '--private-key=./data/QtipKey -i ./data/hosts --extra-vars \'{1}\'' \ - .format(benchmark, extra_vars_json) - os.system(run_play) + logging.info(extra_vars) + ansible_api = AnsibleApi() + ansible_api.execute_playbook('./data/hosts', + './benchmarks/playbooks/{0}.yaml'.format(benchmark), + './data/QtipKey', extra_vars) + return ansible_api.get_detail_playbook_stats() - def drive_bench(self, benchmark, roles, benchmark_fname, + def drive_bench(self, installer_type, pwd, benchmark, roles, benchmark_fname, benchmark_detail=None, pip_dict=None, proxy_info=None): roles = sorted(roles) pip_dict = sorted(pip_dict) - var_json = self.get_common_var_json(benchmark_fname, benchmark_detail, pip_dict, proxy_info) + var_json = self.get_common_var_json(installer_type, pwd, benchmark_fname, + benchmark_detail, pip_dict, proxy_info) map(lambda role: self.run_ansible_playbook (benchmark, self.merge_two_dicts(var_json, self.get_special_var_json(role, roles, diff --git a/func/env_setup.py b/func/env_setup.py index ea49337d..f6b1d43b 100644 --- a/func/env_setup.py +++ b/func/env_setup.py @@ -54,55 +54,36 @@ class Env_setup: num = len(role[k]) for x in range(num): f_name_2.write(role[k][x] + '\n') + f_name_2.write('[localhost]\n') + f_name_2.write('127.0.0.1\n') f_name_2.close() @staticmethod - def ssh_test(lister): - print 'list: ', lister - for k, v in lister: - ip_var = k - print '\nBeginning SSH Test!\n' - if v != '': - print ('\nSSH->>>>> {0} {1}\n'.format(k, v)) - time.sleep(2) - - ssh_c = 'ssh-keyscan {0} >> ~/.ssh/known_hosts'.format(k) - os.system(ssh_c) - ssh_cmd = './data/qtip_creds.sh {0}'.format(ip_var) - print ssh_cmd - os.system(ssh_cmd) - for infinity in range(100): - try: - ssh = paramiko.SSHClient() - ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - ssh.connect(k, key_filename='./data/QtipKey') - stdin, stdout, stderr = ssh.exec_command('ls') + def ssh_test(hosts): + for ip, pw in hosts: + print '\nBeginning SSH Test: %s \n' % ip + os.system('ssh-keyscan %s >> ~/.ssh/known_hosts' % ip) + time.sleep(2) + + ssh_cmd = './data/qtip_creds.sh %s' % ip + print "run command: %s " % ssh_cmd + os.system(ssh_cmd) + + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(ip, key_filename='./data/QtipKey') + + for attempts in range(100): + try: + stdin, stdout, stderr = ssh.exec_command('uname') + if not stderr.readlines(): print('SSH successful') - for line in stdout: - print '... ' + line.strip('\n') break - except socket.error: - print 'Retrying aSSH %s' % infinity - time.sleep(1) - if v == '': - print ('SSH->>>>>', k) - ssh_c = 'ssh-keyscan {0} >> ~/.ssh/known_hosts'.format(k) - - time.sleep(3) - os.system(ssh_c) - - for infinity in range(10): - try: - ssh = paramiko.SSHClient() - ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - ssh.connect(k, key_filename='./data/QtipKey') - stdin, stdout, stderr = ssh.exec_command('ls') - print('SSH successful') - for line in stdout: - print '... ' + line.strip('\n') - break - except socket.error: - print 'Retrying SSH %s' % infinity + except socket.error: + print 'SSH is still unavailable, retry!' + time.sleep(2) + if attempts == 99: + print "Try 99 times, SSH failed: %s" % ip @staticmethod def ping_test(lister, attempts=30): |