From 9e78c71a63a122892c2aa0f797f003f2e2a4a894 Mon Sep 17 00:00:00 2001 From: tanujd11 Date: Wed, 17 Apr 2024 15:39:01 +0530 Subject: [PATCH] feat: add proxysettings for azureopenai and openai Signed-off-by: tanujd11 --- api/v1alpha1/k8sgpt_types.go | 3 +- chart/operator/templates/k8sgpt-crd.yaml | 2 ++ config/crd/bases/core.k8sgpt.ai_k8sgpts.yaml | 2 ++ pkg/resources/k8sgpt.go | 34 ++++++++++++++------ 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/api/v1alpha1/k8sgpt_types.go b/api/v1alpha1/k8sgpt_types.go index 3fc6bd8c..9843fd5f 100644 --- a/api/v1alpha1/k8sgpt_types.go +++ b/api/v1alpha1/k8sgpt_types.go @@ -95,7 +95,8 @@ type AISpec struct { // +kubebuilder:default:=true Anonymize *bool `json:"anonymized,omitempty"` // +kubebuilder:default:=english - Language string `json:"language,omitempty"` + Language string `json:"language,omitempty"` + ProxyEndpoint string `json:"proxyEndpoint,omitempty"` } type Trivy struct { diff --git a/chart/operator/templates/k8sgpt-crd.yaml b/chart/operator/templates/k8sgpt-crd.yaml index 7c811493..0f7a00a3 100644 --- a/chart/operator/templates/k8sgpt-crd.yaml +++ b/chart/operator/templates/k8sgpt-crd.yaml @@ -77,6 +77,8 @@ spec: model: default: gpt-3.5-turbo type: string + proxyEndpoint: + type: string region: type: string secret: diff --git a/config/crd/bases/core.k8sgpt.ai_k8sgpts.yaml b/config/crd/bases/core.k8sgpt.ai_k8sgpts.yaml index 755bd390..45ca2d42 100644 --- a/config/crd/bases/core.k8sgpt.ai_k8sgpts.yaml +++ b/config/crd/bases/core.k8sgpt.ai_k8sgpts.yaml @@ -76,6 +76,8 @@ spec: model: default: gpt-3.5-turbo type: string + proxyEndpoint: + type: string region: type: string secret: diff --git a/pkg/resources/k8sgpt.go b/pkg/resources/k8sgpt.go index 7d293cf6..eab6c09b 100644 --- a/pkg/resources/k8sgpt.go +++ b/pkg/resources/k8sgpt.go @@ -23,7 +23,6 @@ import ( "github.com/k8sgpt-ai/k8sgpt-operator/pkg/utils" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" - v1 "k8s.io/api/core/v1" r1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/resource" @@ -52,11 +51,11 @@ func addSecretAsEnvToDeployment(secretName string, secretKey string, if er != nil { return err.New("secret does not exist, cannot add to env of deployment") } - envVar := v1.EnvVar{ + envVar := corev1.EnvVar{ Name: secretKey, - ValueFrom: &v1.EnvVarSource{ - SecretKeyRef: &v1.SecretKeySelector{ - LocalObjectReference: v1.LocalObjectReference{ + ValueFrom: &corev1.EnvVarSource{ + SecretKeyRef: &corev1.SecretKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{ Name: secretName, }, Key: secretKey, @@ -316,7 +315,7 @@ func GetDeployment(config v1alpha1.K8sGPT, outOfClusterMode bool, c client.Clien }) deployment.Spec.Template.Spec.Volumes = append(deployment.Spec.Template.Spec.Volumes, corev1.Volume{ Name: "kubeconfig", - VolumeSource: v1.VolumeSource{ + VolumeSource: corev1.VolumeSource{ Secret: &corev1.SecretVolumeSource{ SecretName: config.Spec.Kubeconfig.Name, Items: []corev1.KeyToPath{ @@ -350,11 +349,11 @@ func GetDeployment(config v1alpha1.K8sGPT, outOfClusterMode bool, c client.Clien // check to see if key/value exists addRemoteCacheEnvVar := func(name, key string) { - envVar := v1.EnvVar{ + envVar := corev1.EnvVar{ Name: name, - ValueFrom: &v1.EnvVarSource{ - SecretKeyRef: &v1.SecretKeySelector{ - LocalObjectReference: v1.LocalObjectReference{ + ValueFrom: &corev1.EnvVarSource{ + SecretKeyRef: &corev1.SecretKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{ Name: config.Spec.RemoteCache.Credentials.Name, }, Key: key, @@ -396,6 +395,21 @@ func GetDeployment(config v1alpha1.K8sGPT, outOfClusterMode bool, c client.Clien } else if config.Spec.AI.Engine != "" && config.Spec.AI.Backend != v1alpha1.AzureOpenAI { return &appsv1.Deployment{}, err.New("engine is supported only by azureopenai provider") } + + // ProxyEndpoint is required only when azureopenai or openai is the ai backend + if config.Spec.AI.ProxyEndpoint != "" && (config.Spec.AI.Backend == v1alpha1.AzureOpenAI || config.Spec.AI.Backend == v1alpha1.OpenAI) { + proxyEndpoint := corev1.EnvVar{ + Name: "K8SGPT_PROXY_ENDPOINT", + Value: config.Spec.AI.ProxyEndpoint, + } + deployment.Spec.Template.Spec.Containers[0].Env = append( + deployment.Spec.Template.Spec.Containers[0].Env, proxyEndpoint, + ) + } else if config.Spec.AI.ProxyEndpoint != "" && config.Spec.AI.Backend != v1alpha1.AzureOpenAI && config.Spec.AI.Backend != v1alpha1.OpenAI { + return &appsv1.Deployment{}, err.New("proxyEndpoint is supported only by azureopenai and openai provider") + + } + // Add checks for amazonbedrock if config.Spec.AI.Backend == v1alpha1.AmazonBedrock { if config.Spec.AI.Secret == nil {