Skip to content

Commit bba1f33

Browse files
claraphyllp12tic
authored andcommitted
Factor out arg creation for "network create". Add unit tests.
Signed-off-by: Maximilian R <public@complexvector.space>
1 parent 970e4ac commit bba1f33

File tree

2 files changed

+186
-37
lines changed

2 files changed

+186
-37
lines changed

podman_compose.py

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,48 @@ def norm_ports(ports_in):
680680
return ports_out
681681

682682

683+
def get_network_create_args(net_desc, proj_name, net_name):
684+
args = [
685+
"create",
686+
"--label",
687+
f"io.podman.compose.project={proj_name}",
688+
"--label",
689+
f"com.docker.compose.project={proj_name}",
690+
]
691+
# TODO: add more options here, like dns, ipv6, etc.
692+
labels = net_desc.get("labels", None) or []
693+
for item in norm_as_list(labels):
694+
args.extend(["--label", item])
695+
if net_desc.get("internal", None):
696+
args.append("--internal")
697+
driver = net_desc.get("driver", None)
698+
if driver:
699+
args.extend(("--driver", driver))
700+
driver_opts = net_desc.get("driver_opts", None) or {}
701+
for key, value in driver_opts.items():
702+
args.extend(("--opt", f"{key}={value}"))
703+
ipam = net_desc.get("ipam", None) or {}
704+
ipam_driver = ipam.get("driver", None)
705+
if ipam_driver:
706+
args.extend(("--ipam-driver", ipam_driver))
707+
ipam_config_ls = ipam.get("config", None) or []
708+
if is_dict(ipam_config_ls):
709+
ipam_config_ls = [ipam_config_ls]
710+
for ipam_config in ipam_config_ls:
711+
subnet = ipam_config.get("subnet", None)
712+
ip_range = ipam_config.get("ip_range", None)
713+
gateway = ipam_config.get("gateway", None)
714+
if subnet:
715+
args.extend(("--subnet", subnet))
716+
if ip_range:
717+
args.extend(("--ip-range", ip_range))
718+
if gateway:
719+
args.extend(("--gateway", gateway))
720+
args.append(net_name)
721+
722+
return args
723+
724+
683725
async def assert_cnt_nets(compose, cnt):
684726
"""
685727
create missing networks
@@ -705,43 +747,7 @@ async def assert_cnt_nets(compose, cnt):
705747
except subprocess.CalledProcessError as e:
706748
if is_ext:
707749
raise RuntimeError(f"External network [{net_name}] does not exists") from e
708-
args = [
709-
"create",
710-
"--label",
711-
f"io.podman.compose.project={proj_name}",
712-
"--label",
713-
f"com.docker.compose.project={proj_name}",
714-
]
715-
# TODO: add more options here, like dns, ipv6, etc.
716-
labels = net_desc.get("labels", None) or []
717-
for item in norm_as_list(labels):
718-
args.extend(["--label", item])
719-
if net_desc.get("internal", None):
720-
args.append("--internal")
721-
driver = net_desc.get("driver", None)
722-
if driver:
723-
args.extend(("--driver", driver))
724-
driver_opts = net_desc.get("driver_opts", None) or {}
725-
for key, value in driver_opts.items():
726-
args.extend(("--opt", f"{key}={value}"))
727-
ipam = net_desc.get("ipam", None) or {}
728-
ipam_driver = ipam.get("driver", None)
729-
if ipam_driver:
730-
args.extend(("--ipam-driver", ipam_driver))
731-
ipam_config_ls = ipam.get("config", None) or []
732-
if is_dict(ipam_config_ls):
733-
ipam_config_ls = [ipam_config_ls]
734-
for ipam_config in ipam_config_ls:
735-
subnet = ipam_config.get("subnet", None)
736-
ip_range = ipam_config.get("ip_range", None)
737-
gateway = ipam_config.get("gateway", None)
738-
if subnet:
739-
args.extend(("--subnet", subnet))
740-
if ip_range:
741-
args.extend(("--ip-range", ip_range))
742-
if gateway:
743-
args.extend(("--gateway", gateway))
744-
args.append(net_name)
750+
args = get_network_create_args(net_desc, proj_name, net_name)
745751
await compose.podman.output([], "network", args)
746752
await compose.podman.output([], "network", ["exists", net_name])
747753

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
import unittest
2+
3+
from podman_compose import get_network_create_args
4+
5+
6+
class TestGetNetworkCreateArgs(unittest.TestCase):
7+
def test_minimal(self):
8+
net_desc = {
9+
"labels": [],
10+
"internal": False,
11+
"driver": None,
12+
"driver_opts": {},
13+
"ipam": {"config": []},
14+
"enable_ipv6": False,
15+
}
16+
proj_name = "test_project"
17+
net_name = "test_network"
18+
expected_args = [
19+
"create",
20+
"--label",
21+
f"io.podman.compose.project={proj_name}",
22+
"--label",
23+
f"com.docker.compose.project={proj_name}",
24+
net_name,
25+
]
26+
args = get_network_create_args(net_desc, proj_name, net_name)
27+
self.assertEqual(args, expected_args)
28+
29+
def test_bridge(self):
30+
net_desc = {
31+
"labels": [],
32+
"internal": False,
33+
"driver": "bridge",
34+
"driver_opts": {"opt1": "value1", "opt2": "value2"},
35+
"ipam": {"config": []},
36+
"enable_ipv6": False,
37+
}
38+
proj_name = "test_project"
39+
net_name = "test_network"
40+
expected_args = [
41+
"create",
42+
"--label",
43+
f"io.podman.compose.project={proj_name}",
44+
"--label",
45+
f"com.docker.compose.project={proj_name}",
46+
"--driver",
47+
"bridge",
48+
"--opt",
49+
"opt1=value1",
50+
"--opt",
51+
"opt2=value2",
52+
net_name,
53+
]
54+
args = get_network_create_args(net_desc, proj_name, net_name)
55+
self.assertEqual(args, expected_args)
56+
57+
def test_ipam_driver(self):
58+
net_desc = {
59+
"labels": [],
60+
"internal": False,
61+
"driver": None,
62+
"driver_opts": {},
63+
"ipam": {
64+
"driver": "default",
65+
"config": [
66+
{
67+
"subnet": "192.168.0.0/24",
68+
"ip_range": "192.168.0.2/24",
69+
"gateway": "192.168.0.1",
70+
}
71+
],
72+
},
73+
}
74+
proj_name = "test_project"
75+
net_name = "test_network"
76+
expected_args = [
77+
"create",
78+
"--label",
79+
f"io.podman.compose.project={proj_name}",
80+
"--label",
81+
f"com.docker.compose.project={proj_name}",
82+
"--ipam-driver",
83+
"default",
84+
"--subnet",
85+
"192.168.0.0/24",
86+
"--ip-range",
87+
"192.168.0.2/24",
88+
"--gateway",
89+
"192.168.0.1",
90+
net_name,
91+
]
92+
args = get_network_create_args(net_desc, proj_name, net_name)
93+
self.assertEqual(args, expected_args)
94+
95+
def test_complete(self):
96+
net_desc = {
97+
"labels": ["label1", "label2"],
98+
"internal": True,
99+
"driver": "bridge",
100+
"driver_opts": {"opt1": "value1", "opt2": "value2"},
101+
"ipam": {
102+
"driver": "default",
103+
"config": [
104+
{
105+
"subnet": "192.168.0.0/24",
106+
"ip_range": "192.168.0.2/24",
107+
"gateway": "192.168.0.1",
108+
}
109+
],
110+
},
111+
"enable_ipv6": True,
112+
}
113+
proj_name = "test_project"
114+
net_name = "test_network"
115+
expected_args = [
116+
"create",
117+
"--label",
118+
f"io.podman.compose.project={proj_name}",
119+
"--label",
120+
f"com.docker.compose.project={proj_name}",
121+
"--label",
122+
"label1",
123+
"--label",
124+
"label2",
125+
"--internal",
126+
"--driver",
127+
"bridge",
128+
"--opt",
129+
"opt1=value1",
130+
"--opt",
131+
"opt2=value2",
132+
"--ipam-driver",
133+
"default",
134+
"--subnet",
135+
"192.168.0.0/24",
136+
"--ip-range",
137+
"192.168.0.2/24",
138+
"--gateway",
139+
"192.168.0.1",
140+
net_name,
141+
]
142+
args = get_network_create_args(net_desc, proj_name, net_name)
143+
self.assertEqual(args, expected_args)

0 commit comments

Comments
 (0)