Skip to content

Commit 35cc982

Browse files
authored
Merge pull request stakater#865 from ChristianCiach/job-owner-ref
Add OwnerReference to generated Jobs
2 parents a767522 + 41375f8 commit 35cc982

2 files changed

Lines changed: 40 additions & 6 deletions

File tree

internal/pkg/callbacks/rolling_upgrade.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import (
1616
"k8s.io/apimachinery/pkg/runtime"
1717
patchtypes "k8s.io/apimachinery/pkg/types"
1818

19+
"maps"
20+
1921
argorolloutv1alpha1 "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
2022
)
2123

@@ -443,11 +445,21 @@ func PatchDeployment(clients kube.Clients, namespace string, resource runtime.Ob
443445
// CreateJobFromCronjob performs rolling upgrade on cronjob
444446
func CreateJobFromCronjob(clients kube.Clients, namespace string, resource runtime.Object) error {
445447
cronJob := resource.(*batchv1.CronJob)
448+
449+
annotations := make(map[string]string)
450+
annotations["cronjob.kubernetes.io/instantiate"] = "manual"
451+
maps.Copy(annotations, cronJob.Spec.JobTemplate.Annotations)
452+
446453
job := &batchv1.Job{
447-
ObjectMeta: cronJob.Spec.JobTemplate.ObjectMeta,
448-
Spec: cronJob.Spec.JobTemplate.Spec,
454+
ObjectMeta: meta_v1.ObjectMeta{
455+
GenerateName: cronJob.Name + "-",
456+
Namespace: cronJob.Namespace,
457+
Annotations: annotations,
458+
Labels: cronJob.Spec.JobTemplate.Labels,
459+
OwnerReferences: []meta_v1.OwnerReference{*meta_v1.NewControllerRef(cronJob, batchv1.SchemeGroupVersion.WithKind("CronJob"))},
460+
},
461+
Spec: cronJob.Spec.JobTemplate.Spec,
449462
}
450-
job.GenerateName = cronJob.Name + "-"
451463
_, err := clients.KubernetesClient.BatchV1().Jobs(namespace).Create(context.TODO(), job, meta_v1.CreateOptions{FieldManager: "Reloader"})
452464
return err
453465
}

internal/pkg/callbacks/rolling_upgrade_test.go

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -415,13 +415,26 @@ func TestPatchResources(t *testing.T) {
415415
func TestCreateJobFromCronjob(t *testing.T) {
416416
fixtures := newTestFixtures()
417417

418-
cronJob, err := createTestCronJobWithAnnotations(clients, fixtures.namespace, "1")
418+
runtimeObj, err := createTestCronJobWithAnnotations(clients, fixtures.namespace, "1")
419419
assert.NoError(t, err)
420420

421-
err = callbacks.CreateJobFromCronjob(clients, fixtures.namespace, cronJob.(*batchv1.CronJob))
421+
cronJob := runtimeObj.(*batchv1.CronJob)
422+
err = callbacks.CreateJobFromCronjob(clients, fixtures.namespace, cronJob)
422423
assert.NoError(t, err)
423424

424-
err = deleteTestCronJob(clients, fixtures.namespace, "test-cronjob")
425+
jobList, err := clients.KubernetesClient.BatchV1().Jobs(fixtures.namespace).List(context.TODO(), metav1.ListOptions{})
426+
assert.NoError(t, err)
427+
428+
ownerFound := false
429+
for _, job := range jobList.Items {
430+
if isControllerOwner("CronJob", cronJob.Name, job.OwnerReferences) {
431+
ownerFound = true
432+
break
433+
}
434+
}
435+
assert.Truef(t, ownerFound, "Missing CronJob owner reference")
436+
437+
err = deleteTestCronJob(clients, fixtures.namespace, cronJob.Name)
425438
assert.NoError(t, err)
426439
}
427440

@@ -749,3 +762,12 @@ func createTestJobWithAnnotations(clients kube.Clients, namespace, version strin
749762
func deleteTestJob(clients kube.Clients, namespace, name string) error {
750763
return clients.KubernetesClient.BatchV1().Jobs(namespace).Delete(context.TODO(), name, metav1.DeleteOptions{})
751764
}
765+
766+
func isControllerOwner(kind, name string, ownerRefs []metav1.OwnerReference) bool {
767+
for _, ownerRef := range ownerRefs {
768+
if *ownerRef.Controller && ownerRef.Kind == kind && ownerRef.Name == name {
769+
return true
770+
}
771+
}
772+
return false
773+
}

0 commit comments

Comments
 (0)