From ed1ea8dea1b2738829a05dd3c3dbcf4b6744ad3f Mon Sep 17 00:00:00 2001
From: baude <bbaude@redhat.com>
Date: Tue, 26 Feb 2019 11:13:23 -0600
Subject: [PATCH] rename pod when we have a name collision with a container

when podman generate kube runs, it names the pod based on the first
container it finds. the resulting yaml file is perfectly acceptable
in a kubernetes environment.  But when replaying the YAML file
with podman, we cannot have a container and pod with the same name.
therefore, we rename the pod if find a collision to name_pod.

Signed-off-by: baude <bbaude@redhat.com>
---
 cmd/podman/play_kube.go | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/cmd/podman/play_kube.go b/cmd/podman/play_kube.go
index 1a45cbed9d..69a15ba8d8 100644
--- a/cmd/podman/play_kube.go
+++ b/cmd/podman/play_kube.go
@@ -90,8 +90,17 @@ func playKubeYAMLCmd(c *cliconfig.KubePlayValues) error {
 		return errors.Wrapf(err, "unable to read %s as YAML", args[0])
 	}
 
+	// check for name collision between pod and container
+	podName := podYAML.ObjectMeta.Name
+	for _, n := range podYAML.Spec.Containers {
+		if n.Name == podName {
+			fmt.Printf("a container exists with the same name (%s) as the pod in your YAML file; changing pod name to %s_pod\n", podName, podName)
+			podName = fmt.Sprintf("%s_pod", podName)
+		}
+	}
+
 	podOptions = append(podOptions, libpod.WithInfraContainer())
-	podOptions = append(podOptions, libpod.WithPodName(podYAML.ObjectMeta.Name))
+	podOptions = append(podOptions, libpod.WithPodName(podName))
 	// TODO for now we just used the default kernel namespaces; we need to add/subtract this from yaml
 
 	nsOptions, err := shared.GetNamespaceOptions(strings.Split(DefaultKernelNamespaces, ","))