Merge pull request #14626 from jakecorrenti/disable-docker-compose-health-check

Docker-compose disable healthcheck properly handled
This commit is contained in:
openshift-ci[bot]
2022-07-05 13:50:35 +00:00
committed by GitHub
6 changed files with 33 additions and 11 deletions

View File

@ -47,3 +47,13 @@ const (
// DefaultHealthCheckTimeout default value
DefaultHealthCheckTimeout = "30s"
)
// HealthConfig.Test options
const (
// HealthConfigTestNone disables healthcheck
HealthConfigTestNone = "NONE"
// HealthConfigTestCmd execs arguments directly
HealthConfigTestCmd = "CMD"
// HealthConfigTestCmdShell runs commands with the system's default shell
HealthConfigTestCmdShell = "CMD-SHELL"
)

View File

@ -47,11 +47,11 @@ func (c *Container) runHealthCheck() (define.HealthCheckStatus, error) {
return define.HealthCheckNotDefined, errors.Errorf("container %s has no defined healthcheck", c.ID())
}
switch hcCommand[0] {
case "", "NONE":
case "", define.HealthConfigTestNone:
return define.HealthCheckNotDefined, errors.Errorf("container %s has no defined healthcheck", c.ID())
case "CMD":
case define.HealthConfigTestCmd:
newCommand = hcCommand[1:]
case "CMD-SHELL":
case define.HealthConfigTestCmdShell:
// TODO: SHELL command from image not available in Container - use Docker default
newCommand = []string{"/bin/sh", "-c", strings.Join(hcCommand[1:], " ")}
default:

View File

@ -511,12 +511,12 @@ func makeHealthCheck(inCmd string, interval int32, retries int32, timeout int32,
cmd := []string{}
if inCmd == "none" {
cmd = []string{"NONE"}
cmd = []string{define.HealthConfigTestNone}
} else {
err := json.Unmarshal([]byte(inCmd), &cmd)
if err != nil {
// ...otherwise pass it to "/bin/sh -c" inside the container
cmd = []string{"CMD-SHELL"}
cmd = []string{define.HealthConfigTestCmdShell}
cmd = append(cmd, strings.Split(inCmd, " ")...)
}
}

View File

@ -873,23 +873,23 @@ func makeHealthCheckFromCli(inCmd, interval string, retries uint, timeout, start
}
var concat string
if cmdArr[0] == "CMD" || cmdArr[0] == "none" { // this is for compat, we are already split properly for most compat cases
if strings.ToUpper(cmdArr[0]) == define.HealthConfigTestCmd || strings.ToUpper(cmdArr[0]) == define.HealthConfigTestNone { // this is for compat, we are already split properly for most compat cases
cmdArr = strings.Fields(inCmd)
} else if cmdArr[0] != "CMD-SHELL" { // this is for podman side of things, won't contain the keywords
} else if strings.ToUpper(cmdArr[0]) != define.HealthConfigTestCmdShell { // this is for podman side of things, won't contain the keywords
if isArr && len(cmdArr) > 1 { // an array of consecutive commands
cmdArr = append([]string{"CMD"}, cmdArr...)
cmdArr = append([]string{define.HealthConfigTestCmd}, cmdArr...)
} else { // one singular command
if len(cmdArr) == 1 {
concat = cmdArr[0]
} else {
concat = strings.Join(cmdArr[0:], " ")
}
cmdArr = append([]string{"CMD-SHELL"}, concat)
cmdArr = append([]string{define.HealthConfigTestCmdShell}, concat)
}
}
if cmdArr[0] == "none" { // if specified to remove healtcheck
cmdArr = []string{"NONE"}
if strings.ToUpper(cmdArr[0]) == define.HealthConfigTestNone { // if specified to remove healtcheck
cmdArr = []string{define.HealthConfigTestNone}
}
// healthcheck is by default an array, so we simply pass the user input

View File

@ -0,0 +1,10 @@
version: "3.7"
services:
noHc:
image: alpine
container_name: noHc
ports:
- "4000:80"
restart: unless-stopped
healthcheck:
disable: true

View File

@ -0,0 +1,2 @@
podman inspect --format='{{.Config.Healthcheck.Test}}' noHc
like $output "[NONE]" "$testname: healthcheck properly disabled"