@catladder/cli
Version:
Panter cli tool for cloud CI/CD and DevOps
46 lines (41 loc) • 1.47 kB
text/typescript
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;
}