From 6f61326cdb76a8da89be37c5f3b3efce4e5ecbfd Mon Sep 17 00:00:00 2001 From: nikhiljindal Date: Wed, 7 Oct 2015 15:28:39 -0700 Subject: [PATCH] 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)