From c00df62ff7840d6ffe6be465e8a154d6aba6f535 Mon Sep 17 00:00:00 2001 From: Dario Tranchitella Date: Mon, 5 Dec 2022 10:42:40 +0100 Subject: [PATCH] feat(konnectivity)!: support for extra args --- api/v1alpha1/tenantcontrolplane_types.go | 11 ++++-- api/v1alpha1/zz_generated.deepcopy.go | 31 ++++++++++++++- internal/resources/konnectivity/agent.go | 25 ++++++------ .../konnectivity/deployment_resource.go | 39 ++++++++++--------- 4 files changed, 73 insertions(+), 33 deletions(-) diff --git a/api/v1alpha1/tenantcontrolplane_types.go b/api/v1alpha1/tenantcontrolplane_types.go index ec7fb79..25e11b4 100644 --- a/api/v1alpha1/tenantcontrolplane_types.go +++ b/api/v1alpha1/tenantcontrolplane_types.go @@ -138,6 +138,9 @@ type ImageOverrideTrait struct { ImageTag string `json:"imageTag,omitempty"` } +// ExtraArgs allows adding additional arguments to said component. +type ExtraArgs []string + type KonnectivityServerSpec struct { // The port which Konnectivity server is listening to. Port int32 `json:"port"` @@ -149,6 +152,7 @@ type KonnectivityServerSpec struct { Image string `json:"image,omitempty"` // Resources define the amount of CPU and memory to allocate to the Konnectivity server. Resources *corev1.ResourceRequirements `json:"resources,omitempty"` + ExtraArgs ExtraArgs `json:"extraArgs,omitempty"` } type KonnectivityAgentSpec struct { @@ -157,13 +161,14 @@ type KonnectivityAgentSpec struct { AgentImage string `json:"agentImage,omitempty"` // Version for Konnectivity agent. // +kubebuilder:default=v0.0.32 - Version string `json:"version,omitempty"` + Version string `json:"version,omitempty"` + ExtraArgs ExtraArgs `json:"extraArgs,omitempty"` } // KonnectivitySpec defines the spec for Konnectivity. type KonnectivitySpec struct { - KonnectivityServerSpec `json:"server,omitempty"` - KonnectivityAgentSpec `json:"agent,omitempty"` + KonnectivityServerSpec KonnectivityServerSpec `json:"server,omitempty"` + KonnectivityAgentSpec KonnectivityAgentSpec `json:"agent,omitempty"` } // AddonsSpec defines the enabled addons and their features. diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 0d27d21..2ad8f41 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -638,6 +638,25 @@ func (in *ExternalKubernetesObjectStatus) DeepCopy() *ExternalKubernetesObjectSt return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in ExtraArgs) DeepCopyInto(out *ExtraArgs) { + { + in := &in + *out = make(ExtraArgs, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExtraArgs. +func (in ExtraArgs) DeepCopy() ExtraArgs { + if in == nil { + return nil + } + out := new(ExtraArgs) + in.DeepCopyInto(out) + return *out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ImageOverrideTrait) DeepCopyInto(out *ImageOverrideTrait) { *out = *in @@ -672,6 +691,11 @@ func (in *IngressSpec) DeepCopy() *IngressSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KonnectivityAgentSpec) DeepCopyInto(out *KonnectivityAgentSpec) { *out = *in + if in.ExtraArgs != nil { + in, out := &in.ExtraArgs, &out.ExtraArgs + *out = make(ExtraArgs, len(*in)) + copy(*out, *in) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KonnectivityAgentSpec. @@ -707,6 +731,11 @@ func (in *KonnectivityServerSpec) DeepCopyInto(out *KonnectivityServerSpec) { *out = new(v1.ResourceRequirements) (*in).DeepCopyInto(*out) } + if in.ExtraArgs != nil { + in, out := &in.ExtraArgs, &out.ExtraArgs + *out = make(ExtraArgs, len(*in)) + copy(*out, *in) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KonnectivityServerSpec. @@ -723,7 +752,7 @@ func (in *KonnectivityServerSpec) DeepCopy() *KonnectivityServerSpec { func (in *KonnectivitySpec) DeepCopyInto(out *KonnectivitySpec) { *out = *in in.KonnectivityServerSpec.DeepCopyInto(&out.KonnectivityServerSpec) - out.KonnectivityAgentSpec = in.KonnectivityAgentSpec + in.KonnectivityAgentSpec.DeepCopyInto(&out.KonnectivityAgentSpec) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KonnectivitySpec. diff --git a/internal/resources/konnectivity/agent.go b/internal/resources/konnectivity/agent.go index a68c8a3..cca60dd 100644 --- a/internal/resources/konnectivity/agent.go +++ b/internal/resources/konnectivity/agent.go @@ -164,19 +164,22 @@ func (r *Agent) mutate(ctx context.Context, tenantControlPlane *kamajiv1alpha1.T r.resource.Spec.Template.Spec.Containers = make([]corev1.Container, 1) } - r.resource.Spec.Template.Spec.Containers[0].Image = fmt.Sprintf("%s:%s", tenantControlPlane.Spec.Addons.Konnectivity.AgentImage, tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityServerSpec.Version) + r.resource.Spec.Template.Spec.Containers[0].Image = fmt.Sprintf("%s:%s", tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityAgentSpec.AgentImage, tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityServerSpec.Version) r.resource.Spec.Template.Spec.Containers[0].Name = AgentName r.resource.Spec.Template.Spec.Containers[0].Command = []string{"/proxy-agent"} - r.resource.Spec.Template.Spec.Containers[0].Args = []string{ - "-v=8", - "--logtostderr=true", - "--ca-cert=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt", - fmt.Sprintf("--proxy-server-host=%s", address), - fmt.Sprintf("--proxy-server-port=%d", tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityServerSpec.Port), - "--admin-server-port=8133", - "--health-server-port=8134", - "--service-account-token-path=/var/run/secrets/tokens/konnectivity-agent-token", - } + + args := utilities.ArgsFromSliceToMap(tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityAgentSpec.ExtraArgs) + + args["-v"] = "8" + args["--logtostderr"] = "true" + args["--ca-cert="] = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt" + args["--proxy-server-host"] = address + args["--proxy-server-port"] = fmt.Sprintf("%d", tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityServerSpec.Port) + args["--admin-server-port"] = "8133" + args["--health-server-port"] = "8134" + args["--service-account-token-path"] = "/var/run/secrets/tokens/konnectivity-agent-token" + + r.resource.Spec.Template.Spec.Containers[0].Args = utilities.ArgsFromMapToSlice(args) r.resource.Spec.Template.Spec.Containers[0].VolumeMounts = []corev1.VolumeMount{ { MountPath: "/var/run/secrets/tokens", diff --git a/internal/resources/konnectivity/deployment_resource.go b/internal/resources/konnectivity/deployment_resource.go index fb9a066..c2c5603 100644 --- a/internal/resources/konnectivity/deployment_resource.go +++ b/internal/resources/konnectivity/deployment_resource.go @@ -131,23 +131,26 @@ func (r *KubernetesDeploymentResource) syncContainer(tenantControlPlane *kamajiv r.resource.Spec.Template.Spec.Containers[index].Name = konnectivityServerName r.resource.Spec.Template.Spec.Containers[index].Image = fmt.Sprintf("%s:%s", tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityServerSpec.Image, tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityAgentSpec.Version) r.resource.Spec.Template.Spec.Containers[index].Command = []string{"/proxy-server"} - r.resource.Spec.Template.Spec.Containers[index].Args = []string{ - "-v=8", - "--logtostderr=true", - fmt.Sprintf("--uds-name=%s/konnectivity-server.socket", konnectivityServerPath), - "--cluster-cert=/etc/kubernetes/pki/apiserver.crt", - "--cluster-key=/etc/kubernetes/pki/apiserver.key", - "--mode=grpc", - "--server-port=0", - fmt.Sprintf("--agent-port=%d", tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityServerSpec.Port), - "--admin-port=8133", - "--health-port=8134", - "--agent-namespace=kube-system", - fmt.Sprintf("--agent-service-account=%s", AgentName), - "--kubeconfig=/etc/kubernetes/konnectivity-server.conf", - fmt.Sprintf("--authentication-audience=%s", CertCommonName), - fmt.Sprintf("--server-count=%d", tenantControlPlane.Spec.ControlPlane.Deployment.Replicas), - } + + args := utilities.ArgsFromSliceToMap(tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityServerSpec.ExtraArgs) + + args["-v"] = "8" + args["--logtostderr"] = "true" + args["--uds-name"] = fmt.Sprintf("%s/konnectivity-server.socket", konnectivityServerPath) + args["--cluster-cert"] = "/etc/kubernetes/pki/apiserver.crt" + args["--cluster-key"] = "/etc/kubernetes/pki/apiserver.key" + args["--mode"] = "grpc" + args["--server-port"] = "0" + args["--agent-port"] = fmt.Sprintf("%d", tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityServerSpec.Port) + args["--admin-port"] = "8133" + args["--health-port"] = "8134" + args["--agent-namespace"] = "kube-system" + args["--agent-service-account"] = AgentName + args["--kubeconfig"] = "/etc/kubernetes/konnectivity-server.conf" + args["--authentication-audience"] = CertCommonName + args["--server-count"] = fmt.Sprintf("%d", tenantControlPlane.Spec.ControlPlane.Deployment.Replicas) + + r.resource.Spec.Template.Spec.Containers[index].Args = utilities.ArgsFromMapToSlice(args) r.resource.Spec.Template.Spec.Containers[index].LivenessProbe = &corev1.Probe{ InitialDelaySeconds: 30, TimeoutSeconds: 60, @@ -203,7 +206,7 @@ func (r *KubernetesDeploymentResource) syncContainer(tenantControlPlane *kamajiv Requests: nil, } - if resources := tenantControlPlane.Spec.Addons.Konnectivity.Resources; resources != nil { + if resources := tenantControlPlane.Spec.Addons.Konnectivity.KonnectivityServerSpec.Resources; resources != nil { r.resource.Spec.Template.Spec.Containers[index].Resources = *resources } }