Merge pull request #8961 from rhatdan/kube
play kube: set entrypoint when interpreting Command
This commit is contained in:
commit
9473dda87c
|
|
@ -129,24 +129,20 @@ func ToSpecGen(ctx context.Context, opts *CtrSpecGenOptions) (*specgen.SpecGener
|
|||
|
||||
// TODO: We don't understand why specgen does not take of this, but
|
||||
// integration tests clearly pointed out that it was required.
|
||||
s.Command = []string{}
|
||||
imageData, err := opts.Image.Inspect(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
s.WorkDir = "/"
|
||||
// We will use "Docker field name" internally here to avoid confusion
|
||||
// and reference the "Kubernetes field name" when referencing the YAML
|
||||
// ref: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#notes
|
||||
entrypoint := []string{}
|
||||
cmd := []string{}
|
||||
// Entrypoint/Command handling is based off of
|
||||
// https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#notes
|
||||
if imageData != nil && imageData.Config != nil {
|
||||
if imageData.Config.WorkingDir != "" {
|
||||
s.WorkDir = imageData.Config.WorkingDir
|
||||
}
|
||||
// Pull entrypoint and cmd from image
|
||||
entrypoint = imageData.Config.Entrypoint
|
||||
cmd = imageData.Config.Cmd
|
||||
s.Entrypoint = imageData.Config.Entrypoint
|
||||
s.Command = imageData.Config.Cmd
|
||||
s.Labels = imageData.Config.Labels
|
||||
if len(imageData.Config.StopSignal) > 0 {
|
||||
stopSignal, err := util.ParseSignal(imageData.Config.StopSignal)
|
||||
|
|
@ -158,16 +154,15 @@ func ToSpecGen(ctx context.Context, opts *CtrSpecGenOptions) (*specgen.SpecGener
|
|||
}
|
||||
// If only the yaml.Command is specified, set it as the entrypoint and drop the image Cmd
|
||||
if len(opts.Container.Command) != 0 {
|
||||
entrypoint = opts.Container.Command
|
||||
cmd = []string{}
|
||||
s.Entrypoint = opts.Container.Command
|
||||
s.Command = []string{}
|
||||
}
|
||||
// Only override the cmd field if yaml.Args is specified
|
||||
// Keep the image entrypoint, or the yaml.command if specified
|
||||
if len(opts.Container.Args) != 0 {
|
||||
cmd = opts.Container.Args
|
||||
s.Command = opts.Container.Args
|
||||
}
|
||||
|
||||
s.Command = append(entrypoint, cmd...)
|
||||
// FIXME,
|
||||
// we are currently ignoring imageData.Config.ExposedPorts
|
||||
if opts.Container.WorkingDir != "" {
|
||||
|
|
|
|||
|
|
@ -825,9 +825,16 @@ var _ = Describe("Podman play kube", func() {
|
|||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Cmd }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
cmd := inspect.OutputToString()
|
||||
|
||||
inspect = podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Entrypoint }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
ep := inspect.OutputToString()
|
||||
|
||||
// Use the defined command to override the image's command
|
||||
correctCmd := "[" + strings.Join(defaultCtrCmd, " ") + " " + strings.Join(defaultCtrArg, " ")
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(correctCmd))
|
||||
Expect(ep).To(ContainSubstring(strings.Join(defaultCtrCmd, " ")))
|
||||
Expect(cmd).To(ContainSubstring(strings.Join(defaultCtrArg, " ")))
|
||||
})
|
||||
|
||||
// If you do not supply command or args for a Container, the defaults defined in the Docker image are used.
|
||||
|
|
@ -840,12 +847,17 @@ var _ = Describe("Podman play kube", func() {
|
|||
kube.WaitWithDefaultTimeout()
|
||||
Expect(kube.ExitCode()).To(Equal(0))
|
||||
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Cmd }}'"})
|
||||
// this image's ENTRYPOINT is `/entrypoint.sh`
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Entrypoint }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`/entrypoint.sh`))
|
||||
|
||||
// this image's ENTRYPOINT is `/entrypoint.sh` and it's COMMAND is `/etc/docker/registry/config.yml`
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`[/entrypoint.sh /etc/docker/registry/config.yml]`))
|
||||
// and its COMMAND is `/etc/docker/registry/config.yml`
|
||||
inspect = podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Cmd }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`[/etc/docker/registry/config.yml]`))
|
||||
})
|
||||
|
||||
// If you supply a command but no args for a Container, only the supplied command is used.
|
||||
|
|
@ -859,12 +871,18 @@ var _ = Describe("Podman play kube", func() {
|
|||
kube.WaitWithDefaultTimeout()
|
||||
Expect(kube.ExitCode()).To(Equal(0))
|
||||
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Cmd }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
// Use the defined command to override the image's command, and don't set the args
|
||||
// so the full command in result should not contains the image's command
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`[echo hello]`))
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Entrypoint }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`echo hello`))
|
||||
|
||||
inspect = podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Cmd }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
// an empty command is reported as '[]'
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`[]`))
|
||||
})
|
||||
|
||||
// If you supply only args for a Container, the default Entrypoint defined in the Docker image is run with the args that you supplied.
|
||||
|
|
@ -877,12 +895,16 @@ var _ = Describe("Podman play kube", func() {
|
|||
kube.WaitWithDefaultTimeout()
|
||||
Expect(kube.ExitCode()).To(Equal(0))
|
||||
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Cmd }}'"})
|
||||
// this image's ENTRYPOINT is `/entrypoint.sh`
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Entrypoint }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
// this image's ENTRYPOINT is `/entrypoint.sh`
|
||||
// so result should be `/entrypoint.sh + withArg(...)`
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`[/entrypoint.sh echo hello]`))
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`/entrypoint.sh`))
|
||||
|
||||
inspect = podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Cmd }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`[echo hello]`))
|
||||
})
|
||||
|
||||
// If you supply a command and args,
|
||||
|
|
@ -897,10 +919,15 @@ var _ = Describe("Podman play kube", func() {
|
|||
kube.WaitWithDefaultTimeout()
|
||||
Expect(kube.ExitCode()).To(Equal(0))
|
||||
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Cmd }}'"})
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Entrypoint }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`[echo hello]`))
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`echo`))
|
||||
|
||||
inspect = podmanTest.Podman([]string{"inspect", getCtrNameInPod(pod), "--format", "'{{ .Config.Cmd }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`[hello]`))
|
||||
})
|
||||
|
||||
It("podman play kube test correct output", func() {
|
||||
|
|
@ -917,11 +944,6 @@ var _ = Describe("Podman play kube", func() {
|
|||
logs.WaitWithDefaultTimeout()
|
||||
Expect(logs.ExitCode()).To(Equal(0))
|
||||
Expect(logs.OutputToString()).To(ContainSubstring("hello world"))
|
||||
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(p), "--format", "'{{ .Config.Cmd }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(`[echo hello world]`))
|
||||
})
|
||||
|
||||
It("podman play kube test restartPolicy", func() {
|
||||
|
|
@ -1286,12 +1308,11 @@ spec:
|
|||
Expect(kube.ExitCode()).To(Equal(0))
|
||||
|
||||
podNames := getPodNamesInDeployment(deployment)
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(&podNames[0]), "--format", "'{{ .Config.Cmd }}'"})
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(&podNames[0]), "--format", "'{{ .Config.Entrypoint }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
// yaml's command should override the image's Entrypoint
|
||||
correctCmd := "[" + strings.Join(defaultCtrCmd, " ") + " " + strings.Join(defaultCtrArg, " ")
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(correctCmd))
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(strings.Join(defaultCtrCmd, " ")))
|
||||
})
|
||||
|
||||
It("podman play kube deployment more than 1 replica test correct command", func() {
|
||||
|
|
@ -1306,12 +1327,11 @@ spec:
|
|||
Expect(kube.ExitCode()).To(Equal(0))
|
||||
|
||||
podNames := getPodNamesInDeployment(deployment)
|
||||
correctCmd := "[" + strings.Join(defaultCtrCmd, " ") + " " + strings.Join(defaultCtrArg, " ")
|
||||
for i = 0; i < numReplicas; i++ {
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(&podNames[i]), "--format", "'{{ .Config.Cmd }}'"})
|
||||
inspect := podmanTest.Podman([]string{"inspect", getCtrNameInPod(&podNames[i]), "--format", "'{{ .Config.Entrypoint }}'"})
|
||||
inspect.WaitWithDefaultTimeout()
|
||||
Expect(inspect.ExitCode()).To(Equal(0))
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(correctCmd))
|
||||
Expect(inspect.OutputToString()).To(ContainSubstring(strings.Join(defaultCtrCmd, " ")))
|
||||
}
|
||||
})
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue