configure
- POST /configure/decommission/wipe-result
Wipe ISO per-disk result callback (node → management)
Called by the bare wipe ISO (no auth; node matched by NIC MAC) to report per-disk wipe/verify results. Annotates status only — it never transitions node state.
- Request JSON Object:
all_verified (integer) – 1 if every targeted disk verified clean
disks[].name (string)
disks[].verified (boolean)
disks[].wiped (boolean)
macs[] (string)
success (integer)
- Status Codes:
200 OK – OK
400 Bad Request – Bad Request
- GET /configure/nodes/{bmcIP}/nics
Get NICs from remote node
Proxies request to karios-bootstrap on remote node to get NIC list
- Parameters:
bmcIP (string) – BMC IP address
- Query Parameters:
status (string) – Filter by link status (e.g., ‘up’)
- Status Codes:
200 OK – OK
404 Not Found – Not Found
500 Internal Server Error – Internal Server Error
- Response JSON Object:
nics[].bondMaster (string) – name of the existing master when IsBondSlave true
nics[].driver (string)
nics[].interfaceName (string)
nics[].ipAddress (string)
nics[].isBondMaster (boolean) – this NIC IS the bond device — never a slave candidate
nics[].isBondSlave (boolean) – already enslaved to a pre-existing bond on the target (kernel EBUSY if re-enslaved)
nics[].isManagementNIC (boolean) – host’s own mgmt-bearing NIC; never eligible for bond enslavement mid-setup
nics[].isPhysical (boolean)
nics[].linkStatus (string)
nics[].macAddress (string)
nics[].pciAddress (string)
nics[].speed (string)
- POST /configure/nodes/{bmcIP}/preflight
Run preflight check for node configuration
Returns the new node’s NICs and existing guest bridges that need NIC assignments
- Parameters:
bmcIP (string) – BMC IP address
- Status Codes:
200 OK – OK
400 Bad Request – Bad Request
404 Not Found – Not Found
500 Internal Server Error – Internal Server Error
- Response JSON Object:
bondParams (any) – BondParams (when ControlNodeHasBond) returns the control node’s bond parameters (mode/miimon/hash/rate). UI surfaces these as the negotiated LACP profile this host will join — read-only.
bootstrap_nics[].slot (integer) – 1-indexed slot number
bootstrap_nics[].tagged[].network (string) – Network role (e.g., “storage”, “guest”, “public”)
bootstrap_nics[].tagged[].vlans[] (integer)
bootstrap_nics[].untagged (string) – untagged role (e.g., “management”), empty if none
controlNodeHasBond (boolean) – ControlNodeHasBond surfaces whether the control node is already running an LACP bond. UI defaults the bond toggle to ON when true so day-2 hosts inherit the same fabric layout by default (Model B partial-bond still lets operator pick which subset of this host’s NICs to enslave).
defaultMTU (integer) – DefaultMTU and PublicMTU are read from FabricConfig (VXLAN underlay MTU and public-network MTU). UI shows them so the operator sees the bridge MTUs that will be rendered on this host — read-only, no UI override.
guestMTU (integer)
guest_bridges[].bridge (string) – bridge name (from KVMNetworkLabel on the PN’s traffic type)
guest_bridges[].networks[].name (string) – CS network display name
guest_bridges[].networks[].tagged (boolean) – true = tagged VLAN; false = untagged (native VLAN on switch port)
guest_bridges[].networks[].type (string) – “Isolated” or “Shared”
guest_bridges[].networks[].vlan (string) – VLAN ID (e.g., “4001”) or “untagged”
managementMTU (integer) – Per-role bridge MTUs resolved from control-node NetBox interface rows (cloudbr0 → mgmt, cloudbr1 → storage). 0 = will inherit DefaultMTU at render. NetBox is the canonical store; operator can edit those rows post-deploy for day-2 mutation.
mtu_warnings[] (string)
node_ip (string)
publicMTU (integer)
storageMTU (integer)
- GET /configure/nodes/{nodeIP}/decommission/logs
Audit log of the latest decommission for a node
Returns the captured audit log (tail) for the latest decommission job, the place to look when a decommission fails partway.
- Parameters:
nodeIP (string) – BMC IP address
- Status Codes:
200 OK – OK
404 Not Found – Not Found
- Response JSON Object:
audit_log (string)
content (string)
job_id (string)
node_ip (string)
truncated (boolean)
- POST /configure/nodes/{nodeIP}/decommission/preflight
Preflight checks for decommissioning a node
Read-only checks run before a node is decommissioned: node state, competing jobs, and, through Compute, whether the host’s VMs can be migrated. Reports can_proceed and requires_force (the only compute node with running VMs) so the user sees what will happen.
- Parameters:
nodeIP (string) – BMC IP address
- Status Codes:
200 OK – OK
400 Bad Request – Bad Request
404 Not Found – Not Found
- Response JSON Object:
can_proceed (boolean) – no blocking check failed
checks[].message (string)
checks[].name (string)
checks[].status (string) – “pass”, “warn”, “fail”
cpu_demand_mhz (integer)
free_cpu_mhz (integer)
free_mem_bytes (integer)
held_addresses[] (string)
mem_demand_bytes (integer)
migratable_vm_count (integer) – Per-VM migrate/destroy split (estimate), for the UI’s explicit migrate-vs-destroy choice: MigratableVMCount would fit on the survivors, NonMigratableVMCount would not and gets destroyed if the user proceeds. Names are omitted when there’s nothing to list.
migration_capacity_ok (boolean) – Migration capacity — whether the other Up hosts have enough aggregate CPU and memory to receive this node’s VMs (CPU in MHz, memory in bytes). Populated only when placement could be assessed.
migration_targets (integer) – other Up hosts that can take VMs
node_ip (string)
non_migratable_vm_count (integer)
non_migratable_vm_names[] (string)
replication_slot (string) – ReplicationSlot is the replication slot the departing management node holds on the survivor, read here while it is still streaming because that attribution is impossible once it stops. A reading, not a gate: it is carried into the teardown so the slot can be dropped, and empty is the ordinary case for a departing primary. See ha.SlotNameForStreamingClient.
requires_force (boolean) – proceeding will destroy VMs
router_count (integer)
steps[] (string)
store_served_at_admission (boolean) – StoreServedAtAdmission is recorded for the same reason as the addresses: once the node is quiesced nobody can be asked what was being served before the teardown began.
system_vm_count (integer) – System services running on the node (SSVM/CPVM + virtual routers). Non-zero means decommissioning will disrupt zone services until they are recreated.
vm_count (integer)
- GET /configure/nodes/{nodeIP}/decommission/snapshot
One-shot status + log snapshot for a decommission
- Parameters:
nodeIP (string) – BMC IP address
- Status Codes:
200 OK – OK
404 Not Found – Not Found
- Response JSON Object:
bmc_ip (string)
current_step (string)
failed (integer)
failed_step (string)
failure_reason (string) – why the failed step failed
job_id (string)
job_status (string) – running | completed | failed
log (string) – audit-log content for backfill
log_truncated (boolean)
next_action (string)
node_ip (string) – OS IP
outstanding_actions[] (string)
progress (integer) – 0-100
provision_status (string) – discovered | decommissioning
recoverable (boolean)
status (string) – human status text
steps[].error (string)
steps[].name (string)
steps[].status (string) – “succeeded”, “failed”, “skipped”, “unverified”
succeeded (integer)
total_steps (integer)
- POST /configure/nodes/{nodeIP}/decommission/status
Status of the latest decommission for a node
Returns the latest decommission job: state, per-step results, the step that failed (if any), whether it can be retried, and the next action for the user. Use the logs endpoint for full detail.
- Parameters:
nodeIP (string) – BMC IP address
- Status Codes:
200 OK – OK
404 Not Found – Not Found
- Response JSON Object:
audit_log (string)
created_at (string)
failed_step (string)
failure_reason (string) – FailureReason is the error the failed step recorded, so a caller learns why the teardown stopped and not only where. Empty unless the job failed.
id (string)
job_status (string)
job_type (string)
metadata (string)
next_action (string)
node_ip (string)
outstanding_actions[] (string)
parent_id (string)
progress (integer)
provision_status (string)
recoverable (boolean)
resource_name (string) – e.g., network name, node FQDN
status (string)
steps[].error (string)
steps[].name (string)
steps[].status (string) – “succeeded”, “failed”, “skipped”, “unverified”
total_jobs (integer)
updated_at (string)
wipe_report (string) – WipeReport holds the wipe ISO’s per-disk JSON report. The async, unauthenticated ReportWipeResult callback writes it to this dedicated column (a single-column update), NOT into Metadata above — so that best-effort write can neither drop itself nor clobber the decommission orchestrator’s per-step/resume metadata when the two race on the same job row. Read-only here (gorm “->”): it is loaded for the status endpoint but never written by the orchestrator’s full-row Save, which would otherwise overwrite it.
- POST /configure/nodes/{nodeIP}/nics/blink
Blink NIC LED on remote node
Proxies request to karios-bootstrap on remote node to blink NIC LED
- Parameters:
nodeIP (string) – BMC IP address
- Request JSON Object:
duration (integer) – seconds, default 10
interfaceName (string) – (required)
- Status Codes:
200 OK – OK
400 Bad Request – Bad Request
500 Internal Server Error – Internal Server Error
- GET /configure/nodes/{nodeIP}/rollback/logs
Audit log of the latest configure-failure rollback for a node
Returns the captured audit log (tail) for the latest rollback job, the place to look when a Configure attempt failed and was rolled back.
- Parameters:
nodeIP (string) – BMC IP address
- Status Codes:
200 OK – OK
404 Not Found – Not Found
- Response JSON Object:
audit_log (string)
content (string)
job_id (string)
node_ip (string)
truncated (boolean)
- POST /configure/nodes/{nodeIP}/rollback/status
Status of the latest configure-failure rollback for a node
Returns the latest rollback job: state, per-step results, the step that failed (if any), and the next action for the user. Use the logs endpoint for full detail. A clean rollback runs the full decommission teardown and lands the node at “discovered” holding only its BMC IP; a failed one holds it for a retry.
- Parameters:
nodeIP (string) – BMC IP address
- Status Codes:
200 OK – OK
400 Bad Request – Bad Request
404 Not Found – Not Found
- Response JSON Object:
audit_log (string)
created_at (string)
failed_step (string)
failure_reason (string) – FailureReason is the error the failed step recorded. failed_step says where the teardown stopped; this says why, which is what a user needs before deciding whether a retry can possibly work. Empty unless the job failed.
id (string)
job_status (string)
job_type (string)
metadata (string)
next_action (string)
node_ip (string)
parent_id (string)
progress (integer)
provision_status (string)
recoverable (boolean)
resource_name (string) – e.g., network name, node FQDN
status (string)
steps[].error (string)
steps[].name (string)
steps[].status (string) – “succeeded”, “failed”, “skipped”, “unverified”
total_jobs (integer)
updated_at (string)
wipe_report (string) – WipeReport holds the wipe ISO’s per-disk JSON report. The async, unauthenticated ReportWipeResult callback writes it to this dedicated column (a single-column update), NOT into Metadata above — so that best-effort write can neither drop itself nor clobber the decommission orchestrator’s per-step/resume metadata when the two race on the same job row. Read-only here (gorm “->”): it is loaded for the status endpoint but never written by the orchestrator’s full-row Save, which would otherwise overwrite it.
- POST /configure/nodes/{nodeIP}/setup
Get latest node setup status
Executes complete node setup: NIC assignments, bridges, KVM, the platform, Ceph Returns the latest setup job status for a node identified by BMC IP
- Parameters:
nodeIP (string) – BMC IP address
- Request JSON Object:
assignments (object) – NIC assignments (required) - maps interface name to network roles VLAN IDs in tagged networks will be populated from NetBox if empty (required)
benchmark_enabled (boolean) – BenchmarkEnabled opts this node into the benchmark engine. When true, the node appears in the benchmark launch panel and auto-learns hardware templates from completed runs.
bondSlaveOverride[] (string)
guest_bridges[].bridge (string) – bridge name (= network name, e.g., “sandeep1”) (required)
guest_bridges[].nic (string) – NIC name on the new node (e.g., “ens4”) (required)
role (string) – Role selects the node persona: “compute” (default) or “management”. Compute: KVM host + platform agent + Ceph OSD (if disks available). Management: Joins HA cluster (MySQL/PG replication, keepalived, DNS). No KVM, no CS agent, no addHost.
siteId (integer) – SiteID for VLAN lookup from NetBox (optional - defaults to NETBOX_SITE_ID env var)
bmc_ip (string) – (required)
- Status Codes:
200 OK – OK
202 Accepted – Accepted
400 Bad Request – Bad Request
404 Not Found – Not Found
500 Internal Server Error – Internal Server Error
- Response JSON Object:
created_at (string)
id (string)
job_status (string)
job_type (string)
metadata (string)
node_ip (string)
parent_id (string)
progress (integer)
provision_status (string)
resource_name (string) – e.g., network name, node FQDN
status (string)
total_jobs (integer)
updated_at (string)
wipe_report (string) – WipeReport holds the wipe ISO’s per-disk JSON report. The async, unauthenticated ReportWipeResult callback writes it to this dedicated column (a single-column update), NOT into Metadata above — so that best-effort write can neither drop itself nor clobber the decommission orchestrator’s per-step/resume metadata when the two race on the same job row. Read-only here (gorm “->”): it is loaded for the status endpoint but never written by the orchestrator’s full-row Save, which would otherwise overwrite it.
job_id (string)
message (string)
node_ip
steps[] (string)
- POST /configure/setup/status
Get latest node setup status
Executes complete node setup: NIC assignments, bridges, KVM, the platform, Ceph Returns the latest setup job status for a node identified by BMC IP
- Request JSON Object:
assignments (object) – NIC assignments (required) - maps interface name to network roles VLAN IDs in tagged networks will be populated from NetBox if empty (required)
benchmark_enabled (boolean) – BenchmarkEnabled opts this node into the benchmark engine. When true, the node appears in the benchmark launch panel and auto-learns hardware templates from completed runs.
bondSlaveOverride[] (string)
guest_bridges[].bridge (string) – bridge name (= network name, e.g., “sandeep1”) (required)
guest_bridges[].nic (string) – NIC name on the new node (e.g., “ens4”) (required)
role (string) – Role selects the node persona: “compute” (default) or “management”. Compute: KVM host + platform agent + Ceph OSD (if disks available). Management: Joins HA cluster (MySQL/PG replication, keepalived, DNS). No KVM, no CS agent, no addHost.
siteId (integer) – SiteID for VLAN lookup from NetBox (optional - defaults to NETBOX_SITE_ID env var)
bmc_ip (string) – (required)
- Status Codes:
200 OK – OK
202 Accepted – Accepted
400 Bad Request – Bad Request
404 Not Found – Not Found
500 Internal Server Error – Internal Server Error
- Response JSON Object:
created_at (string)
id (string)
job_status (string)
job_type (string)
metadata (string)
node_ip (string)
parent_id (string)
progress (integer)
provision_status (string)
resource_name (string) – e.g., network name, node FQDN
status (string)
total_jobs (integer)
updated_at (string)
wipe_report (string) – WipeReport holds the wipe ISO’s per-disk JSON report. The async, unauthenticated ReportWipeResult callback writes it to this dedicated column (a single-column update), NOT into Metadata above — so that best-effort write can neither drop itself nor clobber the decommission orchestrator’s per-step/resume metadata when the two race on the same job row. Read-only here (gorm “->”): it is loaded for the status endpoint but never written by the orchestrator’s full-row Save, which would otherwise overwrite it.
job_id (string)
message (string)
node_ip
steps[] (string)