summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorUrvashi Mohnani <umohnani@redhat.com>2022-05-10 13:23:46 -0400
committerUrvashi Mohnani <umohnani@redhat.com>2022-07-08 11:21:48 -0400
commit81a19a568f6234be47882b1c2b066a637749fd39 (patch)
treeb0877e3ff18651d297838a21bcd1cd95ce23251d /test
parent49df3cc5cb7e6a1d9e28cacfa86562abbdf48fd9 (diff)
downloadpodman-81a19a568f6234be47882b1c2b066a637749fd39.tar.gz
podman-81a19a568f6234be47882b1c2b066a637749fd39.tar.bz2
podman-81a19a568f6234be47882b1c2b066a637749fd39.zip
Add ports and hostname correctly in kube yaml
If a pod is created without net sharing, allow adding separate ports for each container to the kube yaml and also set the pod level hostname correctly if the uts namespace is not being shared. Add a warning if the default namespace sharing options have been modified by the user. Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
Diffstat (limited to 'test')
-rw-r--r--test/e2e/generate_kube_test.go103
1 files changed, 103 insertions, 0 deletions
diff --git a/test/e2e/generate_kube_test.go b/test/e2e/generate_kube_test.go
index 2ca774a03..845aa60ce 100644
--- a/test/e2e/generate_kube_test.go
+++ b/test/e2e/generate_kube_test.go
@@ -328,6 +328,109 @@ var _ = Describe("Podman generate kube", func() {
Expect(pod.Spec.HostAliases[1]).To(HaveField("IP", testIP))
})
+ It("podman generate kube with network sharing", func() {
+ // Expect error with default sharing options as Net namespace is shared
+ podName := "testPod"
+ podSession := podmanTest.Podman([]string{"pod", "create", "--name", podName})
+ podSession.WaitWithDefaultTimeout()
+ Expect(podSession).Should(Exit(0))
+
+ ctrSession := podmanTest.Podman([]string{"create", "--name", "testCtr", "--pod", podName, "-p", "9000:8000", ALPINE, "top"})
+ ctrSession.WaitWithDefaultTimeout()
+ Expect(ctrSession).Should(Exit(125))
+
+ // Ports without Net sharing should work with ports being set for each container in the generated kube yaml
+ podName = "testNet"
+ podSession = podmanTest.Podman([]string{"pod", "create", "--name", podName, "--share", "ipc"})
+ podSession.WaitWithDefaultTimeout()
+ Expect(podSession).Should(Exit(0))
+
+ ctr1Name := "ctr1"
+ ctr1Session := podmanTest.Podman([]string{"create", "--name", ctr1Name, "--pod", podName, "-p", "9000:8000", ALPINE, "top"})
+ ctr1Session.WaitWithDefaultTimeout()
+ Expect(ctr1Session).Should(Exit(0))
+
+ ctr2Name := "ctr2"
+ ctr2Session := podmanTest.Podman([]string{"create", "--name", ctr2Name, "--pod", podName, "-p", "6000:5000", ALPINE, "top"})
+ ctr2Session.WaitWithDefaultTimeout()
+ Expect(ctr2Session).Should(Exit(0))
+
+ kube := podmanTest.Podman([]string{"generate", "kube", podName})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube).Should(Exit(0))
+
+ pod := new(v1.Pod)
+ err := yaml.Unmarshal(kube.Out.Contents(), pod)
+ Expect(err).To(BeNil())
+ Expect(pod.Spec.Containers).To(HaveLen(2))
+ Expect(pod.Spec.Containers[0].Ports[0].ContainerPort).To(Equal(int32(8000)))
+ Expect(pod.Spec.Containers[1].Ports[0].ContainerPort).To(Equal(int32(5000)))
+ Expect(pod.Spec.Containers[0].Ports[0].HostPort).To(Equal(int32(9000)))
+ Expect(pod.Spec.Containers[1].Ports[0].HostPort).To(Equal(int32(6000)))
+ })
+
+ It("podman generate kube with and without hostname", func() {
+ // Expect error with default sharing options as UTS namespace is shared
+ podName := "testPod"
+ podSession := podmanTest.Podman([]string{"pod", "create", "--name", podName})
+ podSession.WaitWithDefaultTimeout()
+ Expect(podSession).Should(Exit(0))
+
+ ctrSession := podmanTest.Podman([]string{"create", "--name", "testCtr", "--pod", podName, "--hostname", "test-hostname", ALPINE, "top"})
+ ctrSession.WaitWithDefaultTimeout()
+ Expect(ctrSession).Should(Exit(125))
+
+ // Hostname without uts sharing should work, but generated kube yaml will have pod hostname
+ // set to the hostname of the first container
+ podName = "testHostname"
+ podSession = podmanTest.Podman([]string{"pod", "create", "--name", podName, "--share", "ipc"})
+ podSession.WaitWithDefaultTimeout()
+ Expect(podSession).Should(Exit(0))
+
+ ctr1Name := "ctr1"
+ ctr1HostName := "ctr1-hostname"
+ ctr1Session := podmanTest.Podman([]string{"create", "--name", ctr1Name, "--pod", podName, "--hostname", ctr1HostName, ALPINE, "top"})
+ ctr1Session.WaitWithDefaultTimeout()
+ Expect(ctr1Session).Should(Exit(0))
+
+ ctr2Name := "ctr2"
+ ctr2Session := podmanTest.Podman([]string{"create", "--name", ctr2Name, "--pod", podName, ALPINE, "top"})
+ ctr2Session.WaitWithDefaultTimeout()
+ Expect(ctr2Session).Should(Exit(0))
+
+ kube := podmanTest.Podman([]string{"generate", "kube", podName})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube).Should(Exit(0))
+
+ pod := new(v1.Pod)
+ err := yaml.Unmarshal(kube.Out.Contents(), pod)
+ Expect(err).To(BeNil())
+ Expect(pod.Spec.Containers).To(HaveLen(2))
+ Expect(pod.Spec.Hostname).To(Equal(ctr1HostName))
+
+ // No hostname
+
+ podName = "testNoHostname"
+ podSession = podmanTest.Podman([]string{"pod", "create", "--name", podName, "--share", "ipc"})
+ podSession.WaitWithDefaultTimeout()
+ Expect(podSession).Should(Exit(0))
+
+ ctr3Name := "ctr3"
+ ctr3Session := podmanTest.Podman([]string{"create", "--name", ctr3Name, "--pod", podName, ALPINE, "top"})
+ ctr3Session.WaitWithDefaultTimeout()
+ Expect(ctr3Session).Should(Exit(0))
+
+ kube = podmanTest.Podman([]string{"generate", "kube", podName})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube).Should(Exit(0))
+
+ pod = new(v1.Pod)
+ err = yaml.Unmarshal(kube.Out.Contents(), pod)
+ Expect(err).To(BeNil())
+ Expect(pod.Spec.Containers).To(HaveLen(1))
+ Expect(pod.Spec.Hostname).To(BeEmpty())
+ })
+
It("podman generate service kube on pod", func() {
session := podmanTest.Podman([]string{"create", "--pod", "new:test-pod", "-p", "4000:4000/udp", ALPINE, "ls"})
session.WaitWithDefaultTimeout()