From d72eebd3fcbdd148578eb4edbc776861777c48c9 Mon Sep 17 00:00:00 2001 From: Anthony Yeh Date: Sun, 26 Feb 2017 19:16:54 -0800 Subject: [PATCH] CronJob: Add ControllerRef on all created Jobs. --- pkg/controller/cronjob/BUILD | 1 + pkg/controller/cronjob/cronjob_controller.go | 3 +++ .../cronjob/cronjob_controller_test.go | 18 ++++++++++++++++++ pkg/controller/cronjob/utils.go | 18 +++++++++++++++--- 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/pkg/controller/cronjob/BUILD b/pkg/controller/cronjob/BUILD index 232d785e87..26cd161379 100644 --- a/pkg/controller/cronjob/BUILD +++ b/pkg/controller/cronjob/BUILD @@ -54,6 +54,7 @@ go_test( "//pkg/api/v1:go_default_library", "//pkg/apis/batch/v1:go_default_library", "//pkg/apis/batch/v2alpha1:go_default_library", + "//pkg/controller:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", diff --git a/pkg/controller/cronjob/cronjob_controller.go b/pkg/controller/cronjob/cronjob_controller.go index cbd02d1f03..cc664b5bca 100644 --- a/pkg/controller/cronjob/cronjob_controller.go +++ b/pkg/controller/cronjob/cronjob_controller.go @@ -56,6 +56,9 @@ import ( // Utilities for dealing with Jobs and CronJobs and time. +// controllerKind contains the schema.GroupVersionKind for this controller type. +var controllerKind = batchv2alpha1.SchemeGroupVersion.WithKind("CronJob") + type CronJobController struct { kubeClient clientset.Interface jobControl jobControlInterface diff --git a/pkg/controller/cronjob/cronjob_controller_test.go b/pkg/controller/cronjob/cronjob_controller_test.go index e18caca00c..b15e4b8703 100644 --- a/pkg/controller/cronjob/cronjob_controller_test.go +++ b/pkg/controller/cronjob/cronjob_controller_test.go @@ -29,6 +29,7 @@ import ( "k8s.io/kubernetes/pkg/api/v1" batchv1 "k8s.io/kubernetes/pkg/apis/batch/v1" batchv2alpha1 "k8s.io/kubernetes/pkg/apis/batch/v2alpha1" + "k8s.io/kubernetes/pkg/controller" ) // schedule is hourly on the hour @@ -289,6 +290,23 @@ func TestSyncOne_RunOrNot(t *testing.T) { if len(jc.Jobs) != expectedCreates { t.Errorf("%s: expected %d job started, actually %v", name, expectedCreates, len(jc.Jobs)) } + for i := range jc.Jobs { + job := &jc.Jobs[i] + controllerRef := controller.GetControllerOf(job) + if controllerRef == nil { + t.Errorf("%s: expected job to have ControllerRef: %#v", name, job) + } else { + if got, want := controllerRef.APIVersion, "batch/v2alpha1"; got != want { + t.Errorf("%s: controllerRef.APIVersion = %q, want %q", name, got, want) + } + if got, want := controllerRef.Kind, "CronJob"; got != want { + t.Errorf("%s: controllerRef.Kind = %q, want %q", name, got, want) + } + if controllerRef.Controller == nil || *controllerRef.Controller != true { + t.Errorf("%s: controllerRef.Controller is not set to true", name) + } + } + } expectedDeletes := 0 if tc.expectDelete { diff --git a/pkg/controller/cronjob/utils.go b/pkg/controller/cronjob/utils.go index 4d59ab5b3b..c755d3ff8b 100644 --- a/pkg/controller/cronjob/utils.go +++ b/pkg/controller/cronjob/utils.go @@ -180,6 +180,17 @@ func getRecentUnmetScheduleTimes(sj batchv2alpha1.CronJob, now time.Time) ([]tim return starts, nil } +func newControllerRef(sj *batchv2alpha1.CronJob) *metav1.OwnerReference { + isController := true + return &metav1.OwnerReference{ + APIVersion: controllerKind.GroupVersion().String(), + Kind: controllerKind.Kind, + Name: sj.Name, + UID: sj.UID, + Controller: &isController, + } +} + // XXX unit test this // getJobFromTemplate makes a Job from a CronJob @@ -199,9 +210,10 @@ func getJobFromTemplate(sj *batchv2alpha1.CronJob, scheduledTime time.Time) (*ba job := &batchv1.Job{ ObjectMeta: metav1.ObjectMeta{ - Labels: labels, - Annotations: annotations, - Name: name, + Labels: labels, + Annotations: annotations, + Name: name, + OwnerReferences: []metav1.OwnerReference{*newControllerRef(sj)}, }, } if err := api.Scheme.Convert(&sj.Spec.JobTemplate.Spec, &job.Spec, nil); err != nil {