summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Petrausch <chrobbert@gmail.com>2022-01-01 14:03:34 +0100
committerChristoph Petrausch <chrobbert@gmail.com>2022-01-06 16:48:20 +0100
commit4191616cc567d553776001d640e7f2d945a4fae7 (patch)
tree7ebabd5b81e0dec7accce58d14db8bccf9f2bf54
parentc0b3df805999551db1da8ec2866457c555e627c7 (diff)
downloadpodman-4191616cc567d553776001d640e7f2d945a4fae7.tar.gz
podman-4191616cc567d553776001d640e7f2d945a4fae7.tar.bz2
podman-4191616cc567d553776001d640e7f2d945a4fae7.zip
Don't rename pod if container has the same name
We enforce the naming scheme "<podname>-<containername>" here [1]. Therefore we must not rename the pod in case of a naming conflict between pod name and container name. Not renaming the pod increases the usability for the user and easies scripting based on the name. Otherwise a user must set some label to reliable find a pod after creation. Or have to implement the renaming logic in the script. [1] https://github.com/containers/podman/blob/main/pkg/specgen/generate/kube/kube.go#L140 Fixes #12722 Signed-off-by: Christoph Petrausch <chrobbert@gmail.com>
-rw-r--r--pkg/domain/infra/abi/play.go9
-rw-r--r--test/e2e/play_kube_test.go58
2 files changed, 59 insertions, 8 deletions
diff --git a/pkg/domain/infra/abi/play.go b/pkg/domain/infra/abi/play.go
index 6b3b04a0b..40c31b163 100644
--- a/pkg/domain/infra/abi/play.go
+++ b/pkg/domain/infra/abi/play.go
@@ -178,17 +178,10 @@ func (ic *ContainerEngine) playKubePod(ctx context.Context, podName string, podY
return nil, err
}
- // check for name collision between pod and container
+ // Assert the pod has a name
if podName == "" {
return nil, errors.Errorf("pod does not have a name")
}
- for _, n := range podYAML.Spec.Containers {
- if n.Name == podName {
- playKubePod.Logs = append(playKubePod.Logs,
- fmt.Sprintf("a container exists with the same name (%q) as the pod in your YAML file; changing pod name to %s_pod\n", podName, podName))
- podName = fmt.Sprintf("%s_pod", podName)
- }
- }
podOpt := entities.PodCreateOptions{Infra: true, Net: &entities.NetOptions{NoHosts: options.NoHosts}}
podOpt, err = kube.ToPodOpt(ctx, podName, podOpt, podYAML)
diff --git a/test/e2e/play_kube_test.go b/test/e2e/play_kube_test.go
index f79710ee6..1c7eb09a4 100644
--- a/test/e2e/play_kube_test.go
+++ b/test/e2e/play_kube_test.go
@@ -37,6 +37,31 @@ metadata:
spec:
hostname: unknown
`
+
+var podnameEqualsContainerNameYaml = `
+apiVersion: v1
+kind: Pod
+metadata:
+ name: podnameEqualsContainerNameYaml
+spec:
+ containers:
+ - name: podnameEqualsContainerNameYaml
+ image: quay.io/libpod/alpine:latest
+ ports:
+ - containerPort: 80
+`
+
+var podWithoutAName = `
+apiVersion: v1
+kind: Pod
+spec:
+ containers:
+ - name: podDoesntHaveAName
+ image: quay.io/libpod/alpine:latest
+ ports:
+ - containerPort: 80
+`
+
var checkInfraImagePodYaml = `
apiVersion: v1
kind: Pod
@@ -1278,6 +1303,39 @@ var _ = Describe("Podman play kube", func() {
Expect(sharednamespaces).To(ContainSubstring("pid"))
})
+ It("podman play kube should not rename pod if container in pod has same name", func() {
+ err := writeYaml(podnameEqualsContainerNameYaml, kubeYaml)
+ Expect(err).To(BeNil())
+
+ kube := podmanTest.Podman([]string{"play", "kube", kubeYaml})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube).Should(Exit(0))
+
+ testPodCreated := podmanTest.Podman([]string{"pod", "exists", "podnameEqualsContainerNameYaml"})
+ testPodCreated.WaitWithDefaultTimeout()
+ Expect(testPodCreated).Should(Exit(0))
+
+ inspect := podmanTest.Podman([]string{"inspect", "podnameEqualsContainerNameYaml"})
+ inspect.WaitWithDefaultTimeout()
+ podInspect := inspect.InspectPodArrToJSON()
+ Expect(podInspect).Should(HaveLen(1))
+ var containerNames []string
+ for _, container := range podInspect[0].Containers {
+ containerNames = append(containerNames, container.Name)
+ }
+ Expect(containerNames).To(ContainElement("podnameEqualsContainerNameYaml-podnameEqualsContainerNameYaml"))
+ })
+
+ It("podman play kube should error if pod dont have a name", func() {
+ err := writeYaml(podWithoutAName, kubeYaml)
+ Expect(err).To(BeNil())
+
+ kube := podmanTest.Podman([]string{"play", "kube", kubeYaml})
+ kube.WaitWithDefaultTimeout()
+ Expect(kube).Should(Exit(125))
+
+ })
+
It("podman play kube support container liveness probe", func() {
err := writeYaml(livenessProbePodYaml, kubeYaml)
Expect(err).To(BeNil())