Skip to content

Write node.yaml and start the install.

POST
/v1/installer/install
Code sample: Shell / cURL
curl --request POST \
--url 'https://192.0.2.10:9443/v1/installer/install?unsafeRerun=false' \
--header 'Authorization: <Authorization>' \
--header 'If-Match: "3"'

Writes the draft to /etc/stratum/node.yaml and starts stratum-bootstrap firstboot --dev-target --config /etc/stratum/node.yaml as a supervised job in its own systemd unit, so it survives a disconnected client and a restart of this service. 409 while an install runs or after one succeeded. 422 when the draft does not validate.

A failed install can be started again when its verdict says rerunSafe: firstboot is idempotent for a single node, and for a cluster’s first node (hyperconverged-init) only in the steps whose re-run is known to converge (the verdict’s rerunReason says which). After a failure in a step that is not known to be safe, the start is refused with 409 RERUN_UNSAFE, naming the step and what to do (recovery: download the diagnostics, then reinstall the node from the ISO). unsafeRerun starts it anyway, for an operator who accepts that disks and the cluster may be half-built. When only the readiness wait failed, POST /v1/installer/install/recheck-readiness re-runs just that.

If-Match is the revision of the draft the caller reviewed: the install starts only if the draft is still that revision, and is refused with 409 DRAFT_CHANGED when the CLI or another tab stored it again since. Send it from every client that shows the draft before it starts the install. Absent: the current draft is installed, whatever its revision.

A retry after a failure is a start like any other: the draft is still editable after a failure, so a retry that sends the revision it last showed installs only that draft. If-Match is not required (a missing header is tolerated, not refused with 428): the CLI, scripts and an unattended install start without one, and a retry installs the draft that failed unless it was stored again in between, which only a client that sends If-Match can tell.

If-Match
string

Example

"3"

The revision of the draft the request was built on. When it is not the draft’s current one the request is refused with 409 DRAFT_CHANGED. Absent: on PUT the draft is replaced whatever it is, and on POST /install the current draft is installed.

unsafeRerun
boolean

Start the install again although the last attempt failed in a step whose re-run is not known to be safe (rerunSafe false). Without it that start is refused with 409 RERUN_UNSAFE.

The install started.

Media typeapplication/json
object
attempt
required
integer
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
eventsUrl
required
string

Example

{
"phase": "configuring"
}

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"
}
]
}

An install is running or has succeeded.

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"
}
]
}

The draft config does not validate; errors lists why.

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"
}
]
}