provisioning-catalog/playbooks/switch_to_vm_ops/run.nu

70 lines
3.3 KiB
Text
Raw Normal View History

#!/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"
}