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,31 +680,7 @@ def norm_ports(ports_in):
|
||||
return ports_out
|
||||
|
||||
|
||||
async def assert_cnt_nets(compose, cnt):
|
||||
"""
|
||||
create missing networks
|
||||
"""
|
||||
net = cnt.get("network_mode", None)
|
||||
if net and not net.startswith("bridge"):
|
||||
return
|
||||
proj_name = compose.project_name
|
||||
nets = compose.networks
|
||||
default_net = compose.default_net
|
||||
cnt_nets = cnt.get("networks", None)
|
||||
if cnt_nets and is_dict(cnt_nets):
|
||||
cnt_nets = list(cnt_nets.keys())
|
||||
cnt_nets = norm_as_list(cnt_nets or default_net)
|
||||
for net in cnt_nets:
|
||||
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
|
||||
try:
|
||||
await compose.podman.output([], "network", ["exists", net_name])
|
||||
except subprocess.CalledProcessError as e:
|
||||
if is_ext:
|
||||
raise RuntimeError(f"External network [{net_name}] does not exists") from e
|
||||
def get_network_create_args(net_desc, proj_name, net_name):
|
||||
args = [
|
||||
"create",
|
||||
"--label",
|
||||
@ -742,6 +718,36 @@ async def assert_cnt_nets(compose, cnt):
|
||||
if gateway:
|
||||
args.extend(("--gateway", gateway))
|
||||
args.append(net_name)
|
||||
|
||||
return args
|
||||
|
||||
|
||||
async def assert_cnt_nets(compose, cnt):
|
||||
"""
|
||||
create missing networks
|
||||
"""
|
||||
net = cnt.get("network_mode", None)
|
||||
if net and not net.startswith("bridge"):
|
||||
return
|
||||
proj_name = compose.project_name
|
||||
nets = compose.networks
|
||||
default_net = compose.default_net
|
||||
cnt_nets = cnt.get("networks", None)
|
||||
if cnt_nets and is_dict(cnt_nets):
|
||||
cnt_nets = list(cnt_nets.keys())
|
||||
cnt_nets = norm_as_list(cnt_nets or default_net)
|
||||
for net in cnt_nets:
|
||||
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
|
||||
try:
|
||||
await compose.podman.output([], "network", ["exists", net_name])
|
||||
except subprocess.CalledProcessError as e:
|
||||
if is_ext:
|
||||
raise RuntimeError(f"External network [{net_name}] does not exists") from e
|
||||
args = get_network_create_args(net_desc, proj_name, net_name)
|
||||
await compose.podman.output([], "network", args)
|
||||
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