provisioning-catalog/components/buildkit_runner/scripts/destroy-runner.nu

46 lines
1.6 KiB
Text

#!/usr/bin/env nu
# Destroy an ephemeral buildkit runner VM by lease_id label.
# Idempotent: exits 0 with status="not_found" when the server is already gone.
# Outputs JSON {status, lease_id, server_id?} to stdout.
use std log
def main [
--lease_id: string
]: nothing -> nothing {
if ($lease_id | is-empty) {
error make { msg: "--lease_id is required" }
}
let list_out = do {
^hcloud server list --selector $"lease_id=($lease_id)" --output json
} | complete
if $list_out.exit_code != 0 {
error make { msg: $"hcloud server list failed:\n($list_out.stderr)" }
}
let servers = $list_out.stdout | from json
if ($servers | length) == 0 {
log info $"No server found for lease_id=($lease_id) — already destroyed or never created."
{ status: "not_found", lease_id: $lease_id } | to json
return
}
if ($servers | length) > 1 {
log warning $"Multiple servers found for lease_id=($lease_id) — destroying all ($servers | length)."
}
for server in $servers {
let server_id = $server.id
let server_name = $server.name
log info $"Deleting server ($server_name) id=($server_id)..."
let del_out = do { ^hcloud server delete $server_id } | complete
if $del_out.exit_code != 0 {
error make { msg: $"hcloud server delete ($server_id) failed:\n($del_out.stderr)" }
}
log info $"Server ($server_name) id=($server_id) deleted."
}
let first_id = $servers | first | get id
{ status: "deleted", lease_id: $lease_id, server_id: $first_id } | to json
}