Files
kubernetes-images-sync-oper…/internal/shared/jobs.go
T
2024-09-04 20:55:54 +01:00

83 lines
2.1 KiB
Go

package shared
import (
"fmt"
"strings"
raczylocomv1 "github.com/lukaszraczylo/kubernetes-images-sync-operator/api/raczylo.com/v1"
batchv1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/utils/pointer"
)
type JobParams struct {
Name string
Namespace string
Image string
Commands []string
EnvVars []corev1.EnvVar
OwnerReferences []metav1.OwnerReference
}
func CreateJob[T any](params JobParams, setupFunc func(T) []string) *batchv1.Job {
return &batchv1.Job{
ObjectMeta: metav1.ObjectMeta{
Name: params.Name,
Namespace: params.Namespace,
OwnerReferences: params.OwnerReferences,
Labels: map[string]string{
"app": "image-export",
},
},
Spec: batchv1.JobSpec{
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{
"app": "image-export",
},
},
Spec: corev1.PodSpec{
RestartPolicy: corev1.RestartPolicyOnFailure,
Containers: []corev1.Container{
{
Name: "export",
Image: params.Image,
TTY: true,
Command: []string{
"bash",
"-c",
strings.Join(params.Commands, " && "),
},
Env: params.EnvVars,
SecurityContext: &corev1.SecurityContext{
Privileged: pointer.Bool(true),
},
},
},
},
},
},
}
}
func SetupS3Params(s3Config raczylocomv1.ClusterImageStorageS3) []string {
params := []string{}
if s3Config.UseRole {
params = append(params, "--use-role")
} else {
params = append(params, fmt.Sprintf("--aws_access_key_id='%s'", s3Config.AccessKey))
params = append(params, fmt.Sprintf("--aws_secret_access_key='%s'", s3Config.SecretKey))
}
if s3Config.RoleARN != "" {
params = append(params, fmt.Sprintf("--role_name='%s'", s3Config.RoleARN))
}
if s3Config.Endpoint != "" {
params = append(params, fmt.Sprintf("--endpoint_url='%s'", s3Config.Endpoint))
}
if s3Config.Region != "" {
params = append(params, fmt.Sprintf("--region=%s", s3Config.Region))
}
return params
}