def set_service_status(data): command = data.get('command') service = data.get('service') service_ports = config.parse_service_ports() if command == 'start': existing = service_ports.get(service) port = DEFAULT_SERVICE_PORTS.get(service) if existing: status = get_service_status(service, port) if status == 'running': return key_upper = service.upper().replace('-', '_') port_variable = 'PORT_%s' % key_upper service_list = os.environ.get('SERVICES', '').strip() services = [e for e in re.split(r'[\s,]+', service_list) if e] contained = [s for s in services if s.startswith(service)] if not contained: services.append(service) update_config_variable(port_variable, port) new_service_list = ','.join(services) os.environ['SERVICES'] = new_service_list config.populate_configs() LOG.info('Starting service %s on port %s' % (service, port)) SERVICE_PLUGINS[service].start(asynchronous=True) return {}
def canonicalize_api_names(apis=None): """ Finalize the list of API names by (1) resolving and adding dependencies (e.g., "dynamodbstreams" requires "kinesis"), (2) resolving and adding composites (e.g., "serverless" describes an ensemble including "iam", "lambda", "dynamodb", "apigateway", "s3", "sns", and "logs"), and (3) removing duplicates from the list. """ apis = apis or list(config.SERVICE_PORTS.keys()) def contains(apis, api): for a in apis: if a == api: return True # resolve composites for comp, deps in API_COMPOSITES.items(): if contains(apis, comp): apis.extend(deps) # resolve dependencies for i, api in enumerate(apis): for dep in API_DEPENDENCIES.get(api, []): if not contains(apis, dep): apis.append(dep) # remove duplicates and composite names apis = list(set([a for a in apis if a not in API_COMPOSITES.keys()])) # make sure we have port mappings for each API for api in apis: if api not in config.SERVICE_PORTS: config.SERVICE_PORTS[api] = config.DEFAULT_SERVICE_PORTS.get(api) config.populate_configs(config.SERVICE_PORTS) return apis
def set_service_status(data): command = data.get("command") service = data.get("service") service_ports = config.parse_service_ports() if command == "start": existing = service_ports.get(service) port = DEFAULT_SERVICE_PORTS.get(service) if existing: status = get_service_status(service, port) if status == "running": return key_upper = service.upper().replace("-", "_") port_variable = "PORT_%s" % key_upper service_list = os.environ.get("SERVICES", "").strip() services = [e for e in re.split(r"[\s,]+", service_list) if e] contained = [s for s in services if s.startswith(service)] if not contained: services.append(service) config_listener.update_config_variable(port_variable, port) new_service_list = ",".join(services) os.environ["SERVICES"] = new_service_list # TODO: expensive operation - check if we need to do this here for each service, should be optimized! config.populate_configs() LOG.info("Starting service %s on port %s" % (service, port)) SERVICE_PLUGINS[service].start(asynchronous=True) return {}
def canonicalize_api_names(apis: Iterable[str] = None) -> List[str]: """ Finalize the list of API names and SERVICE_PORT configurations by first resolving the real services from the enabled services, and then populating the configuration appropriately. """ apis = resolve_apis(apis or config.SERVICE_PORTS.keys()) # make sure we have port mappings for each API for api in apis: if api not in config.SERVICE_PORTS: config.SERVICE_PORTS[api] = config.DEFAULT_SERVICE_PORTS.get(api) config.populate_configs(config.SERVICE_PORTS) return list(apis)
def canonicalize_api_names(apis=None): """Finalize the list of API names by (1) resolving and adding dependencies (e.g., "dynamodbstreams" requires "kinesis"), (2) resolving and adding composites (e.g., "serverless" describes an ensemble including "iam", "lambda", "dynamodb", "apigateway", "s3", "sns", and "logs"), and (3) removing duplicates from the list.""" # TODO: cache the result, as the code below is a relatively expensive operation! apis = apis or list(config.SERVICE_PORTS.keys()) def contains(apis, api): for a in apis: if a == api: return True # TODO: enable recursive lookup - e.g., having service "amplify" depend (via API_DEPENDENCIES) # on composite "serverless", which should add services "s3", "apigateway", etc... # resolve composites for comp, deps in API_COMPOSITES.items(): if contains(apis, comp): apis.extend(deps) config.SERVICE_PORTS.pop(comp) # resolve dependencies for i, api in enumerate(apis): for dep in API_DEPENDENCIES.get(api, []): if not contains(apis, dep): apis.append(dep) # remove duplicates and composite names apis = list(set([a for a in apis if a not in API_COMPOSITES.keys()])) # make sure we have port mappings for each API for api in apis: if api not in config.SERVICE_PORTS: config.SERVICE_PORTS[api] = config.DEFAULT_SERVICE_PORTS.get(api) config.populate_configs(config.SERVICE_PORTS) return apis