diff --git a/pkg/controller/controller.go b/pkg/controller/controller.go index c6f5fb0d3..5a9da79d2 100644 --- a/pkg/controller/controller.go +++ b/pkg/controller/controller.go @@ -395,11 +395,16 @@ func (c *RolloutController) podsNotMatchingUpdateRevision(sts *v1.StatefulSet) ( return nil, errors.New("updateRevision is empty") } - // Get any pods whose revision doesn't match the StatefulSet's updateRevision + // Create selector for all the pods selected by the Statefulset + podsSelector, err := metav1.LabelSelectorAsSelector(sts.Spec.Selector) + if err != nil { + panic(err) + } + + // Filter pods whose revision doesn't match the StatefulSet's updateRevision // and so it means they still need to be updated. - podsSelector := labels.NewSelector().Add( + podsSelector = podsSelector.Add( mustNewLabelsRequirement(v1.ControllerRevisionHashLabelKey, selection.NotEquals, []string{updateRev}), - mustNewLabelsRequirement("name", selection.Equals, []string{sts.Spec.Template.Labels["name"]}), ) pods, err := c.listPods(podsSelector) diff --git a/pkg/controller/controller_test.go b/pkg/controller/controller_test.go index 541476ad8..f983e375f 100644 --- a/pkg/controller/controller_test.go +++ b/pkg/controller/controller_test.go @@ -365,6 +365,11 @@ func TestRolloutController_ReconcileShouldDeleteMetricsForDecommissionedRolloutG } func mockStatefulSet(name string, overrides ...func(sts *v1.StatefulSet)) *v1.StatefulSet { + labelSelector := metav1.LabelSelector{ + MatchLabels: map[string]string{ + "name": name, + }, + }; sts := &v1.StatefulSet{ ObjectMeta: metav1.ObjectMeta{ Name: name, @@ -387,6 +392,7 @@ func mockStatefulSet(name string, overrides ...func(sts *v1.StatefulSet)) *v1.St }, }, }, + Selector: &labelSelector, }, Status: v1.StatefulSetStatus{ Replicas: 3,