diff --git a/api/v1alpha1/tenantcontrolplane_types.go b/api/v1alpha1/tenantcontrolplane_types.go index 8598367..265443a 100644 --- a/api/v1alpha1/tenantcontrolplane_types.go +++ b/api/v1alpha1/tenantcontrolplane_types.go @@ -108,7 +108,7 @@ type DeploymentSpec struct { // +kubebuilder:default={registry:"registry.k8s.io",apiServerImage:"kube-apiserver",controllerManagerImage:"kube-controller-manager",schedulerImage:"kube-scheduler"} RegistrySettings RegistrySettings `json:"registrySettings,omitempty"` // +kubebuilder:default=2 - Replicas int32 `json:"replicas,omitempty"` + Replicas *int32 `json:"replicas,omitempty"` // NodeSelector is a selector which must be true for the pod to fit on a node. // Selector which must match a node's labels for the pod to be scheduled on that node. // More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ diff --git a/e2e/tcp_additional_resources_blocked_test.go b/e2e/tcp_additional_resources_blocked_test.go index 436592c..b96d52d 100644 --- a/e2e/tcp_additional_resources_blocked_test.go +++ b/e2e/tcp_additional_resources_blocked_test.go @@ -12,6 +12,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/utils/pointer" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" ) @@ -26,7 +27,7 @@ var _ = Describe("Deploy a TenantControlPlane resource with additional resources Spec: kamajiv1alpha1.TenantControlPlaneSpec{ ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), AdditionalInitContainers: []corev1.Container{{ Name: initContainerName, Image: initContainerImage, diff --git a/e2e/tcp_additional_resources_ready_test.go b/e2e/tcp_additional_resources_ready_test.go index ba15bcf..5d7fcd2 100644 --- a/e2e/tcp_additional_resources_ready_test.go +++ b/e2e/tcp_additional_resources_ready_test.go @@ -15,6 +15,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/utils/pointer" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" "github.com/clastix/kamaji/internal/utilities" @@ -42,7 +43,7 @@ var _ = Describe("Deploy a TenantControlPlane resource with additional options", Spec: kamajiv1alpha1.TenantControlPlaneSpec{ ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), AdditionalInitContainers: []corev1.Container{{ Name: initContainerName, Image: initContainerImage, diff --git a/e2e/tcp_migration_test.go b/e2e/tcp_migration_test.go index a90cff3..b257657 100644 --- a/e2e/tcp_migration_test.go +++ b/e2e/tcp_migration_test.go @@ -15,6 +15,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/rand" "k8s.io/client-go/tools/clientcmd" + "k8s.io/utils/pointer" ctrlclient "sigs.k8s.io/controller-runtime/pkg/client" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" @@ -35,7 +36,7 @@ var _ = Describe("When migrating a Tenant Control Plane to another datastore", f DataStore: "etcd-bronze", ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), }, Service: kamajiv1alpha1.ServiceSpec{ ServiceType: "NodePort", diff --git a/e2e/tcp_mysql_ready_test.go b/e2e/tcp_mysql_ready_test.go index 678ca18..17b48fd 100644 --- a/e2e/tcp_mysql_ready_test.go +++ b/e2e/tcp_mysql_ready_test.go @@ -9,6 +9,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/pointer" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" ) @@ -24,7 +25,7 @@ var _ = Describe("Deploy a TenantControlPlane resource with the MySQL driver", f DataStore: "mysql-bronze", ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), }, Service: kamajiv1alpha1.ServiceSpec{ ServiceType: "ClusterIP", diff --git a/e2e/tcp_postgres_ready_test.go b/e2e/tcp_postgres_ready_test.go index a41b94d..77ad521 100644 --- a/e2e/tcp_postgres_ready_test.go +++ b/e2e/tcp_postgres_ready_test.go @@ -9,6 +9,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/pointer" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" ) @@ -24,7 +25,7 @@ var _ = Describe("Deploy a TenantControlPlane resource with the PostgreSQL drive DataStore: "postgresql-bronze", ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), }, Service: kamajiv1alpha1.ServiceSpec{ ServiceType: "ClusterIP", diff --git a/e2e/tcp_ready_test.go b/e2e/tcp_ready_test.go index 362b699..705138a 100644 --- a/e2e/tcp_ready_test.go +++ b/e2e/tcp_ready_test.go @@ -9,6 +9,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/pointer" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" ) @@ -23,7 +24,7 @@ var _ = Describe("Deploy a TenantControlPlane resource", func() { Spec: kamajiv1alpha1.TenantControlPlaneSpec{ ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), }, Service: kamajiv1alpha1.ServiceSpec{ ServiceType: "ClusterIP", diff --git a/e2e/tcp_validation_preferredkubeletaddresstypes_test.go b/e2e/tcp_validation_preferredkubeletaddresstypes_test.go index ad61c0e..38e7e23 100644 --- a/e2e/tcp_validation_preferredkubeletaddresstypes_test.go +++ b/e2e/tcp_validation_preferredkubeletaddresstypes_test.go @@ -10,6 +10,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/pointer" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" ) @@ -26,7 +27,7 @@ var _ = Describe("Deploy a TenantControlPlane with wrong preferred kubelet addre DataStore: "default", ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), }, Service: kamajiv1alpha1.ServiceSpec{ ServiceType: "ClusterIP", @@ -62,7 +63,7 @@ var _ = Describe("Deploy a TenantControlPlane with wrong preferred kubelet addre DataStore: "default", ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), }, Service: kamajiv1alpha1.ServiceSpec{ ServiceType: "ClusterIP", diff --git a/e2e/tcp_validation_version_downgrade_test.go b/e2e/tcp_validation_version_downgrade_test.go index da70e0e..cf1ff63 100644 --- a/e2e/tcp_validation_version_downgrade_test.go +++ b/e2e/tcp_validation_version_downgrade_test.go @@ -11,6 +11,7 @@ import ( . "github.com/onsi/gomega" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/utils/pointer" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" ) @@ -25,7 +26,7 @@ var _ = Describe("downgrade of a TenantControlPlane Kubernetes version", func() Spec: kamajiv1alpha1.TenantControlPlaneSpec{ ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), }, Service: kamajiv1alpha1.ServiceSpec{ ServiceType: "ClusterIP", diff --git a/e2e/tcp_validation_version_nonlinear_test.go b/e2e/tcp_validation_version_nonlinear_test.go index 234b657..16fad45 100644 --- a/e2e/tcp_validation_version_nonlinear_test.go +++ b/e2e/tcp_validation_version_nonlinear_test.go @@ -11,6 +11,7 @@ import ( . "github.com/onsi/gomega" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/utils/pointer" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" ) @@ -25,7 +26,7 @@ var _ = Describe("non-linear minor upgrade of a TenantControlPlane Kubernetes ve Spec: kamajiv1alpha1.TenantControlPlaneSpec{ ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), }, Service: kamajiv1alpha1.ServiceSpec{ ServiceType: "ClusterIP", diff --git a/e2e/tcp_validation_version_unsupport_test.go b/e2e/tcp_validation_version_unsupport_test.go index 32d2708..3140f6c 100644 --- a/e2e/tcp_validation_version_unsupport_test.go +++ b/e2e/tcp_validation_version_unsupport_test.go @@ -13,6 +13,7 @@ import ( . "github.com/onsi/gomega" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/utils/pointer" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" "github.com/clastix/kamaji/internal/upgrade" @@ -35,7 +36,7 @@ var _ = Describe("using an unsupported TenantControlPlane Kubernetes version", f Spec: kamajiv1alpha1.TenantControlPlaneSpec{ ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), }, Service: kamajiv1alpha1.ServiceSpec{ ServiceType: "ClusterIP", @@ -63,7 +64,7 @@ var _ = Describe("using an unsupported TenantControlPlane Kubernetes version", f Spec: kamajiv1alpha1.TenantControlPlaneSpec{ ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), }, Service: kamajiv1alpha1.ServiceSpec{ ServiceType: "ClusterIP", diff --git a/e2e/worker_kubeadm_join_test.go b/e2e/worker_kubeadm_join_test.go index 15f705f..045b644 100644 --- a/e2e/worker_kubeadm_join_test.go +++ b/e2e/worker_kubeadm_join_test.go @@ -21,6 +21,7 @@ import ( "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/cmd/kubeadm/app/cmd" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" + "k8s.io/utils/pointer" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" ) @@ -43,7 +44,7 @@ var _ = Describe("starting a kind worker with kubeadm", func() { Spec: kamajiv1alpha1.TenantControlPlaneSpec{ ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), }, Service: kamajiv1alpha1.ServiceSpec{ ServiceType: "NodePort", diff --git a/e2e/worker_tcp_change_port_test.go b/e2e/worker_tcp_change_port_test.go index 63617bc..2ccf820 100644 --- a/e2e/worker_tcp_change_port_test.go +++ b/e2e/worker_tcp_change_port_test.go @@ -17,6 +17,7 @@ import ( "k8s.io/apimachinery/pkg/version" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" + "k8s.io/utils/pointer" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" ) @@ -38,7 +39,7 @@ var _ = Describe("validating kubeconfig", func() { Spec: kamajiv1alpha1.TenantControlPlaneSpec{ ControlPlane: kamajiv1alpha1.ControlPlane{ Deployment: kamajiv1alpha1.DeploymentSpec{ - Replicas: 1, + Replicas: pointer.Int32(1), }, Service: kamajiv1alpha1.ServiceSpec{ ServiceType: "NodePort", diff --git a/internal/builders/controlplane/deployment.go b/internal/builders/controlplane/deployment.go index 78fd46e..6164bcc 100644 --- a/internal/builders/controlplane/deployment.go +++ b/internal/builders/controlplane/deployment.go @@ -928,7 +928,7 @@ func (d Deployment) setSelector(deploymentSpec *appsv1.DeploymentSpec, tcp kamaj } func (d Deployment) setReplicas(deploymentSpec *appsv1.DeploymentSpec, tcp kamajiv1alpha1.TenantControlPlane) { - deploymentSpec.Replicas = pointer.Int32(tcp.Spec.ControlPlane.Deployment.Replicas) + deploymentSpec.Replicas = tcp.Spec.ControlPlane.Deployment.Replicas } func (d Deployment) setRuntimeClass(spec *corev1.PodSpec, tcp kamajiv1alpha1.TenantControlPlane) { diff --git a/internal/builders/controlplane/konnectivity_server.go b/internal/builders/controlplane/konnectivity_server.go index 9509288..1153d29 100644 --- a/internal/builders/controlplane/konnectivity_server.go +++ b/internal/builders/controlplane/konnectivity_server.go @@ -255,7 +255,7 @@ func (k Konnectivity) buildVolumes(status kamajiv1alpha1.KonnectivityStatus, pod } func (k Konnectivity) Build(deployment *appsv1.Deployment, tenantControlPlane kamajiv1alpha1.TenantControlPlane) { - k.buildKonnectivityContainer(tenantControlPlane.Spec.Addons.Konnectivity, tenantControlPlane.Spec.ControlPlane.Deployment.Replicas, &deployment.Spec.Template.Spec) + k.buildKonnectivityContainer(tenantControlPlane.Spec.Addons.Konnectivity, *tenantControlPlane.Spec.ControlPlane.Deployment.Replicas, &deployment.Spec.Template.Spec) k.buildVolumeMounts(&deployment.Spec.Template.Spec) k.buildVolumes(tenantControlPlane.Status.Addons.Konnectivity, &deployment.Spec.Template.Spec) diff --git a/internal/webhook/handlers/tcp_defaults.go b/internal/webhook/handlers/tcp_defaults.go index d3af59e..c0ef1dc 100644 --- a/internal/webhook/handlers/tcp_defaults.go +++ b/internal/webhook/handlers/tcp_defaults.go @@ -10,6 +10,7 @@ import ( "github.com/pkg/errors" "gomodules.xyz/jsonpatch/v2" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/utils/pointer" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" @@ -35,6 +36,10 @@ func (t TenantControlPlaneDefaults) OnCreate(object runtime.Object) AdmissionRes return operations, nil } + if tcp.Spec.ControlPlane.Deployment.Replicas == nil { + tcp.Spec.ControlPlane.Deployment.Replicas = pointer.Int32(2) + } + return nil, nil } } @@ -55,6 +60,10 @@ func (t TenantControlPlaneDefaults) OnUpdate(object runtime.Object, oldObject ru return nil, fmt.Errorf("DataStore is a required field") } + if newTCP.Spec.ControlPlane.Deployment.Replicas == nil { + newTCP.Spec.ControlPlane.Deployment.Replicas = pointer.Int32(2) + } + return nil, nil } }