UNPKG

@catladder/cli

Version:

Panter cli tool for cloud CI/CD and DevOps

46 lines (41 loc) 1.47 kB
import type { ComponentContext } from "@catladder/pipeline"; import { getKubernetesNamespace } from "@catladder/pipeline"; import type { V1ObjectMeta } from "@kubernetes/client-node"; import { V1Namespace } from "@kubernetes/client-node"; import { getk8sApi } from "../../../../../k8sApi"; export default async function (context: ComponentContext) { const namespace = getKubernetesNamespace(context.fullConfig, context.env); const namespaceBody = new V1Namespace(); const metadata: V1ObjectMeta = { name: namespace, labels: { customerName: context.fullConfig.customerName, appName: context.fullConfig.appName, environment: context.env, components: Object.keys(context.fullConfig.components).join("_"), // limited chars available... ...(context.fullConfig.meta?.labels ?? {}), }, }; namespaceBody.metadata = metadata; const k8sApi = getk8sApi(); try { await k8sApi.readNamespace(namespace); await k8sApi.patchNamespace( namespace, namespaceBody, undefined, undefined, undefined, undefined, { headers: { "content-type": "application/merge-patch+json" } }, // see https://github.com/kubernetes-client/javascript/issues/443 ); // update meta data } catch (e) { if (e.response?.body?.reason === "NotFound") { await k8sApi.createNamespace(namespaceBody); } else { console.error(e.response?.body); throw e; } } return namespace; }