// CLI command: serve // Start the bastion server (HTTP + dnsmasq). import type { Command } from "commander"; import { startBastion } from "../../server/main.js"; export function registerServeCommand(program: Command): void { program .command("serve") .description("Start the bastion server (HTTP + dnsmasq PXE)") .option("--port ", "HTTP port", "8080") .option("--dir ", "Bastion data directory", "/tmp/lab-bastion") .option("--domain ", "Internal domain for hostnames", "ad.itaz.eu") .option("--dhcp-mode ", "DHCP mode: proxy or full", "proxy") .option("--fedora ", "Fedora version", "43") .option("--arch ", "Architecture", "x86_64") .option("--timezone ", "Timezone", "Europe/London") .option("--locale ", "Locale", "en_GB.UTF-8") .option("--skip-dnsmasq", "Skip starting dnsmasq (for testing)") .option("--skip-artifacts", "Skip downloading boot artifacts (for testing)") .action(async (opts: { port: string; dir: string; domain: string; dhcpMode: string; fedora: string; arch: string; timezone: string; locale: string; skipDnsmasq?: boolean; skipArtifacts?: boolean; }) => { await startBastion({ httpPort: parseInt(opts.port, 10), bastionDir: opts.dir, domain: opts.domain, dhcpMode: opts.dhcpMode as "proxy" | "full", fedoraVersion: opts.fedora, arch: opts.arch, timezone: opts.timezone, locale: opts.locale, skipDnsmasq: opts.skipDnsmasq, skipArtifacts: opts.skipArtifacts, }); }); }