// // Copyright (c) 2012-2019 Red Hat, Inc. // This program and the accompanying materials are made // available under the terms of the Eclipse Public License 2.0 // which is available at https://www.eclipse.org/legal/epl-2.0/ // // SPDX-License-Identifier: EPL-2.0 // // Contributors: // Red Hat, Inc. - initial API and implementation // package deploy import ( orgv1 "github.com/eclipse/che-operator/pkg/apis/org/v1" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" ) func NewRegistryDeployment( cr *orgv1.CheCluster, registryType string, registryImage string, registryImagePullPolicy corev1.PullPolicy, registryMemoryLimit string, registryMemoryRequest string, probePath string, ) *appsv1.Deployment { name := registryType + "-registry" labels := GetLabels(cr, name) _25Percent := intstr.FromString("25%") _1 := int32(1) _2 := int32(2) return &appsv1.Deployment{ TypeMeta: metav1.TypeMeta{ Kind: "Deployment", APIVersion: "apps/v1", }, ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: cr.Namespace, Labels: labels, }, Spec: appsv1.DeploymentSpec{ Replicas: &_1, RevisionHistoryLimit: &_2, Selector: &metav1.LabelSelector{MatchLabels: labels}, Strategy: appsv1.DeploymentStrategy{ Type: appsv1.RollingUpdateDeploymentStrategyType, RollingUpdate: &appsv1.RollingUpdateDeployment { MaxSurge: &_25Percent, MaxUnavailable: &_25Percent, }, }, Template: corev1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ Labels: labels, }, Spec: corev1.PodSpec{ Containers: []corev1.Container{ { Name: "che-" + name, Image: registryImage, ImagePullPolicy: registryImagePullPolicy, Ports: []corev1.ContainerPort{ { Name: "http", ContainerPort: 8080, Protocol: "TCP", }, }, Resources: corev1.ResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceMemory: resource.MustParse(registryMemoryRequest), }, Limits: corev1.ResourceList{ corev1.ResourceMemory: resource.MustParse(registryMemoryLimit), }, }, ReadinessProbe: &corev1.Probe{ Handler: corev1.Handler{ HTTPGet: &corev1.HTTPGetAction{ Path: "/" + registryType + "s/", Port: intstr.IntOrString{ Type: intstr.Int, IntVal: int32(8080), }, Scheme: corev1.URISchemeHTTP, }, }, InitialDelaySeconds: 3, FailureThreshold: 10, TimeoutSeconds: 3, }, LivenessProbe: &corev1.Probe{ Handler: corev1.Handler{ HTTPGet: &corev1.HTTPGetAction{ Path: "/" + registryType + "s/", Port: intstr.IntOrString{ Type: intstr.Int, IntVal: int32(8080), }, Scheme: corev1.URISchemeHTTP, }, }, InitialDelaySeconds: 30, FailureThreshold: 10, TimeoutSeconds: 3, }, }, }, }, }, }, } }