Skip to content

Replace the cluster-state backup policy.

PUT
/v1/backup/admin/config
Code sample: Shell / cURL
curl --request PUT \
--url https://stratum.example.com/v1/backup/admin/config \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "enabled": true, "cadenceSeconds": 1, "retentionCount": 1, "targetKind": "directory", "targetPath": "example", "targetOptions": { "requireMountpoint": true, "s3Endpoint": "example", "s3Bucket": "example", "s3Prefix": "example", "s3Region": "example", "s3AccessKey": "example", "s3SecretKey": "example" }, "volumeTargetKind": "", "volumeTargetPath": "example", "volumeTargetOptions": { "requireMountpoint": true, "s3Endpoint": "example", "s3Bucket": "example", "s3Prefix": "example", "s3Region": "example", "s3AccessKey": "example", "s3SecretKey": "example" }, "ageRecipient": "example", "incrementalBackups": true }'

Cedar action backup:Manage. Shape is validated at write time (cadence >= 300s, retention >= 1, absolute target path, parseable age1... recipient; enabling requires a recipient) so a bad policy bounces here instead of failing the scheduled run.

Media typeapplication/json

PUT body for the backup policy (operator-settable fields).

object
enabled
required
boolean
cadenceSeconds
required
integer
>= 300
retentionCount
required
integer
>= 1
targetKind
required
string
Allowed values: directory s3
targetPath
required
string
targetOptions

Per-kind target knobs. Only the fields for the active targetKind are meaningful; everything is optional.

object
requireMountpoint

Directory kind — refuse backup runs unless targetPath is a mountpoint (catches an unmounted NFS export before it silently collects bundles on the node’s own disk).

boolean
s3Endpoint

Http(s):// endpoint of any S3-compatible store (R2, garage, MinIO).

string
s3Bucket

Bucket name; must already exist.

string
s3Prefix

Optional key prefix for the bundles.

string
s3Region

Region; defaults to “auto” (correct for R2).

string
s3AccessKey
string
s3SecretKey

Write-only - GET returns the mask (“********”); sending the mask back on PUT keeps the stored value.

string
volumeTargetKind

Optional per-volume target; empty falls back to the cluster-state target.

string
Allowed values: "" directory s3
volumeTargetPath
string
volumeTargetOptions

Per-kind target knobs. Only the fields for the active targetKind are meaningful; everything is optional.

object
requireMountpoint

Directory kind — refuse backup runs unless targetPath is a mountpoint (catches an unmounted NFS export before it silently collects bundles on the node’s own disk).

boolean
s3Endpoint

Http(s):// endpoint of any S3-compatible store (R2, garage, MinIO).

string
s3Bucket

Bucket name; must already exist.

string
s3Prefix

Optional key prefix for the bundles.

string
s3Region

Region; defaults to “auto” (correct for R2).

string
s3AccessKey
string
s3SecretKey

Write-only - GET returns the mask (“********”); sending the mask back on PUT keeps the stored value.

string
ageRecipient
required
string
incrementalBackups

Opt volume backups into rbd export-diff chains. Omitted keeps the stored value; a new install starts false.

boolean

The stored backup policy.

Media typeapplication/json

The cluster-state backup policy (v1,) — the core.backup_config singleton.

object
enabled
required
boolean
cadenceSeconds
required

Seconds between scheduled backups; the control-plane RPO.

integer
>= 300
retentionCount
required

Keep-last-N verified-complete bundles on the target.

integer
>= 1
targetKind
required
string
Allowed values: directory s3
targetPath
required

Directory kind — absolute path visible inside the control-plane container (mount an off-cluster NFS export there; an on-cluster path is not DR-valid). Ignored for s3.

string
targetOptions

Per-kind target knobs. Only the fields for the active targetKind are meaningful; everything is optional.

object
requireMountpoint

Directory kind — refuse backup runs unless targetPath is a mountpoint (catches an unmounted NFS export before it silently collects bundles on the node’s own disk).

boolean
s3Endpoint

Http(s):// endpoint of any S3-compatible store (R2, garage, MinIO).

string
s3Bucket

Bucket name; must already exist.

string
s3Prefix

Optional key prefix for the bundles.

string
s3Region

Region; defaults to “auto” (correct for R2).

string
s3AccessKey
string
s3SecretKey

Write-only - GET returns the mask (“********”); sending the mask back on PUT keeps the stored value.

string
volumeTargetKind

Optional separate target for per-volume tenant-data backups. Empty falls back to the cluster-state target above — e.g. cluster-state → s3/R2, tenant-data volumes → directory/NFS.

string
Allowed values: "" directory s3
volumeTargetPath
string
volumeTargetOptions

Per-kind target knobs. Only the fields for the active targetKind are meaningful; everything is optional.

object
requireMountpoint

Directory kind — refuse backup runs unless targetPath is a mountpoint (catches an unmounted NFS export before it silently collects bundles on the node’s own disk).

boolean
s3Endpoint

Http(s):// endpoint of any S3-compatible store (R2, garage, MinIO).

string
s3Bucket

Bucket name; must already exist.

string
s3Prefix

Optional key prefix for the bundles.

string
s3Region

Region; defaults to “auto” (correct for R2).

string
s3AccessKey
string
s3SecretKey

Write-only - GET returns the mask (“********”); sending the mask back on PUT keeps the stored value.

string
ageRecipient
required

Age X25519 recipient (age1…) the bundles are encrypted to.

string
incrementalBackups

Opt volume backups into rbd export-diff chains: a full base then diffs shipping only changed blocks. Default false (full exports).

boolean
runRequestedAt
string format: date-time
nullable
updatedAt
required
string format: date-time

Example

{
"targetKind": "directory",
"volumeTargetKind": ""
}

Bad request.

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"
}
]
}