Skip to content

Commit

Permalink
Merge pull request #11982 from umohnani8/targetPort
Browse files Browse the repository at this point in the history
Set targetPort to the port value in the kube yaml
  • Loading branch information
openshift-merge-robot authored Oct 15, 2021
2 parents 3f6fd8a + 8db62d0 commit 673cc50
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 21 deletions.
10 changes: 6 additions & 4 deletions libpod/kube.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
v12 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
)

// GenerateForKube takes a slice of libpod containers and generates
Expand Down Expand Up @@ -196,10 +197,11 @@ func containerPortsToServicePorts(containerPorts []v1.ContainerPort) []v1.Servic
for _, cp := range containerPorts {
nodePort := 30000 + rand.Intn(32767-30000+1)
servicePort := v1.ServicePort{
Protocol: cp.Protocol,
Port: cp.ContainerPort,
NodePort: int32(nodePort),
Name: strconv.Itoa(int(cp.ContainerPort)),
Protocol: cp.Protocol,
Port: cp.ContainerPort,
NodePort: int32(nodePort),
Name: strconv.Itoa(int(cp.ContainerPort)),
TargetPort: intstr.Parse(strconv.Itoa(int(cp.ContainerPort))),
}
sps = append(sps, servicePort)
}
Expand Down
50 changes: 33 additions & 17 deletions test/e2e/generate_kube_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"os"
"path/filepath"
"strconv"
"strings"

"github.com/containers/podman/v3/libpod/define"

Expand Down Expand Up @@ -119,20 +120,28 @@ var _ = Describe("Podman generate kube", func() {
Expect(kube.OutputToString()).To(ContainSubstring("type: foo_bar_t"))
})

It("podman generate service kube on container", func() {
session := podmanTest.RunTopContainer("top")
It("podman generate service kube on container - targetPort should match port name", func() {
session := podmanTest.Podman([]string{"create", "--name", "test-ctr", "-p", "3890:3890", ALPINE, "ls"})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))

kube := podmanTest.Podman([]string{"generate", "kube", "-s", "top"})
kube := podmanTest.Podman([]string{"generate", "kube", "-s", "test-ctr"})
kube.WaitWithDefaultTimeout()
Expect(kube).Should(Exit(0))

// TODO - test generated YAML - service produces multiple
// structs.
// pod := new(v1.Pod)
// err := yaml.Unmarshal([]byte(kube.OutputToString()), pod)
// Expect(err).To(BeNil())
// Separate out the Service and Pod yaml
arr := strings.Split(string(kube.Out.Contents()), "---")
Expect(len(arr)).To(Equal(2))

svc := new(v1.Service)
err := yaml.Unmarshal([]byte(arr[0]), svc)
Expect(err).To(BeNil())
Expect(len(svc.Spec.Ports)).To(Equal(1))
Expect(svc.Spec.Ports[0].TargetPort.IntValue()).To(Equal(3890))

pod := new(v1.Pod)
err = yaml.Unmarshal([]byte(arr[1]), pod)
Expect(err).To(BeNil())
})

It("podman generate kube on pod", func() {
Expand Down Expand Up @@ -315,21 +324,28 @@ var _ = Describe("Podman generate kube", func() {
})

It("podman generate service kube on pod", func() {
_, rc, _ := podmanTest.CreatePod(map[string][]string{"--name": {"toppod"}})
Expect(rc).To(Equal(0))

session := podmanTest.RunTopContainerInPod("topcontainer", "toppod")
session := podmanTest.Podman([]string{"create", "--pod", "new:test-pod", "-p", "4000:4000/udp", ALPINE, "ls"})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))

kube := podmanTest.Podman([]string{"generate", "kube", "-s", "toppod"})
kube := podmanTest.Podman([]string{"generate", "kube", "-s", "test-pod"})
kube.WaitWithDefaultTimeout()
Expect(kube).Should(Exit(0))

// 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())
// Separate out the Service and Pod yaml
arr := strings.Split(string(kube.Out.Contents()), "---")
Expect(len(arr)).To(Equal(2))

svc := new(v1.Service)
err := yaml.Unmarshal([]byte(arr[0]), svc)
Expect(err).To(BeNil())
Expect(len(svc.Spec.Ports)).To(Equal(1))
Expect(svc.Spec.Ports[0].TargetPort.IntValue()).To(Equal(4000))
Expect(svc.Spec.Ports[0].Protocol).To(Equal(v1.ProtocolUDP))

pod := new(v1.Pod)
err = yaml.Unmarshal([]byte(arr[1]), pod)
Expect(err).To(BeNil())
})

It("podman generate kube on pod with restartPolicy", func() {
Expand Down

0 comments on commit 673cc50

Please sign in to comment.