mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-11-03 23:40:03 +00:00 
			
		
		
		
	CronJob: Add ControllerRef on all created Jobs.
This commit is contained in:
		@@ -54,6 +54,7 @@ go_test(
 | 
				
			|||||||
        "//pkg/api/v1:go_default_library",
 | 
					        "//pkg/api/v1:go_default_library",
 | 
				
			||||||
        "//pkg/apis/batch/v1:go_default_library",
 | 
					        "//pkg/apis/batch/v1:go_default_library",
 | 
				
			||||||
        "//pkg/apis/batch/v2alpha1: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/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
					        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/client-go/tools/record:go_default_library",
 | 
					        "//vendor/k8s.io/client-go/tools/record:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,6 +56,9 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Utilities for dealing with Jobs and CronJobs and time.
 | 
					// 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 {
 | 
					type CronJobController struct {
 | 
				
			||||||
	kubeClient clientset.Interface
 | 
						kubeClient clientset.Interface
 | 
				
			||||||
	jobControl jobControlInterface
 | 
						jobControl jobControlInterface
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,7 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/api/v1"
 | 
						"k8s.io/kubernetes/pkg/api/v1"
 | 
				
			||||||
	batchv1 "k8s.io/kubernetes/pkg/apis/batch/v1"
 | 
						batchv1 "k8s.io/kubernetes/pkg/apis/batch/v1"
 | 
				
			||||||
	batchv2alpha1 "k8s.io/kubernetes/pkg/apis/batch/v2alpha1"
 | 
						batchv2alpha1 "k8s.io/kubernetes/pkg/apis/batch/v2alpha1"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/controller"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// schedule is hourly on the hour
 | 
					// schedule is hourly on the hour
 | 
				
			||||||
@@ -289,6 +290,23 @@ func TestSyncOne_RunOrNot(t *testing.T) {
 | 
				
			|||||||
		if len(jc.Jobs) != expectedCreates {
 | 
							if len(jc.Jobs) != expectedCreates {
 | 
				
			||||||
			t.Errorf("%s: expected %d job started, actually %v", name, expectedCreates, len(jc.Jobs))
 | 
								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
 | 
							expectedDeletes := 0
 | 
				
			||||||
		if tc.expectDelete {
 | 
							if tc.expectDelete {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -180,6 +180,17 @@ func getRecentUnmetScheduleTimes(sj batchv2alpha1.CronJob, now time.Time) ([]tim
 | 
				
			|||||||
	return starts, nil
 | 
						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
 | 
					// XXX unit test this
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// getJobFromTemplate makes a Job from a CronJob
 | 
					// getJobFromTemplate makes a Job from a CronJob
 | 
				
			||||||
@@ -199,9 +210,10 @@ func getJobFromTemplate(sj *batchv2alpha1.CronJob, scheduledTime time.Time) (*ba
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	job := &batchv1.Job{
 | 
						job := &batchv1.Job{
 | 
				
			||||||
		ObjectMeta: metav1.ObjectMeta{
 | 
							ObjectMeta: metav1.ObjectMeta{
 | 
				
			||||||
			Labels:      labels,
 | 
								Labels:          labels,
 | 
				
			||||||
			Annotations: annotations,
 | 
								Annotations:     annotations,
 | 
				
			||||||
			Name:        name,
 | 
								Name:            name,
 | 
				
			||||||
 | 
								OwnerReferences: []metav1.OwnerReference{*newControllerRef(sj)},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := api.Scheme.Convert(&sj.Spec.JobTemplate.Spec, &job.Spec, nil); err != nil {
 | 
						if err := api.Scheme.Convert(&sj.Spec.JobTemplate.Spec, &job.Spec, nil); err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user