Skip to content

The install's outcome.

GET
/v1/installer/report
Code sample: Shell / cURL
curl --request GET \
--url https://192.0.2.10:9443/v1/installer/report \
--header 'Authorization: <Authorization>'

The console and API URLs, the readiness verdict, the first admin’s email and, while it still signs in, the install-time password (see adminPasswordState), where the admin’s credential file is, the log path, and on failure the step that failed and whether a re-run is safe. Once the install has succeeded, where OpenBao’s unseal key is kept (openbaoUnsealFrom) and, while the install-time password is shown, OpenBao’s recovery key. Before any install finished, outcome is none. Once the install has succeeded, clientSetup says how to reach the cloud from the LAN: the route for the floating IPs and the DNS forward for the parent domain, with ready-to-paste commands per client OS.

The report.

Media typeapplication/json
object
phase
required

configuring until an install starts; installing while one runs; done after one succeeded; failed after the latest one failed.

string
Allowed values: configuring installing done failed
outcome
required
string
Allowed values: none success failure
attempt
required
integer
consoleUrl
string
apiUrl
string
adminEmail
string
adminCredentialFile
required

Where the first admin’s generated password is on the node (root-only). The report returns the password itself only while adminPasswordState is initial.

string
adminPasswordState

Whether the report can show the first admin’s install-time password, checked against the node’s control plane at every request. Present once the install has succeeded. initial: it is still the admin’s current, one-time password; adminPassword carries it. changed: someone has set a new one, so the install-time password no longer signs in and is not shown. unknown: the installer could not tell (the control plane did not answer, or the credential file is unreadable); the password is not shown, and adminCredentialFile says where to read it on the node.

string
Allowed values: initial changed unknown
adminPassword

The first admin’s install-time password. Present only when adminPasswordState is initial: the install succeeded and this is still the admin’s current password. It is a one-time password: the first sign-in (console or stratumctl login) must choose a new one before anything else works. Read at every request and never stored in the report on disk, so it disappears as soon as it is changed.

string
openbaoUnsealFrom

Where OpenBao’s unseal key is kept on this node, read at every request. Present once the install has succeeded. tpm: sealed to this node’s TPM; OpenBao unseals at boot through the TPM and no plaintext copy is on disk. disk: in plaintext in /var/lib/stratum/openbao-init.json, which OpenBao unseals from at boot (a node with no TPM): anyone who can read this disk can read every secret OpenBao holds; readiness warns OpenBaoUnsealKeyOnDisk. unknown: the record could not be read.

string
Allowed values: tpm disk unknown
openbaoRecoveryKey

OpenBao’s recovery key: its unseal key, the one way to unseal OpenBao when this node’s TPM cannot give the key back (a cleared or replaced TPM), or the node’s disk is lost. Shown with the install-time password, so only while adminPasswordState is initial: store it off the node before the first sign-in. Read at every request and never stored in the report on disk. On the node, root can print it again with stratum-bootstrap recover openbao-key.

string
readiness
object
ready
required
boolean
checkedAt
string format: date-time
blocking
required

The codes of the findings that block the CLUSTER (ready is false while this is not empty), each once. A blocker of one service (databases, Kubernetes, S3) is in serviceBlocking instead.

Array<string>
serviceBlocking

What keeps a service not ready, one entry per service and finding code with its subjects, from the control plane’s services.<name>.blocking. It does not hold the install up: on a new cluster the databases and Kubernetes services wait for an operator image to be built.

Array<object>
object
service
required
string
code
required
string
subjects
required
Array<string>
warnings
required
Array<string>
error

Why readiness could not be read.

string
settling

The cloud’s first convergence after install. While phase is settling, warnings are held by the control plane and warnings is empty; a page shows “Starting: ready of total”.

object
phase
required
string
Allowed values: settling ready degraded
ready
required
integer
total
required
integer
logPath
required
string
nodeConfigPath
required
string
failedStep

The verdict’s failedStep. Present on failure.

string
failedStepTitle

What a person is told the failed step is, e.g. “Preparing storage” for firstboot/storage. Set for every failedStep the installer reports, including one a front end has never seen, so it needs no table of step names. Absent on success.

string
error
string
rerunSafe
required

On failure, the verdict’s rerunSafe: whether starting the install again is safe after the step that failed. On success, whether running firstboot again over this finished install is known to be safe: true for a single node, false for a cluster’s first node (not proven).

boolean
rerunReason

The verdict’s rerunReason. Present on failure.

string
recovery

The verdict’s recovery (CLI text; a browser front end shows recoveryActions). Present on failure when a re-run is not safe.

string
recoveryActions

What a person can do after a failure whose re-run is not safe, in the order to offer it. recovery says the same in one text for the CLI; a front end renders each action in its own medium. Present exactly when recovery is.

Array<string>
Allowed values: download-diagnostics reinstall rerun-unsafe recheck-readiness
recheckReadiness
required

The verdict’s recheckReadiness: POST /v1/installer/install/recheck-readiness is accepted.

boolean
startedAt
string format: date-time
finishedAt
string format: date-time
clientSetup

How to reach the cloud from the LAN, from the installed node.yaml and the address the node’s DNS answers on. Present once the install has succeeded.

object
routes
required

The floating-IP ranges (node.yaml network.floating_ip_cidrs, in network form), each to route via nextHop.

Array<string>
nextHop
required

The node’s LAN address, the next hop of every route.

string
dns

Conditional forwarding: send domain and every name under it to server, port port. Absent when the node serves no DNS on the LAN (no LAN address was named or detected).

object
domain
required

The parent domain (node.yaml dns.parent_domain).

string
server
required

The node’s LAN address, where its authoritative DNS answers.

string
port
required

Always 53.

integer
hosts

The hosts-file fallback, for a machine whose resolver cannot forward a domain: the front-door names, all on one address. Load balancer and instance names come and go, so they need the DNS forward. Absent with dns.

object
address
required
string
names
required
Array<string>
snippets
required

Per client OS, in this order, linux, linux-networkmanager, macos, windows, then hosts when there is a hosts entry.

Array<object>
object
client
required

linux: ip route and a systemd-resolved drop-in. linux-networkmanager: the route on the NetworkManager connection that reaches the node, so it survives a reboot, and the same drop-in. macos: route add and /etc/resolver/<domain>. windows: route -p add and an NRPT rule (Add-DnsClientNrptRule), in PowerShell as Administrator. hosts: the line to add to the hosts file.

string
Allowed values: linux linux-networkmanager macos windows hosts
title
required

A short label, e.g. “macOS”.

string
text
required

Ready to paste: one command per line, with no comment lines (zsh, the macOS shell, does not take comments typed at its prompt). For hosts, the line to add to the hosts file.

string
note

What a person should know before pasting it, e.g. how long the route lasts.

string
imagesNote

The install registers no images. Present once the install has succeeded: “No images are installed. Add images from Platform > Global Images (Add base images) or upload a qcow2.” (POST /v1/images/upload on the cloud’s API).

string

Example

{
"phase": "configuring",
"outcome": "none",
"adminPasswordState": "initial",
"openbaoUnsealFrom": "tpm",
"readiness": {
"serviceBlocking": [
{
"service": "db",
"code": "OperatorRecipeNeverBuilt"
}
],
"settling": {
"phase": "settling"
}
},
"recoveryActions": [
"download-diagnostics"
],
"clientSetup": {
"snippets": [
{
"client": "linux"
}
]
}
}

No install code, or the wrong one.

Media typeapplication/problem+json

RFC 7807 problem details, the control plane’s shape.

object
type
required
string
title
required
string
status
required
integer
>= 400 <= 599
detail
string
code
required
string
requestId
required
string
errors

Field errors, for INVALID_CONFIG.

Array<object>
object
field
required

The structured field (network.floatingIpCidrs[1]); empty for the whole config. For a raw YAML draft, the node.yaml key.

string
message
required
string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"code": "example",
"requestId": "example",
"errors": [
{
"field": "example",
"message": "example"
}
]
}

Too many wrong install codes; wait for Retry-After.

Media typeapplication/problem+json

RFC 7807 problem details, the control plane’s shape.

object
type
required
string
title
required
string
status
required
integer
>= 400 <= 599
detail
string
code
required
string
requestId
required
string
errors

Field errors, for INVALID_CONFIG.

Array<object>
object
field
required

The structured field (network.floatingIpCidrs[1]); empty for the whole config. For a raw YAML draft, the node.yaml key.

string
message
required
string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"code": "example",
"requestId": "example",
"errors": [
{
"field": "example",
"message": "example"
}
]
}
Retry-After
integer

Seconds until the next attempt is considered.

The installer failed to answer.

Media typeapplication/problem+json

RFC 7807 problem details, the control plane’s shape.

object
type
required
string
title
required
string
status
required
integer
>= 400 <= 599
detail
string
code
required
string
requestId
required
string
errors

Field errors, for INVALID_CONFIG.

Array<object>
object
field
required

The structured field (network.floatingIpCidrs[1]); empty for the whole config. For a raw YAML draft, the node.yaml key.

string
message
required
string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"code": "example",
"requestId": "example",
"errors": [
{
"field": "example",
"message": "example"
}
]
}