blob: 265510c5a6687a6eb9a7169344b9d992fb2a08a5 [file] [log] [blame]
giof8843412024-05-22 16:38:05 +04001package installer
2
3import (
4 "context"
5
6 batchv1 "k8s.io/api/batch/v1"
7 corev1 "k8s.io/api/core/v1"
8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9 "k8s.io/client-go/kubernetes/typed/batch/v1"
10)
11
12type JobCreator interface {
13 Create(name, namespace string, image string, cmd []string) error
14}
15
16type noOpJobCreator struct{}
17
18func (c noOpJobCreator) Create(name, namespace string, image string, cmd []string) error {
19 return nil
20}
21
22func NewNoOpJobCreator() noOpJobCreator {
23 return noOpJobCreator{}
24}
25
26type realJobCreator struct {
27 v1.BatchV1Interface
28}
29
30func NewJobCreator(batch v1.BatchV1Interface) *realJobCreator {
31 return &realJobCreator{batch}
32}
33
34var onFailure corev1.RestartPolicy = "OnFailure"
35
36func (c *realJobCreator) Create(name, namespace string, image string, cmd []string) error {
37 _, err := c.Jobs(namespace).Create(context.Background(), &batchv1.Job{
38 TypeMeta: metav1.TypeMeta{
39 Kind: "Job",
40 APIVersion: "batch/v1",
41 },
42 ObjectMeta: metav1.ObjectMeta{
43 Name: name,
44 Namespace: namespace,
45 },
46 Spec: batchv1.JobSpec{
47 Template: corev1.PodTemplateSpec{
48 Spec: corev1.PodSpec{
49 Containers: []corev1.Container{
50 corev1.Container{
51 Name: "job",
52 Image: image,
53 ImagePullPolicy: "Always",
54 Command: cmd,
55 },
56 },
57 RestartPolicy: onFailure,
58 },
59 },
60 },
61 }, metav1.CreateOptions{})
62 return err
63}