package registry import ( "github.com/eclipse/che-operator/pkg/deploy" "github.com/eclipse/che-operator/pkg/util" v12 "k8s.io/api/apps/v1" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" v13 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) func GetSpecRegistryDeployment( deployContext *deploy.DeployContext, registryType string, registryImage string, env []v1.EnvVar, registryImagePullPolicy v1.PullPolicy, registryMemoryLimit string, registryMemoryRequest string, probePath string) (*v12.Deployment, error) { terminationGracePeriodSeconds := int64(30) name := registryType + "-registry" labels := deploy.GetLabels(deployContext.CheCluster, name) _25Percent := intstr.FromString("25%") _1 := int32(1) _2 := int32(2) isOptional := true deployment := &v12.Deployment{ TypeMeta: v13.TypeMeta{ Kind: "Deployment", APIVersion: "apps/v1", }, ObjectMeta: v13.ObjectMeta{ Name: name, Namespace: deployContext.CheCluster.Namespace, Labels: labels, }, Spec: v12.DeploymentSpec{ Replicas: &_1, RevisionHistoryLimit: &_2, Selector: &v13.LabelSelector{MatchLabels: labels}, Strategy: v12.DeploymentStrategy{ Type: v12.RollingUpdateDeploymentStrategyType, RollingUpdate: &v12.RollingUpdateDeployment{ MaxSurge: &_25Percent, MaxUnavailable: &_25Percent, }, }, Template: v1.PodTemplateSpec{ ObjectMeta: v13.ObjectMeta{ Labels: labels, }, Spec: v1.PodSpec{ Containers: []v1.Container{ { Name: "che-" + name, Image: registryImage, ImagePullPolicy: registryImagePullPolicy, Ports: []v1.ContainerPort{ { Name: "http", ContainerPort: 8080, Protocol: "TCP", }, }, Env: env, EnvFrom: []v1.EnvFromSource{ { ConfigMapRef: &v1.ConfigMapEnvSource{ Optional: &isOptional, LocalObjectReference: v1.LocalObjectReference{ Name: registryType + "-registry", }, }, }, }, Resources: v1.ResourceRequirements{ Requests: v1.ResourceList{ v1.ResourceMemory: resource.MustParse(registryMemoryRequest), }, Limits: v1.ResourceList{ v1.ResourceMemory: resource.MustParse(registryMemoryLimit), }, }, ReadinessProbe: &v1.Probe{ Handler: v1.Handler{ HTTPGet: &v1.HTTPGetAction{ Path: "/" + registryType + "s/", Port: intstr.IntOrString{ Type: intstr.Int, IntVal: int32(8080), }, Scheme: v1.URISchemeHTTP, }, }, InitialDelaySeconds: 3, FailureThreshold: 10, TimeoutSeconds: 3, SuccessThreshold: 1, PeriodSeconds: 10, }, LivenessProbe: &v1.Probe{ Handler: v1.Handler{ HTTPGet: &v1.HTTPGetAction{ Path: "/" + registryType + "s/", Port: intstr.IntOrString{ Type: intstr.Int, IntVal: int32(8080), }, Scheme: v1.URISchemeHTTP, }, }, InitialDelaySeconds: 30, FailureThreshold: 10, TimeoutSeconds: 3, SuccessThreshold: 1, PeriodSeconds: 10, }, }, }, RestartPolicy: "Always", TerminationGracePeriodSeconds: &terminationGracePeriodSeconds, }, }, }, } if !util.IsTestMode() { err := controllerutil.SetControllerReference(deployContext.CheCluster, deployment, deployContext.ClusterAPI.Scheme) if err != nil { return nil, err } } return deployment, nil }