// SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023-Present The Pepr Authors import { KubernetesListObject } from "@kubernetes/client-node"; import { K8s, kind } from "kubernetes-fluent-client"; import { Command } from "commander"; export default function (program: Command): void { program .command("uuid [uuid]") .description("Module UUID(s) currently deployed in the cluster") .action(async uuid => { const deployments = await getPeprDeploymentsByUUID(uuid); const uuidTable = buildUUIDTable(deployments); const uuidTableEntries = Object.entries(uuidTable).map(([uuid, description]) => ({ UUID: uuid, Description: description, })); console.table(uuidTableEntries); }); } export async function getPeprDeploymentsByUUID( uuid?: string, ): Promise> { const k8sQuery = K8s(kind.Deployment).InNamespace("pepr-system"); let deployments = uuid ? await k8sQuery.WithLabel("pepr.dev/uuid", uuid).Get() : await k8sQuery.WithLabel("pepr.dev/uuid").Get(); if (uuid) { deployments = { ...deployments, items: deployments.items.filter( deploy => deploy.metadata?.labels?.["pepr.dev/uuid"] === uuid, ), }; } return deployments; } export function buildUUIDTable( deployments: KubernetesListObject, ): Record { const uuidTable: Record = {}; deployments.items.forEach(deploy => { const uuid = deploy.metadata?.labels?.["pepr.dev/uuid"] || ""; const description = deploy.metadata?.annotations?.["pepr.dev/description"] || ""; if (uuid !== "") { uuidTable[uuid] = description; } }); return uuidTable; }