Update a Ceph pool's params (storage tier) — bootstrap-admin.
curl --request PATCH \ --url https://stratum.example.com/v1/admin/storage/ceph/pools/example \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "size": 1, "minSize": 1, "failureDomain": "example", "pgNum": 1, "deviceClass": "example", "maxBytes": 1 }'Partial update of a desired pool (only the supplied
fields change); the reconciler converges the live cluster (size/min_size
via osd pool set, a new device class via a CRUSH rule). Returns 202.
Install-scope; gates on storage:ManageCephPool.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”Partial pool update; only the supplied fields change. The result must still satisfy 1 <= minSize <= size.
object
Replica count.
Minimum replicas for I/O; must be <= size.
CRUSH failure domain.
Placement groups; 0 = PG autoscaler.
CRUSH device class to pin to (ssd/hdd/nvme).
Per-pool byte cap (hard write ceiling); 0 = unlimited.
Example generated
{ "size": 1, "minSize": 1, "failureDomain": "example", "pgNum": 1, "deviceClass": "example", "maxBytes": 1}Responses
Section titled “Responses”Updated pool; reconciler converges it.
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.
Example generated
{ "name": "example", "size": 1, "minSize": 1, "failureDomain": "example", "pgNum": 1, "deviceClass": "example", "application": "example", "maxBytes": 1, "managed": true, "storedBytes": 1, "system": true}Bad request.
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" } ]}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" } ]}Resource not found.
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" } ]}