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)
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)
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)
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)