def start_infra_in_docker(): # load plugins before starting the docker container plugin_configs = load_plugins() plugin_run_params = ' '.join([ entry.get('docker', {}).get('run_flags', '') for entry in plugin_configs]) services = os.environ.get('SERVICES', '') entrypoint = os.environ.get('ENTRYPOINT', '') cmd = os.environ.get('CMD', '') user_flags = os.environ.get('DOCKER_FLAGS', '') image_name = os.environ.get('IMAGE_NAME', constants.DOCKER_IMAGE_NAME) service_ports = config.SERVICE_PORTS force_noninteractive = os.environ.get('FORCE_NONINTERACTIVE', '') # construct port mappings ports_list = sorted(service_ports.values()) start_port = 0 last_port = 0 port_ranges = [] for i in range(0, len(ports_list)): if not start_port: start_port = ports_list[i] if not last_port: last_port = ports_list[i] if ports_list[i] > last_port + 1: port_ranges.append([start_port, last_port]) start_port = ports_list[i] elif i >= len(ports_list) - 1: port_ranges.append([start_port, ports_list[i]]) last_port = ports_list[i] port_mappings = ' '.join( '-p {start}-{end}:{start}-{end}'.format(start=entry[0], end=entry[1]) if entry[0] < entry[1] else '-p {port}:{port}'.format(port=entry[0]) for entry in port_ranges) if services: port_mappings = '' for service, port in service_ports.items(): port_mappings += ' -p {port}:{port}'.format(port=port) env_str = '' for env_var in config.CONFIG_ENV_VARS: value = os.environ.get(env_var, None) if value is not None: env_str += '-e %s="%s" ' % (env_var, value) data_dir_mount = '' data_dir = os.environ.get('DATA_DIR', None) if data_dir is not None: container_data_dir = '/tmp/localstack_data' data_dir_mount = '-v "%s:%s" ' % (data_dir, container_data_dir) env_str += '-e DATA_DIR="%s" ' % container_data_dir interactive = '' if force_noninteractive or in_ci() else '-it ' # append space if parameter is set user_flags = '%s ' % user_flags if user_flags else user_flags entrypoint = '%s ' % entrypoint if entrypoint else entrypoint plugin_run_params = '%s ' % plugin_run_params if plugin_run_params else plugin_run_params docker_cmd = ('docker run %s%s%s%s%s' + '-p 8080:8080 %s %s' + '-v "%s:/tmp/localstack" -v "%s:%s" ' + '-e DOCKER_HOST="unix://%s" ' + '-e HOST_TMP_FOLDER="%s" "%s" %s') % ( interactive, entrypoint, env_str, user_flags, plugin_run_params, port_mappings, data_dir_mount, config.TMP_FOLDER, config.DOCKER_SOCK, config.DOCKER_SOCK, config.DOCKER_SOCK, config.HOST_TMP_FOLDER, image_name, cmd ) mkdir(config.TMP_FOLDER) run_cmd_safe(cmd='chmod -R 777 "%s"' % config.TMP_FOLDER) print(docker_cmd) t = ShellCommandThread(docker_cmd, outfile=subprocess.PIPE) t.start() time.sleep(2) t.process.wait() sys.exit(t.process.returncode)
def start_infra_in_docker(): # load plugins before starting the docker container plugin_configs = load_plugins() plugin_run_params = ' '.join([ entry.get('docker', {}).get('run_flags', '') for entry in plugin_configs]) services = os.environ.get('SERVICES', '') entrypoint = os.environ.get('ENTRYPOINT', '') cmd = os.environ.get('CMD', '') image_name = os.environ.get('IMAGE_NAME', constants.DOCKER_IMAGE_NAME) service_ports = config.SERVICE_PORTS force_noninteractive = os.environ.get('FORCE_NONINTERACTIVE', '') # construct port mappings ports_list = sorted(service_ports.values()) start_port = 0 last_port = 0 port_ranges = [] for i in range(0, len(ports_list)): if not start_port: start_port = ports_list[i] if not last_port: last_port = ports_list[i] if ports_list[i] > last_port + 1: port_ranges.append([start_port, last_port]) start_port = ports_list[i] elif i >= len(ports_list) - 1: port_ranges.append([start_port, ports_list[i]]) last_port = ports_list[i] port_mappings = ' '.join( '-p {start}-{end}:{start}-{end}'.format(start=entry[0], end=entry[1]) if entry[0] < entry[1] else '-p {port}:{port}'.format(port=entry[0]) for entry in port_ranges) if services: port_mappings = '' for service, port in service_ports.items(): port_mappings += ' -p {port}:{port}'.format(port=port) env_str = '' for env_var in config.CONFIG_ENV_VARS: value = os.environ.get(env_var, None) if value is not None: env_str += '-e %s="%s" ' % (env_var, value) data_dir_mount = '' data_dir = os.environ.get('DATA_DIR', None) if data_dir is not None: container_data_dir = '/tmp/localstack_data' data_dir_mount = '-v "%s:%s" ' % (data_dir, container_data_dir) env_str += '-e DATA_DIR="%s" ' % container_data_dir interactive = '' if force_noninteractive or in_ci() else '-it ' # append space if parameter is set entrypoint = '%s ' % entrypoint if entrypoint else entrypoint plugin_run_params = '%s ' % plugin_run_params if plugin_run_params else plugin_run_params docker_cmd = ('docker run %s%s%s%s' + '-p 8080:8080 %s %s' + '-v "%s:/tmp/localstack" -v "%s:%s" ' + '-e DOCKER_HOST="unix://%s" ' + '-e HOST_TMP_FOLDER="%s" "%s" %s') % ( interactive, entrypoint, env_str, plugin_run_params, port_mappings, data_dir_mount, config.TMP_FOLDER, config.DOCKER_SOCK, config.DOCKER_SOCK, config.DOCKER_SOCK, config.HOST_TMP_FOLDER, image_name, cmd ) mkdir(config.TMP_FOLDER) run_cmd_safe(cmd='chmod -R 777 "%s"' % config.TMP_FOLDER) print(docker_cmd) t = ShellCommandThread(docker_cmd, outfile=subprocess.PIPE) t.start() time.sleep(2) t.process.wait() sys.exit(t.process.returncode)