Merge f512566759 into e07c28d127
This commit is contained in:
commit
a575107cc8
|
|
@ -1184,10 +1184,7 @@ async def container_to_args(compose, cnt, detached=True):
|
||||||
# If it's a string, it's equivalent to specifying CMD-SHELL
|
# If it's a string, it's equivalent to specifying CMD-SHELL
|
||||||
if is_str(healthcheck_test):
|
if is_str(healthcheck_test):
|
||||||
# podman does not add shell to handle command with whitespace
|
# podman does not add shell to handle command with whitespace
|
||||||
podman_args.extend([
|
podman_args.extend(["--health-cmd", "/bin/sh -c " + cmd_quote(healthcheck_test)])
|
||||||
"--healthcheck-command",
|
|
||||||
"/bin/sh -c " + cmd_quote(healthcheck_test),
|
|
||||||
])
|
|
||||||
elif is_list(healthcheck_test):
|
elif is_list(healthcheck_test):
|
||||||
healthcheck_test = healthcheck_test.copy()
|
healthcheck_test = healthcheck_test.copy()
|
||||||
# If it's a list, first item is either NONE, CMD or CMD-SHELL.
|
# If it's a list, first item is either NONE, CMD or CMD-SHELL.
|
||||||
|
|
@ -1196,12 +1193,12 @@ async def container_to_args(compose, cnt, detached=True):
|
||||||
podman_args.append("--no-healthcheck")
|
podman_args.append("--no-healthcheck")
|
||||||
elif healthcheck_type == "CMD":
|
elif healthcheck_type == "CMD":
|
||||||
cmd_q = "' '".join([cmd_quote(i) for i in healthcheck_test])
|
cmd_q = "' '".join([cmd_quote(i) for i in healthcheck_test])
|
||||||
podman_args.extend(["--healthcheck-command", "/bin/sh -c " + cmd_q])
|
podman_args.extend(["--health-cmd", "/bin/sh -c " + cmd_q])
|
||||||
elif healthcheck_type == "CMD-SHELL":
|
elif healthcheck_type == "CMD-SHELL":
|
||||||
if len(healthcheck_test) != 1:
|
if len(healthcheck_test) != 1:
|
||||||
raise ValueError("'CMD_SHELL' takes a single string after it")
|
raise ValueError("'CMD_SHELL' takes a single string after it")
|
||||||
cmd_q = cmd_quote(healthcheck_test[0])
|
cmd_q = cmd_quote(healthcheck_test[0])
|
||||||
podman_args.extend(["--healthcheck-command", "/bin/sh -c " + cmd_q])
|
podman_args.extend(["--health-cmd", "/bin/sh -c " + cmd_q])
|
||||||
else:
|
else:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"unknown healthcheck test type [{healthcheck_type}],\
|
f"unknown healthcheck test type [{healthcheck_type}],\
|
||||||
|
|
@ -1210,17 +1207,19 @@ async def container_to_args(compose, cnt, detached=True):
|
||||||
else:
|
else:
|
||||||
raise ValueError("'healthcheck.test' either a string or a list")
|
raise ValueError("'healthcheck.test' either a string or a list")
|
||||||
|
|
||||||
# interval, timeout and start_period are specified as durations.
|
# interval, timeout, start_period, and start_interval are specified as durations.
|
||||||
if "interval" in healthcheck:
|
if "interval" in healthcheck:
|
||||||
podman_args.extend(["--healthcheck-interval", healthcheck["interval"]])
|
podman_args.extend(["--health-interval", healthcheck["interval"]])
|
||||||
if "timeout" in healthcheck:
|
if "timeout" in healthcheck:
|
||||||
podman_args.extend(["--healthcheck-timeout", healthcheck["timeout"]])
|
podman_args.extend(["--health-timeout", healthcheck["timeout"]])
|
||||||
if "start_period" in healthcheck:
|
if "start_period" in healthcheck:
|
||||||
podman_args.extend(["--healthcheck-start-period", healthcheck["start_period"]])
|
podman_args.extend(["--health-start-period", healthcheck["start_period"]])
|
||||||
|
if "start_interval" in healthcheck:
|
||||||
|
podman_args.extend(["--health-startup-interval", healthcheck["start_interval"]])
|
||||||
|
|
||||||
# convert other parameters to string
|
# convert other parameters to string
|
||||||
if "retries" in healthcheck:
|
if "retries" in healthcheck:
|
||||||
podman_args.extend(["--healthcheck-retries", str(healthcheck["retries"])])
|
podman_args.extend(["--health-retries", str(healthcheck["retries"])])
|
||||||
|
|
||||||
# handle podman extension
|
# handle podman extension
|
||||||
if 'x-podman' in cnt:
|
if 'x-podman' in cnt:
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
healthcheck:
|
||||||
|
image: nopush/podman-compose-test
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD-SHELL", "curl -f http://localhost || exit 1" ]
|
||||||
|
interval: 1m
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 10s
|
||||||
|
start_interval: 5s
|
||||||
|
|
@ -7,6 +7,7 @@ Tests the podman compose up and down commands used to create and remove services
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# pylint: disable=redefined-outer-name
|
# pylint: disable=redefined-outer-name
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
|
@ -89,3 +90,47 @@ class TestUpDown(unittest.TestCase, RunSubprocessMixin):
|
||||||
actual_services[service] = service in actual_output
|
actual_services[service] = service in actual_output
|
||||||
|
|
||||||
self.assertEqual(expected_services, actual_services)
|
self.assertEqual(expected_services, actual_services)
|
||||||
|
|
||||||
|
def test_healthcheck(self):
|
||||||
|
up_cmd = [
|
||||||
|
"coverage",
|
||||||
|
"run",
|
||||||
|
podman_compose_path(),
|
||||||
|
"-f",
|
||||||
|
os.path.join(test_path(), "healthcheck", "docker-compose.yml"),
|
||||||
|
"up",
|
||||||
|
"-d",
|
||||||
|
]
|
||||||
|
self.run_subprocess_assert_returncode(up_cmd)
|
||||||
|
|
||||||
|
command_container_id = [
|
||||||
|
"podman",
|
||||||
|
"ps",
|
||||||
|
"-a",
|
||||||
|
"--filter",
|
||||||
|
"label=io.podman.compose.project=healthcheck",
|
||||||
|
"--format",
|
||||||
|
'"{{.ID}}"',
|
||||||
|
]
|
||||||
|
out, _ = self.run_subprocess_assert_returncode(command_container_id)
|
||||||
|
self.assertNotEqual(out, b"")
|
||||||
|
container_id = out.decode("utf-8").strip().replace('"', "")
|
||||||
|
|
||||||
|
command_inspect = ["podman", "container", "inspect", container_id]
|
||||||
|
|
||||||
|
out, _ = self.run_subprocess_assert_returncode(command_inspect)
|
||||||
|
out_string = out.decode("utf-8")
|
||||||
|
inspect = json.loads(out_string)
|
||||||
|
healthcheck_obj = inspect[0]["Config"]["Healthcheck"]
|
||||||
|
expected = {
|
||||||
|
"Test": ["CMD-SHELL", "/bin/sh -c 'curl -f http://localhost || exit 1'"],
|
||||||
|
"StartPeriod": 10000000000,
|
||||||
|
"Interval": 60000000000,
|
||||||
|
"Timeout": 10000000000,
|
||||||
|
"Retries": 3,
|
||||||
|
}
|
||||||
|
self.assertEqual(healthcheck_obj, expected)
|
||||||
|
|
||||||
|
# StartInterval is not available in the config object
|
||||||
|
create_obj = inspect[0]["Config"]["CreateCommand"]
|
||||||
|
self.assertIn("--health-startup-interval", create_obj)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue