Merge pull request #73737 from odino/owner-references-in-create-job

Attaching owner references to jobs create via "--from=cronjob/xyz"
k3s-v1.15.3
Kubernetes Prow Robot 2019-03-30 18:22:45 -07:00 committed by GitHub
commit afefc0b2c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 18 deletions

View File

@ -31,6 +31,7 @@ go_library(
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/i18n:go_default_library",
"//pkg/kubectl/util/templates:go_default_library", "//pkg/kubectl/util/templates:go_default_library",
"//staging/src/k8s.io/api/apps/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1:go_default_library", "//staging/src/k8s.io/api/batch/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1beta1:go_default_library", "//staging/src/k8s.io/api/batch/v1beta1:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",
@ -82,6 +83,7 @@ go_test(
"//pkg/kubectl/cmd/testing:go_default_library", "//pkg/kubectl/cmd/testing:go_default_library",
"//pkg/kubectl/generate/versioned:go_default_library", "//pkg/kubectl/generate/versioned:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//staging/src/k8s.io/api/apps/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1:go_default_library", "//staging/src/k8s.io/api/batch/v1:go_default_library",
"//staging/src/k8s.io/api/batch/v1beta1:go_default_library", "//staging/src/k8s.io/api/batch/v1beta1:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",

View File

@ -21,6 +21,7 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
appsv1 "k8s.io/api/apps/v1"
batchv1 "k8s.io/api/batch/v1" batchv1 "k8s.io/api/batch/v1"
batchv1beta1 "k8s.io/api/batch/v1beta1" batchv1beta1 "k8s.io/api/batch/v1beta1"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
@ -230,6 +231,7 @@ func (o *CreateJobOptions) createJobFromCronJob(cronJob *batchv1beta1.CronJob) *
for k, v := range cronJob.Spec.JobTemplate.Annotations { for k, v := range cronJob.Spec.JobTemplate.Annotations {
annotations[k] = v annotations[k] = v
} }
return &batchv1.Job{ return &batchv1.Job{
// this is ok because we know exactly how we want to be serialized // this is ok because we know exactly how we want to be serialized
TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"}, TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"},
@ -237,6 +239,9 @@ func (o *CreateJobOptions) createJobFromCronJob(cronJob *batchv1beta1.CronJob) *
Name: o.Name, Name: o.Name,
Annotations: annotations, Annotations: annotations,
Labels: cronJob.Spec.JobTemplate.Labels, Labels: cronJob.Spec.JobTemplate.Labels,
OwnerReferences: []metav1.OwnerReference{
*metav1.NewControllerRef(cronJob, appsv1.SchemeGroupVersion.WithKind("CronJob")),
},
}, },
Spec: cronJob.Spec.JobTemplate.Spec, Spec: cronJob.Spec.JobTemplate.Spec,
} }

View File

@ -20,6 +20,7 @@ import (
"strings" "strings"
"testing" "testing"
apps "k8s.io/api/apps/v1"
batchv1 "k8s.io/api/batch/v1" batchv1 "k8s.io/api/batch/v1"
batchv1beta1 "k8s.io/api/batch/v1beta1" batchv1beta1 "k8s.io/api/batch/v1beta1"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
@ -137,12 +138,7 @@ func TestCreateJob(t *testing.T) {
func TestCreateJobFromCronJob(t *testing.T) { func TestCreateJobFromCronJob(t *testing.T) {
jobName := "test-job" jobName := "test-job"
tests := map[string]struct { cronJob := &batchv1beta1.CronJob{
from *batchv1beta1.CronJob
expected *batchv1.Job
}{
"from CronJob": {
from: &batchv1beta1.CronJob{
Spec: batchv1beta1.CronJobSpec{ Spec: batchv1beta1.CronJobSpec{
JobTemplate: batchv1beta1.JobTemplateSpec{ JobTemplate: batchv1beta1.JobTemplateSpec{
Spec: batchv1.JobSpec{ Spec: batchv1.JobSpec{
@ -157,12 +153,19 @@ func TestCreateJobFromCronJob(t *testing.T) {
}, },
}, },
}, },
}, }
tests := map[string]struct {
from *batchv1beta1.CronJob
expected *batchv1.Job
}{
"from CronJob": {
from: cronJob,
expected: &batchv1.Job{ expected: &batchv1.Job{
TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"}, TypeMeta: metav1.TypeMeta{APIVersion: batchv1.SchemeGroupVersion.String(), Kind: "Job"},
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: jobName, Name: jobName,
Annotations: map[string]string{"cronjob.kubernetes.io/instantiate": "manual"}, Annotations: map[string]string{"cronjob.kubernetes.io/instantiate": "manual"},
OwnerReferences: []metav1.OwnerReference{*metav1.NewControllerRef(cronJob, apps.SchemeGroupVersion.WithKind("CronJob"))},
}, },
Spec: batchv1.JobSpec{ Spec: batchv1.JobSpec{
Template: corev1.PodTemplateSpec{ Template: corev1.PodTemplateSpec{
@ -184,6 +187,7 @@ func TestCreateJobFromCronJob(t *testing.T) {
Name: jobName, Name: jobName,
} }
job := o.createJobFromCronJob(tc.from) job := o.createJobFromCronJob(tc.from)
if !apiequality.Semantic.DeepEqual(job, tc.expected) { if !apiequality.Semantic.DeepEqual(job, tc.expected) {
t.Errorf("expected:\n%#v\ngot:\n%#v", tc.expected, job) t.Errorf("expected:\n%#v\ngot:\n%#v", tc.expected, job)
} }