UNPKG

sesterce-cli

Version:

A powerful command-line interface tool for managing Sesterce Cloud services. Sesterce CLI provides easy access to GPU cloud instances, AI inference services, container registries, and SSH key management directly from your terminal.

79 lines (70 loc) 2.75 kB
import { GpuCloudInstance } from "@/modules/gpu-cloud/domain/instance/instance"; import { deleteInstance } from "@/modules/gpu-cloud/use-cases/delete-instance"; import { listLaunchedInstances } from "@/modules/gpu-cloud/use-cases/list-launched-instances"; import { search } from "@inquirer/prompts"; import { Command } from "commander"; const printInstance = (instance: GpuCloudInstance) => { return `${instance.name} (${instance.gpuCount} x ${instance.gpuModel}) | ${instance.provider} | ${instance.region.name} | ${instance.status} | ${instance.hourlyPrice.toFixed(2)}`; }; export function createGpuCloudInstanceDeleteCommand( gpuCloudInstanceCommand: Command ) { gpuCloudInstanceCommand .command("delete") .description("Delete a launched instance in Sesterce Cloud") .option( "-i, --instance-id <instanceId>", "The ID of the instance to delete" ) .action(async (args) => { let instanceId = args.instanceId; if (!instanceId) { console.log("Loading launched instances..."); const result = await listLaunchedInstances.execute(); if (result.isLeft()) { console.error(result.value.message); return; } const instances = result.value; if (instances.length === 0) { console.log("No instances found"); return; } const instance = await search({ message: "Select an instance to delete", source: async (input, { signal }) => { if (!input) { return instances.map((instance) => ({ name: printInstance(instance), value: instance, })); } return instances .filter( (instance) => instance.gpuModel .toLowerCase() .includes(input.toLowerCase()) || instance.gpuCount.toString().includes(input) || instance.region.name.toLowerCase().includes(input) || instance.provider.toLowerCase().includes(input) || instance.status.toLowerCase().includes(input) || instance.name.toLowerCase().includes(input) || instance.hourlyPrice.toFixed(2).includes(input) ) .map((instance) => ({ name: printInstance(instance), value: instance, })); }, }); instanceId = instance._id; } const result = await deleteInstance.execute(instanceId); if (result.isLeft()) { console.error(result.value.message); return; } console.log("Instance deleted successfully"); }); }