From a9723ec1cf6abcdf2865ee00f41799264de55b50 Mon Sep 17 00:00:00 2001 From: KuhnChris Date: Sun, 16 Oct 2022 00:04:25 +0200 Subject: [PATCH] Added a way to start containers with multiple ips and nets Signed-off-by: KuhnChris --- podman_compose.py | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/podman_compose.py b/podman_compose.py index 1a583e6..f1d1a0c 100755 --- a/podman_compose.py +++ b/podman_compose.py @@ -822,12 +822,18 @@ def get_net_args(compose, cnt): # release. ip = None ip6 = None + ip_assignments = 0 if cnt_nets and is_dict(cnt_nets): prioritized_cnt_nets = [] # cnt_nets is {net_key: net_value, ...} for net_key, net_value in cnt_nets.items(): net_value = net_value or {} aliases.extend(norm_as_list(net_value.get("aliases", None))) + if net_value.get("ipv4_address", None) != None: + ip_assignments = ip_assignments + 1 + if net_value.get("ipv6_address", None) != None: + ip_assignments = ip_assignments + 1 + if not ip: ip = net_value.get("ipv4_address", None) if not ip6: @@ -854,12 +860,35 @@ def get_net_args(compose, cnt): ) net_names.append(net_name) net_names_str = ",".join(net_names) - if is_bridge: - net_args.extend(["--net", net_names_str, "--network-alias", ",".join(aliases)]) - if ip: - net_args.append(f"--ip={ip}") - if ip6: - net_args.append(f"--ip6={ip6}") + + if ip_assignments > 1: + multipleNets = cnt.get("networks", None) + multipleNetNames = multipleNets.keys() + + for net_ in multipleNetNames: + 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 = multipleNets[net_].get("ipv4_address",None) + ipv6 = multipleNets[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}"]) + else: + if is_bridge: + net_args.extend(["--net", net_names_str, "--network-alias", ",".join(aliases)]) + if ip: + net_args.append(f"--ip={ip}") + if ip6: + net_args.append(f"--ip6={ip6}") return net_args