From 5db45e12d545c69176ead8a4e866ab303776ed5e Mon Sep 17 00:00:00 2001 From: zhouya0 Date: Thu, 26 Dec 2019 14:42:00 +0800 Subject: [PATCH] fix kubectl create deployment image name --- .../src/k8s.io/kubectl/pkg/generate/versioned/BUILD | 1 + .../kubectl/pkg/generate/versioned/deployment.go | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/staging/src/k8s.io/kubectl/pkg/generate/versioned/BUILD b/staging/src/k8s.io/kubectl/pkg/generate/versioned/BUILD index ee7c3d04a0b..755e70c8464 100644 --- a/staging/src/k8s.io/kubectl/pkg/generate/versioned/BUILD +++ b/staging/src/k8s.io/kubectl/pkg/generate/versioned/BUILD @@ -44,6 +44,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/rand:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/client-go/discovery:go_default_library", diff --git a/staging/src/k8s.io/kubectl/pkg/generate/versioned/deployment.go b/staging/src/k8s.io/kubectl/pkg/generate/versioned/deployment.go index 9878f2cd8f5..c6bae8885df 100644 --- a/staging/src/k8s.io/kubectl/pkg/generate/versioned/deployment.go +++ b/staging/src/k8s.io/kubectl/pkg/generate/versioned/deployment.go @@ -26,6 +26,7 @@ import ( extensionsv1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + utilrand "k8s.io/apimachinery/pkg/util/rand" "k8s.io/kubectl/pkg/generate" ) @@ -84,11 +85,23 @@ func buildPodSpec(images []string) v1.PodSpec { if strings.Contains(name, "@") { name = strings.Split(name, "@")[0] } + name = sanitizeAndUniquify(name) podSpec.Containers = append(podSpec.Containers, v1.Container{Name: name, Image: imageString}) } return podSpec } +// sanitizeAndUniquify: replaces characters like "." or "_" into "-" to follow DNS1123 rules. +// Then add random suffix to make it uniquified. +func sanitizeAndUniquify(name string) string { + if strings.Contains(name, "_") || strings.Contains(name, ".") { + name = strings.Replace(name, "_", "-", -1) + name = strings.Replace(name, ".", "-", -1) + name = fmt.Sprintf("%s-%s", name, utilrand.String(5)) + } + return name +} + // DeploymentBasicGeneratorV1 supports stable generation of a deployment type DeploymentBasicGeneratorV1 struct { BaseDeploymentGenerator