summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2019-06-25 20:21:24 +0200
committerGitHub <noreply@github.com>2019-06-25 20:21:24 +0200
commita488e197a6e3947dd420b40ed834b50db9c829c3 (patch)
tree202e7144d2e1258e9a8452526754f4c8a3ab3220
parent21978c99088c04bcc847eb12f829876708c0b9e2 (diff)
parent068d3bb3bfe4fb68fee6ecbef13469e36e4a9a04 (diff)
downloadpodman-a488e197a6e3947dd420b40ed834b50db9c829c3.tar.gz
podman-a488e197a6e3947dd420b40ed834b50db9c829c3.tar.bz2
podman-a488e197a6e3947dd420b40ed834b50db9c829c3.zip
Merge pull request #3417 from mheon/fix_play_kube_ports
Only include ports in one container in Kube YAML
-rw-r--r--libpod/kube.go5
-rw-r--r--test/e2e/generate_kube_test.go73
2 files changed, 73 insertions, 5 deletions
diff --git a/libpod/kube.go b/libpod/kube.go
index c5fd9d75c..283662059 100644
--- a/libpod/kube.go
+++ b/libpod/kube.go
@@ -138,6 +138,11 @@ func (p *Pod) podWithContainers(containers []*Container, ports []v1.ContainerPor
if err != nil {
return nil, err
}
+
+ // Since port bindings for the pod are handled by the
+ // infra container, wipe them here.
+ result.Ports = nil
+
// We add the original port declarations from the libpod infra container
// to the first kubernetes container description because otherwise we loose
// the original container/port bindings.
diff --git a/test/e2e/generate_kube_test.go b/test/e2e/generate_kube_test.go
index 40cc534c2..1df54f753 100644
--- a/test/e2e/generate_kube_test.go
+++ b/test/e2e/generate_kube_test.go
@@ -10,6 +10,7 @@ import (
"github.com/ghodss/yaml"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
+ "k8s.io/api/core/v1"
)
var _ = Describe("Podman generate kube", func() {
@@ -57,8 +58,15 @@ var _ = Describe("Podman generate kube", func() {
kube.WaitWithDefaultTimeout()
Expect(kube.ExitCode()).To(Equal(0))
- _, err := yaml.Marshal(kube.OutputToString())
+ pod := new(v1.Pod)
+ err := yaml.Unmarshal(kube.Out.Contents(), pod)
Expect(err).To(BeNil())
+
+ numContainers := 0
+ for range pod.Spec.Containers {
+ numContainers = numContainers + 1
+ }
+ Expect(numContainers).To(Equal(1))
})
It("podman generate service kube on container", func() {
@@ -70,8 +78,11 @@ var _ = Describe("Podman generate kube", func() {
kube.WaitWithDefaultTimeout()
Expect(kube.ExitCode()).To(Equal(0))
- _, err := yaml.Marshal(kube.OutputToString())
- Expect(err).To(BeNil())
+ // TODO - test generated YAML - service produces multiple
+ // structs.
+ // pod := new(v1.Pod)
+ // err := yaml.Unmarshal([]byte(kube.OutputToString()), pod)
+ // Expect(err).To(BeNil())
})
It("podman generate kube on pod", func() {
@@ -86,8 +97,15 @@ var _ = Describe("Podman generate kube", func() {
kube.WaitWithDefaultTimeout()
Expect(kube.ExitCode()).To(Equal(0))
- _, err := yaml.Marshal(kube.OutputToString())
+ pod := new(v1.Pod)
+ err := yaml.Unmarshal(kube.Out.Contents(), pod)
Expect(err).To(BeNil())
+
+ numContainers := 0
+ for range pod.Spec.Containers {
+ numContainers = numContainers + 1
+ }
+ Expect(numContainers).To(Equal(1))
})
It("podman generate service kube on pod", func() {
@@ -102,8 +120,53 @@ var _ = Describe("Podman generate kube", func() {
kube.WaitWithDefaultTimeout()
Expect(kube.ExitCode()).To(Equal(0))
- _, err := yaml.Marshal(kube.OutputToString())
+ // TODO: How do we test unmarshal with a service? We have two
+ // structs that need to be unmarshalled...
+ // _, err := yaml.Marshal(kube.OutputToString())
+ // Expect(err).To(BeNil())
+ })
+
+ It("podman generate kube on pod with ports", func() {
+ podName := "test"
+ podSession := podmanTest.Podman([]string{"pod", "create", "--name", podName, "-p", "4000:4000", "-p", "5000:5000"})
+ podSession.WaitWithDefaultTimeout()
+ Expect(podSession.ExitCode()).To(Equal(0))
+
+ ctr1Name := "ctr1"
+ ctr1Session := podmanTest.Podman([]string{"create", "--name", ctr1Name, "--pod", podName, ALPINE, "top"})
+ ctr1Session.WaitWithDefaultTimeout()
+ Expect(ctr1Session.ExitCode()).To(Equal(0))
+
+ ctr2Name := "ctr2"
+ ctr2Session := podmanTest.Podman([]string{"create", "--name", ctr2Name, "--pod", podName, ALPINE, "top"})
+ ctr2Session.WaitWithDefaultTimeout()
+ Expect(ctr2Session.ExitCode()).To(Equal(0))
+
+ kube := podmanTest.Podman([]string{"generate", "kube", podName})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube.ExitCode()).To(Equal(0))
+
+ pod := new(v1.Pod)
+ err := yaml.Unmarshal(kube.Out.Contents(), pod)
Expect(err).To(BeNil())
+
+ foundPort4000 := 0
+ foundPort5000 := 0
+ foundOtherPort := 0
+ for _, ctr := range pod.Spec.Containers {
+ for _, port := range ctr.Ports {
+ if port.HostPort == 4000 {
+ foundPort4000 = foundPort4000 + 1
+ } else if port.HostPort == 5000 {
+ foundPort5000 = foundPort5000 + 1
+ } else {
+ foundOtherPort = foundOtherPort + 1
+ }
+ }
+ }
+ Expect(foundPort4000).To(Equal(1))
+ Expect(foundPort5000).To(Equal(1))
+ Expect(foundOtherPort).To(Equal(0))
})
It("podman generate and reimport kube on pod", func() {