A convenient CLI tool to quickly spin up DragonflyBSD virtual machines using QEMU with sensible defaults.

Add CLI flag parsing for overriding virtual machine configuration in start command

+24 -2
+1
deno.json
··· 8 8 }, 9 9 "imports": { 10 10 "@cliffy/command": "jsr:@cliffy/command@^1.0.0-rc.8", 11 + "@cliffy/flags": "jsr:@cliffy/flags@^1.0.0-rc.8", 11 12 "@cliffy/table": "jsr:@cliffy/table@^1.0.0-rc.8", 12 13 "@db/sqlite": "jsr:@db/sqlite@^0.12.0", 13 14 "@paralleldrive/cuid2": "npm:@paralleldrive/cuid2@^3.0.4",
+3 -1
deno.lock
··· 3 3 "specifiers": { 4 4 "jsr:@cliffy/command@^1.0.0-rc.8": "1.0.0-rc.8", 5 5 "jsr:@cliffy/flags@1.0.0-rc.8": "1.0.0-rc.8", 6 + "jsr:@cliffy/flags@^1.0.0-rc.8": "1.0.0-rc.8", 6 7 "jsr:@cliffy/internal@1.0.0-rc.8": "1.0.0-rc.8", 7 8 "jsr:@cliffy/table@1.0.0-rc.8": "1.0.0-rc.8", 8 9 "jsr:@cliffy/table@^1.0.0-rc.8": "1.0.0-rc.8", ··· 34 35 "@cliffy/command@1.0.0-rc.8": { 35 36 "integrity": "758147790797c74a707e5294cc7285df665422a13d2a483437092ffce40b5557", 36 37 "dependencies": [ 37 - "jsr:@cliffy/flags", 38 + "jsr:@cliffy/flags@1.0.0-rc.8", 38 39 "jsr:@cliffy/internal", 39 40 "jsr:@cliffy/table@1.0.0-rc.8", 40 41 "jsr:@std/fmt@~1.0.2", ··· 157 158 "workspace": { 158 159 "dependencies": [ 159 160 "jsr:@cliffy/command@^1.0.0-rc.8", 161 + "jsr:@cliffy/flags@^1.0.0-rc.8", 160 162 "jsr:@cliffy/table@^1.0.0-rc.8", 161 163 "jsr:@db/sqlite@0.12", 162 164 "jsr:@soapbox/kysely-deno-sqlite@^2.2.0",
+20 -1
src/subcommands/start.ts
··· 1 + import { parseFlags } from "@cliffy/flags"; 1 2 import _ from "lodash"; 2 3 import { LOGS_DIR } from "../constants.ts"; 4 + import type { VirtualMachine } from "../db.ts"; 3 5 import { getInstanceState, updateInstanceState } from "../state.ts"; 4 6 import { setupNATNetworkArgs } from "../utils.ts"; 5 7 6 8 export default async function (name: string, detach: boolean = false) { 7 - const vm = await getInstanceState(name); 9 + let vm = await getInstanceState(name); 8 10 if (!vm) { 9 11 console.error( 10 12 `Virtual machine with name or ID ${name} not found.`, ··· 13 15 } 14 16 15 17 console.log(`Starting virtual machine ${vm.name} (ID: ${vm.id})...`); 18 + 19 + vm = mergeFlags(vm); 16 20 17 21 const qemuArgs = [ 18 22 ..._.compact([vm.bridge && "qemu-system-x86_64"]), ··· 98 102 } 99 103 } 100 104 } 105 + 106 + function mergeFlags(vm: VirtualMachine): VirtualMachine { 107 + const { flags } = parseFlags(Deno.args); 108 + return { 109 + ...vm, 110 + memory: flags.memory ? String(flags.memory) : vm.memory, 111 + cpus: flags.cpus ? Number(flags.cpus) : vm.cpus, 112 + cpu: flags.cpu ? String(flags.cpu) : vm.cpu, 113 + diskFormat: flags.diskFormat ? String(flags.diskFormat) : vm.diskFormat, 114 + portForward: flags.portForward ? String(flags.portForward) : vm.portForward, 115 + drivePath: flags.image ? String(flags.image) : vm.drivePath, 116 + bridge: flags.bridge ? String(flags.bridge) : vm.bridge, 117 + diskSize: flags.size ? String(flags.size) : vm.diskSize, 118 + }; 119 + }