-
Notifications
You must be signed in to change notification settings - Fork 18
/
jobs.go
108 lines (89 loc) · 2.49 KB
/
jobs.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package jobs
import (
"context"
"errors"
v1 "k8s.io/api/batch/v1"
coreV1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/scheme"
)
func New(client *kubernetes.Clientset, metaOptions metav1.ListOptions, ctx context.Context) *Jobs {
return &Jobs{
client,
metaOptions,
ctx,
}
}
type Jobs struct {
client *kubernetes.Clientset
metaOptions metav1.ListOptions
ctx context.Context
}
type JobOptions struct {
Namespace string
Name string
Image string
Command []string
RestartPolicy coreV1.RestartPolicy
}
func (obj *Jobs) List(namespace string) ([]v1.Job, error) {
result, err := obj.client.BatchV1().Jobs(namespace).List(obj.ctx, obj.metaOptions)
return result.Items, err
}
func (obj *Jobs) Get(name, namespace string) (v1.Job, error) {
result, err := obj.client.BatchV1().Jobs(namespace).Get(obj.ctx, name, metav1.GetOptions{})
return *result, err
}
func (obj *Jobs) Delete(name, namespace string) error {
return obj.client.BatchV1().Jobs(namespace).Delete(obj.ctx, name, metav1.DeleteOptions{})
}
// Deprecated: Use Delete instead.
func (obj *Jobs) Kill(name, namespace string) error {
return obj.Delete(name, namespace)
}
func (obj *Jobs) Apply(yaml string, namespace string) (v1.Job, error) {
decode := scheme.Codecs.UniversalDeserializer().Decode
yamlobj, _, err := decode([]byte(yaml), nil, nil)
job := v1.Job{}
if err != nil {
return job, err
}
switch yamlobj.(type) {
case *v1.Job:
job = *yamlobj.(*v1.Job)
default:
return job, errors.New("Yaml was not a Job")
}
jb, err := obj.client.BatchV1().Jobs(namespace).Create(obj.ctx, &job, metav1.CreateOptions{})
return *jb, err
}
func (obj *Jobs) Create(options JobOptions) (v1.Job, error) {
container := coreV1.Container{
Name: options.Name,
Image: options.Image,
Command: options.Command,
}
containers := []coreV1.Container{
container,
}
var restartPolicy coreV1.RestartPolicy = "Never"
if options.RestartPolicy != "" {
restartPolicy = options.RestartPolicy
}
newJob := v1.Job{
TypeMeta: metav1.TypeMeta{},
ObjectMeta: metav1.ObjectMeta{Name: options.Name},
Spec: v1.JobSpec{
Template: coreV1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{},
Spec: coreV1.PodSpec{
Containers: containers,
RestartPolicy: restartPolicy,
},
},
},
}
job, err := obj.client.BatchV1().Jobs(options.Namespace).Create(obj.ctx, &newJob, metav1.CreateOptions{})
return *job, err
}