From 1b8b16741c8fc1bda7b05cc7524fd8bbd258b419 Mon Sep 17 00:00:00 2001 From: Calin Gherghe Date: Mon, 13 Mar 2017 09:21:21 -0400 Subject: [PATCH] Introducing an external tool for the Barometer mcelog test This patch adds the use of mce-inject utility during the mcelog testing. It also includes a few (unrelated) flake8 corrections. Change-Id: Idd3a7005aad1d1d1f7ae2d3107fbd02c959798c8 Signed-off-by: Calin Gherghe (cherry picked from commit 4719824d4b292ba4cf6c36fdb643ae92dfdabc8b) --- baro_tests/collectd.py | 83 +++++++++++++++++++++++++++++++++++++++++++---- baro_utils/mce-inject_df | Bin 0 -> 78496 bytes 2 files changed, 76 insertions(+), 7 deletions(-) create mode 100755 baro_utils/mce-inject_df diff --git a/baro_tests/collectd.py b/baro_tests/collectd.py index 505e617b..cd436df6 100644 --- a/baro_tests/collectd.py +++ b/baro_tests/collectd.py @@ -1,7 +1,7 @@ """Executing test of plugins""" # -*- coding: utf-8 -*- -#Licensed under the Apache License, Version 2.0 (the "License"); you may +# Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # @@ -161,7 +161,7 @@ class CSVClient(object): + "{0}.domain.tld/{1}/{2}-{3}".format( compute_node.get_id(), plugin_subdir, meter_category, date), compute_node.get_ip()) - #Storing last two values + # Storing last two values values = stdout if len(values) < 2: self._logger.error( @@ -382,8 +382,8 @@ def _exec_testcase( compute_node.get_id(), conf.get_plugin_interval(compute_node, name), logger=logger, client=CeilometerClient(logger), criteria_list=ceilometer_criteria_lists[name], - resource_id_substrings = (ceilometer_substr_lists[name] - if name in ceilometer_substr_lists else [''])) + resource_id_substrings=(ceilometer_substr_lists[name] + if name in ceilometer_substr_lists else [''])) else: res = test_csv_handles_plugin_data( compute_node, conf.get_plugin_interval(compute_node, name), name, @@ -396,11 +396,75 @@ def _exec_testcase( res = False _process_result(compute_node.get_id(), test_labels[name], res, results) + +def mcelog_install(logger): + """Install mcelog on compute nodes. + + Keyword arguments: + logger - logger instance + """ + _print_label('Enabling mcelog on compute nodes') + handler = factory.Factory.get_handler('fuel', FUEL_IP, FUEL_USER, installer_pwd='') + nodes = handler.get_nodes() + openstack_version = handler.get_openstack_version() + if openstack_version.find('14.') != 0: + logger.info('Mcelog will not be installed,' + + ' unsupported Openstack version found ({}).'.format(openstack_version)) + else: + for node in nodes: + if node.is_compute(): + ubuntu_release = node.run_cmd('lsb_release -r') + if '16.04' not in ubuntu_release: + logger.info('Mcelog will not be enabled' + + 'on node-{0}, unsupported Ubuntu release found ({1}).'.format( + node.get_dict()['id'], ubuntu_release)) + else: + logger.info('Checking if mcelog is enabled on node-{}...'.format( + node.get_dict()['id'])) + res = node.run_cmd('ls /root/') + if 'mce-inject_df' and 'corrected' in res: + logger.info('Mcelog seems to be already installed on node-{}.'.format( + node.get_dict()['id'])) + res = node.run_cmd('modprobe mce-inject') + res = node.run_cmd('/root/mce-inject_df < /root/corrected') + else: + logger.info('Mcelog will be enabled on node-{}...'.format( + node.get_dict()['id'])) + res = node.put_file('/home/opnfv/repos/barometer/baro_utils/mce-inject_df', + '/root/mce-inject_df') + res = node.run_cmd('chmod a+x /root/mce-inject_df') + res = node.run_cmd('echo "CPU 0 BANK 0" > /root/corrected') + res = node.run_cmd('echo "STATUS 0xcc00008000010090" >> /root/corrected') + res = node.run_cmd('echo "ADDR 0x0010FFFFFFF" >> /root/corrected') + res = node.run_cmd('modprobe mce-inject') + res = node.run_cmd('/root/mce-inject_df < /root/corrected') + logger.info('Mcelog is installed on all compute nodes') + + +def mcelog_delete(logger): + """Uninstall mcelog from compute nodes. + + Keyword arguments: + logger - logger instance + """ + handler = factory.Factory.get_handler('fuel', FUEL_IP, FUEL_USER, installer_pwd='') + nodes = handler.get_nodes() + for node in nodes: + if node.is_compute(): + output = node.run_cmd('ls /root/') + if 'mce-inject_df' in output: + res = node.run_cmd('rm /root/mce-inject_df') + if 'corrected' in output: + res = node.run_cmd('rm /root/corrected') + res = node.run_cmd('systemctl restart mcelog') + logger.info('Mcelog is deleted from all compute nodes') + + def get_ssh_keys(): if not os.path.isdir(ID_RSA_DST_DIR): os.makedirs(ID_RSA_DST_DIR) if not os.path.isfile(ID_RSA_DST): - logger.info("RSA key file {} doesn't exist, it will be downloaded from instaler node.".format(ID_RSA_DST)) + logger.info("RSA key file {} doesn't exist, it will be downloaded from installer node.".format(ID_RSA_DST)) handler = factory.Factory.get_handler('fuel', FUEL_IP, FUEL_USER, installer_pwd=FUEL_PW) fuel = handler.get_installer_node() fuel.get_file(ID_RSA_SRC, ID_RSA_DST) @@ -439,6 +503,8 @@ def main(bt_logger=None): logger.info('computes: {}'.format([('{0}: {1} ({2})'.format( node.get_id(), node.get_name(), node.get_ip())) for node in computes])) + mcelog_install(logger) # installation of mcelog + ceilometer_running_on_con = False _print_label('Test Ceilometer on control nodes') for controller in controllers: @@ -462,7 +528,7 @@ def main(bt_logger=None): node_id = compute_node.get_id() out_plugins[node_id] = 'CSV' compute_ids.append(node_id) - #plugins_to_enable = plugin_labels.keys() + # plugins_to_enable = plugin_labels.keys() plugins_to_enable = [] _print_label('NODE {}: Test Ceilometer Plug-in'.format(node_id)) logger.info('Checking if ceilometer plug-in is included.') @@ -527,6 +593,8 @@ def main(bt_logger=None): _print_label('NODE {}: Restoring config file'.format(node_id)) conf.restore_config(compute_node) + mcelog_delete(logger) # uninstalling mcelog from compute nodes + print_overall_summary(compute_ids, plugin_labels, results, out_plugins) if ((len([res for res in results if not res[2]]) > 0) @@ -535,5 +603,6 @@ def main(bt_logger=None): return 1 return 0 + if __name__ == '__main__': - sys.exit(main()) + sys.exit(main()) diff --git a/baro_utils/mce-inject_df b/baro_utils/mce-inject_df new file mode 100755 index 0000000000000000000000000000000000000000..9304181f8037fb909be5659ddc694c42ce4de7d9 GIT binary patch literal 78496 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