From cd42e3f74d077a1bcebceced58761d0a4b1b0e5f Mon Sep 17 00:00:00 2001 From: Dharmit Shah Date: Mon, 24 Jan 2022 18:01:35 +0530 Subject: [PATCH 1/6] Add Replicas field to DeploymentParams struct --- pkg/devfile/generator/generators.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/devfile/generator/generators.go b/pkg/devfile/generator/generators.go index 6a2c5a18..3582326f 100644 --- a/pkg/devfile/generator/generators.go +++ b/pkg/devfile/generator/generators.go @@ -2,6 +2,7 @@ package generator import ( "fmt" + "k8s.io/utils/pointer" v1 "github.com/devfile/api/v2/pkg/apis/workspaces/v1alpha2" "github.com/devfile/library/pkg/devfile/parser" @@ -158,6 +159,7 @@ type DeploymentParams struct { Containers []corev1.Container Volumes []corev1.Volume PodSelectorLabels map[string]string + Replicas int32 } // GetDeployment gets a deployment object @@ -187,6 +189,10 @@ func GetDeployment(devfileObj parser.DevfileObj, deployParams DeploymentParams) Spec: *getDeploymentSpec(deploySpecParams), } + if deployParams.Replicas != 0 { + deployment.Spec.Replicas = pointer.Int32Ptr(deployParams.Replicas) + } + return deployment, nil } From cce70f936f1b5090bb1b3371f8c4fe59eaee040d Mon Sep 17 00:00:00 2001 From: Dharmit Shah Date: Tue, 25 Jan 2022 10:44:24 +0530 Subject: [PATCH 2/6] Unit tests for Replica field in DeploymentParams --- go.mod | 1 + pkg/devfile/generator/generators_test.go | 30 +++++++++++++++++------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 827ce877..8beed79c 100644 --- a/go.mod +++ b/go.mod @@ -23,6 +23,7 @@ require ( k8s.io/apimachinery v0.21.3 k8s.io/client-go v0.21.3 k8s.io/klog v1.0.0 + k8s.io/utils v0.0.0-20210722164352-7f3ee0f31471 // indirect sigs.k8s.io/controller-runtime v0.9.5 sigs.k8s.io/yaml v1.2.0 ) diff --git a/pkg/devfile/generator/generators_test.go b/pkg/devfile/generator/generators_test.go index 733064e7..49cb00ee 100644 --- a/pkg/devfile/generator/generators_test.go +++ b/pkg/devfile/generator/generators_test.go @@ -6,6 +6,7 @@ import ( appsv1 "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/utils/pointer" "reflect" "strings" "testing" @@ -1000,14 +1001,6 @@ func TestGetDeployment(t *testing.T) { Name: "container2", }, } - deploymentParams := DeploymentParams{ - ObjectMeta: metav1.ObjectMeta{ - Annotations: map[string]string{ - "preserved-key": "preserved-value", - }, - }, - Containers: containers, - } objectMeta := metav1.ObjectMeta{ Annotations: map[string]string{ @@ -1027,6 +1020,7 @@ func TestGetDeployment(t *testing.T) { tests := []struct { name string containerComponents []v1.Component + deploymentParams DeploymentParams expected appsv1.Deployment }{ { @@ -1050,6 +1044,15 @@ func TestGetDeployment(t *testing.T) { }, }, &trueBool), }, + deploymentParams: DeploymentParams{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + "preserved-key": "preserved-value", + }, + }, + Containers: containers, + Replicas: 1, + }, expected: appsv1.Deployment{ ObjectMeta: objectMetaDedicatedPod, Spec: appsv1.DeploymentSpec{ @@ -1065,6 +1068,7 @@ func TestGetDeployment(t *testing.T) { Containers: containers, }, }, + Replicas: pointer.Int32Ptr(1), }, }, }, @@ -1087,6 +1091,14 @@ func TestGetDeployment(t *testing.T) { }, }, nil), }, + deploymentParams: DeploymentParams{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + "preserved-key": "preserved-value", + }, + }, + Containers: containers, + }, expected: appsv1.Deployment{ ObjectMeta: objectMeta, Spec: appsv1.DeploymentSpec{ @@ -1125,7 +1137,7 @@ func TestGetDeployment(t *testing.T) { devObj := parser.DevfileObj{ Data: mockDevfileData, } - deploy, err := GetDeployment(devObj, deploymentParams) + deploy, err := GetDeployment(devObj, tt.deploymentParams) // Checks for unexpected error cases if err != nil { t.Errorf("TestGetDeployment(): unexpected error %v", err) From 145564efc02c37f573608a4875e81009f3da3427 Mon Sep 17 00:00:00 2001 From: Dharmit Shah Date: Tue, 25 Jan 2022 13:03:38 +0530 Subject: [PATCH 3/6] Make Replicas a pointer --- pkg/devfile/generator/generators.go | 8 +++----- pkg/devfile/generator/generators_test.go | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/pkg/devfile/generator/generators.go b/pkg/devfile/generator/generators.go index 3582326f..7f917f87 100644 --- a/pkg/devfile/generator/generators.go +++ b/pkg/devfile/generator/generators.go @@ -2,8 +2,6 @@ package generator import ( "fmt" - "k8s.io/utils/pointer" - v1 "github.com/devfile/api/v2/pkg/apis/workspaces/v1alpha2" "github.com/devfile/library/pkg/devfile/parser" "github.com/devfile/library/pkg/devfile/parser/data/v2/common" @@ -159,7 +157,7 @@ type DeploymentParams struct { Containers []corev1.Container Volumes []corev1.Volume PodSelectorLabels map[string]string - Replicas int32 + Replicas *int32 } // GetDeployment gets a deployment object @@ -189,8 +187,8 @@ func GetDeployment(devfileObj parser.DevfileObj, deployParams DeploymentParams) Spec: *getDeploymentSpec(deploySpecParams), } - if deployParams.Replicas != 0 { - deployment.Spec.Replicas = pointer.Int32Ptr(deployParams.Replicas) + if deployParams.Replicas != nil { + deployment.Spec.Replicas = deployParams.Replicas } return deployment, nil diff --git a/pkg/devfile/generator/generators_test.go b/pkg/devfile/generator/generators_test.go index 49cb00ee..49b1b31a 100644 --- a/pkg/devfile/generator/generators_test.go +++ b/pkg/devfile/generator/generators_test.go @@ -1051,7 +1051,7 @@ func TestGetDeployment(t *testing.T) { }, }, Containers: containers, - Replicas: 1, + Replicas: pointer.Int32Ptr(1), }, expected: appsv1.Deployment{ ObjectMeta: objectMetaDedicatedPod, From 4a544b12a31ed89f58f1da0e08fa074ab203726a Mon Sep 17 00:00:00 2001 From: Dharmit Shah Date: Tue, 25 Jan 2022 15:49:05 +0530 Subject: [PATCH 4/6] Move Replica check to getDeploymentSpec function --- pkg/devfile/generator/generators.go | 6 +----- pkg/devfile/generator/utils.go | 6 +++++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/devfile/generator/generators.go b/pkg/devfile/generator/generators.go index 7f917f87..2808b0f7 100644 --- a/pkg/devfile/generator/generators.go +++ b/pkg/devfile/generator/generators.go @@ -184,11 +184,7 @@ func GetDeployment(devfileObj parser.DevfileObj, deployParams DeploymentParams) deployment := &appsv1.Deployment{ TypeMeta: deployParams.TypeMeta, ObjectMeta: deployParams.ObjectMeta, - Spec: *getDeploymentSpec(deploySpecParams), - } - - if deployParams.Replicas != nil { - deployment.Spec.Replicas = deployParams.Replicas + Spec: *getDeploymentSpec(deploySpecParams, deployParams), } return deployment, nil diff --git a/pkg/devfile/generator/utils.go b/pkg/devfile/generator/utils.go index 0b1567ae..d3678481 100644 --- a/pkg/devfile/generator/utils.go +++ b/pkg/devfile/generator/utils.go @@ -236,7 +236,7 @@ type deploymentSpecParams struct { } // getDeploymentSpec gets a deployment spec -func getDeploymentSpec(deploySpecParams deploymentSpecParams) *appsv1.DeploymentSpec { +func getDeploymentSpec(deploySpecParams deploymentSpecParams, deployParams DeploymentParams) *appsv1.DeploymentSpec { deploymentSpec := &appsv1.DeploymentSpec{ Strategy: appsv1.DeploymentStrategy{ Type: appsv1.RecreateDeploymentStrategyType, @@ -247,6 +247,10 @@ func getDeploymentSpec(deploySpecParams deploymentSpecParams) *appsv1.Deployment Template: deploySpecParams.PodTemplateSpec, } + if deployParams.Replicas != nil { + deploymentSpec.Replicas = deployParams.Replicas + } + return deploymentSpec } From 8e84d38c1237e281fa2dcd7713b7cf40d14de16e Mon Sep 17 00:00:00 2001 From: Dharmit Shah Date: Thu, 27 Jan 2022 15:01:29 +0530 Subject: [PATCH 5/6] Add Replicas field to deploymentSpecParams --- pkg/devfile/generator/generators.go | 3 ++- pkg/devfile/generator/utils.go | 8 +++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/pkg/devfile/generator/generators.go b/pkg/devfile/generator/generators.go index 2808b0f7..7ceafc19 100644 --- a/pkg/devfile/generator/generators.go +++ b/pkg/devfile/generator/generators.go @@ -173,6 +173,7 @@ func GetDeployment(devfileObj parser.DevfileObj, deployParams DeploymentParams) deploySpecParams := deploymentSpecParams{ PodTemplateSpec: *getPodTemplateSpec(podTemplateSpecParams), PodSelectorLabels: deployParams.PodSelectorLabels, + Replicas: deployParams.Replicas, } containerAnnotations, err := getContainerAnnotations(devfileObj, common.DevfileOptions{}) @@ -184,7 +185,7 @@ func GetDeployment(devfileObj parser.DevfileObj, deployParams DeploymentParams) deployment := &appsv1.Deployment{ TypeMeta: deployParams.TypeMeta, ObjectMeta: deployParams.ObjectMeta, - Spec: *getDeploymentSpec(deploySpecParams, deployParams), + Spec: *getDeploymentSpec(deploySpecParams), } return deployment, nil diff --git a/pkg/devfile/generator/utils.go b/pkg/devfile/generator/utils.go index d3678481..35af3243 100644 --- a/pkg/devfile/generator/utils.go +++ b/pkg/devfile/generator/utils.go @@ -233,10 +233,11 @@ func getPodTemplateSpec(podTemplateSpecParams podTemplateSpecParams) *corev1.Pod type deploymentSpecParams struct { PodTemplateSpec corev1.PodTemplateSpec PodSelectorLabels map[string]string + Replicas *int32 } // getDeploymentSpec gets a deployment spec -func getDeploymentSpec(deploySpecParams deploymentSpecParams, deployParams DeploymentParams) *appsv1.DeploymentSpec { +func getDeploymentSpec(deploySpecParams deploymentSpecParams) *appsv1.DeploymentSpec { deploymentSpec := &appsv1.DeploymentSpec{ Strategy: appsv1.DeploymentStrategy{ Type: appsv1.RecreateDeploymentStrategyType, @@ -245,10 +246,7 @@ func getDeploymentSpec(deploySpecParams deploymentSpecParams, deployParams Deplo MatchLabels: deploySpecParams.PodSelectorLabels, }, Template: deploySpecParams.PodTemplateSpec, - } - - if deployParams.Replicas != nil { - deploymentSpec.Replicas = deployParams.Replicas + Replicas: deploySpecParams.Replicas, } return deploymentSpec From 1f6f5037761327fbef578fc8d80df947847d9349 Mon Sep 17 00:00:00 2001 From: Dharmit Shah Date: Tue, 1 Feb 2022 10:53:23 +0530 Subject: [PATCH 6/6] Run go mod tidy to make CI happy --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 8beed79c..df40e094 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( k8s.io/apimachinery v0.21.3 k8s.io/client-go v0.21.3 k8s.io/klog v1.0.0 - k8s.io/utils v0.0.0-20210722164352-7f3ee0f31471 // indirect + k8s.io/utils v0.0.0-20210722164352-7f3ee0f31471 sigs.k8s.io/controller-runtime v0.9.5 sigs.k8s.io/yaml v1.2.0 )