mirror of
https://github.com/containers/podman-compose.git
synced 2025-05-09 16:54:48 +02:00
Implement pids_limit
Signed-off-by: Elsa <zeyugao@outlook.com>
This commit is contained in:
parent
150ab02446
commit
98f166d2e4
1
newsfragments/1182-implement-pids-limit.feature
Normal file
1
newsfragments/1182-implement-pids-limit.feature
Normal file
@ -0,0 +1 @@
|
|||||||
|
- Add support for `pids_limit` and `deploy.resources.limits.pids`
|
@ -771,6 +771,22 @@ def container_to_cpu_res_args(cnt, podman_args):
|
|||||||
str(mem_res).lower(),
|
str(mem_res).lower(),
|
||||||
))
|
))
|
||||||
|
|
||||||
|
# Handle pids limit from both container level and deploy section
|
||||||
|
pids_limit = cnt.get("pids_limit")
|
||||||
|
deploy_pids = limits.get("pids")
|
||||||
|
|
||||||
|
# Ensure consistency between pids_limit and deploy.resources.limits.pids
|
||||||
|
if pids_limit is not None and deploy_pids is not None:
|
||||||
|
if str(pids_limit) != str(deploy_pids):
|
||||||
|
raise ValueError(
|
||||||
|
f"Inconsistent PIDs limit: pids_limit ({pids_limit}) and "
|
||||||
|
f"deploy.resources.limits.pids ({deploy_pids}) must be the same"
|
||||||
|
)
|
||||||
|
|
||||||
|
final_pids_limit = pids_limit if pids_limit is not None else deploy_pids
|
||||||
|
if final_pids_limit is not None:
|
||||||
|
podman_args.extend(["--pids-limit", str(final_pids_limit)])
|
||||||
|
|
||||||
|
|
||||||
def port_dict_to_str(port_desc):
|
def port_dict_to_str(port_desc):
|
||||||
# NOTE: `mode: host|ingress` is ignored
|
# NOTE: `mode: host|ingress` is ignored
|
||||||
|
@ -630,3 +630,67 @@ class TestContainerToArgs(unittest.IsolatedAsyncioTestCase):
|
|||||||
"busybox",
|
"busybox",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def test_pids_limit_container_level(self):
|
||||||
|
c = create_compose_mock()
|
||||||
|
cnt = get_minimal_container()
|
||||||
|
cnt["pids_limit"] = 100
|
||||||
|
|
||||||
|
args = await container_to_args(c, cnt)
|
||||||
|
self.assertEqual(
|
||||||
|
args,
|
||||||
|
[
|
||||||
|
"--name=project_name_service_name1",
|
||||||
|
"-d",
|
||||||
|
"--network=bridge:alias=service_name",
|
||||||
|
"--pids-limit",
|
||||||
|
"100",
|
||||||
|
"busybox",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
async def test_pids_limit_deploy_section(self):
|
||||||
|
c = create_compose_mock()
|
||||||
|
cnt = get_minimal_container()
|
||||||
|
cnt["deploy"] = {"resources": {"limits": {"pids": 100}}}
|
||||||
|
|
||||||
|
args = await container_to_args(c, cnt)
|
||||||
|
self.assertEqual(
|
||||||
|
args,
|
||||||
|
[
|
||||||
|
"--name=project_name_service_name1",
|
||||||
|
"-d",
|
||||||
|
"--network=bridge:alias=service_name",
|
||||||
|
"--pids-limit",
|
||||||
|
"100",
|
||||||
|
"busybox",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
async def test_pids_limit_both_same(self):
|
||||||
|
c = create_compose_mock()
|
||||||
|
cnt = get_minimal_container()
|
||||||
|
cnt["pids_limit"] = 100
|
||||||
|
cnt["deploy"] = {"resources": {"limits": {"pids": 100}}}
|
||||||
|
|
||||||
|
args = await container_to_args(c, cnt)
|
||||||
|
self.assertEqual(
|
||||||
|
args,
|
||||||
|
[
|
||||||
|
"--name=project_name_service_name1",
|
||||||
|
"-d",
|
||||||
|
"--network=bridge:alias=service_name",
|
||||||
|
"--pids-limit",
|
||||||
|
"100",
|
||||||
|
"busybox",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
async def test_pids_limit_both_different(self):
|
||||||
|
c = create_compose_mock()
|
||||||
|
cnt = get_minimal_container()
|
||||||
|
cnt["pids_limit"] = 100
|
||||||
|
cnt["deploy"] = {"resources": {"limits": {"pids": 200}}}
|
||||||
|
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
await container_to_args(c, cnt)
|
||||||
|
Loading…
Reference in New Issue
Block a user