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