-
Notifications
You must be signed in to change notification settings - Fork 2
/
batch.go
90 lines (77 loc) · 1.7 KB
/
batch.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package k8sfactory
import (
batchv1 "k8s.io/api/batch/v1"
batchv1beta1 "k8s.io/api/batch/v1beta1"
"k8s.io/client-go/kubernetes/scheme"
)
func CronJobFactory(base *batchv1.CronJob, traits ...Trait) *batchv1.CronJob {
var cj *batchv1.CronJob
if base == nil {
cj = &batchv1.CronJob{}
} else {
cj = base.DeepCopy()
}
setGVK(cj, scheme.Scheme)
for _, v := range traits {
v(cj)
}
return cj
}
func Schedule(v string) Trait {
return func(object any) {
switch obj := object.(type) {
case *batchv1beta1.CronJob:
obj.Spec.Schedule = v
case *batchv1.CronJob:
obj.Spec.Schedule = v
}
}
}
func Job(j *batchv1.Job) Trait {
return func(object any) {
switch obj := object.(type) {
case *batchv1beta1.CronJob:
obj.Spec.JobTemplate = batchv1beta1.JobTemplateSpec{
ObjectMeta: j.ObjectMeta,
Spec: j.Spec,
}
case *batchv1.CronJob:
obj.Spec.JobTemplate = batchv1.JobTemplateSpec{
ObjectMeta: j.ObjectMeta,
Spec: j.Spec,
}
}
}
}
func JobFactory(base *batchv1.Job, traits ...Trait) *batchv1.Job {
var j *batchv1.Job
if base == nil {
j = &batchv1.Job{}
} else {
j = base.DeepCopy()
}
setGVK(j, scheme.Scheme)
for _, v := range traits {
v(j)
}
return j
}
func PodFailurePolicy(v batchv1.PodFailurePolicyRule) Trait {
return func(object any) {
switch obj := object.(type) {
case *batchv1.Job:
if obj.Spec.PodFailurePolicy == nil {
obj.Spec.PodFailurePolicy = &batchv1.PodFailurePolicy{}
}
obj.Spec.PodFailurePolicy.Rules = append(obj.Spec.PodFailurePolicy.Rules, v)
}
}
}
func BackoffLimit(limit int32) Trait {
return func(object any) {
switch obj := object.(type) {
case *batchv1.Job:
obj.Spec.BackoffLimit = &limit
}
}
}