From 11c315289ce78cbd7f73769f34edd7b0243efc58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Matuszak?= <33951102+matmichal@users.noreply.github.com> Date: Sun, 4 Jan 2026 19:26:57 +0100 Subject: [PATCH] feat: Make replicas optional for Konnectivity Agent mode Deployment (#1041) --- api/v1alpha1/tenantcontrolplane_types.go | 4 ++-- .../hack/kamaji.clastix.io_tenantcontrolplanes_spec.yaml | 4 ++-- .../kamaji/crds/kamaji.clastix.io_tenantcontrolplanes.yaml | 4 ++-- internal/resources/konnectivity/agent.go | 6 ++++-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/api/v1alpha1/tenantcontrolplane_types.go b/api/v1alpha1/tenantcontrolplane_types.go index cda9511..0562b7b 100644 --- a/api/v1alpha1/tenantcontrolplane_types.go +++ b/api/v1alpha1/tenantcontrolplane_types.go @@ -289,7 +289,7 @@ var ( KonnectivityAgentModeDeployment KonnectivityAgentMode = "Deployment" ) -//+kubebuilder:validation:XValidation:rule="!(self.mode == 'DaemonSet' && has(self.replicas) && self.replicas != 0) && !(self.mode == 'Deployment' && self.replicas == 0)",message="replicas must be 0 when mode is DaemonSet, and greater than 0 when mode is Deployment" +//+kubebuilder:validation:XValidation:rule="!(self.mode == 'DaemonSet' && has(self.replicas) && self.replicas != 0) && !(self.mode == 'Deployment' && has(self.replicas) && self.replicas == 0)",message="replicas must be 0 (or unset) when mode is DaemonSet, and greater than 0 (or unset) when mode is Deployment" type KonnectivityAgentSpec struct { // AgentImage defines the container image for Konnectivity's agent. @@ -318,7 +318,7 @@ type KonnectivityAgentSpec struct { // Replicas defines the number of replicas when Mode is Deployment. // Must be 0 if Mode is DaemonSet. //+kubebuilder:validation:Optional - Replicas int32 `json:"replicas,omitempty"` + Replicas *int32 `json:"replicas,omitempty"` } // KonnectivitySpec defines the spec for Konnectivity. diff --git a/charts/kamaji-crds/hack/kamaji.clastix.io_tenantcontrolplanes_spec.yaml b/charts/kamaji-crds/hack/kamaji.clastix.io_tenantcontrolplanes_spec.yaml index 17af0bb..4fb9503 100644 --- a/charts/kamaji-crds/hack/kamaji.clastix.io_tenantcontrolplanes_spec.yaml +++ b/charts/kamaji-crds/hack/kamaji.clastix.io_tenantcontrolplanes_spec.yaml @@ -178,8 +178,8 @@ versions: type: string type: object x-kubernetes-validations: - - message: replicas must be 0 when mode is DaemonSet, and greater than 0 when mode is Deployment - rule: '!(self.mode == ''DaemonSet'' && has(self.replicas) && self.replicas != 0) && !(self.mode == ''Deployment'' && self.replicas == 0)' + - message: replicas must be 0 (or unset) when mode is DaemonSet, and greater than 0 (or unset) when mode is Deployment + rule: '!(self.mode == ''DaemonSet'' && has(self.replicas) && self.replicas != 0) && !(self.mode == ''Deployment'' && has(self.replicas) && self.replicas == 0)' server: default: image: registry.k8s.io/kas-network-proxy/proxy-server diff --git a/charts/kamaji/crds/kamaji.clastix.io_tenantcontrolplanes.yaml b/charts/kamaji/crds/kamaji.clastix.io_tenantcontrolplanes.yaml index 531bdf7..5199741 100644 --- a/charts/kamaji/crds/kamaji.clastix.io_tenantcontrolplanes.yaml +++ b/charts/kamaji/crds/kamaji.clastix.io_tenantcontrolplanes.yaml @@ -186,8 +186,8 @@ spec: type: string type: object x-kubernetes-validations: - - message: replicas must be 0 when mode is DaemonSet, and greater than 0 when mode is Deployment - rule: '!(self.mode == ''DaemonSet'' && has(self.replicas) && self.replicas != 0) && !(self.mode == ''Deployment'' && self.replicas == 0)' + - message: replicas must be 0 (or unset) when mode is DaemonSet, and greater than 0 (or unset) when mode is Deployment + rule: '!(self.mode == ''DaemonSet'' && has(self.replicas) && self.replicas != 0) && !(self.mode == ''Deployment'' && has(self.replicas) && self.replicas == 0)' server: default: image: registry.k8s.io/kas-network-proxy/proxy-server diff --git a/internal/resources/konnectivity/agent.go b/internal/resources/konnectivity/agent.go index 74ea964..e2f5d19 100644 --- a/internal/resources/konnectivity/agent.go +++ b/internal/resources/konnectivity/agent.go @@ -281,8 +281,10 @@ func (r *Agent) mutate(ctx context.Context, tenantControlPlane *kamajiv1alpha1.T case kamajiv1alpha1.KonnectivityAgentModeDeployment: //nolint:forcetypeassert r.resource.(*appsv1.Deployment).Spec.Template = *podTemplateSpec - //nolint:forcetypeassert - r.resource.(*appsv1.Deployment).Spec.Replicas = pointer.To(tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityAgentSpec.Replicas) + if tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityAgentSpec.Replicas != nil { + //nolint:forcetypeassert + r.resource.(*appsv1.Deployment).Spec.Replicas = tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityAgentSpec.Replicas + } } return nil