def init(): openstack_params = utils.pack_openstack_params(cfg.CONF) try: return openstack.OpenStackClient(openstack_params) except Exception as e: LOG.error('Failed to connect to OpenStack: %s. ' 'Please verify parameters: %s', e, openstack_params) exit(1)
def play_scenario(message_queue, scenario): deployment = None output = dict(scenarios={}, records={}, agents={}, tests={}) output['scenarios'][scenario['title']] = scenario try: deployment = deploy.Deployment() if _under_openstack(): openstack_params = utils.pack_openstack_params(cfg.CONF) try: deployment.connect_to_openstack(openstack_params, cfg.CONF.flavor_name, cfg.CONF.image_name, cfg.CONF.external_net, cfg.CONF.dns_nameservers) except openstack_clients.OpenStackClientException: raise except Exception as e: LOG.warning( 'Failed to connect to OpenStack: %s. Please ' 'verify parameters: %s', e, openstack_params) # try to proceed even if OpenStack connection fails # (in case scenario does not need it) base_dir = os.path.dirname(scenario['file_name']) scenario_deployment = scenario.get('deployment', {}) server_endpoint = (cfg.CONF.server_endpoint if 'server_endpoint' in cfg.CONF else None) agents = deployment.deploy(scenario_deployment, base_dir=base_dir, server_endpoint=server_endpoint) agents = _extend_agents(agents) output['agents'] = agents LOG.debug('Deployed agents: %s', agents) if not agents: raise Exception('No agents deployed.') if scenario_deployment: quorum = quorum_pkg.make_quorum(agents.keys(), message_queue, cfg.CONF.polling_interval, cfg.CONF.agent_loss_timeout, cfg.CONF.agent_join_timeout) else: # local quorum = quorum_pkg.make_local_quorum() matrix = cfg.CONF.matrix if 'matrix' in cfg.CONF else None if matrix: scenario['matrix'] = matrix execute(output, quorum, scenario['execution'], agents, matrix) except BaseException as e: if isinstance(e, KeyboardInterrupt): LOG.info('Caught SIGINT. Terminating') record = dict(id=utils.make_record_id(), status='interrupted') else: error_msg = 'Error while executing scenario: %s' % e LOG.exception(e) record = dict(id=utils.make_record_id(), status='error', stderr=error_msg) output['records'][record['id']] = record finally: if deployment: try: deployment.cleanup() except Exception as e: LOG.error('Failed to cleanup the deployment: %s', e, exc_info=True) # extend every record with reference to scenario for record in output['records'].values(): record['scenario'] = scenario['title'] return output
def play_scenario(scenario): deployment = None output = dict(scenario=scenario, records={}, agents={}, tests={}) try: deployment = deploy.Deployment() if _under_openstack(): openstack_params = utils.pack_openstack_params(cfg.CONF) try: deployment.connect_to_openstack( openstack_params, cfg.CONF.flavor_name, cfg.CONF.image_name, cfg.CONF.external_net, cfg.CONF.dns_nameservers) except Exception as e: LOG.warning('Failed to connect to OpenStack: %s. Please ' 'verify parameters: %s', e, openstack_params) base_dir = os.path.dirname(scenario['file_name']) scenario_deployment = scenario.get('deployment', {}) server_endpoint = (cfg.CONF.server_endpoint if 'server_endpoint' in cfg.CONF else None) agents = deployment.deploy(scenario_deployment, base_dir=base_dir, server_endpoint=server_endpoint) agents = _extend_agents(agents) output['agents'] = agents LOG.debug('Deployed agents: %s', agents) if not agents: raise Exception('No agents deployed.') if scenario_deployment: quorum = quorum_pkg.make_quorum( agents.keys(), server_endpoint, cfg.CONF.polling_interval, cfg.CONF.agent_loss_timeout, cfg.CONF.agent_join_timeout) else: # local quorum = quorum_pkg.make_local_quorum() matrix = cfg.CONF.matrix if 'matrix' in cfg.CONF else None if matrix: scenario['matrix'] = matrix execute(output, quorum, scenario['execution'], agents, matrix) except BaseException as e: if isinstance(e, KeyboardInterrupt): LOG.info('Caught SIGINT. Terminating') record = dict(id=utils.make_record_id(), status='interrupted') else: error_msg = 'Error while executing scenario: %s' % e LOG.error(error_msg, exc_info=True) record = dict(id=utils.make_record_id(), status='error', stderr=error_msg) output['records'][record['id']] = record finally: if deployment: try: deployment.cleanup() except Exception as e: LOG.error('Failed to cleanup the deployment: %s', e, exc_info=True) # extend every record with reference to scenario for record in output['records'].values(): record['scenario'] = scenario['title'] return output