List desired Ceph pools (bootstrap-admin).
curl --request GET \ --url https://stratum.example.com/v1/admin/storage/ceph/pools \ --header 'Authorization: Bearer <token>'The operator’s desired Ceph pools (storage tiers):
name, size/min_size, failure domain, pg_num, and optional device class.
Install-scope; gates on storage:ListCephPools.
Authorizations
Section titled “Authorizations”Responses
Section titled “Responses”Desired pools.
object
A desired Ceph pool (storage tier). deviceClass, when set, pins the pool to a CRUSH device class (ssd/hdd/nvme).
object
Replica count (default 3).
Minimum replicas for I/O (default 2).
CRUSH failure domain (default host).
Placement groups; 0 = PG autoscaler.
CRUSH device class to pin to (ssd/hdd/nvme); empty = any.
RADOS application tag: empty/‘rbd’ (block pools, rbd-initialized) or ‘rgw’ (object-storage pools, not rbd-initialized).
Per-pool capacity cap in bytes (a hard write-reject ceiling
applied via ceph osd pool set-quota); 0 = unlimited. Counts
LOGICAL/STORED bytes (at size=3, 1 TiB logical ≈ 3 TiB raw). In the pool
list this reflects the LIVE quota in effect on the cluster.
True for a Stratum-created + fully-reconciled pool (create + size/crush/application); false for a quota-only view of an auto-created cluster pool (RGW’s default.rgw.buckets.data, cephfs data). Only maxBytes is settable on an unmanaged pool.
LOGICAL/STORED bytes currently in the pool (from ceph df), so
the UI can show a used-vs-quota bar. Present only in the pool list.
True for the install’s system pool (volumes): the pool the
replicated VM-volume tier and the base images live in, and the one
that cannot be deleted. Exactly one pool is the system pool, so clients
read it from here instead of hard-coding a name.
Present when there is no Ceph cluster to read (not set up, bootstrapping, a failed bootstrap, torn down): the reconciler’s observed state, and the list is then empty (the pool list holds the desired pools). Absent on a live answer. Before Ceph exists these reads answer 200 with it, never 503; 503 means a cluster that exists did not answer.
object
The control plane (node id) that wrote this status.
The radosgw daemons the reconciler observed running at its last probe. Absent when not observed (no cluster answered, or the gateway listing failed): unknown, not zero.
Example
{ "cluster": { "phase": "unconfigured" }}Authenticated but not authorized.
object
The findings of a rejected IAM policy document (custom and resource policies).
One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.
object
The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.
Index of the statement at fault; -1 for the document as a whole.
The offending action, where one is at fault (ACTION_NOT_APPLICABLE).
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.
One field’s problem, the stage-2 installer API’s shape.
field is the field’s path, message what is wrong with it.
object
The field’s path, e.g. links[0].interface, disks[1].confirm,
mgmt.address or role; empty for the whole request.
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
Example
{ "issues": [ { "code": "ACTION_NOT_APPLICABLE", "action": "compute:CreateVpc" } ]}