Skip to content

stratumctl admin nodes

Per-node administration (bootstrap-admin only)

Terminal window
stratumctl admin nodes [flags]

Download a node’s node.yaml, with its secrets redacted

Terminal window
stratumctl admin nodes config <node-id> [flags]

Download the node.yaml a node was installed from. Every secret in it (the admin password, the registry pull credentials, the operator webhook, the release mirror token, a join token) is replaced by the text <redacted> and its key is kept, so the file keeps its shape and can be edited and reused once the secrets are filled in again. The node redacts the file before it leaves the host; the download cannot be made unredacted. Each download is audited.

The file goes to standard output, or to –out. A node that cannot be reached answers 503, one with no node.yaml to give answers 409.

Terminal window
stratumctl admin nodes config node-1
stratumctl admin nodes config node-1 --out node-1.yaml
Flag Type Default Description
--out string write the file here instead of standard output

A node’s hardware plan: what each disk and link was installed as

Terminal window
stratumctl admin nodes hardware-plan [flags]

A node’s hardware plan: each disk’s role (system, compute with its pool and class, ceph-osd, unused) and each link’s purposes (oob, mgmt, storage, overlay, provider), written once at install and shown next to what the node reports. Admin > Metal shows the same record.

An edit applies through the reconciler that owns it, or is refused with the reason; nothing is stored that nothing applies.

Show a node’s hardware plan next to what the node reports

Terminal window
stratumctl admin nodes hardware-plan get <node-id> [flags]
Terminal window
stratumctl admin nodes hardware-plan get node-1
stratumctl admin nodes hardware-plan get node-1 --output json

Change disk roles and link purposes

Terminal window
stratumctl admin nodes hardware-plan set <node-id> [flags]

Change disk roles and link purposes in a node’s hardware plan.

Terminal window
--disk KEY=ROLE[:POOL[/CLASS]] ROLE is compute, ceph-osd or unused.
--link NAME=PURPOSE[,PURPOSE] purposes storage, overlay, provider
(oob and mgmt are locked); --link NAME=
clears them.
--confirm KEY the typed wipe confirmation for a disk
that holds data.

What applies: unused -> compute registers the pool; unused -> ceph-osd wipes and marks the disk for the Ceph page; ceph-osd -> unused unmarks it while it is not an OSD; compute -> unused removes the pool when it holds no volumes. A system disk never changes. When any change is refused, nothing is applied and each refusal is printed with its reason.

Terminal window
stratumctl admin nodes hardware-plan set node-1 --disk 0x5000c500a1b2c3d4=compute:fast/nvme
stratumctl admin nodes hardware-plan set node-1 --disk /dev/disk/by-id/nvme-B=ceph-osd --confirm /dev/disk/by-id/nvme-B
stratumctl admin nodes hardware-plan set node-1 --link storage=storage,overlay --version 4
stratumctl admin nodes hardware-plan set node-1 -f edit.json
Flag Type Default Description
--confirm stringArray typed wipe confirmation: the key of a disk that holds data (repeatable)
--disk stringArray KEY=ROLE[:POOL[/CLASS]] (repeatable)
-f, --file string the edit as a JSON file (the PATCH body)
--link stringArray NAME=PURPOSE[,PURPOSE] (repeatable)
--version int64 0 refuse the edit if the plan is no longer at this version

Join codes: what a new machine presents to join the cluster

Terminal window
stratumctl admin nodes join-code [flags]

A new machine joins with two things: the cluster’s address and a short join code, XXXX-XXXX-XXX. Type both at stage 1 (“Join a cluster”), or put them in install.yaml (join.endpoint, join.code); the stratum-join:// URL carries both, for a QR code or a paste. The machine and the cluster prove the code to each other (a PAKE), so the code needs no CA fingerprint. A code is reusable until it expires or is revoked, and burns after 10 wrong attempts: the approval, not the code, is what lets a machine in. It is shown once, when it is created. While any code is live, every control-plane member opens the join listener (port 9444).

Create a join code (shown once)

Terminal window
stratumctl admin nodes join-code create [flags]
Terminal window
stratumctl admin nodes join-code create
stratumctl admin nodes join-code create --ttl 24h --qr
stratumctl admin nodes join-code create --address 192.0.2.11
Flag Type Default Description
--address string where joiners reach the cluster: the API VIP (default) or a control-plane member’s address
--qr bool false also print the URL as a QR code
--ttl duration 0s lifetime (default 4h, at most 168h)

List join codes

Terminal window
stratumctl admin nodes join-code list [flags]
Terminal window
stratumctl admin nodes join-code list
stratumctl admin nodes join-code list --output json

Revoke a join code: no further registration with it

Terminal window
stratumctl admin nodes join-code revoke <code-id> [flags]
Terminal window
stratumctl admin nodes join-code revoke jc-4f7k2q9m

Machines that registered to join: approve, reject, follow

Terminal window
stratumctl admin nodes joins [flags]

Each machine that registered with a join code waits here, with its hardware and a pairing code its console shows too: approve the machine whose console shows the code you see. The approval carries its assignment (role, rack, AZ, mgmt link, links, disks). Joins then run one at a time, in approval order, only while the cluster is green.

Approve a machine’s join with its assignment

Terminal window
stratumctl admin nodes joins approve [<join-id>] [flags]

Approve a machine’s join. Name it by its join id, or by –serial or –pairing (the code its console shows). The assignment comes from -f (YAML or JSON: a JoinAssignment, or {assignment, copyFrom}), from –from <node> (the assignment of a node that joined the same way: links whose NICs this machine has, disks matched by model and size, never addresses), and from the flags, which override both.

Terminal window
--disk KEY=ROLE[:POOL[/CLASS]] KEY a WWN or /dev/disk/by-id path; ROLE
compute, ceph-osd or unused
--confirm KEY the typed wipe confirmation for a disk that
holds data

Every joiner is hybrid (control plane, compute and Ceph together), the default; compute-only and storage-only nodes are not supported yet. A cluster takes joiners up to 5 control-plane nodes (the planned size is the install-time plan, not a cap); an approval past 5 is refused. The mgmt link is the NIC the machine registered from.

Terminal window
stratumctl admin nodes joins approve nj-8w2k4m1p --rack r2 --disk /dev/disk/by-id/nvme-B=ceph-osd
stratumctl admin nodes joins approve --serial SN0003 -f node-3.yaml
stratumctl admin nodes joins approve --pairing 4F7-K2Q --from n-msst0002
Flag Type Default Description
--az string availability zone
--confirm stringArray typed wipe confirmation: the key of a disk that holds data (repeatable)
--disk stringArray KEY=ROLE[:POOL[/CLASS]] (repeatable)
-f, --file string the assignment, YAML or JSON
--from string copy the assignment of this node id
--mgmt-address string the mgmt address (a CIDR with –mgmt-gateway when it is new on that NIC)
--mgmt-gateway string the mgmt gateway, for a new address
--mgmt-interface string the mgmt NIC
--name string display name (default the hostname)
--ntp stringArray NTP server, when this node’s differ from the cluster’s (repeatable)
--pairing string the pending machine whose console shows this pairing code
--rack string the topology.rack label
--role string hybrid (the only role supported)
--serial string the pending machine with this system serial

A join’s assignment as a file joins approve -f takes

Terminal window
stratumctl admin nodes joins export <join-id> [flags]

Print the assignment an approval gave a machine (role, rack, AZ, mgmt link, links, disks), without the keys the founder adds to the record (copiedFrom, copyNotes, a link’s addressesAllocated). Keep it to approve the same machine again after a rebuild:

Terminal window
stratumctl admin nodes joins export <join-id> > assignment.yaml
stratumctl admin nodes joins approve --serial S -f assignment.yaml

YAML by default; –output json prints JSON. A join that has no assignment yet (pending, rejected) has nothing to export.

Terminal window
stratumctl admin nodes joins export nj-8w2k4m1p --output json
stratumctl admin nodes joins approve --serial SN0002 -f node-2.yaml

A registration: hardware, assignment, steps, log tail

Terminal window
stratumctl admin nodes joins get <join-id> [flags]
Terminal window
stratumctl admin nodes joins get nj-8w2k4m1p
stratumctl admin nodes joins get nj-8w2k4m1p --output json

List registrations

Terminal window
stratumctl admin nodes joins list [flags]
Terminal window
stratumctl admin nodes joins list

Reject a machine’s join; it needs a reinstall to try again

Terminal window
stratumctl admin nodes joins reject <join-id> [flags]
Terminal window
stratumctl admin nodes joins reject nj-8w2k4m1p --reason "not ours"
Flag Type Default Description
--reason string why (shown on the machine’s console)

Queue a failed join again

Terminal window
stratumctl admin nodes joins retry <join-id> [flags]
Terminal window
stratumctl admin nodes joins retry nj-8w2k4m1p

Follow a join’s progress until it is joined, rejected or expired

Terminal window
stratumctl admin nodes joins watch <join-id> [flags]
Terminal window
stratumctl admin nodes joins watch nj-8w2k4m1p