Remove disk(s) from a pool to shrink it (operator-only).
curl --request POST \ --url https://stratum.example.com/v1/storage-pools/example/actions/shrink \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "disks": [ "example" ] }', the reverse of extend. Evacuates any allocated
extents off each disk to the pool’s remaining PVs (pvmove), drops
it from the volume group (vgreduce), and clears its PV label
(pvremove) so the disk returns to available. Refused if it would
remove the pool’s last disk (delete the pool instead).
Cedar action storage:ExtendStoragePool. Note: pvmove moves real
data, so this can be slow when the disk holds allocated extents.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The stable pool id (pool-…). pools are addressed by a surrogate id, since the same pool name can exist on multiple nodes. The id is in GET /v1/storage-pools.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Device paths to remove from the pool (whole disks or partition PVs)..
Example generated
{ "disks": [ "example" ]}Responses
Section titled “Responses”The shrunk pool (synchronous, local node).
A storage pool. For lvm-thin this is the install’s VG + thin pool on one node; capacity is refreshed by the 60s poller.
object
Stable surrogate id (pool-…)..
missing: the backend no longer has the pool; see
stateReason. Volumes cannot be placed in it. The next successful poll
restores the real state.
Why the pool is missing. Absent otherwise.
Physical devices (PVs) backing the pool’s VG.
The LVM volume group the pool lives in (lvm-thin only). The install’s
default pool is named after its thin LV but lives in the configured
VG, so read the VG from here, never from name. Absent for Ceph and
until the pool’s node has polled it..
Example
{ "driver": "lvm-thin", "state": "healthy"}Cross-node op accepted and recorded as an intent. Poll the
intent at the Location header until state is done or error.
A cross-node disk/pool operation recorded by the CP leader for the
owning node’s reconciler to execute against its local /dev. Poll until state is done or error.
object
Intent id (nsi-…).
The node that executes the op (owns the physical disks).
Op-specific arguments (name, disks, poolId,…).
object
Op output on done. For create/extend/shrink: poolId, name,
totalBytes, devicePaths. For delete: poolId.
object
Failure detail when state is error.
Example
{ "op": "create-pool", "state": "pending"}Headers
Section titled “Headers”The intent poll URL.
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" } ]}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" } ]}Conflicting state.
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" } ]}