示例#1
0
def create_environ_dir(env_dir, app):
    """Creates environ dir for s6-envdir."""
    appenv = {envvar.name: envvar.value for envvar in app.environ}
    supervisor.create_environ_dir(os.path.join(env_dir, 'app'), appenv)

    env = {
        'TREADMILL_CPU': app.cpu,
        'TREADMILL_DISK': app.disk,
        'TREADMILL_MEMORY': app.memory,
        'TREADMILL_CELL': app.cell,
        'TREADMILL_APP': app.app,
        'TREADMILL_INSTANCEID': app.task,
        'TREADMILL_HOST_IP': app.network.external_ip,
        'TREADMILL_IDENTITY': app.identity,
        'TREADMILL_IDENTITY_GROUP': app.identity_group,
        'TREADMILL_PROID': app.proid,
    }

    for endpoint in app.endpoints:
        envname = 'TREADMILL_ENDPOINT_{0}'.format(endpoint.name.upper())
        env[envname] = endpoint.real_port

    env['TREADMILL_EPHEMERAL_TCP_PORTS'] = ' '.join(
        [str(port) for port in app.ephemeral_ports.tcp])
    env['TREADMILL_EPHEMERAL_UDP_PORTS'] = ' '.join(
        [str(port) for port in app.ephemeral_ports.udp])

    env['TREADMILL_CONTAINER_IP'] = app.network.vip

    # Override appenv with mandatory treadmill environment.
    supervisor.create_environ_dir(os.path.join(env_dir, 'sys'), env)
示例#2
0
    def create(self):
        """Create the directory structure for the tree."""
        env = {
            'TREADMILL_SPAWN_ZK2FS': self.paths.zk_mirror_dir,
            'TREADMILL_SPAWN_ZK2FS_SHARDS':
            str(zknamespace.TRACE_SHARDS_COUNT),
            'TREADMILL_SPAWN_ZK2FS_SOW': app_zk.TRACE_SOW_DIR,
            'TREADMILL_SPAWN_CELLAPI_SOCK': self.paths.cellapi_sock,
            'TREADMILL_SPAWN_CLEANUP': self.paths.cleanup_dir,
        }
        supervisor.create_environ_dir(self.paths.env_dir, env)

        dirs = set()
        for bucket in range(self.buckets):
            bucket_formatted = spawn_utils.format_bucket(bucket)
            dirs.add(bucket_formatted)

            _LOGGER.debug('Adding bucket %r.', bucket_formatted)

            app = os.path.join(self.paths.svscan_tree_dir, bucket_formatted)
            log = os.path.join(app, 'log')

            running = os.path.join(self.paths.running_dir, bucket_formatted)
            svscan = os.path.join(running, '.s6-svscan')

            fs.mkdir_safe(app)
            fs.mkdir_safe(log)
            fs.mkdir_safe(running)
            fs.mkdir_safe(svscan)

            templates.create_script(os.path.join(app, 'run'),
                                    's6.svscan.run',
                                    max=self.max_per_bucket,
                                    service_dir=running,
                                    _alias=subproc.get_aliases())

            templates.create_script(os.path.join(log, 'run'),
                                    's6.logger.run',
                                    logdir='.',
                                    logger_args='-b T n20 s1000000',
                                    _alias=subproc.get_aliases())

            templates.create_script(os.path.join(svscan, 'finish'),
                                    's6.svscan.finish',
                                    timeout=4800,
                                    _alias=subproc.get_aliases())

        for app_dir in os.listdir(self.paths.svscan_tree_dir):
            if not app_dir.startswith('.') and app_dir not in dirs:
                path = os.path.join(self.paths.svscan_tree_dir, app_dir)
                _LOGGER.debug('Removing bucket (%r) %r.',
                              spawn.SVSCAN_TREE_DIR, path)
                shutil.rmtree(path, ignore_errors=True)

        for run_dir in os.listdir(self.paths.running_dir):
            if not run_dir.startswith('.') and run_dir not in dirs:
                path = os.path.join(self.paths.running_dir, run_dir)
                _LOGGER.debug('Removing bucket (%r))  %r.', spawn.RUNNING_DIR,
                              path)
                shutil.rmtree(path, ignore_errors=True)
示例#3
0
def create_environ_dir(container_dir, root_dir, app):
    """Creates environ dir for s6-envdir."""
    env_dir = os.path.join(container_dir, _CONTAINER_ENV_DIR)
    env = {
        'TREADMILL_APP': app.app,
        'TREADMILL_CELL': app.cell,
        'TREADMILL_CPU': app.cpu,
        'TREADMILL_DISK': app.disk,
        'TREADMILL_HOST_IP': app.network.external_ip,
        'TREADMILL_IDENTITY': app.identity,
        'TREADMILL_IDENTITY_COUNT': app.identity_count,
        'TREADMILL_IDENTITY_GROUP': app.identity_group,
        'TREADMILL_INSTANCEID': app.task,
        'TREADMILL_MEMORY': app.memory,
        'TREADMILL_PROID': app.proid,
        'TREADMILL_ENV': app.environment,
    }

    for endpoint in app.endpoints:
        envname = 'TREADMILL_ENDPOINT_{0}'.format(endpoint.name.upper())
        env[envname] = endpoint.real_port

    env['TREADMILL_EPHEMERAL_TCP_PORTS'] = ' '.join(
        [str(port) for port in app.ephemeral_ports.tcp]
    )
    env['TREADMILL_EPHEMERAL_UDP_PORTS'] = ' '.join(
        [str(port) for port in app.ephemeral_ports.udp]
    )

    env['TREADMILL_CONTAINER_IP'] = app.network.vip
    env['TREADMILL_GATEWAY_IP'] = app.network.gateway
    if app.shared_ip:
        env['TREADMILL_SERVICE_IP'] = app.network.external_ip

    supervisor.create_environ_dir(env_dir, env)

    # Bind the environ directory in the container volume
    fs.mkdir_safe(os.path.join(root_dir, _CONTAINER_ENV_DIR))
    fs_linux.mount_bind(
        root_dir, os.path.join(os.sep, _CONTAINER_ENV_DIR),
        source=os.path.join(container_dir, _CONTAINER_ENV_DIR),
        recursive=False, read_only=True
    )

    # envs variables that will be applied in docker container
    _docker.create_docker_environ_dir(container_dir, root_dir, app)
示例#4
0
def create_docker_environ_dir(container_dir, root_dir, app):
    """Creates environ dir for docker"""
    env_dir = os.path.join(container_dir, _CONTAINER_DOCKER_ENV_DIR)
    env = {}

    if app.ephemeral_ports.tcp or app.ephemeral_ports.udp:
        env['LD_PRELOAD'] = os.path.join(_manifest.TREADMILL_BIND_PATH, '$LIB',
                                         'treadmill_bind_preload.so')

    supervisor.create_environ_dir(env_dir, env)

    # Bind the environ directory in the container volume
    fs.mkdir_safe(os.path.join(root_dir, _CONTAINER_DOCKER_ENV_DIR))
    fs_linux.mount_bind(root_dir,
                        os.path.join(os.sep, _CONTAINER_DOCKER_ENV_DIR),
                        source=os.path.join(container_dir,
                                            _CONTAINER_DOCKER_ENV_DIR),
                        recursive=False,
                        read_only=True)