cronjob_controllerv2: do not filter jobs to be reconciled by labels

This commit is contained in:
d-honeybadger 2022-01-30 08:28:11 -05:00
parent 2e68fd2857
commit fb094dc44e
2 changed files with 34 additions and 8 deletions

View File

@ -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
}

View File

@ -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) {