70 lines
3.3 KiB
Text
70 lines
3.3 KiB
Text
|
|
#!/usr/bin/env nu
|
||
|
|
# switch_to_vm_ops/run.nu — start keeper-daemon and verify it processes the pending backlog
|
||
|
|
|
||
|
|
def main [
|
||
|
|
--workspace: string = ""
|
||
|
|
--ops-vm-host: string = ""
|
||
|
|
--dry-run
|
||
|
|
]: nothing -> nothing {
|
||
|
|
let ws = if ($workspace | is-not-empty) { $workspace } else { $env.PLAYBOOK_PARAM_WORKSPACE? | default "" }
|
||
|
|
let vm_host = if ($ops_vm_host | is-not-empty) { $ops_vm_host } else { $env.PLAYBOOK_PARAM_OPS_VM_HOST? | default "" }
|
||
|
|
|
||
|
|
if ($ws | is-empty) { error make { msg: "workspace is required" } }
|
||
|
|
if ($vm_host | is-empty) { error make { msg: "ops-vm-host is required" } }
|
||
|
|
|
||
|
|
let playbook_dir = $env.PLAYBOOK_DIR? | default ($env.FILE_PWD | path expand)
|
||
|
|
|
||
|
|
print $"[switch_to_vm_ops] workspace=($ws) ops-vm=($vm_host) dry-run=($dry_run)"
|
||
|
|
print ""
|
||
|
|
|
||
|
|
# Step 1: validate policy
|
||
|
|
print "[step 1/6] validating keeper policy..."
|
||
|
|
let policy_r = do { ^nu ($playbook_dir | path join "steps/validate_policy.nu") --workspace $ws (if $dry_run { "--dry-run" } else { "" }) } | complete
|
||
|
|
if $policy_r.exit_code != 0 {
|
||
|
|
error make { msg: $"Policy validation failed — cannot switch to vm-ops with invalid policy: ($policy_r.stderr | str trim)" }
|
||
|
|
}
|
||
|
|
print $policy_r.stdout
|
||
|
|
|
||
|
|
# Step 2: sync policy repo
|
||
|
|
print "[step 2/6] syncing policy repo to ops-vm..."
|
||
|
|
let sync_r = do { ^nu ($playbook_dir | path join "steps/sync_policy_repo.nu") --workspace $ws --ops-vm-host $vm_host (if $dry_run { "--dry-run" } else { "" }) } | complete
|
||
|
|
if $sync_r.exit_code != 0 {
|
||
|
|
error make { msg: $"Policy sync failed: ($sync_r.stderr | str trim)" }
|
||
|
|
}
|
||
|
|
print $sync_r.stdout
|
||
|
|
|
||
|
|
# Step 3: start keeper daemon
|
||
|
|
print "[step 3/6] starting keeper-daemon..."
|
||
|
|
let start_r = do { ^nu ($playbook_dir | path join "steps/start_keeper.nu") --ops-vm-host $vm_host (if $dry_run { "--dry-run" } else { "" }) } | complete
|
||
|
|
if $start_r.exit_code != 0 {
|
||
|
|
error make { msg: $"Failed to start keeper-daemon: ($start_r.stderr | str trim)" }
|
||
|
|
}
|
||
|
|
print $start_r.stdout
|
||
|
|
|
||
|
|
# Step 4: verify health
|
||
|
|
print "[step 4/6] verifying keeper-daemon health..."
|
||
|
|
let health_r = do { ^nu ($playbook_dir | path join "steps/verify_keeper_health.nu") --ops-vm-host $vm_host (if $dry_run { "--dry-run" } else { "" }) } | complete
|
||
|
|
if $health_r.exit_code != 0 {
|
||
|
|
error make { msg: $"keeper-daemon health check failed: ($health_r.stderr | str trim)" }
|
||
|
|
}
|
||
|
|
print $health_r.stdout
|
||
|
|
|
||
|
|
# Step 5: verify backlog
|
||
|
|
print "[step 5/6] verifying backlog processing..."
|
||
|
|
let backlog_r = do { ^nu ($playbook_dir | path join "steps/verify_backlog.nu") --workspace $ws (if $dry_run { "--dry-run" } else { "" }) } | complete
|
||
|
|
if $backlog_r.exit_code != 0 {
|
||
|
|
print $" WARNING: backlog verification: ($backlog_r.stderr | str trim)"
|
||
|
|
} else {
|
||
|
|
print $backlog_r.stdout
|
||
|
|
}
|
||
|
|
|
||
|
|
# Step 6: emit audit
|
||
|
|
print "[step 6/6] emitting mode-switch audit event..."
|
||
|
|
let audit_r = do { ^nu ($playbook_dir | path join "steps/emit_audit.nu") --workspace $ws --event-type "mode_switch" --new-mode "vm-ops" (if $dry_run { "--dry-run" } else { "" }) } | complete
|
||
|
|
if $audit_r.exit_code != 0 { print $" WARNING: audit emit failed: ($audit_r.stderr | str trim)" }
|
||
|
|
|
||
|
|
print ""
|
||
|
|
print "[switch_to_vm_ops] complete"
|
||
|
|
print "Verify: keeper status should show mode=auto"
|
||
|
|
}
|