Path: blob/main/install/installer/pkg/components/spicedb/migrations.go
2501 views
// Copyright (c) 2023 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package spicedb56import (7"fmt"89"github.com/gitpod-io/gitpod/installer/pkg/common"1011batchv1 "k8s.io/api/batch/v1"12corev1 "k8s.io/api/core/v1"13metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"14"k8s.io/apimachinery/pkg/runtime"15"k8s.io/utils/pointer"16)1718func migrations(ctx *common.RenderContext) ([]runtime.Object, error) {1920cfg := getExperimentalSpiceDBConfig(ctx)21if cfg == nil {22return nil, nil23}2425if cfg.DisableMigrations {26return nil, nil27}2829objectMeta := metav1.ObjectMeta{30Name: fmt.Sprintf("%s-migrations", Component),31Namespace: ctx.Namespace,32Labels: common.CustomizeLabel(ctx, Component, common.TypeMetaBatchJob),33Annotations: common.CustomizeAnnotation(ctx, Component, common.TypeMetaBatchJob, func() map[string]string {34// Because we are using ArgoCD to deploy, we need to add these annotations so:35// 1. it knows when to apply it (during the "PreSync" hook, before other manifests are applied)36// 2. that it should remove it once it is done37// - this is necessary so it does not show up as "ouf of sync" once the "TTLSecondsAfterFinished" option kicks in38// - if we would not remove the job at all, we would have a name clash an future updates ("field is immutable")39// docs: https://argo-cd.readthedocs.io/en/stable/user-guide/resource_hooks/#usage40return map[string]string{41"argocd.argoproj.io/hook": "PreSync",42"argocd.argoproj.io/hook-delete-policy": "HookSucceeded",43}44}),45}4647return []runtime.Object{48&batchv1.Job{49TypeMeta: common.TypeMetaBatchJob,50ObjectMeta: objectMeta,51Spec: batchv1.JobSpec{52TTLSecondsAfterFinished: pointer.Int32(60),53Template: corev1.PodTemplateSpec{54ObjectMeta: objectMeta,55Spec: corev1.PodSpec{56RestartPolicy: corev1.RestartPolicyNever,57ServiceAccountName: Component,58EnableServiceLinks: pointer.Bool(false),59InitContainers: []corev1.Container{60dbWaiter(ctx),61},62Containers: []corev1.Container{{63Name: fmt.Sprintf("%s-migrations", Component),64Image: ctx.ImageName(common.ThirdPartyContainerRepo(ctx.Config.Repository, RegistryRepo), RegistryImage, ImageTag),65ImagePullPolicy: corev1.PullIfNotPresent,66Env: common.CustomizeEnvvar(ctx, Component, common.MergeEnv(67common.DefaultEnv(&ctx.Config),68spicedbEnvVars(ctx),69)),70SecurityContext: &corev1.SecurityContext{71AllowPrivilegeEscalation: pointer.Bool(false),72},73Args: []string{74"migrate",75"head",76"--log-format=json",77"--log-level=debug",78"--datastore-engine=mysql",79},80}},81},82},83},84},85}, nil86}878889