Skip to content

Commit

Permalink
process optional use_host_network flag (#7)
Browse files Browse the repository at this point in the history
* process optional use_host_network flag

* fix unit tests

* sort logging commands

Co-authored-by: Henning Kuenne <[email protected]>
  • Loading branch information
hktudock and hktudock authored Aug 3, 2022
1 parent 6fd92bc commit c70f7a9
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 15 deletions.
1 change: 1 addition & 0 deletions riptide_engine_docker/cmd_detached.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def cmd_detached(client: DockerClient, project: 'Project', command: 'Command', r
)

builder.set_name(get_container_name(project["name"]))
# network_mode host not supported atm
builder.set_network(get_network_name(project["name"]))

builder.set_env(EENV_NO_STDOUT_REDIRECT, "yes")
Expand Down
34 changes: 25 additions & 9 deletions riptide_engine_docker/container_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ def __init__(self, image: str, command: Union[List, str, None]) -> None:
self.hostname = None
self.allow_full_memlock = False
self.cap_sys_admin = False
self.use_host_network = False

self.on_linux = platform.system().lower().startswith('linux')
self.set_env(EENV_ON_LINUX, "1" if self.on_linux else "0")
Expand Down Expand Up @@ -114,6 +115,10 @@ def set_network(self, network: str):
self.network = network
return self

def set_use_host_network(self, flag: bool):
self.use_host_network = flag
return self

def set_name(self, name: str):
self.name = name
return self
Expand Down Expand Up @@ -282,8 +287,14 @@ def build_docker_api(self) -> dict:

if self.name:
args['name'] = self.name
if self.network:
args['network'] = self.network

if self.use_host_network:
args['network_mode'] = 'host'
else:
if self.network:
args['network'] = self.network
args['ports'] = self.ports

if self.entrypoint:
args['entrypoint'] = [self.entrypoint]
if self.work_dir:
Expand All @@ -307,7 +318,7 @@ def build_docker_api(self) -> dict:
args['environment'][EENV_NAMED_VOLUMES] = ':'.join(self.named_volumes_in_cnt)

args['labels'] = self.labels
args['ports'] = self.ports

args['mounts'] = list(self.mounts.values())

return args
Expand All @@ -321,8 +332,15 @@ def build_docker_cli(self) -> List[str]:
]
if self.name:
shell += ["--name", self.name]
if self.network:
shell += ["--network", self.network]

if self.use_host_network:
shell += ["--network", 'host']
else:
if self.network:
shell += ["--network", self.network]
for container, host in self.ports.items():
shell += ['-p', str(host) + ':' + str(container)]

if self.entrypoint:
shell += ["--entrypoint", self.entrypoint]
if self.work_dir:
Expand All @@ -342,9 +360,6 @@ def build_docker_cli(self) -> List[str]:
for key, value in self.labels.items():
shell += ['--label', key + '=' + value]

for container, host in self.ports.items():
shell += ['-p', str(host) + ':' + str(container)]

# Mac: Add delegated
mac_add = ',consistency=delegated' if platform.system().lower().startswith('mac') else ''
for mount in self.mounts.values():
Expand Down Expand Up @@ -431,7 +446,8 @@ def service_collect_logging_commands(service: Service) -> dict:
"""Collect logging commands environment variables for this service"""
environment = {}
if "logging" in service and "commands" in service["logging"]:
for cmdname, command in service["logging"]["commands"].items():
commands = service["logging"]["commands"]
for cmdname, command in {k: commands[k] for k in sorted(commands)}.items():
environment[EENV_COMMAND_LOG_PREFIX + cmdname] = command
return environment

Expand Down
3 changes: 3 additions & 0 deletions riptide_engine_docker/fg.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,9 @@ def fg(client, project: Project, container_name: str, exec_object: Union[Command
builder.set_name(container_name)
builder.set_network(get_network_name(project["name"]))

if "use_host_network" in exec_object and exec_object["use_host_network"]:
builder.set_use_host_network(True)

builder.set_env(EENV_NO_STDOUT_REDIRECT, "yes")
builder.set_args(arguments)

Expand Down
35 changes: 29 additions & 6 deletions riptide_engine_docker/tests/unit/container_builder_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,10 +283,10 @@ def test_set_port(self):

# Test CLI build
expected_cli = self.expected_cli_base + [
'-e', EENV_ON_LINUX + '=1',
'--label', 'riptide=1',
'-p', '5678:1234',
'-p', '5432:9876',
'-e', EENV_ON_LINUX + '=1',
'--label', 'riptide=1',
IMAGE_NAME, COMMAND
]
actual_cli = self.fix.build_docker_cli()
Expand All @@ -312,6 +312,29 @@ def test_set_network(self):
actual_cli = self.fix.build_docker_cli()
self.assertListEqual(actual_cli, expected_cli)

def test_set_use_host_network(self):
self.fix.set_network('name')
self.fix.set_use_host_network(True)

# Test API build
self.expected_api_base.update({
'network_mode': 'host'
})
del self.expected_api_base['ports']
actual_api = self.fix.build_docker_api()
self.assertDictEqual(actual_api, self.expected_api_base)

# Test CLI build
expected_cli = self.expected_cli_base + [
'--network', 'host',
'-e', EENV_ON_LINUX + '=1',
'--label', 'riptide=1',
IMAGE_NAME, COMMAND
]

actual_cli = self.fix.build_docker_cli()
self.assertListEqual(actual_cli, expected_cli)

def test_set_name(self):
self.fix.set_name('blubbeldiblub')

Expand Down Expand Up @@ -673,6 +696,8 @@ def test_init_from_service_current_user(self, *args, **kwargs):

# Test CLI build
expected_cli = self.expected_cli_base + [
'-p', '5678:1234',
'-p', '5432:9876',
'--entrypoint', ENTRYPOINT_CONTAINER_PATH,
'-u', '0',
'-e', EENV_ON_LINUX + '=1',
Expand All @@ -681,17 +706,15 @@ def test_init_from_service_current_user(self, *args, **kwargs):
'-e', 'key1=value1',
'-e', 'key2=value2',
'-e', EENV_OVERLAY_TARGETS + '=',
'-e', EENV_COMMAND_LOG_PREFIX + 'name2=command2',
'-e', EENV_COMMAND_LOG_PREFIX + 'name1=command1',
'-e', EENV_COMMAND_LOG_PREFIX + 'name2=command2',
'-e', EENV_USER + '=9898',
'-e', EENV_GROUP + '=8989',
'-e', EENV_RUN_MAIN_CMD_AS_USER + '=yes',
'--label', RIPTIDE_DOCKER_LABEL_IS_RIPTIDE + '=1',
'--label', RIPTIDE_DOCKER_LABEL_PROJECT + '=PROJECTNAME',
'--label', RIPTIDE_DOCKER_LABEL_SERVICE + '=SERVICENAME',
'--label', RIPTIDE_DOCKER_LABEL_MAIN + '=0',
'-p', '5678:1234',
'-p', '5432:9876',
'--mount', f'type=bind,dst={ENTRYPOINT_CONTAINER_PATH},src={expected_entrypoint_host_path},ro=1',
'--mount', f'type=bind,dst=bind1,src=host1,ro=1',
'--mount', f'type=bind,dst=bind2,src=host2,ro=0',
Expand Down Expand Up @@ -1205,10 +1228,10 @@ def test_service_add_main_port(self, find_open_port_starting_at_mock: Mock):

# Test CLI build
expected_cli = self.expected_cli_base + [
'-p', '9876:4536',
'-e', EENV_ON_LINUX + '=1',
'--label', RIPTIDE_DOCKER_LABEL_IS_RIPTIDE + '=1',
'--label', RIPTIDE_DOCKER_LABEL_HTTP_PORT + '=9876',
'-p', '9876:4536',
IMAGE_NAME, COMMAND
]
actual_cli = self.fix.build_docker_cli()
Expand Down

0 comments on commit c70f7a9

Please sign in to comment.