Some checks failed
CI/CD / typecheck (pull_request) Failing after 13s
CI/CD / test (pull_request) Failing after 10s
CI/CD / lint (pull_request) Failing after 24s
CI/CD / build (pull_request) Has been skipped
CI/CD / publish-rpm (pull_request) Has been skipped
CI/CD / publish-deb (pull_request) Has been skipped
A machine with spare NVMe bays (thebeast: 1TB OS + 2TB + 2TB) wants the
opposite trade from the fixed 250G/300G LVs that exist to FIT a 1TB disk:
give /var/lib/longhorn and /var/lib/rancher a whole disk each and keep the
OS VG small. Until now every generator was single-disk
(ignoredisk --only-use=$DISK, one VG) and had no way to say that.
New in the shared layout (v2 only):
- DataDisks { longhorn?, rancher? }: /dev/disk/by-id paths ONLY, because
nvme0n1/nvme1n1 enumeration is not stable across boots on multi-NVMe
hosts and a swapped kernel name formats the wrong disk.
- v2Layout() drops the LV whose mount a dedicated disk supplies.
- validateDataDisks() shared by HTTP API, websocket handler and CLI, so
all three reject with the same words: by-id enforced, capability-gated
(no longhorn disk on a control-plane-only node, no rancher disk without
k3s), no double-booking one disk.
Fedora kickstart (the only generator extended; dataDisks on ubuntu/vyos
are rejected, not dropped):
- %pre resolves each by-id path to tonight's kernel name; a missing disk
fails the install loudly instead of continuing single-disk.
- Fresh disk: ONE xfs partition spanning it, labelled lab-longhorn /
lab-rancher. --grow is correct here -- consuming the disk is the point,
unlike LVs competing inside a shared VG.
- The label is on-disk truth, exactly like the lab-schema-v2 VG tag:
a reprovision rediscovers labelled disks via blkid with NO flags and
mounts them --noformat; a fresh install refuses to wipe or shadow a
labelled disk it was not told about; a label on the wrong disk, or a
data LV coexisting with a dedicated disk, aborts rather than guesses.
- --disk now also accepts a by-id path (resolved in %pre), and auto-detect
can never pick a data disk as the OS disk.
Plumbing: InstallConfig.dataDisks, POST /api/install validation,
labctl provision install --longhorn-disk/--rancher-disk, labd forwarding.
The labd command-install path also silently DROPPED schemaVersion (an
explicit --schema-version 2 on a legacy role became v1 on the far side);
it now travels with dataDisks in the protocol message.
migration/THEBEAST-K8S-WORKER.md is the concrete runbook: disk map by
serial, data still to copy off the degraded (zero-redundancy) rpool,
VLAN move, the exact labctl command, and the k8s0 join with CI/CD taint.
569 tests pass (34 new), tsc --build clean, no new lint errors.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V6HNx6cyr4J4CiMGCy1wkF
146 lines
5.1 KiB
Bash
146 lines
5.1 KiB
Bash
# labctl bash completions -- auto-generated by scripts/generate-completions.ts
|
|
# DO NOT EDIT MANUALLY -- run: pnpm completions:generate
|
|
|
|
_labctl() {
|
|
local cur prev words cword
|
|
_init_completion || return
|
|
|
|
local top_commands="version init provision config login doctor app roles"
|
|
|
|
# Extract the subcommand chain (skip options and their values)
|
|
local -a subcmd_chain=()
|
|
local i skip_next=false
|
|
for ((i=1; i < cword; i++)); do
|
|
if $skip_next; then skip_next=false; continue; fi
|
|
case "${words[i]}" in
|
|
-*) ;; # skip options
|
|
*) subcmd_chain+=("${words[i]}") ;;
|
|
esac
|
|
done
|
|
|
|
local chain_len=${#subcmd_chain[@]}
|
|
local chain_str="${subcmd_chain[*]}"
|
|
|
|
case "$chain_str" in
|
|
"init bastion standalone start")
|
|
COMPREPLY=($(compgen -W "--port --dir --domain --dhcp-mode --fedora --arch --timezone --locale --skip-dnsmasq --skip-artifacts --foreground -h --help" -- "$cur"))
|
|
return ;;
|
|
"init bastion standalone stop")
|
|
COMPREPLY=($(compgen -W "--dir -h --help" -- "$cur"))
|
|
return ;;
|
|
"init bastion standalone status")
|
|
COMPREPLY=($(compgen -W "-h --help" -- "$cur"))
|
|
return ;;
|
|
"init bastion standalone")
|
|
COMPREPLY=($(compgen -W "start stop status -h --help" -- "$cur"))
|
|
return ;;
|
|
"app labcontroller deploy")
|
|
COMPREPLY=($(compgen -W "--user --crdb-replicas -h --help" -- "$cur"))
|
|
return ;;
|
|
"app labcontroller status")
|
|
COMPREPLY=($(compgen -W "--user -h --help" -- "$cur"))
|
|
return ;;
|
|
"app k3s evacuate")
|
|
COMPREPLY=($(compgen -W "--user --allow-single-replica -h --help" -- "$cur"))
|
|
return ;;
|
|
"app k3s admit")
|
|
COMPREPLY=($(compgen -W "--user -h --help" -- "$cur"))
|
|
return ;;
|
|
"app k3s install")
|
|
COMPREPLY=($(compgen -W "--role --user --k3s-server --k3s-token --k3s-version -h --help" -- "$cur"))
|
|
return ;;
|
|
"app k3s health")
|
|
COMPREPLY=($(compgen -W "--user -h --help" -- "$cur"))
|
|
return ;;
|
|
"app k3s list")
|
|
COMPREPLY=($(compgen -W "--user -h --help" -- "$cur"))
|
|
return ;;
|
|
"app k3s kubeconfig")
|
|
COMPREPLY=($(compgen -W "--user --context --print -h --help" -- "$cur"))
|
|
return ;;
|
|
"init bastion")
|
|
COMPREPLY=($(compgen -W "standalone -h --help" -- "$cur"))
|
|
return ;;
|
|
"provision list")
|
|
COMPREPLY=($(compgen -W "-h --help" -- "$cur"))
|
|
return ;;
|
|
"provision install")
|
|
COMPREPLY=($(compgen -W "--role --os --disk --schema-version --longhorn-disk --rancher-disk --vyos-mgmt --vyos-mgmt-address --vyos-bond --vyos-bond-address --vyos-bond-vrrp --vlan-vip --vyos-vrrp-priority --vyos-mgmt-vlan --vlan --vyos-password --vyos-hwid --vyos-fresh-config --vyos-bundle --vyos-api-key --vyos-api-listen -h --help" -- "$cur"))
|
|
return ;;
|
|
"provision reprovision")
|
|
COMPREPLY=($(compgen -W "--role --os --disk --user -h --help" -- "$cur"))
|
|
return ;;
|
|
"provision debug")
|
|
COMPREPLY=($(compgen -W "--pxe-boot -h --help" -- "$cur"))
|
|
return ;;
|
|
"provision forget")
|
|
COMPREPLY=($(compgen -W "-h --help" -- "$cur"))
|
|
return ;;
|
|
"provision register")
|
|
COMPREPLY=($(compgen -W "--role --ip -h --help" -- "$cur"))
|
|
return ;;
|
|
"provision asahi")
|
|
COMPREPLY=($(compgen -W "-h --help" -- "$cur"))
|
|
return ;;
|
|
"provision logs")
|
|
COMPREPLY=($(compgen -W "-f --follow -h --help" -- "$cur"))
|
|
return ;;
|
|
"provision makeiso")
|
|
COMPREPLY=($(compgen -W "--arch --local --out -h --help" -- "$cur"))
|
|
return ;;
|
|
"provision recheck")
|
|
COMPREPLY=($(compgen -W "--user --target -h --help" -- "$cur"))
|
|
return ;;
|
|
"config list")
|
|
COMPREPLY=($(compgen -W "-h --help" -- "$cur"))
|
|
return ;;
|
|
"config get")
|
|
COMPREPLY=($(compgen -W "-h --help" -- "$cur"))
|
|
return ;;
|
|
"config set")
|
|
COMPREPLY=($(compgen -W "-h --help" -- "$cur"))
|
|
return ;;
|
|
"config path")
|
|
COMPREPLY=($(compgen -W "-h --help" -- "$cur"))
|
|
return ;;
|
|
"app labcontroller")
|
|
COMPREPLY=($(compgen -W "deploy status -h --help" -- "$cur"))
|
|
return ;;
|
|
"app k3s")
|
|
COMPREPLY=($(compgen -W "evacuate admit install health list kubeconfig -h --help" -- "$cur"))
|
|
return ;;
|
|
"version")
|
|
COMPREPLY=($(compgen -W "-h --help" -- "$cur"))
|
|
return ;;
|
|
"init")
|
|
COMPREPLY=($(compgen -W "bastion -h --help" -- "$cur"))
|
|
return ;;
|
|
"provision")
|
|
COMPREPLY=($(compgen -W "list install reprovision debug forget register asahi logs makeiso recheck -h --help" -- "$cur"))
|
|
return ;;
|
|
"config")
|
|
COMPREPLY=($(compgen -W "list get set path -h --help" -- "$cur"))
|
|
return ;;
|
|
"login")
|
|
COMPREPLY=($(compgen -W "--server -h --help" -- "$cur"))
|
|
return ;;
|
|
"doctor")
|
|
COMPREPLY=($(compgen -W "--json -h --help" -- "$cur"))
|
|
return ;;
|
|
"app")
|
|
COMPREPLY=($(compgen -W "labcontroller k3s -h --help" -- "$cur"))
|
|
return ;;
|
|
"roles")
|
|
COMPREPLY=($(compgen -W "-h --help" -- "$cur"))
|
|
return ;;
|
|
"")
|
|
COMPREPLY=($(compgen -W "$top_commands -h --help -v --version" -- "$cur"))
|
|
return ;;
|
|
*)
|
|
COMPREPLY=($(compgen -W "-h --help" -- "$cur"))
|
|
return ;;
|
|
esac
|
|
}
|
|
|
|
complete -F _labctl labctl
|