diff --git a/api/v1alpha1/tenantcontrolplane_types.go b/api/v1alpha1/tenantcontrolplane_types.go index 265443a3..5f1a959f 100644 --- a/api/v1alpha1/tenantcontrolplane_types.go +++ b/api/v1alpha1/tenantcontrolplane_types.go @@ -138,7 +138,9 @@ type DeploymentSpec struct { // (kube-apiserver, controller-manager, and scheduler). Resources *ControlPlaneComponentsResources `json:"resources,omitempty"` // ExtraArgs allows adding additional arguments to the Control Plane components, - // such as kube-apiserver, controller-manager, and scheduler. + // such as kube-apiserver, controller-manager, and scheduler. WARNING - This option + // can override existing parameters and cause components to misbehave in unxpected ways. + // Only modify if you know what you are doing. ExtraArgs *ControlPlaneExtraArgs `json:"extraArgs,omitempty"` AdditionalMetadata AdditionalMetadata `json:"additionalMetadata,omitempty"` // AdditionalInitContainers allows adding additional init containers to the Control Plane deployment. diff --git a/config/crd/bases/kamaji.clastix.io_tenantcontrolplanes.yaml b/config/crd/bases/kamaji.clastix.io_tenantcontrolplanes.yaml index 3bd3749f..f949257c 100644 --- a/config/crd/bases/kamaji.clastix.io_tenantcontrolplanes.yaml +++ b/config/crd/bases/kamaji.clastix.io_tenantcontrolplanes.yaml @@ -6052,7 +6052,10 @@ spec: extraArgs: description: ExtraArgs allows adding additional arguments to the Control Plane components, such as kube-apiserver, - controller-manager, and scheduler. + controller-manager, and scheduler. WARNING - This option + can override existing parameters and cause components to + misbehave in unxpected ways. Only modify if you know what + you are doing. properties: apiServer: items: diff --git a/config/install.yaml b/config/install.yaml index 3d72db95..02291014 100644 --- a/config/install.yaml +++ b/config/install.yaml @@ -3722,7 +3722,7 @@ spec: type: object type: object extraArgs: - description: ExtraArgs allows adding additional arguments to the Control Plane components, such as kube-apiserver, controller-manager, and scheduler. + description: ExtraArgs allows adding additional arguments to the Control Plane components, such as kube-apiserver, controller-manager, and scheduler. WARNING - This option can override existing parameters and cause components to misbehave in unxpected ways. Only modify if you know what you are doing. properties: apiServer: items: diff --git a/docs/content/reference/api.md b/docs/content/reference/api.md index eef47305..71e1e497 100644 --- a/docs/content/reference/api.md +++ b/docs/content/reference/api.md @@ -1000,7 +1000,7 @@ Defining the options for the deployed Tenant Control Plane as Deployment resourc extraArgs object - ExtraArgs allows adding additional arguments to the Control Plane components, such as kube-apiserver, controller-manager, and scheduler.
+ ExtraArgs allows adding additional arguments to the Control Plane components, such as kube-apiserver, controller-manager, and scheduler. WARNING - This option can override existing parameters and cause components to misbehave in unxpected ways. Only modify if you know what you are doing.
false @@ -10320,7 +10320,7 @@ A label selector requirement is a selector that contains values, a key, and an o -ExtraArgs allows adding additional arguments to the Control Plane components, such as kube-apiserver, controller-manager, and scheduler. +ExtraArgs allows adding additional arguments to the Control Plane components, such as kube-apiserver, controller-manager, and scheduler. WARNING - This option can override existing parameters and cause components to misbehave in unxpected ways. Only modify if you know what you are doing. diff --git a/internal/builders/controlplane/deployment.go b/internal/builders/controlplane/deployment.go index 56355eb9..56dd91f7 100644 --- a/internal/builders/controlplane/deployment.go +++ b/internal/builders/controlplane/deployment.go @@ -727,7 +727,7 @@ func (d Deployment) buildKubeAPIServerCommand(tenantControlPlane kamajiv1alpha1. // Order matters, here: extraArgs could try to overwrite some arguments managed by Kamaji and that would be crucial. // Adding as first element of the array of maps, we're sure that these overrides will be sanitized by our configuration. - return utilities.MergeMaps(extraArgs, current, desiredArgs) + return utilities.MergeMaps(current, desiredArgs, extraArgs) } func (d Deployment) secretProjection(secretName, certKeyName, keyName string) *corev1.SecretProjection { diff --git a/internal/resources/konnectivity/agent.go b/internal/resources/konnectivity/agent.go index c99113bf..359aee67 100644 --- a/internal/resources/konnectivity/agent.go +++ b/internal/resources/konnectivity/agent.go @@ -164,8 +164,7 @@ func (r *Agent) mutate(ctx context.Context, tenantControlPlane *kamajiv1alpha1.T r.resource.Spec.Template.Spec.Containers[0].Name = AgentName r.resource.Spec.Template.Spec.Containers[0].Command = []string{"/proxy-agent"} - args := utilities.ArgsFromSliceToMap(tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityAgentSpec.ExtraArgs) - + args := make(map[string]string) args["-v"] = "8" args["--logtostderr"] = "true" args["--ca-cert"] = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt" @@ -175,6 +174,12 @@ func (r *Agent) mutate(ctx context.Context, tenantControlPlane *kamajiv1alpha1.T args["--health-server-port"] = "8134" args["--service-account-token-path"] = "/var/run/secrets/tokens/konnectivity-agent-token" + extraArgs := utilities.ArgsFromSliceToMap(tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityAgentSpec.ExtraArgs) + + for k, v := range extraArgs { + args[k] = v + } + r.resource.Spec.Template.Spec.Containers[0].Args = utilities.ArgsFromMapToSlice(args) r.resource.Spec.Template.Spec.Containers[0].VolumeMounts = []corev1.VolumeMount{ {