Esempio n. 1
0
def build(service_name, version, root_config_dir, tags):
    '''Build Step'''

    service_class = ServiceDefinition.get_service_class(service_name)
    service = service_class(version, tags)

    default_configs = service.default_configs()

    # Create all of the directories that we need.
    # Go one-by-one to improve error reporting.

    # e.g. ./default_configs
    if not os.path.exists(root_config_dir):
        logger.debug('creating root path: %s', root_config_dir)
        os.mkdir(root_config_dir)

    # e.g. ./default_configs/scala=2.11-distribution=kafka/
    if tags != {}:
        tag_root = _tag_path(root_config_dir, tags)
        if not os.path.exists(tag_root):
            logger.debug('creating tags root path %s', tag_root)
            os.mkdir(tag_root)
        service_parent_root = tag_root
    else:
        service_parent_root = root_config_dir

    # e.g. ./default_configs/kafka
    # e.g. ./default/configs/scala=2.11-distribution=apache/kafka
    service_root = _service_path(service_parent_root, service_name)
    if not os.path.exists(service_root):
        logger.debug('creating service root path: %s', service_root)
        os.mkdir(service_root)

    # e.g. ./default_configs/redis/3.0.1
    # e.g. ./default/configs/scala=2.11-distribution=apache/kafka/2.8.0.2
    version_root = _version_path(service_root, version)
    if not os.path.exists(version_root):
        logger.debug('creating version root path %s', version_root)
        os.mkdir(version_root)

    default_paths = {}
    for name, get_content in default_configs.items():
        path = os.path.join(version_root, name)
        logger.debug('considering default config file %s', path)

        if not os.path.exists(path):
            logger.debug('downloading  default config file %s to %s', name,
                         path)
            content = get_content()
            with open(path, 'w') as f:
                f.write(content)
        else:
            logger.debug('file exists, not downloaded')

        default_paths[name] = path

    return True
Esempio n. 2
0
def build(service_name, version, root_config_dir, tags):
    '''Build Step'''

    service_class = ServiceDefinition.get_service_class(service_name)
    service = service_class(version, tags)

    default_configs = service.default_configs()

    # Create all of the directories that we need.
    # Go one-by-one to improve error reporting.

    # e.g. ./default_configs
    if not os.path.exists(root_config_dir):
        logger.debug('creating root path: %s', root_config_dir)
        os.mkdir(root_config_dir)

    # e.g. ./default_configs/scala=2.11-distribution=kafka/
    if tags != {}:
        tag_root = _tag_path(root_config_dir, tags)
        if not os.path.exists(tag_root):
            logger.debug('creating tags root path %s', tag_root)
            os.mkdir(tag_root)
        service_parent_root = tag_root
    else:
        service_parent_root = root_config_dir

    # e.g. ./default_configs/kafka
    # e.g. ./default/configs/scala=2.11-distribution=apache/kafka
    service_root = _service_path(service_parent_root, service_name)
    if not os.path.exists(service_root):
        logger.debug('creating service root path: %s', service_root)
        os.mkdir(service_root)

    # e.g. ./default_configs/redis/3.0.1
    # e.g. ./default/configs/scala=2.11-distribution=apache/kafka/2.8.0.2
    version_root = _version_path(service_root, version)
    if not os.path.exists(version_root):
        logger.debug('creating version root path %s', version_root)
        os.mkdir(version_root)

    default_paths = {}
    for name, get_content in default_configs.items():
        path = os.path.join(version_root, name)
        logger.debug('considering default config file %s', path)

        if not os.path.exists(path):
            logger.debug('downloading  default config file %s to %s', name, path)
            content = get_content()
            with open(path, 'w') as f:
                f.write(content)
        else:
            logger.debug('file exists, not downloaded')

        default_paths[name] = path

    return True
Esempio n. 3
0
def _inject_service(service_name, version, config_dir, tags):
    logger.debug('injecting configs for service %s version %s', service_name, version)

    # Load the service class and instantiate it.
    service_class = ServiceDefinition.get_service_class(service_name)
    service = service_class(version, tags)

    # Determine which configuration files to inject by overriding
    # defaults defined by the service with arguments supplied in the
    # ENV_INJECT variable

    env_prefix = service_name.upper()

    default_filenames = list(service.default_configs().keys())

    builtin = service.config_mapping()
    logger.debug('considering default injectable configs %s', builtin)

    env_inject_string = os.environ.get(ENV_INJECT_KEY)
    if env_inject_string is None:
        env_inject = {}
        env_overriden = set()
    else:
        env_inject, env_overriden = _inject_string_to_dict(env_inject_string, default_filenames)

    not_overriden = dict((k, v) for k, v in builtin.items() if k not in env_overriden)
    configs_to_inject = dict(not_overriden, **env_inject)
    logger.debug('resolved to inject configs %s', configs_to_inject)

    # Collect injectable configs from all environment variables
    # beginning with the service prefix.
    # e.g. REDIS_FOO=1 => {'foo': '1'}

    injectables = {}
    blacklist = service.ignore_env_names()
    for env_name, env_value in os.environ.items():
        if env_name in blacklist:
            logger.debug('env variable %s ignore because it is in the service blacklist')
            continue

        if env_name == ENV_INJECT_KEY:
            logger.debug('env variable %s ignored because it is the injection key')
            continue

        if env_name.startswith(env_prefix):
            logger.debug('found injectable env variable %s')
            start = env_name.find('_') + 1
            config_part = env_name[start:]

            config_filename, config_part = service.config_multiplex(config_part)
            config_name = service.convert_name(config_part)
            config_value = service.convert_value(env_value)

            logger.debug('found potential inject (name: %s, value: %s) into %s', config_name, config_value, config_filename)
            injectables[config_name] = (config_filename, config_value)

    processor = service.Processor(
        service=service,
        config_dir=config_dir,
        configs_to_inject=configs_to_inject,
        injectables=injectables,
    )
    processor.process()

    return True
Esempio n. 4
0
def _inject_service(service_name, version, config_dir, tags):
    logger.debug('injecting configs for service %s version %s', service_name,
                 version)

    # Load the service class and instantiate it.
    service_class = ServiceDefinition.get_service_class(service_name)
    service = service_class(version, tags)

    # Determine which configuration files to inject by overriding
    # defaults defined by the service with arguments supplied in the
    # ENV_INJECT variable

    env_prefix = service_name.upper()

    default_filenames = list(service.default_configs().keys())

    builtin = service.config_mapping()
    logger.debug('considering default injectable configs %s', builtin)

    env_inject_string = os.environ.get(ENV_INJECT_KEY)
    if env_inject_string is None:
        env_inject = {}
        env_overriden = set()
    else:
        env_inject, env_overriden = _inject_string_to_dict(
            env_inject_string, default_filenames)

    not_overriden = dict(
        (k, v) for k, v in builtin.items() if k not in env_overriden)
    configs_to_inject = dict(not_overriden, **env_inject)
    logger.debug('resolved to inject configs %s', configs_to_inject)

    # Collect injectable configs from all environment variables
    # beginning with the service prefix.
    # e.g. REDIS_FOO=1 => {'foo': '1'}

    injectables = {}
    blacklist = service.ignore_env_names()
    for env_name, env_value in os.environ.items():
        if env_name in blacklist:
            logger.debug(
                'env variable %s ignore because it is in the service blacklist'
            )
            continue

        if env_name == ENV_INJECT_KEY:
            logger.debug(
                'env variable %s ignored because it is the injection key')
            continue

        if env_name.startswith(env_prefix):
            logger.debug('found injectable env variable %s')
            start = env_name.find('_') + 1
            config_part = env_name[start:]

            config_filename, config_part = service.config_multiplex(
                config_part)
            config_name = service.convert_name(config_part)
            config_value = service.convert_value(env_value)

            logger.debug(
                'found potential inject (name: %s, value: %s) into %s',
                config_name, config_value, config_filename)
            injectables[config_name] = (config_filename, config_value)

    processor = service.Processor(
        service=service,
        config_dir=config_dir,
        configs_to_inject=configs_to_inject,
        injectables=injectables,
    )
    processor.process()

    return True