Skip to content

Commit

Permalink
Fix invalid pod name and hostname during kube generate
Browse files Browse the repository at this point in the history
Kube generate on pods was not checking for any underscores
in the pod name so was creating a kube yaml with an invalid
pod name when there were underscores present.
The hostname for the pod is set to the podname by default. There
is no need to set that to the container's name or the pod name
again in the generated yaml. So removed that field unless a hostname
was set for the container by the user.

Signed-off-by: Urvashi Mohnani <[email protected]>
  • Loading branch information
umohnani8 committed Apr 5, 2023
1 parent 89d186b commit d0ffb87
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 4 deletions.
7 changes: 4 additions & 3 deletions libpod/kube.go
Original file line number Diff line number Diff line change
Expand Up @@ -470,8 +470,8 @@ func (p *Pod) podWithContainers(ctx context.Context, containers []*Container, po
// Since hostname is only set at pod level, set the hostname to the hostname of the first container we encounter
if hostname == "" {
// Only set the hostname if it is not set to the truncated container ID, which we do by default if no
// hostname is specified for the container
if !strings.Contains(ctr.ID(), ctr.Hostname()) {
// hostname is specified for the container and if it is not set to the pod name.
if !strings.Contains(ctr.ID(), ctr.Hostname()) && ctr.Hostname() != p.Name() {
hostname = ctr.Hostname()
}
}
Expand Down Expand Up @@ -533,9 +533,10 @@ func (p *Pod) podWithContainers(ctx context.Context, containers []*Container, po
for _, vol := range deDupPodVolumes {
podVolumes = append(podVolumes, *vol)
}
podName := removeUnderscores(p.Name())

return newPodObject(
p.Name(),
podName,
podAnnotations,
podInitCtrs,
podContainers,
Expand Down
22 changes: 22 additions & 0 deletions test/e2e/generate_kube_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1485,4 +1485,26 @@ USER test1`
kube.WaitWithDefaultTimeout()
Expect(kube).Should(Exit(125))
})

It("podman generate kube on pod with invalid name", func() {
podName := "test_pod"
session := podmanTest.Podman([]string{"pod", "create", podName})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))

session = podmanTest.Podman([]string{"create", "--pod", podName, "--restart", "no", ALPINE, "top"})
session.WaitWithDefaultTimeout()
Expect(session).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).ToNot(HaveOccurred())
// The pod name should no longer have _ and there should be no hostname in the generated yaml
Expect(pod.Name).To(Equal("testpod"))
Expect(pod.Spec.Hostname).To(Equal(""))
})
})
2 changes: 1 addition & 1 deletion test/system/710-kube.bats
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ metadata.creationTimestamp | =~ | [0-9T:-]\\+Z
metadata.labels.app | = | ${pname}
metadata.name | = | ${pname}
spec.hostname | = | $pname
spec.hostname | = | null
spec.containers[0].command | = | [\"top\"]
spec.containers[0].image | = | $IMAGE
Expand Down

0 comments on commit d0ffb87

Please sign in to comment.