def drydock_state(setup): state_mgr = DrydockState() state_mgr.connect_db() return state_mgr
def start_drydock(enable_keystone=True): objects.register_all() # Setup configuration parsing cli_options = [ cfg.BoolOpt('debug', short='d', default=False, help='Enable debug logging'), ] config.config_mgr.conf.register_cli_opts(cli_options) config.config_mgr.register_options(enable_keystone=enable_keystone) config.config_mgr.conf(sys.argv[1:]) if config.config_mgr.conf.debug: config.config_mgr.conf.set_override(name='log_level', override='DEBUG', group='logging') # Setup root logger logger = logging.getLogger( config.config_mgr.conf.logging.global_logger_name) logger.setLevel(config.config_mgr.conf.logging.log_level) ch = logging.StreamHandler() formatter = logging.Formatter( '%(asctime)s - %(levelname)s - %(filename)s:%(funcName)s - %(message)s' ) ch.setFormatter(formatter) logger.addHandler(ch) # Specalized format for API logging logger = logging.getLogger( config.config_mgr.conf.logging.control_logger_name) logger.propagate = False formatter = logging.Formatter( '%(asctime)s - %(levelname)s - %(user)s - %(req_id)s - %(external_ctx)s - %(message)s' ) ch = logging.StreamHandler() ch.setFormatter(formatter) logger.addHandler(ch) state = DrydockState() state.connect_db() input_ingester = Ingester() input_ingester.enable_plugin(config.config_mgr.conf.plugins.ingester) orchestrator = Orchestrator(enabled_drivers=config.config_mgr.conf.plugins, state_manager=state, ingester=input_ingester) orch_thread = threading.Thread(target=orchestrator.watch_for_tasks) orch_thread.start() # Check if we have an API key in the environment # Hack around until we move MaaS configs to the YAML schema if 'MAAS_API_KEY' in os.environ: config.config_mgr.conf.set_override( name='maas_api_key', override=os.environ['MAAS_API_KEY'], group='maasdriver') # Setup the RBAC policy enforcer policy.policy_engine = policy.DrydockPolicy() policy.policy_engine.register_policy() # Ensure that the policy_engine is initialized before starting the API wsgi_callable = api.start_api(state_manager=state, ingester=input_ingester, orchestrator=orchestrator) # Now that loggers are configured, log the effective config config.config_mgr.conf.log_opt_values( logging.getLogger(config.config_mgr.conf.logging.global_logger_name), logging.DEBUG) return wsgi_callable