export default async function aksKaitoGenerateYaml()

in src/commands/aksKaito/akskaitoGenerateYaml.ts [11:100]


export default async function aksKaitoGenerateYaml(_context: IActionContext, target: unknown): Promise<void> {
    const cloudExplorer = await k8s.extension.cloudExplorer.v1;
    const kubectl = await k8s.extension.kubectl.v1;

    const sessionProvider = await getReadySessionProvider();
    if (failed(sessionProvider)) {
        vscode.window.showErrorMessage(sessionProvider.error);
        return;
    }

    const clusterNode = getAksClusterTreeNode(target, cloudExplorer);
    if (failed(clusterNode)) {
        vscode.window.showErrorMessage(clusterNode.error);
        return;
    }

    const extension = getExtension();
    if (failed(extension)) {
        vscode.window.showErrorMessage(extension.error);
        return undefined;
    }

    if (!kubectl.available) {
        vscode.window.showWarningMessage(`Kubectl is unavailable.`);
        return;
    }

    const clusterName = clusterNode.result.name;
    const subscriptionId = clusterNode.result.subscriptionId;
    const resourceGroupName = clusterNode.result.resourceGroupName;

    const filterKaitoPodNames = await longRunning(`Checking if KAITO is installed.`, () => {
        return filterPodImage(
            sessionProvider.result,
            kubectl,
            subscriptionId,
            resourceGroupName,
            clusterName,
            "mcr.microsoft.com/aks/kaito",
        );
    });

    if (failed(filterKaitoPodNames)) {
        vscode.window.showErrorMessage(filterKaitoPodNames.error);
        return;
    }

    // Check if Kaito pods  exist
    if (filterKaitoPodNames.result.length === 0) {
        vscode.window.showWarningMessage(
            `Please install KAITO for cluster ${clusterName}. \n \n Kaito Workspace generation is only enabled when KAITO is installed. Skipping generation.`,
        );
        return;
    }

    // Pick a standard supported models for KAITO from config file within
    const kaitoSelectedModels = await vscode.window.showQuickPick(listKaitoSUpportedModel(), {
        canPickMany: true,
        placeHolder: "Please select current supported KAITO model.",
        title: "KAITO Supported Model.",
    });

    if (!kaitoSelectedModels) {
        vscode.window.showErrorMessage("No LLM Model Selected.");
        return;
    }

    const selectedNodes = kaitoSelectedModels.map((item) => item).join(",");

    // Configure the starter workflow data.
    const starterWorkflowYaml = getWorkflowYaml("kaitoworkspace");
    if (failed(starterWorkflowYaml)) {
        vscode.window.showErrorMessage(starterWorkflowYaml.error);
        return;
    }

    const substitutedYaml = substituteClusterInWorkflowYaml(
        starterWorkflowYaml.result,
        "Standard_NC12s_v3",
        selectedNodes,
    );

    // Display it to the end-user in their vscode editor.
    const doc = await vscode.workspace.openTextDocument({
        content: substitutedYaml,
        language: "yaml",
    });

    vscode.window.showTextDocument(doc);
}