Skip to content

Commit

Permalink
Merge pull request #764 from lemmi/sysctls-dict
Browse files Browse the repository at this point in the history
Handle sysctls maps
  • Loading branch information
p12tic committed Mar 9, 2024
2 parents e0fc9a7 + a9c335b commit 970e4ac
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 3 deletions.
14 changes: 12 additions & 2 deletions podman_compose.py
Original file line number Diff line number Diff line change
Expand Up @@ -956,8 +956,18 @@ async def container_to_args(compose, cnt, detached=True):
podman_args.append("-i")
if cnt.get("stop_signal", None):
podman_args.extend(["--stop-signal", cnt["stop_signal"]])
for i in cnt.get("sysctls", []):
podman_args.extend(["--sysctl", i])

sysctls = cnt.get("sysctls")
if sysctls is not None:
if isinstance(sysctls, dict):
for sysctl, value in sysctls.items():
podman_args.extend(["--sysctl", "{}={}".format(sysctl, value)])
elif isinstance(sysctls, list):
for i in sysctls:
podman_args.extend(["--sysctl", i])
else:
raise TypeError("sysctls should be either dict or list")

if cnt.get("tty", None):
podman_args.append("--tty")
if cnt.get("privileged", None):
Expand Down
66 changes: 65 additions & 1 deletion pytests/test_container_to_args.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def get_minimal_container():
}


class TestContainerToArgs(unittest.TestCase):
class TestContainerToArgs(unittest.IsolatedAsyncioTestCase):
async def test_minimal(self):
c = create_compose_mock()

Expand Down Expand Up @@ -66,3 +66,67 @@ async def test_runtime(self):
"busybox",
],
)

async def test_sysctl_list(self):
c = create_compose_mock()

cnt = get_minimal_container()
cnt["sysctls"] = [
"net.core.somaxconn=1024",
"net.ipv4.tcp_syncookies=0",
]

args = await container_to_args(c, cnt)
self.assertEqual(
args,
[
"--name=project_name_service_name1",
"-d",
"--net",
"",
"--network-alias",
"service_name",
"--sysctl",
"net.core.somaxconn=1024",
"--sysctl",
"net.ipv4.tcp_syncookies=0",
"busybox",
],
)

async def test_sysctl_map(self):
c = create_compose_mock()

cnt = get_minimal_container()
cnt["sysctls"] = {
"net.core.somaxconn": 1024,
"net.ipv4.tcp_syncookies": 0,
}

args = await container_to_args(c, cnt)
self.assertEqual(
args,
[
"--name=project_name_service_name1",
"-d",
"--net",
"",
"--network-alias",
"service_name",
"--sysctl",
"net.core.somaxconn=1024",
"--sysctl",
"net.ipv4.tcp_syncookies=0",
"busybox",
],
)

async def test_sysctl_wrong_type(self):
c = create_compose_mock()
cnt = get_minimal_container()

# check whether wrong types are correctly rejected
for wrong_type in [True, 0, 0.0, "wrong", ()]:
with self.assertRaises(TypeError):
cnt["sysctls"] = wrong_type
await container_to_args(c, cnt)

0 comments on commit 970e4ac

Please sign in to comment.