mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
Merge pull request #15267 from nikhiljindal/deploymentRCSelector
Deployment: Fixing the selector for new RC created by deployment
This commit is contained in:
commit
00eb2e7bfc
@ -44,6 +44,19 @@ func addDefaultingFuncs() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
func(obj *Deployment) {
|
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.
|
// Set DeploymentSpec.Replicas to 1 if it is not set.
|
||||||
if obj.Spec.Replicas == nil {
|
if obj.Spec.Replicas == nil {
|
||||||
obj.Spec.Replicas = new(int)
|
obj.Spec.Replicas = new(int)
|
||||||
|
@ -140,6 +140,9 @@ func (d *DeploymentController) getNewRC(deployment extensions.Deployment) (*api.
|
|||||||
podTemplateSpecHash := deploymentUtil.GetPodTemplateSpecHash(deployment.Spec.Template)
|
podTemplateSpecHash := deploymentUtil.GetPodTemplateSpecHash(deployment.Spec.Template)
|
||||||
rcName := fmt.Sprintf("deploymentrc-%d", podTemplateSpecHash)
|
rcName := fmt.Sprintf("deploymentrc-%d", podTemplateSpecHash)
|
||||||
newRCTemplate := deploymentUtil.GetNewRCTemplate(deployment)
|
newRCTemplate := deploymentUtil.GetNewRCTemplate(deployment)
|
||||||
|
// Add podTemplateHash label to selector.
|
||||||
|
newRCSelector := deploymentUtil.CloneAndAddLabel(deployment.Spec.Selector, deployment.Spec.UniqueLabelKey, podTemplateSpecHash)
|
||||||
|
|
||||||
newRC := api.ReplicationController{
|
newRC := api.ReplicationController{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
Name: rcName,
|
Name: rcName,
|
||||||
@ -147,7 +150,7 @@ func (d *DeploymentController) getNewRC(deployment extensions.Deployment) (*api.
|
|||||||
},
|
},
|
||||||
Spec: api.ReplicationControllerSpec{
|
Spec: api.ReplicationControllerSpec{
|
||||||
Replicas: 0,
|
Replicas: 0,
|
||||||
Selector: newRCTemplate.ObjectMeta.Labels,
|
Selector: newRCSelector,
|
||||||
Template: newRCTemplate,
|
Template: newRCTemplate,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -90,18 +90,29 @@ func GetNewRCTemplate(deployment extensions.Deployment) *api.PodTemplateSpec {
|
|||||||
ObjectMeta: deployment.Spec.Template.ObjectMeta,
|
ObjectMeta: deployment.Spec.Template.ObjectMeta,
|
||||||
Spec: deployment.Spec.Template.Spec,
|
Spec: deployment.Spec.Template.Spec,
|
||||||
}
|
}
|
||||||
podTemplateSpecHash := GetPodTemplateSpecHash(newRCTemplate)
|
newRCTemplate.ObjectMeta.Labels = CloneAndAddLabel(
|
||||||
if deployment.Spec.UniqueLabelKey != "" {
|
deployment.Spec.Template.ObjectMeta.Labels,
|
||||||
newLabels := map[string]string{}
|
deployment.Spec.UniqueLabelKey,
|
||||||
for key, value := range deployment.Spec.Template.ObjectMeta.Labels {
|
GetPodTemplateSpecHash(newRCTemplate))
|
||||||
newLabels[key] = value
|
|
||||||
}
|
|
||||||
newLabels[deployment.Spec.UniqueLabelKey] = fmt.Sprintf("%d", podTemplateSpecHash)
|
|
||||||
newRCTemplate.ObjectMeta.Labels = newLabels
|
|
||||||
}
|
|
||||||
return 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 {
|
func GetPodTemplateSpecHash(template *api.PodTemplateSpec) uint32 {
|
||||||
podTemplateSpecHasher := adler32.New()
|
podTemplateSpecHasher := adler32.New()
|
||||||
util.DeepHashObject(podTemplateSpecHasher, template)
|
util.DeepHashObject(podTemplateSpecHasher, template)
|
||||||
|
Loading…
Reference in New Issue
Block a user