def scale_node(self): """Scale node in cluster""" step_config = self.env_config['scale_nodes'][self.scale_step] for node in step_config: if node['action'] == 'add': self._add_node([node]) elif node['action'] == 'delete': self._del_node([node]) else: logger.error("Unknow scale action: {}".format(node['action'])) self.scale_step += 1
def scale_node(self): """Scale node in cluster For add nodes with role use scale_nodes in yaml with action add in step:: scale_nodes: - - roles: - controller count: 2 action: add For remove nodes with role use scale_nodes in yaml with action delete in step:: scale_nodes: - - roles: - controller count: 2 action: delete Step may contain add and remove action together:: scale_nodes: - - roles: - compute count: 2 action: add - - roles: - ceph-osd count: 1 action: delete """ step_config = self.env_config['scale_nodes'][self.scale_step] for node in step_config: if node['action'] == 'add': self._add_node([node]) elif node['action'] == 'delete': self._del_node([node]) if 'compute-vmware' in node['roles']: self.del_vmware_nova_compute() elif node['action'] == 'reconfigure': if node.get('vmware_vcenter'): nova_computes = node['vmware_vcenter']['nova-compute'] self.add_vmware_nova_compute(nova_computes) if node.get('vmware_dvs'): dvs_settings = node['vmware_dvs'] self.update_dvs_plugin_settings(dvs_settings) else: logger.error("Unknown scale action: {}".format(node['action'])) self.scale_step += 1
def scale_node(self): """Scale node in cluster For add nodes with role use scale_nodes in yaml with action add in step:: scale_nodes: - - roles: - controller count: 2 action: add For remove nodes with role use scale_nodes in yaml with action delete in step:: scale_nodes: - - roles: - controller count: 2 action: delete Step may contain add and remove action together:: scale_nodes: - - roles: - compute count: 2 action: add - - roles: - ceph-osd count: 1 action: delete """ step_config = self.env_config['scale_nodes'][self.scale_step] for node in step_config: if node['action'] == 'add': self._add_node([node]) elif node['action'] == 'delete': self._del_node([node]) else: logger.error("Unknown scale action: {}".format(node['action'])) self.scale_step += 1
def scale_node(self): """Scale node in cluster For add nodes with role use scale_nodes in yaml with action add in step:: scale_nodes: - - roles: - controller count: 2 action: add For remove nodes with role use scale_nodes in yaml with action delete in step::: scale_nodes: - - roles: - controller count: 2 action: delete Step may contain add and remove action together:: scale_nodes: - - roles: - compute count: 2 action: add - - roles: - ceph-osd count: 1 action: delete """ step_config = self.env_config['scale_nodes'][self.scale_step] for node in step_config: if node['action'] == 'add': self._add_node([node]) elif node['action'] == 'delete': self._del_node([node]) else: logger.error("Unknow scale action: {}".format(node['action'])) self.scale_step += 1
def wrapper(*args, **kwargs): try: result = func(*args, **kwargs) except SkipTest: raise SkipTest() except Exception as test_exception: exc_trace = sys.exc_traceback name = 'error_%s' % func.__name__ description = "Failed in method '%s'." % func.__name__ if args[0].env is not None: try: create_diagnostic_snapshot(args[0].env, "fail", name) except: logger.error("Fetching of diagnostic snapshot failed: {0}". format(traceback.format_exc())) try: with args[0].env.d_env.get_admin_remote()\ as admin_remote: pull_out_logs_via_ssh(admin_remote, name) except: logger.error("Fetching of raw logs failed: {0}". format(traceback.format_exc())) finally: logger.debug(args) try: args[0].env.make_snapshot(snapshot_name=name[-50:], description=description, is_make=True) except: logger.error("Error making the environment snapshot:" " {0}".format(traceback.format_exc())) raise test_exception, None, exc_trace return result
def wrapper(*args, **kwargs): try: result = func(*args, **kwargs) except SkipTest: raise SkipTest() except Exception as test_exception: exc_trace = sys.exc_traceback name = 'error_%s' % func.__name__ case_name = getattr(func, '_base_class', None) step_num = getattr(func, '_step_num', None) config_name = getattr(func, '_config_case_group', None) description = "Failed in method '%s'." % func.__name__ if args[0].env is not None: try: create_diagnostic_snapshot(args[0].env, "fail", name) except: logger.error("Fetching of diagnostic snapshot failed: {0}". format(traceback.format_exc())) try: with args[0].env.d_env.get_admin_remote()\ as admin_remote: pull_out_logs_via_ssh(admin_remote, name) except: logger.error("Fetching of raw logs failed: {0}". format(traceback.format_exc())) finally: logger.debug(args) try: if all([case_name, step_num, config_name]): _hash = hashlib.sha256(config_name) _hash = _hash.hexdigest()[:8] snapshot_name = "{case}_{config}_{step}".format( case=case_name, config=_hash, step="Step{:03d}".format(step_num) ) else: snapshot_name = name[-50:] args[0].env.make_snapshot(snapshot_name=snapshot_name, description=description, is_make=True) except: logger.error("Error making the environment snapshot:" " {0}".format(traceback.format_exc())) raise test_exception, None, exc_trace return result
def wrapper(*args, **kwargs): try: result = func(*args, **kwargs) except SkipTest: raise SkipTest() except Exception as test_exception: exc_trace = sys.exc_traceback name = 'error_%s' % func.__name__ case_name = getattr(func, '_base_class', None) step_num = getattr(func, '_step_num', None) config_name = getattr(func, '_config_case_group', None) description = "Failed in method '%s'." % func.__name__ if args[0].env is not None: try: create_diagnostic_snapshot(args[0].env, "fail", name) except: logger.error( "Fetching of diagnostic snapshot failed: {0}".format( traceback.format_exc())) try: with args[0].env.d_env.get_admin_remote()\ as admin_remote: pull_out_logs_via_ssh(admin_remote, name) except: logger.error("Fetching of raw logs failed: {0}".format( traceback.format_exc())) finally: logger.debug(args) try: if all([case_name, step_num, config_name]): _hash = hashlib.sha256(config_name) _hash = _hash.hexdigest()[:8] snapshot_name = "{case}_{config}_{step}".format( case=case_name, config=_hash, step="Step{:03d}".format(step_num)) else: snapshot_name = name[-50:] args[0].env.make_snapshot(snapshot_name=snapshot_name, description=description, is_make=True) except: logger.error("Error making the environment snapshot:" " {0}".format(traceback.format_exc())) raise test_exception, None, exc_trace return result
def manage_nodes_power(self): """Manage power of node To power off node with role use manage_nodes_power in yaml with action power_off in step:: manage_nodes_power: - - roles: - controller node_number: 0 action: power_off To power on node with role use manage_nodes_power in yaml with action power_on in step:: manage_nodes_power: - - roles: - controller node_number: 0 action: power_on To restart node with role use manage_nodes_power in yaml with action warm_restart or cold_restart in step:: manage_nodes_power: - - roles: - controller node_number: 0 action: warm_restart Example of cold restarting two different nodes with the same role:: manage_nodes_power: - - roles: - controller node_number: 0 action: cold_restart - - roles: - controller node_number: 1 action: cold_restart """ power_actions = { 'power_off_warm': self.fuel_web.warm_shutdown_nodes, 'power_on_warm': self.fuel_web.warm_start_nodes, 'reboot_warm': self.fuel_web.warm_restart_nodes, 'reboot_cold': self.fuel_web.cold_restart_nodes } step_config = self.env_config['manage_nodes_power'][self.power_step] for node in step_config: power_action = power_actions.get(node['action'], None) node_number = node['node_number'] if power_action: ng_nodes = self.fuel_web.get_nailgun_cluster_nodes_by_roles( cluster_id=self.cluster_id, roles=[node['roles'][0]]) dev_node = self.fuel_web.get_devops_node_by_nailgun_fqdn( ng_nodes[node_number]['fqdn']) # noinspection PyCallingNonCallable power_action([dev_node]) else: logger.error("Unknown power switch action: " "{}".format(node['action'])) self.power_step += 1
def manage_nodes_power(self): """Manage power of node To power off node with role use manage_nodes_power in yaml with action power_off in step:: manage_nodes_power: - - roles: - controller node_number: 0 action: power_off To power on node with role use manage_nodes_power in yaml with action power_on in step:: manage_nodes_power: - - roles: - controller node_number: 0 action: power_on To restart node with role use manage_nodes_power in yaml with action warm_restart or cold_restart in step:: manage_nodes_power: - - roles: - controller node_number: 0 action: warm_restart Example of cold restarting two different nodes with the same role:: manage_nodes_power: - - roles: - controller node_number: 0 action: cold_restart - - roles: - controller node_number: 1 action: cold_restart """ power_actions = { 'power_off_warm': self.fuel_web.warm_shutdown_nodes, 'power_on_warm': self.fuel_web.warm_start_nodes, 'reboot_warm': self.fuel_web.warm_restart_nodes, 'reboot_cold': self.fuel_web.cold_restart_nodes } step_config = self.env_config['manage_nodes_power'][self.power_step] for node in step_config: power_action = power_actions.get(node['action'], None) node_number = node['node_number'] if power_action: ng_nodes = self.fuel_web.get_nailgun_cluster_nodes_by_roles( cluster_id=self.cluster_id, roles=[node['roles'][0]]) dev_node = self.fuel_web.get_devops_node_by_nailgun_fqdn( ng_nodes[node_number]['fqdn']) power_action([dev_node]) else: logger.error("Unknown power switch action: " "{}".format(node['action'])) self.power_step += 1