summaryrefslogtreecommitdiff
path: root/test/e2e/play_kube_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/e2e/play_kube_test.go')
-rw-r--r--test/e2e/play_kube_test.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/e2e/play_kube_test.go b/test/e2e/play_kube_test.go
index fa30f068c..15bd10616 100644
--- a/test/e2e/play_kube_test.go
+++ b/test/e2e/play_kube_test.go
@@ -12,6 +12,7 @@ import (
"time"
"github.com/containers/common/pkg/config"
+ "github.com/containers/podman/v3/libpod/define"
"github.com/containers/podman/v3/pkg/util"
. "github.com/containers/podman/v3/test/utils"
"github.com/containers/storage/pkg/stringid"
@@ -263,6 +264,17 @@ spec:
{{ end }}
ip: {{ .IP }}
{{ end }}
+ initContainers:
+{{ with .InitCtrs }}
+ {{ range . }}
+ - command:
+ {{ range .Cmd }}
+ - {{.}}
+ {{ end }}
+ image: {{ .Image }}
+ name: {{ .Name }}
+ {{ end }}
+{{ end }}
containers:
{{ with .Ctrs }}
{{ range . }}
@@ -665,6 +677,7 @@ type Pod struct {
HostNetwork bool
HostAliases []HostAlias
Ctrs []*Ctr
+ InitCtrs []*Ctr
Volumes []*Volume
Labels map[string]string
Annotations map[string]string
@@ -686,6 +699,7 @@ func getPod(options ...podOption) *Pod {
HostNetwork: false,
HostAliases: nil,
Ctrs: make([]*Ctr, 0),
+ InitCtrs: make([]*Ctr, 0),
Volumes: make([]*Volume, 0),
Labels: make(map[string]string),
Annotations: make(map[string]string),
@@ -728,6 +742,12 @@ func withCtr(c *Ctr) podOption {
}
}
+func withPodInitCtr(ic *Ctr) podOption {
+ return func(pod *Pod) {
+ pod.InitCtrs = append(pod.InitCtrs, ic)
+ }
+}
+
func withRestartPolicy(policy string) podOption {
return func(pod *Pod) {
pod.RestartPolicy = policy
@@ -847,6 +867,7 @@ type Ctr struct {
VolumeReadOnly bool
Env []Env
EnvFrom []EnvFrom
+ InitCtrType string
}
// getCtr takes a list of ctrOptions and returns a Ctr with sane defaults
@@ -870,6 +891,7 @@ func getCtr(options ...ctrOption) *Ctr {
VolumeReadOnly: false,
Env: []Env{},
EnvFrom: []EnvFrom{},
+ InitCtrType: "",
}
for _, option := range options {
option(&c)
@@ -885,6 +907,12 @@ func withName(name string) ctrOption {
}
}
+func withInitCtr() ctrOption {
+ return func(c *Ctr) {
+ c.InitCtrType = define.AlwaysInitContainer
+ }
+}
+
func withCmd(cmd []string) ctrOption {
return func(c *Ctr) {
c.Cmd = cmd
@@ -1294,6 +1322,33 @@ var _ = Describe("Podman play kube", func() {
Expect(inspect.OutputToString()).To(ContainSubstring(`[]`))
})
+ // If you have an init container in the pod yaml, podman should create and run the init container with play kube
+ It("podman play kube test with init containers", func() {
+ pod := getPod(withPodInitCtr(getCtr(withImage(ALPINE), withCmd([]string{"echo", "hello"}), withInitCtr(), withName("init-test"))), withCtr(getCtr(withImage(ALPINE), withCmd([]string{"top"}))))
+ err := generateKubeYaml("pod", pod, kubeYaml)
+ Expect(err).To(BeNil())
+
+ kube := podmanTest.Podman([]string{"play", "kube", kubeYaml})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube).Should(Exit(0))
+
+ // Expect the number of containers created to be 3, one init, infra, and regular container
+ numOfCtrs := podmanTest.NumberOfContainers()
+ Expect(numOfCtrs).To(Equal(3))
+
+ // Init container should have exited after running
+ inspect := podmanTest.Podman([]string{"inspect", "--format", "{{.State.Status}}", "testPod-init-test"})
+ inspect.WaitWithDefaultTimeout()
+ Expect(inspect).Should(Exit(0))
+ Expect(inspect.OutputToString()).To(ContainSubstring("exited"))
+
+ // Regular container should be in running state
+ inspect = podmanTest.Podman([]string{"inspect", "--format", "{{.State.Status}}", "testPod-" + defaultCtrName})
+ inspect.WaitWithDefaultTimeout()
+ Expect(inspect).Should(Exit(0))
+ Expect(inspect.OutputToString()).To(ContainSubstring("running"))
+ })
+
// If you supply only args for a Container, the default Entrypoint defined in the Docker image is run with the args that you supplied.
It("podman play kube test correct command with only set args in yaml file", func() {
pod := getPod(withCtr(getCtr(withImage(registry), withCmd(nil), withArg([]string{"echo", "hello"}))))