Skip to content

Commit afefc0b

Browse files
authored
Merge pull request kubernetes#73737 from odino/owner-references-in-create-job
Attaching owner references to jobs create via "--from=cronjob/xyz"
2 parents e9c42a1 + 5d372e2 commit afefc0b

File tree

3 files changed

+29
-18
lines changed

3 files changed

+29
-18
lines changed

pkg/kubectl/cmd/create/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ go_library(
3131
"//pkg/kubectl/scheme:go_default_library",
3232
"//pkg/kubectl/util/i18n:go_default_library",
3333
"//pkg/kubectl/util/templates:go_default_library",
34+
"//staging/src/k8s.io/api/apps/v1:go_default_library",
3435
"//staging/src/k8s.io/api/batch/v1:go_default_library",
3536
"//staging/src/k8s.io/api/batch/v1beta1:go_default_library",
3637
"//staging/src/k8s.io/api/core/v1:go_default_library",
@@ -82,6 +83,7 @@ go_test(
8283
"//pkg/kubectl/cmd/testing:go_default_library",
8384
"//pkg/kubectl/generate/versioned:go_default_library",
8485
"//pkg/kubectl/scheme:go_default_library",
86+
"//staging/src/k8s.io/api/apps/v1:go_default_library",
8587
"//staging/src/k8s.io/api/batch/v1:go_default_library",
8688
"//staging/src/k8s.io/api/batch/v1beta1:go_default_library",
8789
"//staging/src/k8s.io/api/core/v1:go_default_library",

pkg/kubectl/cmd/create/create_job.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
"github.com/spf13/cobra"
2323

24+
appsv1 "k8s.io/api/apps/v1"
2425
batchv1 "k8s.io/api/batch/v1"
2526
batchv1beta1 "k8s.io/api/batch/v1beta1"
2627
corev1 "k8s.io/api/core/v1"
@@ -230,13 +231,17 @@ func (o *CreateJobOptions) createJobFromCronJob(cronJob *batchv1beta1.CronJob) *
230231
for k, v := range cronJob.Spec.JobTemplate.Annotations {
231232
annotations[k] = v
232233
}
234+
233235
return &batchv1.Job{
234236
// this is ok because we know exactly how we want to be serialized
235237
TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"},
236238
ObjectMeta: metav1.ObjectMeta{
237239
Name: o.Name,
238240
Annotations: annotations,
239241
Labels: cronJob.Spec.JobTemplate.Labels,
242+
OwnerReferences: []metav1.OwnerReference{
243+
*metav1.NewControllerRef(cronJob, appsv1.SchemeGroupVersion.WithKind("CronJob")),
244+
},
240245
},
241246
Spec: cronJob.Spec.JobTemplate.Spec,
242247
}

pkg/kubectl/cmd/create/create_job_test.go

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"strings"
2121
"testing"
2222

23+
apps "k8s.io/api/apps/v1"
2324
batchv1 "k8s.io/api/batch/v1"
2425
batchv1beta1 "k8s.io/api/batch/v1beta1"
2526
corev1 "k8s.io/api/core/v1"
@@ -137,32 +138,34 @@ func TestCreateJob(t *testing.T) {
137138

138139
func TestCreateJobFromCronJob(t *testing.T) {
139140
jobName := "test-job"
140-
tests := map[string]struct {
141-
from *batchv1beta1.CronJob
142-
expected *batchv1.Job
143-
}{
144-
"from CronJob": {
145-
from: &batchv1beta1.CronJob{
146-
Spec: batchv1beta1.CronJobSpec{
147-
JobTemplate: batchv1beta1.JobTemplateSpec{
148-
Spec: batchv1.JobSpec{
149-
Template: corev1.PodTemplateSpec{
150-
Spec: corev1.PodSpec{
151-
Containers: []corev1.Container{
152-
{Image: "test-image"},
153-
},
154-
RestartPolicy: corev1.RestartPolicyNever,
155-
},
141+
cronJob := &batchv1beta1.CronJob{
142+
Spec: batchv1beta1.CronJobSpec{
143+
JobTemplate: batchv1beta1.JobTemplateSpec{
144+
Spec: batchv1.JobSpec{
145+
Template: corev1.PodTemplateSpec{
146+
Spec: corev1.PodSpec{
147+
Containers: []corev1.Container{
148+
{Image: "test-image"},
156149
},
150+
RestartPolicy: corev1.RestartPolicyNever,
157151
},
158152
},
159153
},
160154
},
155+
},
156+
}
157+
tests := map[string]struct {
158+
from *batchv1beta1.CronJob
159+
expected *batchv1.Job
160+
}{
161+
"from CronJob": {
162+
from: cronJob,
161163
expected: &batchv1.Job{
162164
TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"},
163165
ObjectMeta: metav1.ObjectMeta{
164-
Name: jobName,
165-
Annotations: map[string]string{"cronjob.kubernetes.io/instantiate": "manual"},
166+
Name: jobName,
167+
Annotations: map[string]string{"cronjob.kubernetes.io/instantiate": "manual"},
168+
OwnerReferences: []metav1.OwnerReference{*metav1.NewControllerRef(cronJob, apps.SchemeGroupVersion.WithKind("CronJob"))},
166169
},
167170
Spec: batchv1.JobSpec{
168171
Template: corev1.PodTemplateSpec{
@@ -184,6 +187,7 @@ func TestCreateJobFromCronJob(t *testing.T) {
184187
Name: jobName,
185188
}
186189
job := o.createJobFromCronJob(tc.from)
190+
187191
if !apiequality.Semantic.DeepEqual(job, tc.expected) {
188192
t.Errorf("expected:\n%#v\ngot:\n%#v", tc.expected, job)
189193
}

0 commit comments

Comments
 (0)