diff options
author | cdoern <cbdoer23@g.holycross.edu> | 2021-07-26 09:05:05 -0400 |
---|---|---|
committer | cdoern <cdoern@redhat.com> | 2021-07-28 09:52:41 -0400 |
commit | a9f6592af6646d3692e8a7260df98dd606aa4d9b (patch) | |
tree | d4fe0c7816873543f5fccc089468321f3ac7fabc /cmd/podman | |
parent | fd1f57b3a667f69bb2ae424ec7a7735ef8f1fda4 (diff) | |
download | podman-a9f6592af6646d3692e8a7260df98dd606aa4d9b.tar.gz podman-a9f6592af6646d3692e8a7260df98dd606aa4d9b.tar.bz2 podman-a9f6592af6646d3692e8a7260df98dd606aa4d9b.zip |
Fixed Healthcheck formatting, string to []string
Compat healthcheck tests are of the format []string but podman's were of
the format string. Converted podman's to []string at the specgen level since it has the same effect
and removed the incorrect parsing of compat healthchecks.
fixes #10617
Signed-off-by: cdoern <cdoern@redhat.com>
Diffstat (limited to 'cmd/podman')
-rw-r--r-- | cmd/podman/common/create_opts.go | 4 | ||||
-rw-r--r-- | cmd/podman/common/specgen.go | 33 |
2 files changed, 25 insertions, 12 deletions
diff --git a/cmd/podman/common/create_opts.go b/cmd/podman/common/create_opts.go index cca6399b7..42e0efe5d 100644 --- a/cmd/podman/common/create_opts.go +++ b/cmd/podman/common/create_opts.go @@ -521,7 +521,9 @@ func ContainerCreateToContainerCLIOpts(cc handlers.CreateContainerConfig, rtc *c for _, str := range cc.Config.Healthcheck.Test { finCmd = finCmd + str + " " } - finCmd = finCmd[:len(finCmd)-1] + if len(finCmd) > 1 { + finCmd = finCmd[:len(finCmd)-1] + } cliOpts.HealthCmd = finCmd cliOpts.HealthInterval = cc.Config.Healthcheck.Interval.String() cliOpts.HealthRetries = uint(cc.Config.Healthcheck.Retries) diff --git a/cmd/podman/common/specgen.go b/cmd/podman/common/specgen.go index c0cc7d17b..149869237 100644 --- a/cmd/podman/common/specgen.go +++ b/cmd/podman/common/specgen.go @@ -516,7 +516,6 @@ func FillOutSpecGen(s *specgen.SpecGenerator, c *ContainerCLIOpts, args []string if len(con) != 2 { return fmt.Errorf("invalid --security-opt 1: %q", opt) } - switch con[0] { case "apparmor": s.ContainerSecurityConfig.ApparmorProfile = con[1] @@ -655,21 +654,33 @@ func FillOutSpecGen(s *specgen.SpecGenerator, c *ContainerCLIOpts, args []string return nil } -func makeHealthCheckFromCli(inCmd string, interval string, retries uint, timeout, startPeriod string) (*manifest.Schema2HealthConfig, error) { - var cmdArr []string - cmdSplitPrelim := strings.SplitN(inCmd, " ", 2) - if cmdSplitPrelim[0] == "CMD-SHELL" { - cmdArr = cmdSplitPrelim - } else if cmdSplitPrelim[0] != "CMD" && cmdSplitPrelim[0] != "none" { // if it isnt a cmd-shell or a cmd, it is a command - cmdArr = []string{"CMD-SHELL"} - cmdArr = append(cmdArr, inCmd) - } else { - cmdArr = strings.Fields(inCmd) +func makeHealthCheckFromCli(inCmd, interval string, retries uint, timeout, startPeriod string) (*manifest.Schema2HealthConfig, error) { + cmdArr := []string{} + isArr := true + err := json.Unmarshal([]byte(inCmd), &cmdArr) // array unmarshalling + if err != nil { + cmdArr = strings.SplitN(inCmd, " ", 2) // default for compat + isArr = false } // Every healthcheck requires a command if len(cmdArr) == 0 { return nil, errors.New("Must define a healthcheck command for all healthchecks") } + concat := "" + if cmdArr[0] == "CMD" || cmdArr[0] == "none" { // 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, wont contain the keywords + if isArr && len(cmdArr) > 1 { // an array of consecutive commands + cmdArr = append([]string{"CMD"}, cmdArr...) + } else { // one singular command + if len(cmdArr) == 1 { + concat = cmdArr[0] + } else { + concat = strings.Join(cmdArr[0:], " ") + } + cmdArr = append([]string{"CMD-SHELL"}, concat) + } + } if cmdArr[0] == "none" { // if specified to remove healtcheck cmdArr = []string{"NONE"} |