Merge pull request #18385 from dcermak/setup-env-in-init-containers

Run generate.CompleteSpec() for initContainers as well
This commit is contained in:
OpenShift Merge Robot
2023-05-04 10:12:40 -04:00
committed by GitHub
2 changed files with 18 additions and 2 deletions

View File

@ -727,6 +727,16 @@ func (ic *ContainerEngine) playKubePod(ctx context.Context, podName string, podY
if err != nil {
return nil, nil, err
}
// ensure the environment is setup for initContainers as well: https://github.com/containers/podman/issues/18384
warn, err := generate.CompleteSpec(ctx, ic.Libpod, specGen)
if err != nil {
return nil, nil, err
}
for _, w := range warn {
logrus.Warn(w)
}
specGen.SdNotifyMode = define.SdNotifyModeIgnore
rtSpec, spec, opts, err := generate.MakeContainer(ctx, ic.Libpod, specGen, false, nil)
if err != nil {
@ -792,7 +802,7 @@ func (ic *ContainerEngine) playKubePod(ctx context.Context, podName string, podY
return nil, nil, err
}
for _, w := range warn {
fmt.Fprintf(os.Stderr, "%s\n", w)
logrus.Warn(w)
}
specGen.RawImageName = container.Image

View File

@ -2210,7 +2210,7 @@ var _ = Describe("Podman play kube", func() {
// With annotation set to always
It("podman play kube test with init containers and annotation set", func() {
// With the init container type annotation set to always
pod := getPod(withAnnotation("io.podman.annotations.init.container.type", "always"), withPodInitCtr(getCtr(withImage(ALPINE), withCmd([]string{"echo", "hello"}), withInitCtr(), withName("init-test"))), withCtr(getCtr(withImage(ALPINE), withCmd([]string{"top"}))))
pod := getPod(withAnnotation("io.podman.annotations.init.container.type", "always"), withPodInitCtr(getCtr(withImage(ALPINE), withCmd([]string{"printenv", "container"}), withInitCtr(), withName("init-test"))), withCtr(getCtr(withImage(ALPINE), withCmd([]string{"top"}))))
err := generateKubeYaml("pod", pod, kubeYaml)
Expect(err).ToNot(HaveOccurred())
@ -2233,6 +2233,12 @@ var _ = Describe("Podman play kube", func() {
inspect.WaitWithDefaultTimeout()
Expect(inspect).Should(Exit(0))
Expect(inspect.OutputToString()).To(ContainSubstring("running"))
// Init containers need environment too! #18384
logs := podmanTest.Podman([]string{"logs", "testPod-init-test"})
logs.WaitWithDefaultTimeout()
Expect(logs).Should(Exit(0))
Expect(logs.OutputToString()).To(Equal("podman"))
})
// If you have an init container in the pod yaml, podman should create and run the init container with play kube