mirror of
https://github.com/containers/podman-compose.git
synced 2025-01-05 21:49:38 +01:00
Fix support for multiple networks with explicitly specified ipv4/ipv6 addresses
Signed-off-by: Bas Zoetekouw <bas.zoetekouw@surf.nl>
This commit is contained in:
parent
dd34a90068
commit
2743d690d2
@ -855,32 +855,48 @@ def get_net_args(compose, cnt):
|
||||
net_names.append(net_name)
|
||||
net_names_str = ",".join(net_names)
|
||||
|
||||
if ip_assignments > 1:
|
||||
multiple_nets = cnt.get("networks", None)
|
||||
multiple_net_names = multiple_nets.keys()
|
||||
# TODO add support for per-interface aliases
|
||||
# see https://docs.docker.com/compose/compose-file/compose-file-v3/#aliases
|
||||
multiple_nets = cnt.get("networks", None)
|
||||
if multiple_nets and len(multiple_nets) > 1:
|
||||
# networks can be specified as a dict with config per network or as a plain list without
|
||||
# config. Support both cases by converting the plain list to a dict with empty config.
|
||||
if is_list(multiple_nets):
|
||||
multiple_nets = {net: {} for net in multiple_nets}
|
||||
else:
|
||||
multiple_nets = {net: net_config or {} for net, net_config in multiple_nets.items()}
|
||||
|
||||
for net_ in multiple_net_names:
|
||||
for net_, net_config_ in multiple_nets.items():
|
||||
net_desc = nets[net_] or {}
|
||||
is_ext = net_desc.get("external", None)
|
||||
ext_desc = is_ext if is_dict(is_ext) else {}
|
||||
default_net_name = net_ if is_ext else f"{proj_name}_{net_}"
|
||||
net_name = ext_desc.get("name", None) or net_desc.get("name", None) or default_net_name
|
||||
|
||||
ipv4 = multiple_nets[net_].get("ipv4_address", None)
|
||||
ipv6 = multiple_nets[net_].get("ipv6_address", None)
|
||||
if ipv4 is not None and ipv6 is not None:
|
||||
net_args.extend(["--network", f"{net_name}:ip={ipv4},ip={ipv6}"])
|
||||
elif ipv4 is None and ipv6 is not None:
|
||||
net_args.extend(["--network", f"{net_name}:ip={ipv6}"])
|
||||
elif ipv6 is None and ipv4 is not None:
|
||||
net_args.extend(["--network", f"{net_name}:ip={ipv4}"])
|
||||
ipv4 = net_config_.get("ipv4_address", None)
|
||||
ipv6 = net_config_.get("ipv6_address", None)
|
||||
|
||||
net_options = []
|
||||
if ipv4:
|
||||
net_options.append(f"ip={ipv4}")
|
||||
if ipv6:
|
||||
net_options.append(f"ip={ipv6}")
|
||||
|
||||
if net_options:
|
||||
net_args.extend(["--network", f"{net_name}:" + ",".join(net_options)])
|
||||
else:
|
||||
net_args.extend(["--network", f"{net_name}"])
|
||||
else:
|
||||
if is_bridge:
|
||||
net_args.extend(["--net", net_names_str, "--network-alias", ",".join(aliases)])
|
||||
net_args.extend(["--network", net_names_str])
|
||||
if ip:
|
||||
net_args.append(f"--ip={ip}")
|
||||
if ip6:
|
||||
net_args.append(f"--ip6={ip6}")
|
||||
|
||||
if is_bridge:
|
||||
net_args.extend(["--network-alias", ",".join(aliases)])
|
||||
|
||||
return net_args
|
||||
|
||||
|
||||
|
@ -37,7 +37,7 @@ class TestContainerToArgs(unittest.IsolatedAsyncioTestCase):
|
||||
[
|
||||
"--name=project_name_service_name1",
|
||||
"-d",
|
||||
"--net",
|
||||
"--network",
|
||||
"",
|
||||
"--network-alias",
|
||||
"service_name",
|
||||
@ -57,7 +57,7 @@ class TestContainerToArgs(unittest.IsolatedAsyncioTestCase):
|
||||
[
|
||||
"--name=project_name_service_name1",
|
||||
"-d",
|
||||
"--net",
|
||||
"--network",
|
||||
"",
|
||||
"--network-alias",
|
||||
"service_name",
|
||||
@ -82,7 +82,7 @@ class TestContainerToArgs(unittest.IsolatedAsyncioTestCase):
|
||||
[
|
||||
"--name=project_name_service_name1",
|
||||
"-d",
|
||||
"--net",
|
||||
"--network",
|
||||
"",
|
||||
"--network-alias",
|
||||
"service_name",
|
||||
@ -109,7 +109,7 @@ class TestContainerToArgs(unittest.IsolatedAsyncioTestCase):
|
||||
[
|
||||
"--name=project_name_service_name1",
|
||||
"-d",
|
||||
"--net",
|
||||
"--network",
|
||||
"",
|
||||
"--network-alias",
|
||||
"service_name",
|
||||
@ -143,7 +143,7 @@ class TestContainerToArgs(unittest.IsolatedAsyncioTestCase):
|
||||
[
|
||||
"--name=project_name_service_name1",
|
||||
"-d",
|
||||
"--net",
|
||||
"--network",
|
||||
"",
|
||||
"--network-alias",
|
||||
"service_name",
|
||||
@ -166,7 +166,7 @@ class TestContainerToArgs(unittest.IsolatedAsyncioTestCase):
|
||||
"--name=project_name_service_name1",
|
||||
"-d",
|
||||
"--http-proxy=false",
|
||||
"--net",
|
||||
"--network",
|
||||
"",
|
||||
"--network-alias",
|
||||
"service_name",
|
||||
|
Loading…
Reference in New Issue
Block a user