From c3c775786cdedc6f27eb136ddbe176ea6139f67a Mon Sep 17 00:00:00 2001 From: Pablo Lara Date: Fri, 1 Nov 2024 09:30:43 +0100 Subject: [PATCH] feat: add credentials for kubernetes --- actions/providers/providers.ts | 4 +++ .../workflow/forms/via-credentials-form.tsx | 25 ++++++++++++-- .../workflow/forms/via-credentials/index.ts | 1 + .../via-credentials/k8s-credentials-form.tsx | 34 +++++++++++++++++++ types/components.ts | 9 ++++- types/formSchemas.ts | 8 ++++- 6 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 components/providers/workflow/forms/via-credentials/k8s-credentials-form.tsx diff --git a/actions/providers/providers.ts b/actions/providers/providers.ts index 58975d7987..c4b654f1bb 100644 --- a/actions/providers/providers.ts +++ b/actions/providers/providers.ts @@ -178,6 +178,10 @@ export const addCredentialsProvider = async (formData: FormData) => { client_secret: formData.get("client_secret"), refresh_token: formData.get("refresh_token"), }; + } else if (providerType === "kubernetes") { + secret = { + kubeconfig_content: formData.get("kubeconfig_content"), + }; } const bodyData = { diff --git a/components/providers/workflow/forms/via-credentials-form.tsx b/components/providers/workflow/forms/via-credentials-form.tsx index 105962c53c..5a6524ce0a 100644 --- a/components/providers/workflow/forms/via-credentials-form.tsx +++ b/components/providers/workflow/forms/via-credentials-form.tsx @@ -16,18 +16,24 @@ import { AWSCredentials, AzureCredentials, GCPCredentials, + KubernetesCredentials, } from "@/types"; import { AWScredentialsForm } from "./via-credentials/aws-credentials-form"; import { AzureCredentialsForm } from "./via-credentials/azure-credentials-form"; import { GCPcredentialsForm } from "./via-credentials/gcp-credentials-form"; +import { KubernetesCredentialsForm } from "./via-credentials/k8s-credentials-form"; type CredentialsFormSchema = z.infer< ReturnType >; // Add this type intersection to include all fields -type FormType = CredentialsFormSchema & AWSCredentials & AzureCredentials; +type FormType = CredentialsFormSchema & + AWSCredentials & + AzureCredentials & + GCPCredentials & + KubernetesCredentials; export const ViaCredentialsForm = ({ searchParams, @@ -65,7 +71,11 @@ export const ViaCredentialsForm = ({ client_secret: "", refresh_token: "", } - : {}), + : providerType === "kubernetes" + ? { + kubeconfig_content: "", + } + : {}), }, }); @@ -121,6 +131,12 @@ export const ViaCredentialsForm = ({ message: errorMessage, }); break; + case "/data/attributes/secret/kubeconfig_content": + form.setError("kubeconfig_content", { + type: "server", + message: errorMessage, + }); + break; case "/data/attributes/name": form.setError("secretName", { type: "server", @@ -164,6 +180,11 @@ export const ViaCredentialsForm = ({ control={form.control as unknown as Control} /> )} + {providerType === "kubernetes" && ( + } + /> + )} Name (Optional) ; +}) => { + return ( + <> +
+
+ Connect via Credentials +
+
+ Please provide the information for your Kubernetes credentials. +
+
+ + + ); +}; diff --git a/types/components.ts b/types/components.ts index 6d434f1264..9c84ce65ab 100644 --- a/types/components.ts +++ b/types/components.ts @@ -50,10 +50,17 @@ export type GCPCredentials = { providerId: string; }; +export type KubernetesCredentials = { + kubeconfig_content: string; + secretName: string; + providerId: string; +}; + export type CredentialsFormSchema = | AWSCredentials | AzureCredentials - | GCPCredentials; + | GCPCredentials + | KubernetesCredentials; export interface SearchParamsProps { [key: string]: string | string[] | undefined; diff --git a/types/formSchemas.ts b/types/formSchemas.ts index bffffbaf0f..ee15b5a16b 100644 --- a/types/formSchemas.ts +++ b/types/formSchemas.ts @@ -95,7 +95,13 @@ export const addCredentialsFormSchema = (providerType: string) => client_secret: z.string().nonempty("Client Secret is required"), refresh_token: z.string().nonempty("Refresh Token is required"), } - : {}), + : providerType === "kubernetes" + ? { + kubeconfig_content: z + .string() + .nonempty("Kubeconfig Content is required"), + } + : {}), }); export const editProviderFormSchema = (currentAlias: string) =>