mirror of
https://github.com/containers/podman-compose.git
synced 2024-11-26 09:53:23 +01:00
FIXES #154: handle stop_grace_period
This commit is contained in:
parent
08ffcf6126
commit
38219eb85c
@ -95,6 +95,20 @@ PODMAN_CMDS = (
|
|||||||
"volume",
|
"volume",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
t_re=re.compile('^(?:(\d+)[m:])?(?:(\d+(?:\.\d+)?)s?)?$')
|
||||||
|
|
||||||
|
def str_to_seconds(txt):
|
||||||
|
if not txt: return None
|
||||||
|
if isinstance(txt, int) or isinstance(txt, float):
|
||||||
|
return txt
|
||||||
|
ma = t_re.match(txt.strip())
|
||||||
|
if not ma: return None
|
||||||
|
m, s = ma[1], ma[2]
|
||||||
|
m = int(m) if m else 0
|
||||||
|
s = float(s) if s else 0
|
||||||
|
# "podman stop" takes only int
|
||||||
|
# Error: invalid argument "3.0" for "-t, --time" flag: strconv.ParseUint: parsing "3.0": invalid syntax
|
||||||
|
return int(m*60.0 + s)
|
||||||
|
|
||||||
def ver_as_list(a):
|
def ver_as_list(a):
|
||||||
return [try_int(i, i) for i in num_split_re.findall(a)]
|
return [try_int(i, i) for i in num_split_re.findall(a)]
|
||||||
@ -2105,15 +2119,18 @@ def compose_down(compose, args):
|
|||||||
excluded = get_excluded(compose, args)
|
excluded = get_excluded(compose, args)
|
||||||
podman_args = []
|
podman_args = []
|
||||||
timeout = getattr(args, "timeout", None)
|
timeout = getattr(args, "timeout", None)
|
||||||
if timeout is None:
|
|
||||||
timeout = 1
|
|
||||||
podman_args.extend(["-t", str(timeout)])
|
|
||||||
containers = list(reversed(compose.containers))
|
containers = list(reversed(compose.containers))
|
||||||
|
|
||||||
for cnt in containers:
|
for cnt in containers:
|
||||||
if cnt["_service"] in excluded:
|
if cnt["_service"] in excluded:
|
||||||
continue
|
continue
|
||||||
compose.podman.run([], "stop", [*podman_args, cnt["name"]], sleep=0)
|
podman_stop_args = [*podman_args]
|
||||||
|
if timeout is None:
|
||||||
|
timeout_str = cnt.get("stop_grace_period", None) or "10"
|
||||||
|
timeout = str_to_seconds(timeout_str)
|
||||||
|
if timeout is not None:
|
||||||
|
podman_stop_args.extend(["-t", str(timeout)])
|
||||||
|
compose.podman.run([], "stop", [*podman_stop_args, cnt["name"]], sleep=0)
|
||||||
for cnt in containers:
|
for cnt in containers:
|
||||||
if cnt["_service"] in excluded:
|
if cnt["_service"] in excluded:
|
||||||
continue
|
continue
|
||||||
@ -2136,6 +2153,7 @@ def compose_down(compose, args):
|
|||||||
compose.podman.run([], "pod", ["rm", pod["name"]], sleep=0)
|
compose.podman.run([], "pod", ["rm", pod["name"]], sleep=0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@cmd_run(podman_compose, "ps", "show status of containers")
|
@cmd_run(podman_compose, "ps", "show status of containers")
|
||||||
def compose_ps(compose, args):
|
def compose_ps(compose, args):
|
||||||
proj_name = compose.project_name
|
proj_name = compose.project_name
|
||||||
@ -2271,9 +2289,12 @@ def transfer_service_status(compose, args, action):
|
|||||||
targets = list(reversed(targets))
|
targets = list(reversed(targets))
|
||||||
podman_args = []
|
podman_args = []
|
||||||
timeout = getattr(args, "timeout", None)
|
timeout = getattr(args, "timeout", None)
|
||||||
|
for target in targets:
|
||||||
|
if timeout is None:
|
||||||
|
timeout_str = compose.container_by_name[target].get("stop_grace_period", None) or "10"
|
||||||
|
timeout = str_to_seconds(timeout_str)
|
||||||
if timeout is not None:
|
if timeout is not None:
|
||||||
podman_args.extend(["-t", str(timeout)])
|
podman_args.extend(["-t", str(timeout)])
|
||||||
for target in targets:
|
|
||||||
compose.podman.run([], action, podman_args + [target], sleep=0)
|
compose.podman.run([], action, podman_args + [target], sleep=0)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user