From fb094dc44eebfe343ef2b4a32166e1c52a99613c Mon Sep 17 00:00:00 2001 From: d-honeybadger Date: Sun, 30 Jan 2022 08:28:11 -0500 Subject: [PATCH] cronjob_controllerv2: do not filter jobs to be reconciled by labels --- .../cronjob/cronjob_controllerv2.go | 10 ++---- .../cronjob/cronjob_controllerv2_test.go | 32 ++++++++++++++++++- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/pkg/controller/cronjob/cronjob_controllerv2.go b/pkg/controller/cronjob/cronjob_controllerv2.go index a4aba34d03a..ca81b328ba9 100644 --- a/pkg/controller/cronjob/cronjob_controllerv2.go +++ b/pkg/controller/cronjob/cronjob_controllerv2.go @@ -231,13 +231,9 @@ func (jm *ControllerV2) resolveControllerRef(namespace string, controllerRef *me } func (jm *ControllerV2) getJobsToBeReconciled(cronJob *batchv1.CronJob) ([]*batchv1.Job, error) { - var jobSelector labels.Selector - if len(cronJob.Spec.JobTemplate.Labels) == 0 { - jobSelector = labels.Everything() - } else { - jobSelector = labels.Set(cronJob.Spec.JobTemplate.Labels).AsSelector() - } - jobList, err := jm.jobLister.Jobs(cronJob.Namespace).List(jobSelector) + // list all jobs: there may be jobs with labels that don't match the template anymore, + // but that still have a ControllerRef to the given cronjob + jobList, err := jm.jobLister.Jobs(cronJob.Namespace).List(labels.Everything()) if err != nil { return nil, err } diff --git a/pkg/controller/cronjob/cronjob_controllerv2_test.go b/pkg/controller/cronjob/cronjob_controllerv2_test.go index 38abc865e83..02db981617e 100644 --- a/pkg/controller/cronjob/cronjob_controllerv2_test.go +++ b/pkg/controller/cronjob/cronjob_controllerv2_test.go @@ -26,7 +26,7 @@ import ( "github.com/robfig/cron/v3" batchv1 "k8s.io/api/batch/v1" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -1067,6 +1067,36 @@ func TestControllerV2GetJobsToBeReconciled(t *testing.T) { }, expected: []*batchv1.Job{}, }, + { + name: "test getting jobs whose labels do not match job template", + cronJob: &batchv1.CronJob{ + ObjectMeta: metav1.ObjectMeta{Namespace: "foo-ns", Name: "fooer"}, + Spec: batchv1.CronJobSpec{JobTemplate: batchv1.JobTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"key": "value"}}, + }}, + }, + jobs: []runtime.Object{ + &batchv1.Job{ObjectMeta: metav1.ObjectMeta{ + Namespace: "foo-ns", + Name: "foo-fooer-owner-ref", + Labels: map[string]string{"key": "different-value"}, + OwnerReferences: []metav1.OwnerReference{{Name: "fooer", Controller: &trueRef}}}, + }, + &batchv1.Job{ObjectMeta: metav1.ObjectMeta{ + Namespace: "foo-ns", + Name: "foo-other-owner-ref", + Labels: map[string]string{"key": "different-value"}, + OwnerReferences: []metav1.OwnerReference{{Name: "another-cronjob", Controller: &trueRef}}}, + }, + }, + expected: []*batchv1.Job{{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "foo-ns", + Name: "foo-fooer-owner-ref", + Labels: map[string]string{"key": "different-value"}, + OwnerReferences: []metav1.OwnerReference{{Name: "fooer", Controller: &trueRef}}}, + }}, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {