Skip to content

What every node runs, and where the nodes differ.

GET
/v1/admin/upgrades/release
Code sample: Shell / cURL
curl --request GET \
--url https://stratum.example.com/v1/admin/upgrades/release \
--header 'Authorization: Bearer <token>'

Each node’s release as its own control plane recorded it: the OS deployments (booted, staged, rollback) on an image-mode node, os-release and the kernel, the host packages and system extensions, the host binaries, the control plane’s build and schema levels, and every container image against the pins of that control plane.

summary.skew lists each field whose value differs between the nodes that reported recently. summary.drift lists what a node runs other than its own release says (an image that is not its pin, stale host binaries, a staged deployment) and nodes whose record is missing or older than ten minutes. Install-scope; gates on upgrade:DescribeRelease.

The cluster’s release set.

Media typeapplication/json

The cluster’s release set: every node’s release, and where the nodes differ from each other (skew) or from their own release (drift).

object
generatedAt
required
string format: date-time
servedBy
required

The node whose control plane answered.

string
controlPlane
required

A control plane’s build and schema levels.

object
version
required
string
commit
required
string
schemaLevel

The newest database migration this build carries. Absent when not known.

integer
schemaReadableBy

The oldest schema level whose control plane still runs against this build’s schema.

integer
databaseSchemaLevel

The database’s schema level, above schemaLevel when this build runs against a newer one.

integer
runningRelease
required

The release the cluster runs: its oldest node’s. Empty when it is not known. The same value the update check (running), the plan’s version precheck and /version report.

string
summary
required
object
nodes
required
integer
reporting
required

Nodes whose record is at most ten minutes old.

integer
consistent
required

Every node reported, no field differs between nodes, and none drifts from its release.

boolean
skew
required

Each field whose value differs between the reporting nodes.

Array<object>
object
field
required

Os, imageMode, kernel, controlPlane, schema, hostBinaries, extensions, package: or pin:.

string
values
required
Array<object>
object
value
required
string
label

A readable form of the value, such as a version for a digest.

string
nodes
required
Array<string>
drift
required

What a node runs other than its release says, and nodes that did not report.

Array<object>
object
nodeId
required
string
field
required

Report, host, pin:, hostBinaries, staged or rollbackQueued.

string
message
required
string
nodes
required
Array<object>
object
nodeId
required
string
name
required
string
role
required
string
state
required
string
lastSeenAt
string format: date-time
nullable
reported
required

False when the node has never recorded its release.

boolean
stale
required

The record is older than ten minutes.

boolean
runningRelease
required

The release the node runs: the release of the last upgrade that completed on it, else the cluster’s. Its OS image can be older: an upgrade of kind containers or host keeps the OS. Empty when it is not known.

string
release
object
nodeId
required
string
collectedAt
required

When the node’s control plane recorded this.

string format: date-time
hostCollectedAt

When the node collected the host facts; null when it has not reported them.

string format: date-time
nullable
imageMode
required

True on a node booted from a stratum-os image; false on a node whose packages come from dnf.

boolean
os
required
object
name
string
prettyName
string
id
string
versionId
string
imageVersion

The stratum-os release, on an image-mode node.

string
buildId
string
contentDigest

Identifies the base (kernel, base packages, bootc base). Only a change of it needs a reboot. Empty on an image that predates it.

string
kernelArgsDigest

Identifies the kernel arguments the booted image declares (its bootc kargs.d files). An upgrade whose release declares other ones reboots fully. Empty on a node whose host-helper predates it.

string
kernel
string
bootc

The OS deployments, on an image-mode node.

object
booted
object
image

The reference the deployment was installed or switched from.

string
transport
string
digest

The OS image’s manifest digest.

string
version

The image’s version label.

string
timestamp

When the image was built, as the image says.

string
architecture
string
softRebootCapable

A switch to this deployment can use a soft reboot (the kernel is unchanged).

boolean
pinned
boolean
incompatible
boolean
downloadOnly
boolean
ostreeChecksum
string
staged

The deployment the next boot switches to, if one is staged.

object
image

The reference the deployment was installed or switched from.

string
transport
string
digest

The OS image’s manifest digest.

string
version

The image’s version label.

string
timestamp

When the image was built, as the image says.

string
architecture
string
softRebootCapable

A switch to this deployment can use a soft reboot (the kernel is unchanged).

boolean
pinned
boolean
incompatible
boolean
downloadOnly
boolean
ostreeChecksum
string
rollback

The previous deployment, kept to roll back to.

object
image

The reference the deployment was installed or switched from.

string
transport
string
digest

The OS image’s manifest digest.

string
version

The image’s version label.

string
timestamp

When the image was built, as the image says.

string
architecture
string
softRebootCapable

A switch to this deployment can use a soft reboot (the kernel is unchanged).

boolean
pinned
boolean
incompatible
boolean
downloadOnly
boolean
ostreeChecksum
string
rollbackQueued
boolean
controlPlane
required

A control plane’s build and schema levels.

object
version
required
string
commit
required
string
schemaLevel

The newest database migration this build carries. Absent when not known.

integer
schemaReadableBy

The oldest schema level whose control plane still runs against this build’s schema.

integer
databaseSchemaLevel

The database’s schema level, above schemaLevel when this build runs against a newer one.

integer
hostBinaries
required
object
source

Os-image (they change with the OS image), overlay (switched in live from a release, under /var) or control-plane-image (installed from it).

string
commit
required

The commit the binaries share, mixed, or unknown.

string
stale
required

The binaries are not the build the node should run (want), or some cannot report their commit.

boolean
want

The commit the binaries should be at: the host binaries of the release the cluster runs on an image-mode node, the control plane’s build on a mutable one. Empty when it is not known, or while an upgrade runs.

string
binaries
required
Array<object>
object
name
required
string
present
required
boolean
version
string
commit
string
extensions
required

The system extensions (host packages shipped as signed extensions): every image systemd-sysext finds and every merged one.

Array<object>
object
name
required
string
type
string
path
string
merged
required

Merged into /usr now.

boolean
version

The merged extension’s version (its main package’s version-release).

string
level

The OS level (SYSEXT_LEVEL) the merged extension is built for.

string
release

The release whose extension set the image is linked from.

string
rootHash

The image’s dm-verity root hash, as that release’s manifest records it.

string
packages
required

The installed host packages Stratum depends on, one per component.

Array<object>
object
component
required
string
name
required
string
version
required
string
pins
required

Every image this node’s control plane pins, against what runs.

Array<object>
object
name
required
string
pinned
required

The pinned reference. Empty for the control plane’s own image (state: self): an image cannot embed its own digest, so the entry it carries names the build before it; running says what runs.

string
state
required

current: every container of this image runs the pin. differs: a container runs another image (see running). absent: nothing of this image runs here, which is normal for an image the node’s role or the install’s profile does not run. self: the control plane’s own image, listed in running. Its pin names the build before it, so it is compared between nodes, not with the pin.

string
Allowed values: current differs absent self
running
required

What runs in place of the pin, or the control plane’s own image (self).

Array<string>
containers
required

Running containers of this image.

integer
unpinnedImages
required

Images running containers use that no pin names.

Array<object>
object
ref
required
string
digests
required
Array<string>
containers
required
Array<string>
fetched
required

Release payloads loaded onto this node.

Array<object>
object
release
required
string
manifest

The payload manifest’s sha256.

string
loadedAt
string
stored

What the node keeps under /var/lib/stratum/upgrade; null when it was not read.

object
releases
required
Array<object>
object
release
required
string
fetched
required

Its fetch finished. A release that is not was interrupted.

boolean
installed
required

The release the node was installed with.

boolean
loadedAt
string
osDigest
string
bytes
required

Its manifest and system extensions.

integer format: int64
osBytes
required

Its stratum-os layout, shared by the releases of one OS.

integer format: int64
leftovers
required
Array<object>

A directory under /var/lib/stratum/upgrade.

object
path
required
string
bytes
required
integer format: int64
problems
required
Array<string>

Example

{
"controlPlane": {
"version": "v0.0.0-4298b2fe",
"commit": "4298b2fe"
},
"runningRelease": "0.2.0",
"summary": {
"skew": [
{
"field": "controlPlane"
}
]
},
"nodes": [
{
"runningRelease": "0.2.0",
"release": {
"os": {
"prettyName": "Stratum OS v0.0.0-4298b2fe",
"id": "almalinux",
"versionId": "10.2",
"imageVersion": "v0.0.0-4298b2fe",
"buildId": "4298b2fe",
"kernelArgsDigest": "sha256:5f0e1d7983fa91e8392d2855004148644ca31cb43a5f74a1f7b1a23f4efc161e",
"kernel": "6.12.0-211.56.1.el10_2.x86_64"
},
"bootc": {
"booted": {
"image": "registry.example.com/stratum-os:v0.0.0-4298b2fe",
"transport": "registry",
"digest": "sha256:dbcb96dfa0abfb1869e5b22412fef9b5e096f8bc0ba51451db730710c885eb6a",
"version": "v0.0.0-4298b2fe",
"architecture": "amd64"
},
"staged": {
"image": "registry.example.com/stratum-os:v0.0.0-4298b2fe",
"transport": "registry",
"digest": "sha256:dbcb96dfa0abfb1869e5b22412fef9b5e096f8bc0ba51451db730710c885eb6a",
"version": "v0.0.0-4298b2fe",
"architecture": "amd64"
},
"rollback": {
"image": "registry.example.com/stratum-os:v0.0.0-4298b2fe",
"transport": "registry",
"digest": "sha256:dbcb96dfa0abfb1869e5b22412fef9b5e096f8bc0ba51451db730710c885eb6a",
"version": "v0.0.0-4298b2fe",
"architecture": "amd64"
}
},
"controlPlane": {
"version": "v0.0.0-4298b2fe",
"commit": "4298b2fe"
},
"extensions": [
{
"name": "stratum-ovs",
"version": "3.5.3-5.el10s"
}
],
"packages": [
{
"component": "openvswitch",
"name": "openvswitch3.5",
"version": "3.5.3-5.el10s"
}
],
"pins": [
{
"name": "stratum-controlplane",
"state": "current"
}
],
"stored": {
"leftovers": [
{
"path": "os/3f1c0d77"
}
]
}
}
}
]
}

Authenticated but not authorized.

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
>= 400 <= 599
detail
string
instance
string format: uri-reference
requestId
required
string
code
required
string
issues

The findings of a rejected IAM policy document (custom and resource policies).

Array<object>

One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.

object
code
required

The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.

string
statement
required

Index of the statement at fault; -1 for the document as a whole.

integer
>= -1
detail
required
string
action

The offending action, where one is at fault (ACTION_NOT_APPLICABLE).

string
errors

Field errors, for codes that carry them: each problem at its field (see FieldError). Documented on the responses that set it, e.g. approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED. Absent otherwise.

Array<object>

One field’s problem, the stage-2 installer API’s shape. field is the field’s path, message what is wrong with it.

object
field
required

The field’s path, e.g. links[0].interface, disks[1].confirm, mgmt.address or role; empty for the whole request.

string
message
required
string
details

Structured facts about the refusal, for codes that carry them. The shape is fixed per code and documented on the response that answers it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and IMAGE_IN_USE. Absent for codes that carry none.

object
key
additional properties
any

Example

{
"issues": [
{
"code": "ACTION_NOT_APPLICABLE",
"action": "compute:CreateVpc"
}
]
}

Upstream temporarily unavailable (driver / scheduler / dependency).

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
>= 400 <= 599
detail
string
instance
string format: uri-reference
requestId
required
string
code
required
string
issues

The findings of a rejected IAM policy document (custom and resource policies).

Array<object>

One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.

object
code
required

The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.

string
statement
required

Index of the statement at fault; -1 for the document as a whole.

integer
>= -1
detail
required
string
action

The offending action, where one is at fault (ACTION_NOT_APPLICABLE).

string
errors

Field errors, for codes that carry them: each problem at its field (see FieldError). Documented on the responses that set it, e.g. approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED. Absent otherwise.

Array<object>

One field’s problem, the stage-2 installer API’s shape. field is the field’s path, message what is wrong with it.

object
field
required

The field’s path, e.g. links[0].interface, disks[1].confirm, mgmt.address or role; empty for the whole request.

string
message
required
string
details

Structured facts about the refusal, for codes that carry them. The shape is fixed per code and documented on the response that answers it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and IMAGE_IN_USE. Absent for codes that carry none.

object
key
additional properties
any

Example

{
"issues": [
{
"code": "ACTION_NOT_APPLICABLE",
"action": "compute:CreateVpc"
}
]
}