mirror of
https://github.com/containers/podman-compose.git
synced 2025-05-18 13:10:52 +02:00
Factor out arg creation for "network create". Add unit tests.
Signed-off-by: Maximilian R <public@complexvector.space>
This commit is contained in:
parent
970e4ac4ab
commit
bba1f33d51
@ -680,6 +680,48 @@ def norm_ports(ports_in):
|
|||||||
return ports_out
|
return ports_out
|
||||||
|
|
||||||
|
|
||||||
|
def get_network_create_args(net_desc, proj_name, net_name):
|
||||||
|
args = [
|
||||||
|
"create",
|
||||||
|
"--label",
|
||||||
|
f"io.podman.compose.project={proj_name}",
|
||||||
|
"--label",
|
||||||
|
f"com.docker.compose.project={proj_name}",
|
||||||
|
]
|
||||||
|
# TODO: add more options here, like dns, ipv6, etc.
|
||||||
|
labels = net_desc.get("labels", None) or []
|
||||||
|
for item in norm_as_list(labels):
|
||||||
|
args.extend(["--label", item])
|
||||||
|
if net_desc.get("internal", None):
|
||||||
|
args.append("--internal")
|
||||||
|
driver = net_desc.get("driver", None)
|
||||||
|
if driver:
|
||||||
|
args.extend(("--driver", driver))
|
||||||
|
driver_opts = net_desc.get("driver_opts", None) or {}
|
||||||
|
for key, value in driver_opts.items():
|
||||||
|
args.extend(("--opt", f"{key}={value}"))
|
||||||
|
ipam = net_desc.get("ipam", None) or {}
|
||||||
|
ipam_driver = ipam.get("driver", None)
|
||||||
|
if ipam_driver:
|
||||||
|
args.extend(("--ipam-driver", ipam_driver))
|
||||||
|
ipam_config_ls = ipam.get("config", None) or []
|
||||||
|
if is_dict(ipam_config_ls):
|
||||||
|
ipam_config_ls = [ipam_config_ls]
|
||||||
|
for ipam_config in ipam_config_ls:
|
||||||
|
subnet = ipam_config.get("subnet", None)
|
||||||
|
ip_range = ipam_config.get("ip_range", None)
|
||||||
|
gateway = ipam_config.get("gateway", None)
|
||||||
|
if subnet:
|
||||||
|
args.extend(("--subnet", subnet))
|
||||||
|
if ip_range:
|
||||||
|
args.extend(("--ip-range", ip_range))
|
||||||
|
if gateway:
|
||||||
|
args.extend(("--gateway", gateway))
|
||||||
|
args.append(net_name)
|
||||||
|
|
||||||
|
return args
|
||||||
|
|
||||||
|
|
||||||
async def assert_cnt_nets(compose, cnt):
|
async def assert_cnt_nets(compose, cnt):
|
||||||
"""
|
"""
|
||||||
create missing networks
|
create missing networks
|
||||||
@ -705,43 +747,7 @@ async def assert_cnt_nets(compose, cnt):
|
|||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
if is_ext:
|
if is_ext:
|
||||||
raise RuntimeError(f"External network [{net_name}] does not exists") from e
|
raise RuntimeError(f"External network [{net_name}] does not exists") from e
|
||||||
args = [
|
args = get_network_create_args(net_desc, proj_name, net_name)
|
||||||
"create",
|
|
||||||
"--label",
|
|
||||||
f"io.podman.compose.project={proj_name}",
|
|
||||||
"--label",
|
|
||||||
f"com.docker.compose.project={proj_name}",
|
|
||||||
]
|
|
||||||
# TODO: add more options here, like dns, ipv6, etc.
|
|
||||||
labels = net_desc.get("labels", None) or []
|
|
||||||
for item in norm_as_list(labels):
|
|
||||||
args.extend(["--label", item])
|
|
||||||
if net_desc.get("internal", None):
|
|
||||||
args.append("--internal")
|
|
||||||
driver = net_desc.get("driver", None)
|
|
||||||
if driver:
|
|
||||||
args.extend(("--driver", driver))
|
|
||||||
driver_opts = net_desc.get("driver_opts", None) or {}
|
|
||||||
for key, value in driver_opts.items():
|
|
||||||
args.extend(("--opt", f"{key}={value}"))
|
|
||||||
ipam = net_desc.get("ipam", None) or {}
|
|
||||||
ipam_driver = ipam.get("driver", None)
|
|
||||||
if ipam_driver:
|
|
||||||
args.extend(("--ipam-driver", ipam_driver))
|
|
||||||
ipam_config_ls = ipam.get("config", None) or []
|
|
||||||
if is_dict(ipam_config_ls):
|
|
||||||
ipam_config_ls = [ipam_config_ls]
|
|
||||||
for ipam_config in ipam_config_ls:
|
|
||||||
subnet = ipam_config.get("subnet", None)
|
|
||||||
ip_range = ipam_config.get("ip_range", None)
|
|
||||||
gateway = ipam_config.get("gateway", None)
|
|
||||||
if subnet:
|
|
||||||
args.extend(("--subnet", subnet))
|
|
||||||
if ip_range:
|
|
||||||
args.extend(("--ip-range", ip_range))
|
|
||||||
if gateway:
|
|
||||||
args.extend(("--gateway", gateway))
|
|
||||||
args.append(net_name)
|
|
||||||
await compose.podman.output([], "network", args)
|
await compose.podman.output([], "network", args)
|
||||||
await compose.podman.output([], "network", ["exists", net_name])
|
await compose.podman.output([], "network", ["exists", net_name])
|
||||||
|
|
||||||
|
143
pytests/test_network_create_args.py
Normal file
143
pytests/test_network_create_args.py
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
import unittest
|
||||||
|
|
||||||
|
from podman_compose import get_network_create_args
|
||||||
|
|
||||||
|
|
||||||
|
class TestGetNetworkCreateArgs(unittest.TestCase):
|
||||||
|
def test_minimal(self):
|
||||||
|
net_desc = {
|
||||||
|
"labels": [],
|
||||||
|
"internal": False,
|
||||||
|
"driver": None,
|
||||||
|
"driver_opts": {},
|
||||||
|
"ipam": {"config": []},
|
||||||
|
"enable_ipv6": False,
|
||||||
|
}
|
||||||
|
proj_name = "test_project"
|
||||||
|
net_name = "test_network"
|
||||||
|
expected_args = [
|
||||||
|
"create",
|
||||||
|
"--label",
|
||||||
|
f"io.podman.compose.project={proj_name}",
|
||||||
|
"--label",
|
||||||
|
f"com.docker.compose.project={proj_name}",
|
||||||
|
net_name,
|
||||||
|
]
|
||||||
|
args = get_network_create_args(net_desc, proj_name, net_name)
|
||||||
|
self.assertEqual(args, expected_args)
|
||||||
|
|
||||||
|
def test_bridge(self):
|
||||||
|
net_desc = {
|
||||||
|
"labels": [],
|
||||||
|
"internal": False,
|
||||||
|
"driver": "bridge",
|
||||||
|
"driver_opts": {"opt1": "value1", "opt2": "value2"},
|
||||||
|
"ipam": {"config": []},
|
||||||
|
"enable_ipv6": False,
|
||||||
|
}
|
||||||
|
proj_name = "test_project"
|
||||||
|
net_name = "test_network"
|
||||||
|
expected_args = [
|
||||||
|
"create",
|
||||||
|
"--label",
|
||||||
|
f"io.podman.compose.project={proj_name}",
|
||||||
|
"--label",
|
||||||
|
f"com.docker.compose.project={proj_name}",
|
||||||
|
"--driver",
|
||||||
|
"bridge",
|
||||||
|
"--opt",
|
||||||
|
"opt1=value1",
|
||||||
|
"--opt",
|
||||||
|
"opt2=value2",
|
||||||
|
net_name,
|
||||||
|
]
|
||||||
|
args = get_network_create_args(net_desc, proj_name, net_name)
|
||||||
|
self.assertEqual(args, expected_args)
|
||||||
|
|
||||||
|
def test_ipam_driver(self):
|
||||||
|
net_desc = {
|
||||||
|
"labels": [],
|
||||||
|
"internal": False,
|
||||||
|
"driver": None,
|
||||||
|
"driver_opts": {},
|
||||||
|
"ipam": {
|
||||||
|
"driver": "default",
|
||||||
|
"config": [
|
||||||
|
{
|
||||||
|
"subnet": "192.168.0.0/24",
|
||||||
|
"ip_range": "192.168.0.2/24",
|
||||||
|
"gateway": "192.168.0.1",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
proj_name = "test_project"
|
||||||
|
net_name = "test_network"
|
||||||
|
expected_args = [
|
||||||
|
"create",
|
||||||
|
"--label",
|
||||||
|
f"io.podman.compose.project={proj_name}",
|
||||||
|
"--label",
|
||||||
|
f"com.docker.compose.project={proj_name}",
|
||||||
|
"--ipam-driver",
|
||||||
|
"default",
|
||||||
|
"--subnet",
|
||||||
|
"192.168.0.0/24",
|
||||||
|
"--ip-range",
|
||||||
|
"192.168.0.2/24",
|
||||||
|
"--gateway",
|
||||||
|
"192.168.0.1",
|
||||||
|
net_name,
|
||||||
|
]
|
||||||
|
args = get_network_create_args(net_desc, proj_name, net_name)
|
||||||
|
self.assertEqual(args, expected_args)
|
||||||
|
|
||||||
|
def test_complete(self):
|
||||||
|
net_desc = {
|
||||||
|
"labels": ["label1", "label2"],
|
||||||
|
"internal": True,
|
||||||
|
"driver": "bridge",
|
||||||
|
"driver_opts": {"opt1": "value1", "opt2": "value2"},
|
||||||
|
"ipam": {
|
||||||
|
"driver": "default",
|
||||||
|
"config": [
|
||||||
|
{
|
||||||
|
"subnet": "192.168.0.0/24",
|
||||||
|
"ip_range": "192.168.0.2/24",
|
||||||
|
"gateway": "192.168.0.1",
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"enable_ipv6": True,
|
||||||
|
}
|
||||||
|
proj_name = "test_project"
|
||||||
|
net_name = "test_network"
|
||||||
|
expected_args = [
|
||||||
|
"create",
|
||||||
|
"--label",
|
||||||
|
f"io.podman.compose.project={proj_name}",
|
||||||
|
"--label",
|
||||||
|
f"com.docker.compose.project={proj_name}",
|
||||||
|
"--label",
|
||||||
|
"label1",
|
||||||
|
"--label",
|
||||||
|
"label2",
|
||||||
|
"--internal",
|
||||||
|
"--driver",
|
||||||
|
"bridge",
|
||||||
|
"--opt",
|
||||||
|
"opt1=value1",
|
||||||
|
"--opt",
|
||||||
|
"opt2=value2",
|
||||||
|
"--ipam-driver",
|
||||||
|
"default",
|
||||||
|
"--subnet",
|
||||||
|
"192.168.0.0/24",
|
||||||
|
"--ip-range",
|
||||||
|
"192.168.0.2/24",
|
||||||
|
"--gateway",
|
||||||
|
"192.168.0.1",
|
||||||
|
net_name,
|
||||||
|
]
|
||||||
|
args = get_network_create_args(net_desc, proj_name, net_name)
|
||||||
|
self.assertEqual(args, expected_args)
|
Loading…
Reference in New Issue
Block a user