From 0087fc570b373db62c1cfd3b0ce669965ad83a97 Mon Sep 17 00:00:00 2001 From: adb-sh Date: Mon, 17 Jun 2024 22:02:51 +0200 Subject: [PATCH] Convert kn api res to KnService Type --- src/components/EnvVarsInput.tsx | 20 ++++---- src/components/cloud/service/Service.tsx | 21 ++++---- src/knative.ts | 32 +++++++++++-- src/routes/cloud/apps/[app].tsx | 61 ++++++------------------ 4 files changed, 66 insertions(+), 68 deletions(-) diff --git a/src/components/EnvVarsInput.tsx b/src/components/EnvVarsInput.tsx index 9a7e0ed..7867738 100644 --- a/src/components/EnvVarsInput.tsx +++ b/src/components/EnvVarsInput.tsx @@ -1,4 +1,5 @@ import { For, type Signal, createSignal } from "solid-js"; +import { TrashIcon } from "@deploy-cat/heroicons-solid/24/solid/esm"; const [envCount, setEnvCount] = createSignal(0); const [env, setEnv] = createSignal( @@ -20,11 +21,7 @@ const parseClipboard = (text: string) => export const EnvVarsInput = () => { return ( <> -
- setEnv(parseClipboard(event.clipboardData?.getData("text") ?? "")) - } - > +
{ +
+ setEnv( + parseClipboard(event.clipboardData?.getData("text") ?? "") + ) + } + >

No Environment Variables yet!

Use Ctrl+V to paste an Env File or add manually. @@ -64,11 +68,11 @@ export const EnvVarsInput = () => { placeholder="Value" />

setEnv(env().filter((_, i) => i !== index()))} > - Remove +
)} diff --git a/src/components/cloud/service/Service.tsx b/src/components/cloud/service/Service.tsx index 04c907d..a6c6029 100644 --- a/src/components/cloud/service/Service.tsx +++ b/src/components/cloud/service/Service.tsx @@ -4,6 +4,7 @@ import { knative } from "~/k8s"; import { TrashIcon } from "@deploy-cat/heroicons-solid/24/solid/esm"; import { getUser } from "~/lib/server"; import { action, useSubmission, A } from "@solidjs/router"; +import type { Service as KnativeService } from "~/knative"; const deleteServiceFromForm = async (form: FormData) => { "use server"; @@ -16,41 +17,41 @@ const deleteServiceFromForm = async (form: FormData) => { const deleteServiceAction = action(deleteServiceFromForm, "createService"); -export const Service = ({ service }) => { +export const Service = ({ service }: { service: KnativeService }) => { const deleteServiceStatus = useSubmission(deleteServiceAction); return (
- {service.metadata.name} + + {service.name} +

- - {(container) => {container.image}} - + {service.image}

- {service.status.url} + {service.raw.status?.url}

n/a/} > - +

- + diff --git a/src/knative.ts b/src/knative.ts index 7c2c5f8..5f9a8cd 100644 --- a/src/knative.ts +++ b/src/knative.ts @@ -9,8 +9,34 @@ export type Service = { minScale: number; maxRequests: number; envVars: { [key: string]: string }; + raw?: any; }; +const toKnService = (service: any) => + ({ + name: service.metadata.name, + image: service.spec.template.spec.containers[0].image, + port: service.spec.template.spec.containers[0].ports[0].containerPort, + cpuLimit: service.spec.template.spec.containers[0].resources.limits?.cpu, + memoryLimit: + service.spec.template.spec.containers[0].resources.limits?.memory, + minScale: + service.spec.template.metadata.annotations[ + "autoscaling.knative.dev/min-scale" + ], + maxRequests: + service.spec.template.metadata.annotations[ + "autoscaling.knative.dev/target" + ], + envVars: Object.fromEntries( + service.spec.template.spec.containers[0].env?.map(({ name, value }) => [ + name, + value, + ]) ?? [] + ), + raw: service, + } as Service); + export class Knative { kubeconfig: k8s.KubeConfig; customObjectsApi: k8s.CustomObjectsApi; @@ -28,7 +54,8 @@ export class Knative { "services" ); return { - services: body?.items, + services: body?.items.map(toKnService) as Array, + raw: body, }; } @@ -40,11 +67,10 @@ export class Knative { "services", name ); - return body; + return toKnService(body); } async createService(service: Service, namespace: string) { - console.log(namespace); const { body } = await this.customObjectsApi.createNamespacedCustomObject( "serving.knative.dev", "v1", diff --git a/src/routes/cloud/apps/[app].tsx b/src/routes/cloud/apps/[app].tsx index 20ee1b3..6edb214 100644 --- a/src/routes/cloud/apps/[app].tsx +++ b/src/routes/cloud/apps/[app].tsx @@ -33,7 +33,7 @@ export default (props: RouteSectionProps) => {
no service with this name}>
-
{service()?.metadata.name}
+
{service()?.name}
{ role="tabpanel" class="tab-content bg-base-100 border-base-300 rounded-box p-6" > -

name: {service().metadata.name}

+

name: {service()?.name}

- images:{" "} - - {(container) => {container.image}} - + image {service()?.image}

url:{" "} - {service().status.url} + {service()?.raw.status.url}

n/a/} > - +

@@ -87,7 +84,7 @@ export default (props: RouteSectionProps) => { role="tabpanel" class="tab-content bg-base-100 border-base-300 rounded-box p-6" > - {JSON.stringify(service().spec.template.spec.containers[0].env)} + {JSON.stringify(service()?.envVars)}
{ role="tabpanel" class="tab-content bg-base-100 border-base-300 rounded-box p-6" > -

- cpu limit:{" "} - - {(container) => ( - - {container.name}: {container?.resources?.limits?.cpu} - - )} - -

-

- cpu limit:{" "} - - {(container) => ( - - {container.name}: {container?.resources?.limits?.memory} - - )} - -

+

cpu limit: {service()?.cpuLimit}

+

memory limit: {service()?.memoryLimit}

{ class="tab-content bg-base-100 border-base-300 rounded-box p-6" >

- target load per pod:{" "} - { - service().spec.template.metadata?.annotations?.[ - "autoscaling.knative.dev/target" - ] - }{" "} - { + target load per pod: {service()?.maxRequests} + {/* { service().spec.template.metadata?.annotations?.[ "autoscaling.knative.dev/metric" ] - } -

-

- minimum container count:{" "} - { - service().spec.template.metadata?.annotations?.[ - "autoscaling.knative.dev/min-scale" - ] - } + } */}

+

minimum container count: {service()?.minScale}