/
job.go
95 lines (80 loc) · 2.64 KB
/
job.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
package keystone
import (
"fmt"
batchv1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1"
openstackv1beta1 "github.com/ianunruh/openstack-operator/api/v1beta1"
"github.com/ianunruh/openstack-operator/pkg/template"
)
func BootstrapJob(instance *openstackv1beta1.Keystone, env []corev1.EnvVar, volumes []corev1.Volume) *batchv1.Job {
labels := template.AppLabels(instance.Name, AppLabel)
apiURL := fmt.Sprintf("https://%s/v3", instance.Spec.API.Ingress.Host)
apiInternalURL := fmt.Sprintf("http://%s-api.%s.svc:5000/v3", instance.Name, instance.Namespace)
volumeMounts := []corev1.VolumeMount{
template.SubPathVolumeMount("etc-keystone", "/etc/keystone/keystone.conf", "keystone.conf"),
template.VolumeMount("fernet-keys", "/etc/keystone/fernet-keys"),
}
extraEnv := []corev1.EnvVar{
template.SecretEnvVar("KEYSTONE_ADMIN_PASSWORD", instance.Name, "OS_PASSWORD"),
template.EnvVar("KEYSTONE_API_URL", apiURL),
template.EnvVar("KEYSTONE_API_INTERNAL_URL", apiInternalURL),
template.EnvVar("KEYSTONE_REGION", "RegionOne"),
}
job := template.GenericJob(template.Component{
Namespace: instance.Namespace,
Labels: labels,
Containers: []corev1.Container{
{
Name: "bootstrap",
Image: instance.Spec.API.Image,
Command: []string{
"bash",
"-c",
template.MustReadFile(AppLabel, "bootstrap.sh"),
},
Env: append(env, extraEnv...),
Resources: instance.Spec.BootstrapJob.Resources,
VolumeMounts: volumeMounts,
},
},
NodeSelector: instance.Spec.BootstrapJob.NodeSelector,
SecurityContext: &corev1.PodSecurityContext{
RunAsUser: &appUID,
FSGroup: &appUID,
},
Volumes: volumes,
})
job.Name = template.Combine(instance.Name, "bootstrap")
return job
}
func DBSyncJob(instance *openstackv1beta1.Keystone, env []corev1.EnvVar, volumes []corev1.Volume) *batchv1.Job {
labels := template.AppLabels(instance.Name, AppLabel)
volumeMounts := []corev1.VolumeMount{
template.SubPathVolumeMount("etc-keystone", "/etc/keystone/keystone.conf", "keystone.conf"),
}
job := template.GenericJob(template.Component{
Namespace: instance.Namespace,
Labels: labels,
Containers: []corev1.Container{
{
Name: "db-sync",
Image: instance.Spec.API.Image,
Command: []string{
"keystone-manage",
"db_sync",
},
Env: env,
Resources: instance.Spec.DBSyncJob.Resources,
VolumeMounts: volumeMounts,
},
},
NodeSelector: instance.Spec.DBSyncJob.NodeSelector,
SecurityContext: &corev1.PodSecurityContext{
RunAsUser: &appUID,
FSGroup: &appUID,
},
Volumes: volumes,
})
job.Name = template.Combine(instance.Name, "db-sync")
return job
}