From 6f61326cdb76a8da89be37c5f3b3efce4e5ecbfd Mon Sep 17 00:00:00 2001 From: nikhiljindal Date: Wed, 7 Oct 2015 15:28:39 -0700 Subject: [PATCH 1/2] Fixing the selector for new RC created by deployment --- .../deployment/deployment_controller.go | 5 +++- pkg/util/deployment/deployment.go | 29 +++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/pkg/controller/deployment/deployment_controller.go b/pkg/controller/deployment/deployment_controller.go index c854ef28925..dbe5d32b796 100644 --- a/pkg/controller/deployment/deployment_controller.go +++ b/pkg/controller/deployment/deployment_controller.go @@ -140,6 +140,9 @@ func (d *DeploymentController) getNewRC(deployment extensions.Deployment) (*api. podTemplateSpecHash := deploymentUtil.GetPodTemplateSpecHash(deployment.Spec.Template) rcName := fmt.Sprintf("deploymentrc-%d", podTemplateSpecHash) newRCTemplate := deploymentUtil.GetNewRCTemplate(deployment) + // Add podTemplateHash label to selector. + newRCSelector := deploymentUtil.CloneAndAddLabel(deployment.Spec.Selector, deployment.Spec.UniqueLabelKey, podTemplateSpecHash) + newRC := api.ReplicationController{ ObjectMeta: api.ObjectMeta{ Name: rcName, @@ -147,7 +150,7 @@ func (d *DeploymentController) getNewRC(deployment extensions.Deployment) (*api. }, Spec: api.ReplicationControllerSpec{ Replicas: 0, - Selector: newRCTemplate.ObjectMeta.Labels, + Selector: newRCSelector, Template: newRCTemplate, }, } diff --git a/pkg/util/deployment/deployment.go b/pkg/util/deployment/deployment.go index 3598d43529c..c86a3670620 100644 --- a/pkg/util/deployment/deployment.go +++ b/pkg/util/deployment/deployment.go @@ -90,18 +90,29 @@ func GetNewRCTemplate(deployment extensions.Deployment) *api.PodTemplateSpec { ObjectMeta: deployment.Spec.Template.ObjectMeta, Spec: deployment.Spec.Template.Spec, } - podTemplateSpecHash := GetPodTemplateSpecHash(newRCTemplate) - if deployment.Spec.UniqueLabelKey != "" { - newLabels := map[string]string{} - for key, value := range deployment.Spec.Template.ObjectMeta.Labels { - newLabels[key] = value - } - newLabels[deployment.Spec.UniqueLabelKey] = fmt.Sprintf("%d", podTemplateSpecHash) - newRCTemplate.ObjectMeta.Labels = newLabels - } + newRCTemplate.ObjectMeta.Labels = CloneAndAddLabel( + deployment.Spec.Template.ObjectMeta.Labels, + deployment.Spec.UniqueLabelKey, + GetPodTemplateSpecHash(newRCTemplate)) return newRCTemplate } +// Clones the given map and returns a new map with the given key and value added. +// Returns the given map, if labelKey is empty. +func CloneAndAddLabel(labels map[string]string, labelKey string, labelValue uint32) map[string]string { + if labelKey == "" { + // Dont need to add a label. + return labels + } + // Clone. + newLabels := map[string]string{} + for key, value := range labels { + newLabels[key] = value + } + newLabels[labelKey] = fmt.Sprintf("%d", labelValue) + return newLabels +} + func GetPodTemplateSpecHash(template *api.PodTemplateSpec) uint32 { podTemplateSpecHasher := adler32.New() util.DeepHashObject(podTemplateSpecHasher, template) From 0829bcc8fc634255cacd247c60e69517e10b9db1 Mon Sep 17 00:00:00 2001 From: nikhiljindal Date: Thu, 8 Oct 2015 14:03:32 -0700 Subject: [PATCH 2/2] Defaulting deployment selector and label --- pkg/apis/extensions/v1beta1/defaults.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pkg/apis/extensions/v1beta1/defaults.go b/pkg/apis/extensions/v1beta1/defaults.go index 655e17310e4..2d6efb04845 100644 --- a/pkg/apis/extensions/v1beta1/defaults.go +++ b/pkg/apis/extensions/v1beta1/defaults.go @@ -44,6 +44,19 @@ func addDefaultingFuncs() { } }, func(obj *Deployment) { + // Default labels and selector to labels from pod template spec. + var labels map[string]string + if obj.Spec.Template != nil { + labels = obj.Spec.Template.Labels + } + if labels != nil { + if len(obj.Spec.Selector) == 0 { + obj.Spec.Selector = labels + } + if len(obj.Labels) == 0 { + obj.Labels = labels + } + } // Set DeploymentSpec.Replicas to 1 if it is not set. if obj.Spec.Replicas == nil { obj.Spec.Replicas = new(int)