diff --git a/pr_body.md b/pr_body.md index cd36504..40d345c 100644 --- a/pr_body.md +++ b/pr_body.md @@ -2,19 +2,12 @@ This PR contains automated updates to the Proxmox API specifications. -### PVE API Changes - -- Endpoints: 428 → 428 (+0) -- File sizes: - - JSON: 3.2M - - YAML: 2.4M - ### PBS API Changes -- Endpoints: 240 → 240 (+0) +- Endpoints: 240 → 246 (+6) - File sizes: - JSON: 1.8M - - YAML: 1.3M + - YAML: 1.4M ### Validation Status @@ -30,4 +23,4 @@ This PR contains automated updates to the Proxmox API specifications. 3. Merge to update the API specifications --- -*Generated automatically by GitHub Actions on 2026-01-04 02:53:02 UTC* +*Generated automatically by GitHub Actions on 2026-05-31 03:16:08 UTC* diff --git a/proxmox-backup-server/apidoc.js b/proxmox-backup-server/apidoc.js index 839b71c..f9fd9ba 100644 --- a/proxmox-backup-server/apidoc.js +++ b/proxmox-backup-server/apidoc.js @@ -91,7 +91,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "PUT": { "description": "Update Access Control List (ACLs).", @@ -173,7 +174,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -251,7 +253,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -319,7 +322,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -357,7 +361,8 @@ var apiSchema = [ "returns": { "description": "Redirection URL.", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -420,7 +425,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -442,7 +448,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -488,7 +495,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -531,7 +539,8 @@ var apiSchema = [ "description": "Map of ACL path to Map of privilege to propagate bit", "properties": {}, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -601,7 +610,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -663,7 +673,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Get a single TFA entry.", @@ -706,7 +717,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "PUT": { "description": "Update user's TFA entry description.", @@ -768,7 +780,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -849,7 +862,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Add a TFA entry to the user.", @@ -950,7 +964,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 0, @@ -1032,7 +1047,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -1054,7 +1070,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "POST": { "description": "Either create a new HttpOnly ticket or a regular ticket.", @@ -1136,7 +1153,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -1199,7 +1217,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read user's API token metadata", @@ -1274,7 +1293,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "POST": { "description": "Generate a new API token with given metadata", @@ -1356,7 +1376,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update user's API token metadata", @@ -1453,7 +1474,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -1539,7 +1561,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -1579,7 +1602,8 @@ var apiSchema = [ "returns": { "description": "Whether the user was previously locked out of any 2nd factor.", "type": "boolean" - } + }, + "unstable": false } }, "leaf": 1, @@ -1631,7 +1655,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read user configuration data.", @@ -1725,7 +1750,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update user configuration. To change a user's password use the 'PUT /access/password' endpoint.", @@ -1837,7 +1863,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -1976,7 +2003,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create new user.", @@ -2060,7 +2088,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -2109,7 +2138,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -2131,7 +2161,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -2176,7 +2207,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -2243,7 +2275,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -2302,7 +2335,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -2364,7 +2398,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -2426,7 +2461,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -2513,7 +2549,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -2660,7 +2697,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "POST": { "description": "Start garbage collection.", @@ -2695,7 +2733,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -2747,7 +2786,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "PUT": { "description": "Set \"notes\" for a backup group", @@ -2796,7 +2836,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -2873,7 +2914,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "GET": { "description": "List backup groups.", @@ -2957,7 +2999,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -3015,13 +3058,150 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, "path": "/admin/datastore/{store}/mount", "text": "mount" }, + { + "info": { + "POST": { + "description": "Move a backup group to a different namespace within the same datastore.", + "method": "POST", + "parameters": { + "additionalProperties": false, + "description": "Move a backup group to a different namespace within the same datastore.", + "properties": { + "backup-id": { + "description": "Backup ID.", + "pattern": "/^[A-Za-z0-9_][A-Za-z0-9._\\-]*$/", + "type": "string" + }, + "backup-type": { + "description": "Backup types.", + "enum": [ + "vm", + "ct", + "host" + ], + "type": "string" + }, + "merge-group": { + "default": true, + "description": "If the group already exists in the target namespace, merge snapshots into it. Requires matching ownership and non-overlapping snapshot times.", + "optional": 1, + "type": "boolean" + }, + "ns": { + "description": "Namespace.", + "maxLength": 256, + "optional": 1, + "pattern": "/^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$/", + "type": "string" + }, + "store": { + "description": "Datastore name.", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "target-ns": { + "description": "Namespace.", + "maxLength": 256, + "optional": 1, + "pattern": "/^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$/", + "type": "string" + } + } + }, + "permissions": { + "description": "Requires DATASTORE_MODIFY or DATASTORE_PRUNE (+ group ownership) on the source namespace and DATASTORE_MODIFY or DATASTORE_BACKUP (+ group ownership) on the target namespace.", + "user": "all" + }, + "returns": { + "description": "Unique Process/Task Identifier", + "minLength": 36, + "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", + "type": "string" + }, + "unstable": false + } + }, + "leaf": 1, + "path": "/admin/datastore/{store}/move-group", + "text": "move-group" + }, + { + "info": { + "POST": { + "description": "Move a backup namespace (including all child namespaces and groups) to a new location.", + "method": "POST", + "parameters": { + "additionalProperties": false, + "description": "Move a backup namespace (including all child namespaces and groups) to a new location.", + "properties": { + "delete-source": { + "default": true, + "description": "Remove the source namespace after moving all contents. Defaults to true.", + "optional": 1, + "type": "boolean" + }, + "max-depth": { + "default": 7, + "description": "How many levels of namespaces should be operated on (0 == no recursion)", + "maximum": 7, + "minimum": 0, + "optional": 1, + "type": "integer" + }, + "merge-groups": { + "default": true, + "description": "If a group with the same name already exists in the target namespace, merge snapshots into it. Requires matching ownership and non-overlapping snapshot times.", + "optional": 1, + "type": "boolean" + }, + "ns": { + "description": "Namespace.", + "maxLength": 256, + "pattern": "/^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$/", + "type": "string" + }, + "store": { + "description": "Datastore name.", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "target-ns": { + "description": "Namespace.", + "maxLength": 256, + "pattern": "/^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$/", + "type": "string" + } + } + }, + "permissions": { + "description": "Requires DATASTORE_MODIFY on the parent of 'ns' and on the parent of 'target-ns'.", + "user": "all" + }, + "returns": { + "description": "Unique Process/Task Identifier", + "minLength": 36, + "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", + "type": "string" + }, + "unstable": false + } + }, + "leaf": 1, + "path": "/admin/datastore/{store}/move-namespace", + "text": "move-namespace" + }, { "info": { "DELETE": { @@ -3063,7 +3243,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "List the namespaces of a datastore.", @@ -3121,7 +3302,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new datastore namespace.", @@ -3162,7 +3344,8 @@ var apiSchema = [ "maxLength": 256, "pattern": "/^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -3219,7 +3402,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "PUT": { "description": "Set \"notes\" for a specific backup", @@ -3273,7 +3457,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -3330,7 +3515,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "PUT": { "description": "En- or disable protection for a specific backup", @@ -3384,7 +3570,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -3515,7 +3702,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -3605,7 +3793,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -3677,7 +3866,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -3737,7 +3927,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -3779,7 +3970,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -3836,7 +4028,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "List backup snapshots.", @@ -3971,7 +4164,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -4015,6 +4209,15 @@ var apiSchema = [ "minimum": 0, "type": "integer" }, + "backend-type": { + "default": "filesystem", + "description": "Datastore backend type", + "enum": [ + "filesystem", + "s3" + ], + "type": "string" + }, "counts": { "additionalProperties": false, "description": "Counts of groups/snapshots per BackupType.", @@ -4178,25 +4381,69 @@ var apiSchema = [ }, "type": "object" }, - "total": { - "description": "Total space (bytes).", - "minimum": 0, - "type": "integer" - }, - "used": { - "description": "Used space (bytes).", - "minimum": 0, - "type": "integer" - } - }, - "type": "object" - } - } - }, - "leaf": 1, - "path": "/admin/datastore/{store}/status", - "text": "status" - }, + "s3-statistics": { + "additionalProperties": false, + "description": "Statistics specific to the S3 backend", + "optional": 1, + "properties": { + "delete": { + "description": "Delete requests", + "minimum": 0, + "type": "integer" + }, + "downloaded": { + "description": "Total downloaded (bytes).", + "minimum": 0, + "type": "integer" + }, + "get": { + "description": "Get requests", + "minimum": 0, + "type": "integer" + }, + "head": { + "description": "Head requests", + "minimum": 0, + "type": "integer" + }, + "post": { + "description": "Post requests", + "minimum": 0, + "type": "integer" + }, + "put": { + "description": "Put requests", + "minimum": 0, + "type": "integer" + }, + "uploaded": { + "description": "Total uploaded (bytes).", + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + }, + "total": { + "description": "Total space (bytes).", + "minimum": 0, + "type": "integer" + }, + "used": { + "description": "Used space (bytes).", + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + }, + "unstable": false + } + }, + "leaf": 1, + "path": "/admin/datastore/{store}/status", + "text": "status" + }, { "info": { "POST": { @@ -4248,7 +4495,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -4305,7 +4553,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -4404,7 +4653,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -4426,7 +4676,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -4452,6 +4703,15 @@ var apiSchema = [ "additionalProperties": false, "description": "Basic information about a datastore.", "properties": { + "backend-type": { + "default": "filesystem", + "description": "Datastore backend type", + "enum": [ + "filesystem", + "s3" + ], + "type": "string" + }, "comment": { "description": "Comment.", "maxLength": 128, @@ -4512,7 +4772,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -4658,7 +4919,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -4802,7 +5064,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -4869,7 +5132,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -4904,7 +5168,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -4926,7 +5191,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -5068,7 +5334,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -5094,7 +5361,7 @@ var apiSchema = [ "minLength": 3, "type": "string" }, - "s3-client-id": { + "s3-endpoint-id": { "description": "ID to uniquely identify s3 client config.", "maxLength": 32, "minLength": 3, @@ -5119,12 +5386,61 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, - "path": "/admin/s3/{s3-client-id}/check", + "path": "/admin/s3/{s3-endpoint-id}/check", "text": "check" + }, + { + "info": { + "PUT": { + "description": "Reset the S3 request counters for matching endpoint, bucket or datastore (if prefix is given).", + "method": "PUT", + "parameters": { + "additionalProperties": false, + "description": "Reset the S3 request counters for matching endpoint, bucket or datastore (if prefix is given).", + "properties": { + "bucket": { + "description": "Bucket name for S3 object store.", + "maxLength": 63, + "minLength": 3, + "type": "string" + }, + "s3-endpoint-id": { + "description": "ID to uniquely identify s3 client config.", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "store-prefix": { + "description": "Store prefix within bucket for S3 object keys (commonly datastore name)", + "optional": 1, + "type": "string" + } + } + }, + "permissions": { + "check": { + "partial": false, + "path": [], + "privs": [ + "Sys.Modify" + ] + } + }, + "returns": { + "type": "null" + }, + "unstable": false + } + }, + "leaf": 1, + "path": "/admin/s3/{s3-endpoint-id}/reset-counters", + "text": "reset-counters" } ], "info": { @@ -5141,12 +5457,13 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, - "path": "/admin/s3/{s3-client-id}", - "text": "{s3-client-id}" + "path": "/admin/s3/{s3-endpoint-id}", + "text": "{s3-endpoint-id}" } ], "info": {}, @@ -5182,7 +5499,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -5204,7 +5522,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -5251,6 +5570,26 @@ var apiSchema = [ "additionalProperties": false, "description": "Status of Sync Job", "properties": { + "active-encryption-key": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "optional": 1, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "associated-key": { + "description": "List of cryptographic keys associated with sync job.", + "items": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "optional": 1, + "type": "array" + }, "burst-in": { "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", "maxLength": 64, @@ -5374,7 +5713,7 @@ var apiSchema = [ }, "remove-vanished": { "default": false, - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted.", + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted.", "optional": 1, "type": "boolean" }, @@ -5426,12 +5765,21 @@ var apiSchema = [ "description": "Only synchronize verified backup snapshots, exclude others.", "optional": 1, "type": "boolean" + }, + "worker-threads": { + "default": 1, + "description": "The number of worker threads to process groups in parallel.", + "maximum": 32, + "minimum": 1, + "optional": 1, + "type": "integer" } }, "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -5550,7 +5898,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -5585,7 +5934,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -5607,7 +5957,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -5737,7 +6088,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -5759,7 +6111,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -5831,7 +6184,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -5882,7 +6236,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read the AD realm configuration", @@ -6075,7 +6430,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update an AD realm configuration", @@ -6453,7 +6809,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -6649,7 +7006,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new AD realm", @@ -6836,7 +7194,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -6883,7 +7242,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read the LDAP realm configuration", @@ -7079,7 +7439,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update an LDAP realm configuration", @@ -7465,7 +7826,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -7664,7 +8026,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new LDAP realm", @@ -7854,7 +8217,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -7901,7 +8265,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read the OpenID realm configuration", @@ -7950,6 +8315,22 @@ var apiSchema = [ "type": "string", "typetext": "[, ...]" }, + "audiences": { + "description": "OpenID audience list.", + "format": { + "description": "A list of OpenID audiences that is allowed in addition to the 'client-id'.", + "items": { + "description": "OpenID audience.", + "maxLength": 256, + "pattern": "/^[^\\x00-\\x1F\\x7F <>#\"]*$/", + "type": "string" + }, + "type": "array" + }, + "optional": 1, + "type": "string", + "typetext": "[, ...]" + }, "autocreate": { "default": false, "description": "Automatically create users if they do not exist.", @@ -8021,7 +8402,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update an OpenID realm configuration", @@ -8045,6 +8427,22 @@ var apiSchema = [ "type": "string", "typetext": "[, ...]" }, + "audiences": { + "description": "OpenID audience list.", + "format": { + "description": "A list of OpenID audiences that is allowed in addition to the 'client-id'.", + "items": { + "description": "OpenID audience.", + "maxLength": 256, + "pattern": "/^[^\\x00-\\x1F\\x7F <>#\"]*$/", + "type": "string" + }, + "type": "array" + }, + "optional": 1, + "type": "string", + "typetext": "[, ...]" + }, "autocreate": { "default": false, "description": "Automatically create users if they do not exist.", @@ -8085,7 +8483,8 @@ var apiSchema = [ "autocreate", "scopes", "prompt", - "acr-values" + "acr-values", + "audiences" ], "type": "string" }, @@ -8165,6 +8564,22 @@ var apiSchema = [ "type": "string", "typetext": "[, ...]" }, + "audiences": { + "description": "OpenID audience list.", + "format": { + "description": "A list of OpenID audiences that is allowed in addition to the 'client-id'.", + "items": { + "description": "OpenID audience.", + "maxLength": 256, + "pattern": "/^[^\\x00-\\x1F\\x7F <>#\"]*$/", + "type": "string" + }, + "type": "array" + }, + "optional": 1, + "type": "string", + "typetext": "[, ...]" + }, "autocreate": { "default": false, "description": "Automatically create users if they do not exist.", @@ -8236,7 +8651,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -8286,6 +8702,22 @@ var apiSchema = [ "type": "string", "typetext": "[, ...]" }, + "audiences": { + "description": "OpenID audience list.", + "format": { + "description": "A list of OpenID audiences that is allowed in addition to the 'client-id'.", + "items": { + "description": "OpenID audience.", + "maxLength": 256, + "pattern": "/^[^\\x00-\\x1F\\x7F <>#\"]*$/", + "type": "string" + }, + "type": "array" + }, + "optional": 1, + "type": "string", + "typetext": "[, ...]" + }, "autocreate": { "default": false, "description": "Automatically create users if they do not exist.", @@ -8359,7 +8791,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new OpenId realm", @@ -8383,6 +8816,22 @@ var apiSchema = [ "type": "string", "typetext": "[, ...]" }, + "audiences": { + "description": "OpenID audience list.", + "format": { + "description": "A list of OpenID audiences that is allowed in addition to the 'client-id'.", + "items": { + "description": "OpenID audience.", + "maxLength": 256, + "pattern": "/^[^\\x00-\\x1F\\x7F <>#\"]*$/", + "type": "string" + }, + "type": "array" + }, + "optional": 1, + "type": "string", + "typetext": "[, ...]" + }, "autocreate": { "default": false, "description": "Automatically create users if they do not exist.", @@ -8468,7 +8917,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -8534,7 +8984,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update the PAM realm configuration", @@ -8626,7 +9077,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -8692,7 +9144,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update the Proxmox Backup authentication server realm configuration", @@ -8784,7 +9237,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -8831,7 +9285,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update the TFA configuration.", @@ -8883,7 +9338,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -8905,7 +9361,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -8927,7 +9384,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -8974,7 +9432,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Return existing ACME account information.", @@ -9008,8 +9467,61 @@ var apiSchema = [ "properties": { "account": { "additionalProperties": true, - "description": "Raw account data.", - "properties": {}, + "description": "ACME Account data. This is the part of the account returned from and possibly sent to the ACME\nprovider. Some fields may be uptdated by the user via a request to the account location, others\nmay not be changed.", + "properties": { + "contact": { + "description": "The account's contact info.\n\nThis usually contains a `\"mailto:\"` entry but may also contain some other\ndata if the server accepts it.", + "items": { + "description": "Contact Info.", + "type": "string" + }, + "type": "array" + }, + "externalAccountBinding": { + "additionalProperties": false, + "description": "External Account Bindings", + "optional": 1, + "properties": { + "payload": { + "description": "Payload", + "type": "string" + }, + "protected": { + "description": "JOSE Header (see RFC 7515)", + "type": "string" + }, + "signature": { + "description": "HMAC signature", + "type": "string" + } + }, + "type": "object" + }, + "onlyReturnExisting": { + "description": "This is only used by the client when querying an account.", + "type": "boolean" + }, + "orders": { + "description": "URLs to currently pending orders.", + "optional": 1, + "type": "string" + }, + "status": { + "description": "Status of an ACME account.", + "enum": [ + "", + "valid", + "deactivated", + "revoked" + ], + "type": "string" + }, + "termsOfServiceAgreed": { + "description": "Indicated whether the user agreed to the ACME provider's terms of service.", + "optional": 1, + "type": "boolean" + } + }, "type": "object" }, "directory": { @@ -9027,7 +9539,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update an ACME account.", @@ -9062,7 +9575,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -9106,7 +9620,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Register an ACME account.", @@ -9161,7 +9676,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -9209,7 +9725,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -9247,7 +9764,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -9288,7 +9806,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "List ACME challenge plugins.", @@ -9320,7 +9839,7 @@ var apiSchema = [ }, "returns": { "additionalProperties": false, - "description": "The API's format is inherited from PVE/PMG:", + "description": "ACME plugin config. The API's format is inherited from PVE/PMG:", "properties": { "api": { "description": "DNS Api name.", @@ -9354,7 +9873,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update an ACME plugin configuration.", @@ -9376,7 +9896,7 @@ var apiSchema = [ "delete": { "description": "List of properties to delete.", "items": { - "description": "Deletable property name", + "description": "Deletable plugin property names.", "enum": [ "disable", "validation-delay" @@ -9387,8 +9907,9 @@ var apiSchema = [ "type": "array" }, "digest": { - "description": "Digest to protect against concurrent updates", + "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications.", "optional": 1, + "pattern": "/^[a-f0-9]{64}$/", "type": "string" }, "disable": { @@ -9428,7 +9949,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -9461,7 +9983,7 @@ var apiSchema = [ "description": "List of ACME plugin configurations.", "items": { "additionalProperties": false, - "description": "The API's format is inherited from PVE/PMG:", + "description": "ACME plugin config. The API's format is inherited from PVE/PMG:", "properties": { "api": { "description": "DNS Api name.", @@ -9497,7 +10019,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Add ACME plugin configuration.", @@ -9555,7 +10078,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -9585,7 +10109,8 @@ var apiSchema = [ "description": "The ACME Directory's ToS URL, if any.", "optional": 1, "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -9607,7 +10132,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -9649,7 +10175,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Get tape changer configuration", @@ -9718,7 +10245,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update a tape changer configuration", @@ -9796,7 +10324,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -9859,7 +10388,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new changer device", @@ -9916,7 +10446,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -9979,7 +10510,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false }, "GET": { "description": "Read a datastore configuration.", @@ -10032,6 +10564,17 @@ var apiSchema = [ "pattern": "/^[[:^cntrl:]]*$/", "type": "string" }, + "counter-reset-schedule": { + "description": "Reset notification threshold related counters at specified schedule.", + "optional": 1, + "type": "string", + "typetext": "" + }, + "gc-on-unmount": { + "description": "Run garbage collection before unmounting a removable datastore.", + "optional": 1, + "type": "boolean" + }, "gc-schedule": { "description": "Run garbage collection job at specified schedule.", "optional": 1, @@ -10123,6 +10666,58 @@ var apiSchema = [ "optional": 1, "type": "string" }, + "notification-thresholds": { + "description": "Threshold values for notifications", + "format": { + "additionalProperties": false, + "description": "Request counter thresholds", + "properties": { + "s3-delete": { + "description": "Threshold for DELETE requests.", + "optional": 1, + "type": "integer" + }, + "s3-download": { + "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", + "maxLength": 64, + "minLength": 1, + "optional": 1, + "type": "string" + }, + "s3-get": { + "description": "Threshold for GET requests.", + "optional": 1, + "type": "integer" + }, + "s3-head": { + "description": "Threshold for HEAD requests.", + "optional": 1, + "type": "integer" + }, + "s3-post": { + "description": "Threshold for POST requests.", + "optional": 1, + "type": "integer" + }, + "s3-put": { + "description": "Threshold for PUT requests.", + "optional": 1, + "type": "integer" + }, + "s3-upload": { + "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", + "maxLength": 64, + "minLength": 1, + "optional": 1, + "type": "string" + } + }, + "type": "object" + }, + "optional": 1, + "type": "string", + "typetext": "[[s3-delete=] [,s3-download=] [,s3-get=] [,s3-head=] [,s3-post=] [,s3-put=] [,s3-upload=]]" + }, "notify": { "description": "Datastore notification setting, enum can be one of 'always', 'never', or 'error'.", "format": { @@ -10275,7 +10870,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update datastore config.", @@ -10291,6 +10887,12 @@ var apiSchema = [ "pattern": "/^[[:^cntrl:]]*$/", "type": "string" }, + "counter-reset-schedule": { + "description": "Reset notification threshold related counters at specified schedule.", + "optional": 1, + "type": "string", + "typetext": "" + }, "delete": { "description": "List of properties to delete.", "items": { @@ -10298,6 +10900,7 @@ var apiSchema = [ "enum": [ "comment", "gc-schedule", + "gc-on-unmount", "prune-schedule", "keep-last", "keep-hourly", @@ -10310,7 +10913,9 @@ var apiSchema = [ "notify", "notification-mode", "tuning", - "maintenance-mode" + "maintenance-mode", + "notification-thresholds", + "counter-reset-schedule" ], "type": "string" }, @@ -10323,6 +10928,11 @@ var apiSchema = [ "pattern": "/^[a-f0-9]{64}$/", "type": "string" }, + "gc-on-unmount": { + "description": "Run garbage collection before unmounting a removable datastore.", + "optional": 1, + "type": "boolean" + }, "gc-schedule": { "description": "Run garbage collection job at specified schedule.", "optional": 1, @@ -10414,6 +11024,58 @@ var apiSchema = [ "optional": 1, "type": "string" }, + "notification-thresholds": { + "description": "Threshold values for notifications", + "format": { + "additionalProperties": false, + "description": "Request counter thresholds", + "properties": { + "s3-delete": { + "description": "Threshold for DELETE requests.", + "optional": 1, + "type": "integer" + }, + "s3-download": { + "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", + "maxLength": 64, + "minLength": 1, + "optional": 1, + "type": "string" + }, + "s3-get": { + "description": "Threshold for GET requests.", + "optional": 1, + "type": "integer" + }, + "s3-head": { + "description": "Threshold for HEAD requests.", + "optional": 1, + "type": "integer" + }, + "s3-post": { + "description": "Threshold for POST requests.", + "optional": 1, + "type": "integer" + }, + "s3-put": { + "description": "Threshold for PUT requests.", + "optional": 1, + "type": "integer" + }, + "s3-upload": { + "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", + "maxLength": 64, + "minLength": 1, + "optional": 1, + "type": "string" + } + }, + "type": "object" + }, + "optional": 1, + "type": "string", + "typetext": "[[s3-delete=] [,s3-download=] [,s3-get=] [,s3-head=] [,s3-post=] [,s3-put=] [,s3-upload=]]" + }, "notify": { "description": "Datastore notification setting, enum can be one of 'always', 'never', or 'error'.", "format": { @@ -10574,7 +11236,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -10619,6 +11282,17 @@ var apiSchema = [ "pattern": "/^[[:^cntrl:]]*$/", "type": "string" }, + "counter-reset-schedule": { + "description": "Reset notification threshold related counters at specified schedule.", + "optional": 1, + "type": "string", + "typetext": "" + }, + "gc-on-unmount": { + "description": "Run garbage collection before unmounting a removable datastore.", + "optional": 1, + "type": "boolean" + }, "gc-schedule": { "description": "Run garbage collection job at specified schedule.", "optional": 1, @@ -10710,6 +11384,58 @@ var apiSchema = [ "optional": 1, "type": "string" }, + "notification-thresholds": { + "description": "Threshold values for notifications", + "format": { + "additionalProperties": false, + "description": "Request counter thresholds", + "properties": { + "s3-delete": { + "description": "Threshold for DELETE requests.", + "optional": 1, + "type": "integer" + }, + "s3-download": { + "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", + "maxLength": 64, + "minLength": 1, + "optional": 1, + "type": "string" + }, + "s3-get": { + "description": "Threshold for GET requests.", + "optional": 1, + "type": "integer" + }, + "s3-head": { + "description": "Threshold for HEAD requests.", + "optional": 1, + "type": "integer" + }, + "s3-post": { + "description": "Threshold for POST requests.", + "optional": 1, + "type": "integer" + }, + "s3-put": { + "description": "Threshold for PUT requests.", + "optional": 1, + "type": "integer" + }, + "s3-upload": { + "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", + "maxLength": 64, + "minLength": 1, + "optional": 1, + "type": "string" + } + }, + "type": "object" + }, + "optional": 1, + "type": "string", + "typetext": "[[s3-delete=] [,s3-download=] [,s3-get=] [,s3-head=] [,s3-post=] [,s3-put=] [,s3-upload=]]" + }, "notify": { "description": "Datastore notification setting, enum can be one of 'always', 'never', or 'error'.", "format": { @@ -10864,7 +11590,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create new datastore config.", @@ -10892,6 +11619,17 @@ var apiSchema = [ "pattern": "/^[[:^cntrl:]]*$/", "type": "string" }, + "counter-reset-schedule": { + "description": "Reset notification threshold related counters at specified schedule.", + "optional": 1, + "type": "string", + "typetext": "" + }, + "gc-on-unmount": { + "description": "Run garbage collection before unmounting a removable datastore.", + "optional": 1, + "type": "boolean" + }, "gc-schedule": { "description": "Run garbage collection job at specified schedule.", "optional": 1, @@ -10983,6 +11721,58 @@ var apiSchema = [ "optional": 1, "type": "string" }, + "notification-thresholds": { + "description": "Threshold values for notifications", + "format": { + "additionalProperties": false, + "description": "Request counter thresholds", + "properties": { + "s3-delete": { + "description": "Threshold for DELETE requests.", + "optional": 1, + "type": "integer" + }, + "s3-download": { + "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", + "maxLength": 64, + "minLength": 1, + "optional": 1, + "type": "string" + }, + "s3-get": { + "description": "Threshold for GET requests.", + "optional": 1, + "type": "integer" + }, + "s3-head": { + "description": "Threshold for HEAD requests.", + "optional": 1, + "type": "integer" + }, + "s3-post": { + "description": "Threshold for POST requests.", + "optional": 1, + "type": "integer" + }, + "s3-put": { + "description": "Threshold for PUT requests.", + "optional": 1, + "type": "integer" + }, + "s3-upload": { + "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", + "maxLength": 64, + "minLength": 1, + "optional": 1, + "type": "string" + } + }, + "type": "object" + }, + "optional": 1, + "type": "string", + "typetext": "[[s3-delete=] [,s3-download=] [,s3-get=] [,s3-head=] [,s3-post=] [,s3-put=] [,s3-upload=]]" + }, "notify": { "description": "Datastore notification setting, enum can be one of 'always', 'never', or 'error'.", "format": { @@ -11161,7 +11951,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -11203,7 +11994,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Get drive configuration", @@ -11267,7 +12059,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update a drive configuration", @@ -11311,17 +12104,218 @@ var apiSchema = [ "pattern": "/^[a-f0-9]{64}$/", "type": "string" }, - "name": { - "description": "Drive Identifier.", + "name": { + "description": "Drive Identifier.", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "path": { + "description": "The path to a LTO SCSI-generic tape device (i.e. '/dev/sg0')", + "optional": 1, + "type": "string" + } + } + }, + "permissions": { + "check": { + "partial": false, + "path": [ + "tape", + "device", + "{name}" + ], + "privs": [ + "Tape.Modify" + ] + } + }, + "returns": { + "type": "null" + }, + "unstable": false + } + }, + "leaf": 1, + "path": "/config/drive/{name}", + "text": "{name}" + } + ], + "info": { + "GET": { + "description": "List drives", + "method": "GET", + "parameters": { + "additionalProperties": false, + "description": "List drives", + "properties": {} + }, + "permissions": { + "description": "List configured tape drives filtered by Tape.Audit privileges", + "user": "all" + }, + "returns": { + "description": "The list of configured drives (with config digest).", + "items": { + "additionalProperties": false, + "description": "Lto SCSI tape driver", + "properties": { + "changer": { + "description": "Tape Changer Identifier.", + "maxLength": 32, + "minLength": 3, + "optional": 1, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "changer-drivenum": { + "default": 0, + "description": "Associated changer drive number (requires option changer)", + "maximum": 255, + "minimum": 0, + "optional": 1, + "type": "integer" + }, + "name": { + "description": "Drive Identifier.", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "path": { + "description": "The path to a LTO SCSI-generic tape device (i.e. '/dev/sg0')", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "unstable": false + }, + "POST": { + "description": "Create a new drive", + "method": "POST", + "parameters": { + "additionalProperties": false, + "description": "Create a new drive", + "properties": { + "changer": { + "description": "Tape Changer Identifier.", + "maxLength": 32, + "minLength": 3, + "optional": 1, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "changer-drivenum": { + "default": 0, + "description": "Associated changer drive number (requires option changer)", + "maximum": 255, + "minimum": 0, + "optional": 1, + "type": "integer" + }, + "name": { + "description": "Drive Identifier.", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "path": { + "description": "The path to a LTO SCSI-generic tape device (i.e. '/dev/sg0')", + "type": "string" + } + } + }, + "permissions": { + "check": { + "partial": false, + "path": [ + "tape", + "device" + ], + "privs": [ + "Tape.Modify" + ] + } + }, + "returns": { + "type": "null" + }, + "unstable": false + } + }, + "leaf": 0, + "path": "/config/drive", + "text": "drive" + }, + { + "children": [ + { + "info": { + "DELETE": { + "description": "Remove encryption key.", + "method": "DELETE", + "parameters": { + "additionalProperties": false, + "description": "Remove encryption key.", + "properties": { + "digest": { + "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications.", + "optional": 1, + "pattern": "/^[a-f0-9]{64}$/", + "type": "string" + }, + "id": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + } + } + }, + "permissions": { + "check": { + "partial": false, + "path": [ + "system", + "encryption-keys", + "{id}" + ], + "privs": [ + "Sys.Modify" + ] + } + }, + "returns": { + "type": "null" + }, + "unstable": false + }, + "POST": { + "description": "Toggle the archive state for the key by given id, archived keys are no longer usable to encrypt contents.", + "method": "POST", + "parameters": { + "additionalProperties": false, + "description": "Toggle the archive state for the key by given id, archived keys are no longer usable to encrypt contents.", + "properties": { + "digest": { + "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications.", + "optional": 1, + "pattern": "/^[a-f0-9]{64}$/", + "type": "string" + }, + "id": { + "description": "ID to uniquely identify encryption/decription key", "maxLength": 32, "minLength": 3, "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", "type": "string" - }, - "path": { - "description": "The path to a LTO SCSI-generic tape device (i.e. '/dev/sg0')", - "optional": 1, - "type": "string" } } }, @@ -11329,109 +12323,122 @@ var apiSchema = [ "check": { "partial": false, "path": [ - "tape", - "device", - "{name}" + "system", + "encryption-keys", + "{id}" ], "privs": [ - "Tape.Modify" + "Sys.Modify" ] } }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, - "path": "/config/drive/{name}", - "text": "{name}" + "path": "/config/encryption-keys/{id}", + "text": "{id}" } ], "info": { "GET": { - "description": "List drives", + "description": "List configured encryption keys.", "method": "GET", "parameters": { "additionalProperties": false, - "description": "List drives", - "properties": {} + "description": "List configured encryption keys.", + "properties": { + "include-archived": { + "default": false, + "description": "List also keys which have been archived.", + "optional": 1, + "type": "boolean" + } + } }, "permissions": { - "description": "List configured tape drives filtered by Tape.Audit privileges", + "description": "List configured encryption keys filtered by Sys.Audit privileges", "user": "all" }, "returns": { - "description": "The list of configured drives (with config digest).", + "description": "List of configured encryption keys.", "items": { "additionalProperties": false, - "description": "Lto SCSI tape driver", + "description": "Encryption/Decryption Key Info with ID.", "properties": { - "changer": { - "description": "Tape Changer Identifier.", - "maxLength": 32, - "minLength": 3, + "archived-at": { + "description": "Timestamp when key was archived (not set if key is active).", "optional": 1, - "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "integer" + }, + "created": { + "description": "Key creation time", + "type": "integer" + }, + "fingerprint": { + "description": "X509 certificate fingerprint (sha256).", + "optional": 1, + "pattern": "/^(?:[0-9a-fA-F][0-9a-fA-F])(?::[0-9a-fA-F][0-9a-fA-F]){31}$/", "type": "string" }, - "changer-drivenum": { - "default": 0, - "description": "Associated changer drive number (requires option changer)", - "maximum": 255, - "minimum": 0, + "hint": { + "description": "Password hint", "optional": 1, - "type": "integer" + "type": "string" }, - "name": { - "description": "Drive Identifier.", + "id": { + "description": "ID to uniquely identify encryption/decription key", "maxLength": 32, "minLength": 3, "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", "type": "string" }, + "kdf": { + "default": "scrypt", + "description": "Key derivation function for password protected encryption keys.", + "enum": [ + "none", + "scrypt", + "pbkdf2" + ], + "type": "string" + }, + "modified": { + "description": "Key modification time", + "type": "integer" + }, "path": { - "description": "The path to a LTO SCSI-generic tape device (i.e. '/dev/sg0')", + "description": "Path to key (if stored in a file)", + "optional": 1, "type": "string" } }, "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { - "description": "Create a new drive", + "description": "Create new encryption key instance or use the provided one.", "method": "POST", "parameters": { "additionalProperties": false, - "description": "Create a new drive", + "description": "Create new encryption key instance or use the provided one.", "properties": { - "changer": { - "description": "Tape Changer Identifier.", + "id": { + "description": "ID to uniquely identify encryption/decription key", "maxLength": 32, "minLength": 3, - "optional": 1, "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", "type": "string" }, - "changer-drivenum": { - "default": 0, - "description": "Associated changer drive number (requires option changer)", - "maximum": 255, - "minimum": 0, + "key": { + "description": "Use provided key instead of creating new one.", "optional": 1, - "type": "integer" - }, - "name": { - "description": "Drive Identifier.", - "maxLength": 32, - "minLength": 3, - "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", - "type": "string" - }, - "path": { - "description": "The path to a LTO SCSI-generic tape device (i.e. '/dev/sg0')", "type": "string" } } @@ -11440,22 +12447,23 @@ var apiSchema = [ "check": { "partial": false, "path": [ - "tape", - "device" + "system", + "encryption-keys" ], "privs": [ - "Tape.Modify" + "Sys.Modify" ] } }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, - "path": "/config/drive", - "text": "drive" + "path": "/config/encryption-keys", + "text": "encryption-keys" }, { "children": [ @@ -11492,7 +12500,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Get media pool configuration", @@ -11567,7 +12576,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update media pool settings", @@ -11647,7 +12657,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -11716,7 +12727,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new media pool", @@ -11779,7 +12791,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -11825,7 +12838,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read the InfluxDB http server configuration", @@ -11916,7 +12930,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update an InfluxDB http server configuration", @@ -12021,7 +13036,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -12115,7 +13131,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new InfluxDB http server configuration", @@ -12195,7 +13212,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -12239,7 +13257,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read the InfluxDB udp server configuration", @@ -12303,7 +13322,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update an InfluxDB udp server configuration", @@ -12377,7 +13397,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -12444,7 +13465,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new InfluxDB udp server configuration", @@ -12497,7 +13519,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -12519,7 +13542,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -12564,7 +13588,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Get a gotify endpoint.", @@ -12638,7 +13663,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update gotify endpoint.", @@ -12711,7 +13737,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -12788,7 +13815,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Add a new gotify endpoint.", @@ -12855,7 +13883,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -12896,7 +13925,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Get a sendmail endpoint.", @@ -13000,7 +14030,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update sendmail endpoint.", @@ -13101,7 +14132,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -13208,7 +14240,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Add a new sendmail endpoint.", @@ -13301,7 +14334,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -13342,7 +14376,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Get a smtp endpoint.", @@ -13467,7 +14502,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update smtp endpoint.", @@ -13603,7 +14639,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -13731,7 +14768,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Add a new smtp endpoint.", @@ -13850,7 +14888,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -13891,7 +14930,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Get a webhook endpoint.", @@ -14028,7 +15068,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update webhook endpoint.", @@ -14168,7 +15209,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -14308,7 +15350,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Add a new webhook endpoint.", @@ -14434,7 +15477,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -14456,7 +15500,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -14508,7 +15553,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -14551,7 +15597,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -14592,7 +15639,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Get a notification matcher.", @@ -14711,7 +15759,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update notification matcher.", @@ -14834,7 +15883,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -14956,7 +16006,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Add a new notification matcher.", @@ -15064,7 +16115,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -15107,7 +16159,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -15129,7 +16182,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -15201,7 +16255,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -15223,7 +16278,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -15262,7 +16318,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read a prune job configuration.", @@ -15372,7 +16429,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update prune job config.", @@ -15500,7 +16558,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -15613,7 +16672,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new prune job.", @@ -15712,7 +16772,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -15826,7 +16887,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -15891,7 +16953,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -15913,7 +16976,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -15956,6 +17020,15 @@ var apiSchema = [ "additionalProperties": false, "description": "Basic information about a datastore.", "properties": { + "backend-type": { + "default": "filesystem", + "description": "Datastore backend type", + "enum": [ + "filesystem", + "s3" + ], + "type": "string" + }, "comment": { "description": "Comment.", "maxLength": 128, @@ -16016,7 +17089,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -16061,7 +17135,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read remote configuration data.", @@ -16131,10 +17206,17 @@ var apiSchema = [ "description": "The (optional) port", "optional": 1, "type": "integer" + }, + "use-node-proxy": { + "default": false, + "description": "Use the http proxy configuration of the node for remote connections.", + "optional": 1, + "type": "boolean" } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update remote configuration.", @@ -16165,7 +17247,8 @@ var apiSchema = [ "enum": [ "comment", "fingerprint", - "port" + "port", + "use-node-proxy" ], "type": "string" }, @@ -16209,6 +17292,12 @@ var apiSchema = [ "description": "The (optional) port", "optional": 1, "type": "integer" + }, + "use-node-proxy": { + "default": false, + "description": "Use the http proxy configuration of the node for remote connections.", + "optional": 1, + "type": "boolean" } } }, @@ -16226,7 +17315,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -16289,12 +17379,19 @@ var apiSchema = [ "description": "The (optional) port", "optional": 1, "type": "integer" + }, + "use-node-proxy": { + "default": false, + "description": "Use the http proxy configuration of the node for remote connections.", + "optional": 1, + "type": "boolean" } }, "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create new remote.", @@ -16346,6 +17443,12 @@ var apiSchema = [ "description": "The (optional) port", "optional": 1, "type": "integer" + }, + "use-node-proxy": { + "default": false, + "description": "Use the http proxy configuration of the node for remote connections.", + "optional": 1, + "type": "boolean" } } }, @@ -16362,7 +17465,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -16402,7 +17506,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -16448,7 +17553,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read an s3 client configuration.", @@ -16535,7 +17641,8 @@ var apiSchema = [ "items": { "description": "Provider specific feature implementation quirks.", "enum": [ - "skip-if-none-match-header" + "skip-if-none-match-header", + "delete-objects-via-delete-object" ], "type": "string" }, @@ -16570,7 +17677,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update an s3 client configuration.", @@ -16659,7 +17767,8 @@ var apiSchema = [ "items": { "description": "Provider specific feature implementation quirks.", "enum": [ - "skip-if-none-match-header" + "skip-if-none-match-header", + "delete-objects-via-delete-object" ], "type": "string" }, @@ -16714,7 +17823,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -16793,7 +17903,8 @@ var apiSchema = [ "items": { "description": "Provider specific feature implementation quirks.", "enum": [ - "skip-if-none-match-header" + "skip-if-none-match-header", + "delete-objects-via-delete-object" ], "type": "string" }, @@ -16830,7 +17941,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new s3 client configuration.", @@ -16891,7 +18003,8 @@ var apiSchema = [ "items": { "description": "Provider specific feature implementation quirks.", "enum": [ - "skip-if-none-match-header" + "skip-if-none-match-header", + "delete-objects-via-delete-object" ], "type": "string" }, @@ -16944,7 +18057,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -16983,7 +18097,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read a sync job configuration.", @@ -17009,6 +18124,26 @@ var apiSchema = [ "additionalProperties": false, "description": "Sync Job", "properties": { + "active-encryption-key": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "optional": 1, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "associated-key": { + "description": "List of cryptographic keys associated with sync job.", + "items": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "optional": 1, + "type": "array" + }, "burst-in": { "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", "maxLength": 64, @@ -17112,7 +18247,7 @@ var apiSchema = [ }, "remove-vanished": { "default": false, - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted.", + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted.", "optional": 1, "type": "boolean" }, @@ -17164,10 +18299,19 @@ var apiSchema = [ "description": "Only synchronize verified backup snapshots, exclude others.", "optional": 1, "type": "boolean" + }, + "worker-threads": { + "default": 1, + "description": "The number of worker threads to process groups in parallel.", + "maximum": 32, + "minimum": 1, + "optional": 1, + "type": "integer" } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update sync job config.", @@ -17176,6 +18320,26 @@ var apiSchema = [ "additionalProperties": false, "description": "Update sync job config.", "properties": { + "active-encryption-key": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "optional": 1, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "associated-key": { + "description": "List of cryptographic keys associated with sync job.", + "items": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "optional": 1, + "type": "array" + }, "burst-in": { "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", "maxLength": 64, @@ -17220,7 +18384,10 @@ var apiSchema = [ "verified-only", "run-on-mount", "unmount-on-done", - "sync-direction" + "sync-direction", + "worker-threads", + "active-encryption-key", + "associated-key" ], "type": "string" }, @@ -17316,7 +18483,7 @@ var apiSchema = [ }, "remove-vanished": { "default": false, - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted.", + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted.", "optional": 1, "type": "boolean" }, @@ -17369,6 +18536,14 @@ var apiSchema = [ "description": "Only synchronize verified backup snapshots, exclude others.", "optional": 1, "type": "boolean" + }, + "worker-threads": { + "default": 1, + "description": "The number of worker threads to process groups in parallel.", + "maximum": 32, + "minimum": 1, + "optional": 1, + "type": "integer" } } }, @@ -17378,7 +18553,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -17417,6 +18593,26 @@ var apiSchema = [ "additionalProperties": false, "description": "Sync Job", "properties": { + "active-encryption-key": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "optional": 1, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "associated-key": { + "description": "List of cryptographic keys associated with sync job.", + "items": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "optional": 1, + "type": "array" + }, "burst-in": { "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", "maxLength": 64, @@ -17520,7 +18716,7 @@ var apiSchema = [ }, "remove-vanished": { "default": false, - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted.", + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted.", "optional": 1, "type": "boolean" }, @@ -17572,12 +18768,21 @@ var apiSchema = [ "description": "Only synchronize verified backup snapshots, exclude others.", "optional": 1, "type": "boolean" + }, + "worker-threads": { + "default": 1, + "description": "The number of worker threads to process groups in parallel.", + "maximum": 32, + "minimum": 1, + "optional": 1, + "type": "integer" } }, "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new sync job.", @@ -17586,6 +18791,26 @@ var apiSchema = [ "additionalProperties": false, "description": "Create a new sync job.", "properties": { + "active-encryption-key": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "optional": 1, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "associated-key": { + "description": "List of cryptographic keys associated with sync job.", + "items": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "optional": 1, + "type": "array" + }, "burst-in": { "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", "maxLength": 64, @@ -17689,7 +18914,7 @@ var apiSchema = [ }, "remove-vanished": { "default": false, - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted.", + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted.", "optional": 1, "type": "boolean" }, @@ -17741,6 +18966,14 @@ var apiSchema = [ "description": "Only synchronize verified backup snapshots, exclude others.", "optional": 1, "type": "boolean" + }, + "worker-threads": { + "default": 1, + "description": "The number of worker threads to process groups in parallel.", + "maximum": 32, + "minimum": 1, + "optional": 1, + "type": "integer" } } }, @@ -17750,7 +18983,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -17798,7 +19032,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read a tape backup job configuration.", @@ -17942,7 +19177,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update the tape backup job", @@ -18106,7 +19342,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -18244,7 +19481,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new tape backup job.", @@ -18376,7 +19614,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -18421,7 +19660,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Get key config (public key part)", @@ -18489,7 +19729,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Change the encryption key's password (and password hint).", @@ -18560,7 +19801,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -18633,7 +19875,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new encryption key", @@ -18691,7 +19934,8 @@ var apiSchema = [ "description": "Tape encryption key fingerprint (sha256).", "pattern": "/^(?:[0-9a-fA-F][0-9a-fA-F])(?::[0-9a-fA-F][0-9a-fA-F]){31}$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 0, @@ -18735,7 +19979,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read traffic control configuration data.", @@ -18841,7 +20086,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update traffic control configuration.", @@ -18961,7 +20207,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -19070,7 +20317,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create new traffic control rule.", @@ -19165,7 +20413,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -19204,7 +20453,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read a verification job configuration.", @@ -19302,7 +20552,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update verification job config.", @@ -19415,7 +20666,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -19516,7 +20768,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new verification job.", @@ -19603,7 +20856,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -19625,7 +20879,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -19678,7 +20933,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -19924,7 +21180,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "POST": { "description": "Change the properties of the specified repository.\n\nThe `digest` parameter asserts that the configuration has not been modified.", @@ -19970,7 +21227,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "PUT": { "description": "Add the repository identified by the `handle`.\nIf the repository is already configured, it will be set to enabled.\n\nThe `digest` parameter asserts that the configuration has not been modified.", @@ -19986,15 +21244,8 @@ var apiSchema = [ "type": "string" }, "handle": { - "description": "Handles for Proxmox repositories.", - "enum": [ - "enterprise", - "no-subscription", - "test", - "ceph-squid-enterprise", - "ceph-squid-no-subscription", - "ceph-squid-test" - ], + "description": "Handle referencing a standard APT repository.", + "pattern": "/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/", "type": "string" }, "node": { @@ -20015,7 +21266,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -20099,7 +21351,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Update the APT database", @@ -20141,7 +21394,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -20225,7 +21479,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -20247,7 +21502,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -20294,14 +21550,15 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "PUT": { - "description": "Renew the current ACME certificate if it expires within 30 days (or always if the `force`\nparameter is set).", + "description": "Renew the current ACME certificate if it is within its renewal lead time (or always if the\n`force` parameter is set).", "method": "PUT", "parameters": { "additionalProperties": false, - "description": "Renew the current ACME certificate if it expires within 30 days (or always if the `force`\nparameter is set).", + "description": "Renew the current ACME certificate if it is within its renewal lead time (or always if the\n`force` parameter is set).", "properties": { "force": { "default": false, @@ -20330,7 +21587,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -20352,7 +21610,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -20395,7 +21654,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "POST": { "description": "Upload a custom certificate.", @@ -20505,7 +21765,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -20601,7 +21862,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -20623,7 +21885,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -20668,8 +21931,7 @@ var apiSchema = [ "description": "The ACME configuration.\n\nCurrently only contains the name of the account use.", "properties": { "account": { - "description": "ACME account name.", - "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "description": "Account to use to acquire ACME certificates.", "type": "string" } }, @@ -20907,6 +22169,11 @@ var apiSchema = [ "type": "string", "typetext": "[http://][:port]" }, + "location": { + "description": "The location of the PBS instance.", + "optional": 1, + "type": "string" + }, "task-log-max-days": { "description": "Maximum days to keep Task logs", "minimum": 0, @@ -20915,7 +22182,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update the node configuration", @@ -20931,8 +22199,7 @@ var apiSchema = [ "description": "The ACME configuration.\n\nCurrently only contains the name of the account use.", "properties": { "account": { - "description": "ACME account name.", - "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "description": "Account to use to acquire ACME certificates.", "type": "string" } }, @@ -21166,7 +22433,8 @@ var apiSchema = [ "default-lang", "description", "task-log-max-days", - "consent-text" + "consent-text", + "location" ], "type": "string" }, @@ -21200,6 +22468,11 @@ var apiSchema = [ "type": "string", "typetext": "[http://][:port]" }, + "location": { + "description": "The location of the PBS instance.", + "optional": 1, + "type": "string" + }, "node": { "description": "Node name (or 'localhost')", "pattern": "/^(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?)$/", @@ -21226,7 +22499,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -21274,7 +22548,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -21353,7 +22628,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a Filesystem on an unused disk. Will be mounted under `/mnt/datastore/`.", @@ -21421,7 +22697,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 0, @@ -21474,7 +22751,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -21684,7 +22962,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -21800,7 +23079,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -21847,7 +23127,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -21894,7 +23175,8 @@ var apiSchema = [ "description": "zpool vdev tree with status", "properties": {}, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -21971,7 +23253,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create a new ZFS pool. Will be mounted under `/mnt/datastore/`.", @@ -22067,7 +23350,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 0, @@ -22089,7 +23373,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -22159,7 +23444,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update DNS settings.", @@ -22232,13 +23518,52 @@ var apiSchema = [ } }, "returns": { - "type": "null" - } + "type": "null" + }, + "unstable": false + } + }, + "leaf": 1, + "path": "/nodes/{node}/dns", + "text": "dns" + }, + { + "info": { + "GET": { + "description": "Returns a unique server identity. The ID is derived from `/etc/machine-id`.", + "method": "GET", + "parameters": { + "additionalProperties": false, + "description": "Returns a unique server identity. The ID is derived from `/etc/machine-id`.", + "properties": { + "node": { + "description": "Node name (or 'localhost')", + "optional": 1, + "pattern": "/^(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?)$/", + "type": "string" + } + } + }, + "permissions": { + "user": "all" + }, + "returns": { + "additionalProperties": false, + "description": "Unique instance identity information.", + "properties": { + "pbs-instance-id": { + "description": "Unique instance identifier.", + "type": "string" + } + }, + "type": "object" + }, + "unstable": false } }, "leaf": 1, - "path": "/nodes/{node}/dns", - "text": "dns" + "path": "/nodes/{node}/identity", + "text": "identity" }, { "info": { @@ -22303,7 +23628,8 @@ var apiSchema = [ "type": "string" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -22357,7 +23683,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read a network interface configuration.", @@ -22592,7 +23919,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Update network interface config.", @@ -22834,7 +24162,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -22872,7 +24201,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "List all datastores", @@ -23103,7 +24433,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Create network interface configuration.", @@ -23313,7 +24644,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "PUT": { "description": "Reload network configuration (requires ifupdown2).", @@ -23344,7 +24676,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -23382,7 +24715,8 @@ var apiSchema = [ "returns": { "description": "Returns report of the node", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -23439,7 +24773,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -23486,7 +24821,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -23529,7 +24865,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -23572,7 +24909,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -23615,7 +24953,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -23658,7 +24997,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -23680,7 +25020,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -23746,7 +25087,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -23952,7 +25294,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "POST": { "description": "Reboot or shutdown the node.", @@ -23990,7 +25333,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -24026,7 +25370,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Read subscription info.", @@ -24109,7 +25454,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "POST": { "description": "Check and update subscription status.", @@ -24144,7 +25490,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "PUT": { "description": "Set a subscription key and check it.", @@ -24154,10 +25501,7 @@ var apiSchema = [ "description": "Set a subscription key and check it.", "properties": { "key": { - "description": "Proxmox Backup Server subscription key.", - "maxLength": 16, - "minLength": 15, - "pattern": "/^pbs(?:[cbsp])-[0-9a-f]{10}$/", + "description": "The subscription key to install.", "type": "string" }, "node": { @@ -24180,7 +25524,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -24263,7 +25608,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -24327,7 +25673,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -24364,6 +25711,11 @@ var apiSchema = [ "additionalProperties": false, "description": "Task status information.", "properties": { + "endtime": { + "description": "The task end time (Epoch)", + "optional": 1, + "type": "integer" + }, "exitstatus": { "description": "'OK', 'Error: ', or 'unknown'.", "optional": 1, @@ -24420,7 +25772,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -24455,7 +25808,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "GET": { "description": "Directory index.", @@ -24470,7 +25824,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -24620,7 +25975,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -24686,7 +26042,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -24735,7 +26092,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false }, "PUT": { "description": "Set time zone", @@ -24772,7 +26130,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -24817,7 +26176,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -24839,7 +26199,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -24858,7 +26219,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -24889,7 +26251,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -24919,6 +26282,18 @@ var apiSchema = [ "optional": 1, "type": "string" }, + "decryption-keys": { + "description": "List of decryption keys.", + "items": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, + "optional": 1, + "type": "array" + }, "encrypted-only": { "description": "Only synchronize encrypted backup snapshots, exclude others.", "optional": 1, @@ -24986,7 +26361,7 @@ var apiSchema = [ }, "remove-vanished": { "default": false, - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted.", + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted.", "optional": 1, "type": "boolean" }, @@ -25012,6 +26387,14 @@ var apiSchema = [ "description": "Only synchronize verified backup snapshots, exclude others.", "optional": 1, "type": "boolean" + }, + "worker-threads": { + "default": 1, + "description": "The number of worker threads to process groups in parallel.", + "maximum": 32, + "minimum": 1, + "optional": 1, + "type": "integer" } } }, @@ -25021,7 +26404,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -25056,6 +26440,14 @@ var apiSchema = [ "optional": 1, "type": "boolean" }, + "encryption-key": { + "description": "ID to uniquely identify encryption/decription key", + "maxLength": 32, + "minLength": 3, + "optional": 1, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" + }, "group-filter": { "description": "List of group filters.", "items": { @@ -25117,7 +26509,7 @@ var apiSchema = [ }, "remove-vanished": { "default": false, - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted.", + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted.", "optional": 1, "type": "boolean" }, @@ -25138,6 +26530,14 @@ var apiSchema = [ "description": "Only synchronize verified backup snapshots, exclude others.", "optional": 1, "type": "boolean" + }, + "worker-threads": { + "default": 1, + "description": "The number of worker threads to process groups in parallel.", + "maximum": 32, + "minimum": 1, + "optional": 1, + "type": "integer" } } }, @@ -25147,7 +26547,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -25209,7 +26610,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -25243,6 +26645,15 @@ var apiSchema = [ "optional": 1, "type": "integer" }, + "backend-type": { + "default": "filesystem", + "description": "Datastore backend type", + "enum": [ + "filesystem", + "s3" + ], + "type": "string" + }, "error": { "description": "An error description, for example, when the datastore could not be looked up", "optional": 1, @@ -25390,7 +26801,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -25426,7 +26838,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -25448,7 +26861,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -25483,7 +26897,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -25646,7 +27061,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "POST": { "description": "Backup datastore to tape media pool", @@ -25759,7 +27175,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 0, @@ -25850,7 +27267,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -25900,7 +27318,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -25922,7 +27341,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -26000,7 +27420,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -26055,7 +27476,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -26117,7 +27539,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -26175,7 +27598,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -26218,7 +27642,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -26261,7 +27686,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -26310,7 +27736,8 @@ var apiSchema = [ "description": "The import-export slot number the media was transferred to.", "minimum": 1, "type": "integer" - } + }, + "unstable": false } }, "leaf": 1, @@ -26346,6 +27773,14 @@ var apiSchema = [ "optional": 1, "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", "type": "string" + }, + "load-barcode": { + "description": "Media Label/Barcode.", + "maxLength": 32, + "minLength": 2, + "optional": 1, + "pattern": "/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/", + "type": "string" } } }, @@ -26367,7 +27802,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -26425,7 +27861,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false }, "PUT": { "description": "Update inventory\n\nNote: Only useful for drives with associated changer device.\n\nThis method queries the changer to get a list of media labels. It\nthen loads any unknown media into the drive, reads the label, and\nstore the result to the media database.\n\nIf `catalog` is true, also tries to restore the catalog from tape.\n\nNote: This updates the media online status.", @@ -26473,7 +27910,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -26531,7 +27969,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -26581,7 +28020,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -26626,7 +28066,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -26715,7 +28156,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -26759,7 +28201,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -26802,7 +28245,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -26971,7 +28415,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -27020,7 +28465,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -27191,7 +28637,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -27213,7 +28660,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -27329,7 +28777,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -27450,7 +28899,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -27500,7 +28950,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -27529,7 +28980,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "POST": { "description": "Update media status (None, 'full', 'damaged' or 'retired')\n\nIt is not allowed to set status to 'writable' or 'unknown' (those\nare internally managed states).", @@ -27570,7 +29022,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -27592,7 +29045,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -27715,7 +29169,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 0, @@ -27763,7 +29218,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -27816,7 +29272,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -27838,7 +29295,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -27976,7 +29434,8 @@ var apiSchema = [ "minLength": 36, "pattern": "/^UPID:(?P[a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?):(?P[0-9A-Fa-f]{8}):(?P[0-9A-Fa-f]{8,9}):(?P[0-9A-Fa-f]{8,16}):(?P[0-9A-Fa-f]{8}):(?P[^:\\s]+):(?P[^:\\s]*):(?P[^:\\s]+):$/", "type": "string" - } + }, + "unstable": false } }, "leaf": 1, @@ -28039,7 +29498,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -28102,7 +29562,8 @@ var apiSchema = [ "type": "object" }, "type": "array" - } + }, + "unstable": false } }, "leaf": 1, @@ -28124,7 +29585,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -28162,7 +29624,8 @@ var apiSchema = [ } }, "type": "object" - } + }, + "unstable": false } }, "leaf": 1, @@ -28185,7 +29648,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -28218,7 +29682,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28261,7 +29726,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28301,7 +29767,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28326,7 +29793,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false }, "PUT": { "description": "Append chunk to dynamic index writer.", @@ -28363,7 +29831,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28382,7 +29851,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28425,7 +29895,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28442,7 +29913,7 @@ var apiSchema = [ "description": "Close fixed index writer.", "properties": { "chunk-count": { - "description": "Chunk count. This is used to verify that the server got all chunks. Ignored for incremental backups.", + "description": "Number of new and re-indexed chunks. Used to verify that the server got all chunk digests.", "minimum": 0, "type": "integer" }, @@ -28465,7 +29936,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28494,13 +29966,15 @@ var apiSchema = [ "size": { "description": "File size.", "minimum": 1, + "optional": 1, "type": "integer" } } }, "returns": { "type": "null" - } + }, + "unstable": false }, "PUT": { "description": "Append chunk to fixed index writer.", @@ -28537,7 +30011,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28562,7 +30037,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28581,7 +30057,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28600,7 +30077,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28608,6 +30086,7 @@ var apiSchema = [ "text": "speedtest" } ], + "expanded": false, "info": { "GET": { "description": "Directory index.", @@ -28622,7 +30101,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, @@ -28649,7 +30129,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28674,7 +30155,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28693,7 +30175,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 1, @@ -28701,6 +30184,7 @@ var apiSchema = [ "text": "speedtest" } ], + "expanded": false, "info": { "GET": { "description": "Directory index.", @@ -28715,7 +30199,8 @@ var apiSchema = [ }, "returns": { "type": "null" - } + }, + "unstable": false } }, "leaf": 0, diff --git a/proxmox-backup-server/pbs-api.json b/proxmox-backup-server/pbs-api.json index c3ba653..d4dd207 100644 --- a/proxmox-backup-server/pbs-api.json +++ b/proxmox-backup-server/pbs-api.json @@ -4636,6 +4636,10 @@ "items": { "type": "object", "properties": { + "backend-type": { + "type": "string", + "description": "Datastore backend type" + }, "comment": { "type": "string", "description": "Comment." @@ -6858,14 +6862,61 @@ ] } }, - "//admin/admin/datastore/admin/datastore/{store}/admin/datastore/{store}/namespace": { - "delete": { - "summary": "Delete a backup namespace including all snapshots.", - "description": "Delete a backup namespace including all snapshots.", - "operationId": "delete_admin_admin_datastore_admin_datastore_store_admin_datastore_store_namespace", + "//admin/admin/datastore/admin/datastore/{store}/admin/datastore/{store}/move-group": { + "post": { + "summary": "Move a backup group to a different namespace within the same datastore.", + "description": "Move a backup group to a different namespace within the same datastore.", + "operationId": "post_admin_admin_datastore_admin_datastore_store_admin_datastore_store_move-group", "tags": [ "Administration" ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "backup-id": { + "type": "string", + "description": "Backup ID.", + "pattern": "^[A-Za-z0-9_][A-Za-z0-9._\\-]*$" + }, + "backup-type": { + "type": "string", + "description": "Backup types.", + "enum": [ + "vm", + "ct", + "host" + ] + }, + "merge-group": { + "type": "boolean", + "description": "If the group already exists in the target namespace, merge snapshots into it. Requires matching ownership and non-overlapping snapshot times.", + "default": true + }, + "ns": { + "type": "string", + "description": "Namespace.", + "maxLength": 256, + "pattern": "^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$" + }, + "target-ns": { + "type": "string", + "description": "Namespace.", + "maxLength": 256, + "pattern": "^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$" + } + }, + "required": [ + "backup-id", + "backup-type" + ] + } + } + } + }, "parameters": [ { "name": "store", @@ -6875,51 +6926,16 @@ "$ref": "#/components/schemas/ProxmoxDatastoreName" }, "description": "The store parameter" - }, - { - "name": "delete-groups", - "in": "query", - "required": false, - "schema": { - "type": "boolean", - "description": "If set, all groups will be destroyed in the whole hierarchy below andincluding `ns`. If not set, only empty namespaces will be pruned.", - "default": false - }, - "description": "If set, all groups will be destroyed in the whole hierarchy below andincluding `ns`. If not set, only empty namespaces will be pruned." - }, - { - "name": "error-on-protected", - "in": "query", - "required": false, - "schema": { - "type": "boolean", - "description": "Return error when namespace cannot be deleted because of protected snapshots", - "default": true - }, - "description": "Return error when namespace cannot be deleted because of protected snapshots" - }, - { - "name": "ns", - "in": "query", - "required": true, - "schema": { - "type": "string", - "description": "Namespace.", - "maxLength": 256, - "pattern": "^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$" - }, - "description": "Namespace." } ], "responses": { "200": { - "description": "Successful operation", + "description": "Unique Process/Task Identifier", "content": { "application/json": { "schema": { - "type": "object", - "properties": {}, - "additionalProperties": false + "type": "string", + "description": "Unique Process/Task Identifier" } } } @@ -7001,14 +7017,61 @@ "ProxmoxCSRFToken": [] } ] - }, - "get": { - "summary": "List the namespaces of a datastore.", - "description": "List the namespaces of a datastore.", - "operationId": "get_admin_admin_datastore_admin_datastore_store_admin_datastore_store_namespace", + } + }, + "//admin/admin/datastore/admin/datastore/{store}/admin/datastore/{store}/move-namespace": { + "post": { + "summary": "Move a backup namespace (including all child namespaces and groups) to a new location.", + "description": "Move a backup namespace (including all child namespaces and groups) to a new location.", + "operationId": "post_admin_admin_datastore_admin_datastore_store_admin_datastore_store_move-namespace", "tags": [ "Administration" ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "delete-source": { + "type": "boolean", + "description": "Remove the source namespace after moving all contents. Defaults to true.", + "default": true + }, + "max-depth": { + "type": "integer", + "description": "How many levels of namespaces should be operated on (0 == no recursion)", + "minimum": 0, + "maximum": 7, + "default": 7 + }, + "merge-groups": { + "type": "boolean", + "description": "If a group with the same name already exists in the target namespace, merge snapshots into it. Requires matching ownership and non-overlapping snapshot times.", + "default": true + }, + "ns": { + "type": "string", + "description": "Namespace.", + "maxLength": 256, + "pattern": "^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$" + }, + "target-ns": { + "type": "string", + "description": "Namespace.", + "maxLength": 256, + "pattern": "^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$" + } + }, + "required": [ + "ns", + "target-ns" + ] + } + } + } + }, "parameters": [ { "name": "store", @@ -7018,55 +7081,16 @@ "$ref": "#/components/schemas/ProxmoxDatastoreName" }, "description": "The store parameter" - }, - { - "name": "max-depth", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "description": "How many levels of namespaces should be operated on (0 == no recursion)", - "minimum": 0, - "maximum": 7, - "default": 7 - }, - "description": "How many levels of namespaces should be operated on (0 == no recursion)" - }, - { - "name": "parent", - "in": "query", - "required": false, - "schema": { - "type": "string", - "description": "Namespace.", - "maxLength": 256, - "pattern": "^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$" - }, - "description": "Namespace." } ], "responses": { "200": { - "description": "Returns the list of backup namespaces.", + "description": "Unique Process/Task Identifier", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "comment": { - "type": "string", - "description": "The first line from the namespace's \"notes\"" - }, - "ns": { - "type": "string", - "description": "Namespace." - } - }, - "description": "Basic information about a backup namespace." - }, - "description": "Returns the list of backup namespaces." + "type": "string", + "description": "Unique Process/Task Identifier" } } } @@ -7148,42 +7172,16 @@ "ProxmoxCSRFToken": [] } ] - }, - "post": { - "summary": "Create a new datastore namespace.", - "description": "Create a new datastore namespace.", - "operationId": "post_admin_admin_datastore_admin_datastore_store_admin_datastore_store_namespace", + } + }, + "//admin/admin/datastore/admin/datastore/{store}/admin/datastore/{store}/namespace": { + "delete": { + "summary": "Delete a backup namespace including all snapshots.", + "description": "Delete a backup namespace including all snapshots.", + "operationId": "delete_admin_admin_datastore_admin_datastore_store_admin_datastore_store_namespace", "tags": [ "Administration" ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of the new namespace to add at the parent.", - "minLength": 1, - "maxLength": 32, - "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$" - }, - "parent": { - "type": "string", - "description": "Namespace.", - "maxLength": 256, - "pattern": "^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$" - } - }, - "required": [ - "name" - ] - } - } - } - }, "parameters": [ { "name": "store", @@ -7193,16 +7191,334 @@ "$ref": "#/components/schemas/ProxmoxDatastoreName" }, "description": "The store parameter" + }, + { + "name": "delete-groups", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "If set, all groups will be destroyed in the whole hierarchy below andincluding `ns`. If not set, only empty namespaces will be pruned.", + "default": false + }, + "description": "If set, all groups will be destroyed in the whole hierarchy below andincluding `ns`. If not set, only empty namespaces will be pruned." + }, + { + "name": "error-on-protected", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Return error when namespace cannot be deleted because of protected snapshots", + "default": true + }, + "description": "Return error when namespace cannot be deleted because of protected snapshots" + }, + { + "name": "ns", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "Namespace.", + "maxLength": 256, + "pattern": "^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$" + }, + "description": "Namespace." } ], "responses": { "200": { - "description": "Namespace.", + "description": "Successful operation", "content": { "application/json": { "schema": { - "type": "string", - "description": "Namespace." + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters or malformed request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "401": { + "description": "Unauthorized - Authentication required or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "403": { + "description": "Forbidden - Insufficient permissions for the requested operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "404": { + "description": "Not Found - Requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "422": { + "description": "Unprocessable Entity - Request is well-formed but contains semantic errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "500": { + "description": "Internal Server Error - Unexpected server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "503": { + "description": "Service Unavailable - Service temporarily unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + } + }, + "security": [ + { + "ProxmoxApiToken": [], + "ProxmoxCSRFToken": [] + } + ] + }, + "get": { + "summary": "List the namespaces of a datastore.", + "description": "List the namespaces of a datastore.", + "operationId": "get_admin_admin_datastore_admin_datastore_store_admin_datastore_store_namespace", + "tags": [ + "Administration" + ], + "parameters": [ + { + "name": "store", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/ProxmoxDatastoreName" + }, + "description": "The store parameter" + }, + { + "name": "max-depth", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "description": "How many levels of namespaces should be operated on (0 == no recursion)", + "minimum": 0, + "maximum": 7, + "default": 7 + }, + "description": "How many levels of namespaces should be operated on (0 == no recursion)" + }, + { + "name": "parent", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "Namespace.", + "maxLength": 256, + "pattern": "^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$" + }, + "description": "Namespace." + } + ], + "responses": { + "200": { + "description": "Returns the list of backup namespaces.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "comment": { + "type": "string", + "description": "The first line from the namespace's \"notes\"" + }, + "ns": { + "type": "string", + "description": "Namespace." + } + }, + "description": "Basic information about a backup namespace." + }, + "description": "Returns the list of backup namespaces." + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters or malformed request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "401": { + "description": "Unauthorized - Authentication required or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "403": { + "description": "Forbidden - Insufficient permissions for the requested operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "404": { + "description": "Not Found - Requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "422": { + "description": "Unprocessable Entity - Request is well-formed but contains semantic errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "500": { + "description": "Internal Server Error - Unexpected server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "503": { + "description": "Service Unavailable - Service temporarily unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + } + }, + "security": [ + { + "ProxmoxApiToken": [], + "ProxmoxCSRFToken": [] + } + ] + }, + "post": { + "summary": "Create a new datastore namespace.", + "description": "Create a new datastore namespace.", + "operationId": "post_admin_admin_datastore_admin_datastore_store_admin_datastore_store_namespace", + "tags": [ + "Administration" + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the new namespace to add at the parent.", + "minLength": 1, + "maxLength": 32, + "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$" + }, + "parent": { + "type": "string", + "description": "Namespace.", + "maxLength": 256, + "pattern": "^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$" + } + }, + "required": [ + "name" + ] + } + } + } + }, + "parameters": [ + { + "name": "store", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/ProxmoxDatastoreName" + }, + "description": "The store parameter" + } + ], + "responses": { + "200": { + "description": "Namespace.", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "Namespace." } } } @@ -9147,6 +9463,10 @@ "type": "integer", "description": "Available space (bytes)." }, + "backend-type": { + "type": "string", + "description": "Datastore backend type" + }, "counts": { "type": "object", "properties": { @@ -9273,6 +9593,40 @@ }, "description": "Garbage collection status." }, + "s3-statistics": { + "type": "object", + "properties": { + "delete": { + "type": "integer", + "description": "Delete requests" + }, + "downloaded": { + "type": "integer", + "description": "Total downloaded (bytes)." + }, + "get": { + "type": "integer", + "description": "Get requests" + }, + "head": { + "type": "integer", + "description": "Head requests" + }, + "post": { + "type": "integer", + "description": "Post requests" + }, + "put": { + "type": "integer", + "description": "Put requests" + }, + "uploaded": { + "type": "integer", + "description": "Total uploaded (bytes)." + } + }, + "description": "Statistics specific to the S3 backend" + }, "total": { "type": "integer", "description": "Total space (bytes)." @@ -10744,24 +11098,24 @@ ] } }, - "//admin/admin/s3/admin/s3/{s3-client-id}": { + "//admin/admin/s3/admin/s3/{s3-endpoint-id}": { "get": { "summary": "Directory index.", "description": "Directory index.", - "operationId": "get_admin_admin_s3_admin_s3_s3-client-id", + "operationId": "get_admin_admin_s3_admin_s3_s3-endpoint-id", "tags": [ "Administration" ], "parameters": [ { - "name": "s3-client-id", + "name": "s3-endpoint-id", "in": "path", "required": true, "schema": { "type": "string", - "description": "The s3-client-id parameter" + "description": "The s3-endpoint-id parameter" }, - "description": "The s3-client-id parameter" + "description": "The s3-endpoint-id parameter" } ], "responses": { @@ -10856,11 +11210,11 @@ ] } }, - "//admin/admin/s3/admin/s3/{s3-client-id}/admin/s3/{s3-client-id}/check": { + "//admin/admin/s3/admin/s3/{s3-endpoint-id}/admin/s3/{s3-endpoint-id}/check": { "put": { "summary": "Perform basic sanity check for given s3 client configuration", "description": "Perform basic sanity check for given s3 client configuration", - "operationId": "put_admin_admin_s3_admin_s3_s3-client-id_admin_s3_s3-client-id_check", + "operationId": "put_admin_admin_s3_admin_s3_s3-endpoint-id_admin_s3_s3-endpoint-id_check", "tags": [ "Administration" ], @@ -10891,14 +11245,14 @@ }, "parameters": [ { - "name": "s3-client-id", + "name": "s3-endpoint-id", "in": "path", "required": true, "schema": { "type": "string", - "description": "The s3-client-id parameter" + "description": "The s3-endpoint-id parameter" }, - "description": "The s3-client-id parameter" + "description": "The s3-endpoint-id parameter" } ], "responses": { @@ -10993,272 +11347,425 @@ ] } }, - "//admin/admin/sync": { - "get": { - "summary": "List all configured sync jobs", - "description": "List all configured sync jobs", - "operationId": "get_admin_admin_sync", + "//admin/admin/s3/admin/s3/{s3-endpoint-id}/admin/s3/{s3-endpoint-id}/reset-counters": { + "put": { + "summary": "Reset the S3 request counters for matching endpoint, bucket or datastore (if prefix is given).", + "description": "Reset the S3 request counters for matching endpoint, bucket or datastore (if prefix is given).", + "operationId": "put_admin_admin_s3_admin_s3_s3-endpoint-id_admin_s3_s3-endpoint-id_reset-counters", "tags": [ "Administration" ], - "parameters": [ - { - "name": "store", - "in": "query", - "required": false, - "schema": { - "type": "string", - "description": "Datastore name.", - "minLength": 3, - "maxLength": 32, - "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$" - }, - "description": "Datastore name." - }, - { - "name": "sync-direction", - "in": "query", - "required": false, - "schema": { - "type": "string", - "description": "The direction of the listed sync jobs: push, pull or all.", - "enum": [ - "all", - "push", - "pull" - ], - "default": "pull" - }, - "description": "The direction of the listed sync jobs: push, pull or all." - } - ], - "responses": { - "200": { - "description": "List configured jobs and their status.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "burst-in": { - "type": "string", - "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...)." - }, - "burst-out": { - "type": "string", - "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...)." - }, - "comment": { - "type": "string", - "description": "Comment." - }, - "encrypted-only": { - "type": "boolean", - "description": "Only synchronize encrypted backup snapshots, exclude others." - }, - "group-filter": { - "type": "array", - "items": { - "type": "string", - "description": "Group filter based on group identifier ('group:GROUP'), group type ('type:'), or regex ('regex:RE'). Can be inverted by prepending 'exclude:'." - }, - "description": "List of group filters." - }, - "id": { - "type": "string", - "description": "Job ID." - }, - "last-run-endtime": { - "type": "integer", - "description": "Endtime of the last run." - }, - "last-run-state": { - "type": "string", - "description": "Result of the last run." - }, - "last-run-upid": { - "type": "string", - "description": "Task UPID of the last run." - }, - "max-depth": { - "type": "integer", - "description": "How many levels of namespaces should be operated on (0 == no recursion, empty == automatic full recursion, namespace depths reduce maximum allowed value)" - }, - "next-run": { - "type": "integer", - "description": "Estimated time of the next run (UNIX epoch)." - }, - "ns": { - "type": "string", - "description": "Namespace." - }, - "owner": { - "type": "string", - "description": "Authentication ID" - }, - "rate-in": { - "type": "string", - "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...)." - }, - "rate-out": { - "type": "string", - "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...)." - }, - "remote": { - "type": "string", - "description": "Remote ID." - }, - "remote-ns": { - "type": "string", - "description": "Namespace." - }, - "remote-store": { - "type": "string", - "description": "Datastore name." - }, - "remove-vanished": { - "type": "boolean", - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted." - }, - "resync-corrupt": { - "type": "boolean", - "description": "If the verification failed for a local snapshot, try to pull it again." - }, - "run-on-mount": { - "type": "boolean", - "description": "Run this job when a relevant datastore is mounted." - }, - "schedule": { - "type": "string", - "description": "Run sync job at specified schedule." - }, - "store": { - "type": "string", - "description": "Datastore name." - }, - "sync-direction": { - "type": "string", - "description": "Direction of the sync job, push or pull" - }, - "transfer-last": { - "type": "integer", - "description": "Limit transfer to last N snapshots (per group), skipping others" - }, - "unmount-on-done": { - "type": "boolean", - "description": "Unmount involved removable datastore after the sync job finishes. Requires 'run-on-mount' to be enabled." - }, - "verified-only": { - "type": "boolean", - "description": "Only synchronize verified backup snapshots, exclude others." - } - }, - "description": "Status of Sync Job" + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "bucket": { + "type": "string", + "description": "Bucket name for S3 object store.", + "minLength": 3, + "maxLength": 63 }, - "description": "List configured jobs and their status." - } - } - } - }, - "400": { - "description": "Bad Request - Invalid input parameters or malformed request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - }, - "401": { - "description": "Unauthorized - Authentication required or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - }, - "403": { - "description": "Forbidden - Insufficient permissions for the requested operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - }, - "404": { - "description": "Not Found - Requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - }, - "422": { - "description": "Unprocessable Entity - Request is well-formed but contains semantic errors", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - }, - "500": { - "description": "Internal Server Error - Unexpected server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - }, - "503": { - "description": "Service Unavailable - Service temporarily unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } + "store-prefix": { + "type": "string", + "description": "Store prefix within bucket for S3 object keys (commonly datastore name)" + } + }, + "required": [ + "bucket" + ] } } } }, - "security": [ - { - "ProxmoxApiToken": [], - "ProxmoxCSRFToken": [] - } - ] - } - }, - "//admin/admin/sync/admin/sync/{id}": { - "get": { - "summary": "Directory index.", - "description": "Directory index.", - "operationId": "get_admin_admin_sync_admin_sync_id", - "tags": [ - "Administration" - ], "parameters": [ { - "name": "id", + "name": "s3-endpoint-id", "in": "path", "required": true, "schema": { "type": "string", - "description": "The id parameter" + "description": "The s3-endpoint-id parameter" }, - "description": "The id parameter" + "description": "The s3-endpoint-id parameter" + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters or malformed request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "401": { + "description": "Unauthorized - Authentication required or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "403": { + "description": "Forbidden - Insufficient permissions for the requested operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "404": { + "description": "Not Found - Requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "422": { + "description": "Unprocessable Entity - Request is well-formed but contains semantic errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "500": { + "description": "Internal Server Error - Unexpected server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "503": { + "description": "Service Unavailable - Service temporarily unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + } + }, + "security": [ + { + "ProxmoxApiToken": [], + "ProxmoxCSRFToken": [] + } + ] + } + }, + "//admin/admin/sync": { + "get": { + "summary": "List all configured sync jobs", + "description": "List all configured sync jobs", + "operationId": "get_admin_admin_sync", + "tags": [ + "Administration" + ], + "parameters": [ + { + "name": "store", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "Datastore name.", + "minLength": 3, + "maxLength": 32, + "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$" + }, + "description": "Datastore name." + }, + { + "name": "sync-direction", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "The direction of the listed sync jobs: push, pull or all.", + "enum": [ + "all", + "push", + "pull" + ], + "default": "pull" + }, + "description": "The direction of the listed sync jobs: push, pull or all." + } + ], + "responses": { + "200": { + "description": "List configured jobs and their status.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "active-encryption-key": { + "type": "string", + "description": "ID to uniquely identify encryption/decription key" + }, + "associated-key": { + "type": "array", + "items": { + "type": "string", + "description": "ID to uniquely identify encryption/decription key" + }, + "description": "List of cryptographic keys associated with sync job." + }, + "burst-in": { + "type": "string", + "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...)." + }, + "burst-out": { + "type": "string", + "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...)." + }, + "comment": { + "type": "string", + "description": "Comment." + }, + "encrypted-only": { + "type": "boolean", + "description": "Only synchronize encrypted backup snapshots, exclude others." + }, + "group-filter": { + "type": "array", + "items": { + "type": "string", + "description": "Group filter based on group identifier ('group:GROUP'), group type ('type:'), or regex ('regex:RE'). Can be inverted by prepending 'exclude:'." + }, + "description": "List of group filters." + }, + "id": { + "type": "string", + "description": "Job ID." + }, + "last-run-endtime": { + "type": "integer", + "description": "Endtime of the last run." + }, + "last-run-state": { + "type": "string", + "description": "Result of the last run." + }, + "last-run-upid": { + "type": "string", + "description": "Task UPID of the last run." + }, + "max-depth": { + "type": "integer", + "description": "How many levels of namespaces should be operated on (0 == no recursion, empty == automatic full recursion, namespace depths reduce maximum allowed value)" + }, + "next-run": { + "type": "integer", + "description": "Estimated time of the next run (UNIX epoch)." + }, + "ns": { + "type": "string", + "description": "Namespace." + }, + "owner": { + "type": "string", + "description": "Authentication ID" + }, + "rate-in": { + "type": "string", + "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...)." + }, + "rate-out": { + "type": "string", + "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...)." + }, + "remote": { + "type": "string", + "description": "Remote ID." + }, + "remote-ns": { + "type": "string", + "description": "Namespace." + }, + "remote-store": { + "type": "string", + "description": "Datastore name." + }, + "remove-vanished": { + "type": "boolean", + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted." + }, + "resync-corrupt": { + "type": "boolean", + "description": "If the verification failed for a local snapshot, try to pull it again." + }, + "run-on-mount": { + "type": "boolean", + "description": "Run this job when a relevant datastore is mounted." + }, + "schedule": { + "type": "string", + "description": "Run sync job at specified schedule." + }, + "store": { + "type": "string", + "description": "Datastore name." + }, + "sync-direction": { + "type": "string", + "description": "Direction of the sync job, push or pull" + }, + "transfer-last": { + "type": "integer", + "description": "Limit transfer to last N snapshots (per group), skipping others" + }, + "unmount-on-done": { + "type": "boolean", + "description": "Unmount involved removable datastore after the sync job finishes. Requires 'run-on-mount' to be enabled." + }, + "verified-only": { + "type": "boolean", + "description": "Only synchronize verified backup snapshots, exclude others." + }, + "worker-threads": { + "type": "integer", + "description": "The number of worker threads to process groups in parallel." + } + }, + "description": "Status of Sync Job" + }, + "description": "List configured jobs and their status." + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters or malformed request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "401": { + "description": "Unauthorized - Authentication required or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "403": { + "description": "Forbidden - Insufficient permissions for the requested operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "404": { + "description": "Not Found - Requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "422": { + "description": "Unprocessable Entity - Request is well-formed but contains semantic errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "500": { + "description": "Internal Server Error - Unexpected server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "503": { + "description": "Service Unavailable - Service temporarily unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + } + }, + "security": [ + { + "ProxmoxApiToken": [], + "ProxmoxCSRFToken": [] + } + ] + } + }, + "//admin/admin/sync/admin/sync/{id}": { + "get": { + "summary": "Directory index.", + "description": "Directory index.", + "operationId": "get_admin_admin_sync_admin_sync_id", + "tags": [ + "Administration" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The id parameter" + }, + "description": "The id parameter" } ], "responses": { @@ -14300,6 +14807,10 @@ "type": "string", "description": "OpenID ACR List" }, + "audiences": { + "type": "string", + "description": "OpenID audience list." + }, "autocreate": { "type": "boolean", "description": "Automatically create users if they do not exist." @@ -14444,6 +14955,10 @@ "type": "string", "description": "OpenID ACR List" }, + "audiences": { + "type": "string", + "description": "OpenID audience list." + }, "autocreate": { "type": "boolean", "description": "Automatically create users if they do not exist.", @@ -14749,6 +15264,10 @@ "type": "string", "description": "OpenID ACR List" }, + "audiences": { + "type": "string", + "description": "OpenID audience list." + }, "autocreate": { "type": "boolean", "description": "Automatically create users if they do not exist." @@ -14891,6 +15410,10 @@ "type": "string", "description": "OpenID ACR List" }, + "audiences": { + "type": "string", + "description": "OpenID audience list." + }, "autocreate": { "type": "boolean", "description": "Automatically create users if they do not exist.", @@ -14969,6 +15492,10 @@ "type": "string", "description": "OpenID ACR List" }, + "audiences": { + "type": "string", + "description": "OpenID audience list." + }, "autocreate": { "type": "boolean", "description": "Automatically create users if they do not exist." @@ -16481,7 +17008,51 @@ "properties": { "account": { "type": "object", - "description": "Raw account data." + "properties": { + "contact": { + "type": "array", + "items": { + "type": "string", + "description": "Contact Info." + }, + "description": "The account's contact info.\n\nThis usually contains a `\"mailto:\"` entry but may also contain some other\ndata if the server accepts it." + }, + "externalAccountBinding": { + "type": "object", + "properties": { + "payload": { + "type": "string", + "description": "Payload" + }, + "protected": { + "type": "string", + "description": "JOSE Header (see RFC 7515)" + }, + "signature": { + "type": "string", + "description": "HMAC signature" + } + }, + "description": "External Account Bindings" + }, + "onlyReturnExisting": { + "type": "boolean", + "description": "This is only used by the client when querying an account." + }, + "orders": { + "type": "string", + "description": "URLs to currently pending orders." + }, + "status": { + "type": "string", + "description": "Status of an ACME account." + }, + "termsOfServiceAgreed": { + "type": "boolean", + "description": "Indicated whether the user agreed to the ACME provider's terms of service." + } + }, + "description": "ACME Account data. This is the part of the account returned from and possibly sent to the ACME\nprovider. Some fields may be uptdated by the user via a request to the account location, others\nmay not be changed." }, "directory": { "type": "string", @@ -16983,7 +17554,7 @@ "description": "Extra delay in seconds to wait before requesting validation.\n\nAllows to cope with long TTL of DNS records." } }, - "description": "The API's format is inherited from PVE/PMG:" + "description": "ACME plugin config. The API's format is inherited from PVE/PMG:" }, "description": "List of ACME plugin configurations." } @@ -17348,7 +17919,7 @@ ], "responses": { "200": { - "description": "The API's format is inherited from PVE/PMG:", + "description": "ACME plugin config. The API's format is inherited from PVE/PMG:", "content": { "application/json": { "schema": { @@ -17379,7 +17950,7 @@ "description": "Extra delay in seconds to wait before requesting validation.\n\nAllows to cope with long TTL of DNS records." } }, - "description": "The API's format is inherited from PVE/PMG:" + "description": "ACME plugin config. The API's format is inherited from PVE/PMG:" } } } @@ -17493,7 +18064,8 @@ }, "digest": { "type": "string", - "description": "Digest to protect against concurrent updates" + "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications.", + "pattern": "^[a-f0-9]{64}$" }, "disable": { "type": "boolean", @@ -18398,6 +18970,14 @@ "type": "string", "description": "Comment." }, + "counter-reset-schedule": { + "type": "string", + "description": "Reset notification threshold related counters at specified schedule." + }, + "gc-on-unmount": { + "type": "boolean", + "description": "Run garbage collection before unmounting a removable datastore." + }, "gc-schedule": { "type": "string", "description": "Run garbage collection job at specified schedule." @@ -18438,6 +19018,10 @@ "type": "string", "description": "Configure how notifications for this datastore should be sent.\n`legacy-sendmail` sends email notifications to the user configured\nin `notify-user` via the system's `sendmail` executable.\n`notification-system` emits matchable notification events to the\nnotification system." }, + "notification-thresholds": { + "type": "string", + "description": "Threshold values for notifications" + }, "notify": { "type": "string", "description": "Datastore notification setting, enum can be one of 'always', 'never', or 'error'." @@ -18577,6 +19161,14 @@ "maxLength": 128, "pattern": "^[[:^cntrl:]]*$" }, + "counter-reset-schedule": { + "type": "string", + "description": "Reset notification threshold related counters at specified schedule." + }, + "gc-on-unmount": { + "type": "boolean", + "description": "Run garbage collection before unmounting a removable datastore." + }, "gc-schedule": { "type": "string", "description": "Run garbage collection job at specified schedule." @@ -18631,6 +19223,10 @@ ], "default": "notification-system" }, + "notification-thresholds": { + "type": "string", + "description": "Threshold values for notifications" + }, "notify": { "type": "string", "description": "Datastore notification setting, enum can be one of 'always', 'never', or 'error'." @@ -18953,6 +19549,14 @@ "type": "string", "description": "Comment." }, + "counter-reset-schedule": { + "type": "string", + "description": "Reset notification threshold related counters at specified schedule." + }, + "gc-on-unmount": { + "type": "boolean", + "description": "Run garbage collection before unmounting a removable datastore." + }, "gc-schedule": { "type": "string", "description": "Run garbage collection job at specified schedule." @@ -18993,6 +19597,10 @@ "type": "string", "description": "Configure how notifications for this datastore should be sent.\n`legacy-sendmail` sends email notifications to the user configured\nin `notify-user` via the system's `sendmail` executable.\n`notification-system` emits matchable notification events to the\nnotification system." }, + "notification-thresholds": { + "type": "string", + "description": "Threshold values for notifications" + }, "notify": { "type": "string", "description": "Datastore notification setting, enum can be one of 'always', 'never', or 'error'." @@ -19121,6 +19729,10 @@ "maxLength": 128, "pattern": "^[[:^cntrl:]]*$" }, + "counter-reset-schedule": { + "type": "string", + "description": "Reset notification threshold related counters at specified schedule." + }, "delete": { "type": "array", "description": "List of properties to delete.", @@ -19133,6 +19745,10 @@ "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications.", "pattern": "^[a-f0-9]{64}$" }, + "gc-on-unmount": { + "type": "boolean", + "description": "Run garbage collection before unmounting a removable datastore." + }, "gc-schedule": { "type": "string", "description": "Run garbage collection job at specified schedule." @@ -19180,6 +19796,10 @@ ], "default": "notification-system" }, + "notification-thresholds": { + "type": "string", + "description": "Threshold values for notifications" + }, "notify": { "type": "string", "description": "Datastore notification setting, enum can be one of 'always', 'never', or 'error'." @@ -19683,51 +20303,600 @@ } ] }, - "get": { - "summary": "Get drive configuration", - "description": "Get drive configuration", - "operationId": "get_config_config_drive_config_drive_name", + "get": { + "summary": "Get drive configuration", + "description": "Get drive configuration", + "operationId": "get_config_config_drive_config_drive_name", + "tags": [ + "Configuration" + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The name parameter" + }, + "description": "The name parameter" + } + ], + "responses": { + "200": { + "description": "Lto SCSI tape driver", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "changer": { + "type": "string", + "description": "Tape Changer Identifier." + }, + "changer-drivenum": { + "type": "integer", + "description": "Associated changer drive number (requires option changer)" + }, + "name": { + "type": "string", + "description": "Drive Identifier." + }, + "path": { + "type": "string", + "description": "The path to a LTO SCSI-generic tape device (i.e. '/dev/sg0')" + } + }, + "description": "Lto SCSI tape driver" + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters or malformed request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "401": { + "description": "Unauthorized - Authentication required or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "403": { + "description": "Forbidden - Insufficient permissions for the requested operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "404": { + "description": "Not Found - Requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "422": { + "description": "Unprocessable Entity - Request is well-formed but contains semantic errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "500": { + "description": "Internal Server Error - Unexpected server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "503": { + "description": "Service Unavailable - Service temporarily unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + } + }, + "security": [ + { + "ProxmoxApiToken": [], + "ProxmoxCSRFToken": [] + } + ] + }, + "put": { + "summary": "Update a drive configuration", + "description": "Update a drive configuration", + "operationId": "put_config_config_drive_config_drive_name", + "tags": [ + "Configuration" + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "changer": { + "type": "string", + "description": "Tape Changer Identifier.", + "minLength": 3, + "maxLength": 32, + "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$" + }, + "changer-drivenum": { + "type": "integer", + "description": "Associated changer drive number (requires option changer)", + "minimum": 0, + "maximum": 255, + "default": 0 + }, + "delete": { + "type": "array", + "description": "List of properties to delete.", + "items": { + "type": "string" + } + }, + "digest": { + "type": "string", + "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications.", + "pattern": "^[a-f0-9]{64}$" + }, + "path": { + "type": "string", + "description": "The path to a LTO SCSI-generic tape device (i.e. '/dev/sg0')" + } + } + } + } + } + }, + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The name parameter" + }, + "description": "The name parameter" + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters or malformed request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "401": { + "description": "Unauthorized - Authentication required or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "403": { + "description": "Forbidden - Insufficient permissions for the requested operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "404": { + "description": "Not Found - Requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "422": { + "description": "Unprocessable Entity - Request is well-formed but contains semantic errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "500": { + "description": "Internal Server Error - Unexpected server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "503": { + "description": "Service Unavailable - Service temporarily unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + } + }, + "security": [ + { + "ProxmoxApiToken": [], + "ProxmoxCSRFToken": [] + } + ] + } + }, + "//config/config/encryption-keys": { + "get": { + "summary": "List configured encryption keys.", + "description": "List configured encryption keys.", + "operationId": "get_config_config_encryption-keys", + "tags": [ + "Configuration" + ], + "parameters": [ + { + "name": "include-archived", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "List also keys which have been archived.", + "default": false + }, + "description": "List also keys which have been archived." + } + ], + "responses": { + "200": { + "description": "List of configured encryption keys.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "archived-at": { + "type": "integer", + "description": "Timestamp when key was archived (not set if key is active)." + }, + "created": { + "type": "integer", + "description": "Key creation time" + }, + "fingerprint": { + "type": "string", + "description": "X509 certificate fingerprint (sha256)." + }, + "hint": { + "type": "string", + "description": "Password hint" + }, + "id": { + "type": "string", + "description": "ID to uniquely identify encryption/decription key" + }, + "kdf": { + "type": "string", + "description": "Key derivation function for password protected encryption keys." + }, + "modified": { + "type": "integer", + "description": "Key modification time" + }, + "path": { + "type": "string", + "description": "Path to key (if stored in a file)" + } + }, + "description": "Encryption/Decryption Key Info with ID." + }, + "description": "List of configured encryption keys." + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters or malformed request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "401": { + "description": "Unauthorized - Authentication required or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "403": { + "description": "Forbidden - Insufficient permissions for the requested operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "404": { + "description": "Not Found - Requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "422": { + "description": "Unprocessable Entity - Request is well-formed but contains semantic errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "500": { + "description": "Internal Server Error - Unexpected server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "503": { + "description": "Service Unavailable - Service temporarily unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + } + }, + "security": [ + { + "ProxmoxApiToken": [], + "ProxmoxCSRFToken": [] + } + ] + }, + "post": { + "summary": "Create new encryption key instance or use the provided one.", + "description": "Create new encryption key instance or use the provided one.", + "operationId": "post_config_config_encryption-keys", + "tags": [ + "Configuration" + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID to uniquely identify encryption/decription key", + "minLength": 3, + "maxLength": 32, + "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$" + }, + "key": { + "type": "string", + "description": "Use provided key instead of creating new one." + } + }, + "required": [ + "id" + ] + } + } + } + }, + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters or malformed request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "401": { + "description": "Unauthorized - Authentication required or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "403": { + "description": "Forbidden - Insufficient permissions for the requested operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "404": { + "description": "Not Found - Requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "422": { + "description": "Unprocessable Entity - Request is well-formed but contains semantic errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "500": { + "description": "Internal Server Error - Unexpected server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "503": { + "description": "Service Unavailable - Service temporarily unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + } + }, + "security": [ + { + "ProxmoxApiToken": [], + "ProxmoxCSRFToken": [] + } + ] + } + }, + "//config/config/encryption-keys/config/encryption-keys/{id}": { + "delete": { + "summary": "Remove encryption key.", + "description": "Remove encryption key.", + "operationId": "delete_config_config_encryption-keys_config_encryption-keys_id", "tags": [ "Configuration" ], "parameters": [ { - "name": "name", + "name": "id", "in": "path", "required": true, "schema": { "type": "string", - "description": "The name parameter" + "description": "The id parameter" }, - "description": "The name parameter" + "description": "The id parameter" + }, + { + "name": "digest", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications.", + "pattern": "^[a-f0-9]{64}$" + }, + "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications." } ], "responses": { "200": { - "description": "Lto SCSI tape driver", + "description": "Successful operation", "content": { "application/json": { "schema": { "type": "object", - "properties": { - "changer": { - "type": "string", - "description": "Tape Changer Identifier." - }, - "changer-drivenum": { - "type": "integer", - "description": "Associated changer drive number (requires option changer)" - }, - "name": { - "type": "string", - "description": "Drive Identifier." - }, - "path": { - "type": "string", - "description": "The path to a LTO SCSI-generic tape device (i.e. '/dev/sg0')" - } - }, - "description": "Lto SCSI tape driver" + "properties": {}, + "additionalProperties": false } } } @@ -19810,10 +20979,10 @@ } ] }, - "put": { - "summary": "Update a drive configuration", - "description": "Update a drive configuration", - "operationId": "put_config_config_drive_config_drive_name", + "post": { + "summary": "Toggle the archive state for the key by given id, archived keys are no longer usable to encrypt contents.", + "description": "Toggle the archive state for the key by given id, archived keys are no longer usable to encrypt contents.", + "operationId": "post_config_config_encryption-keys_config_encryption-keys_id", "tags": [ "Configuration" ], @@ -19824,35 +20993,10 @@ "schema": { "type": "object", "properties": { - "changer": { - "type": "string", - "description": "Tape Changer Identifier.", - "minLength": 3, - "maxLength": 32, - "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$" - }, - "changer-drivenum": { - "type": "integer", - "description": "Associated changer drive number (requires option changer)", - "minimum": 0, - "maximum": 255, - "default": 0 - }, - "delete": { - "type": "array", - "description": "List of properties to delete.", - "items": { - "type": "string" - } - }, "digest": { "type": "string", "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications.", "pattern": "^[a-f0-9]{64}$" - }, - "path": { - "type": "string", - "description": "The path to a LTO SCSI-generic tape device (i.e. '/dev/sg0')" } } } @@ -19861,14 +21005,14 @@ }, "parameters": [ { - "name": "name", + "name": "id", "in": "path", "required": true, "schema": { "type": "string", - "description": "The name parameter" + "description": "The id parameter" }, - "description": "The name parameter" + "description": "The id parameter" } ], "responses": { @@ -27638,6 +28782,10 @@ "port": { "type": "integer", "description": "The (optional) port" + }, + "use-node-proxy": { + "type": "boolean", + "description": "Use the http proxy configuration of the node for remote connections." } }, "description": "Remote properties." @@ -27779,6 +28927,11 @@ "port": { "type": "integer", "description": "The (optional) port" + }, + "use-node-proxy": { + "type": "boolean", + "description": "Use the http proxy configuration of the node for remote connections.", + "default": false } }, "required": [ @@ -28055,6 +29208,10 @@ "port": { "type": "integer", "description": "The (optional) port" + }, + "use-node-proxy": { + "type": "boolean", + "description": "Use the http proxy configuration of the node for remote connections." } }, "description": "Remote properties." @@ -28199,6 +29356,11 @@ "port": { "type": "integer", "description": "The (optional) port" + }, + "use-node-proxy": { + "type": "boolean", + "description": "Use the http proxy configuration of the node for remote connections.", + "default": false } } } @@ -28339,6 +29501,10 @@ "items": { "type": "object", "properties": { + "backend-type": { + "type": "string", + "description": "Datastore backend type" + }, "comment": { "type": "string", "description": "Comment." @@ -29859,6 +31025,18 @@ "items": { "type": "object", "properties": { + "active-encryption-key": { + "type": "string", + "description": "ID to uniquely identify encryption/decription key" + }, + "associated-key": { + "type": "array", + "items": { + "type": "string", + "description": "ID to uniquely identify encryption/decription key" + }, + "description": "List of cryptographic keys associated with sync job." + }, "burst-in": { "type": "string", "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...)." @@ -29921,7 +31099,7 @@ }, "remove-vanished": { "type": "boolean", - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted." + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted." }, "resync-corrupt": { "type": "boolean", @@ -29954,6 +31132,10 @@ "verified-only": { "type": "boolean", "description": "Only synchronize verified backup snapshots, exclude others." + }, + "worker-threads": { + "type": "integer", + "description": "The number of worker threads to process groups in parallel." } }, "description": "Sync Job" @@ -30055,6 +31237,20 @@ "schema": { "type": "object", "properties": { + "active-encryption-key": { + "type": "string", + "description": "ID to uniquely identify encryption/decription key", + "minLength": 3, + "maxLength": 32, + "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$" + }, + "associated-key": { + "type": "array", + "description": "List of cryptographic keys associated with sync job.", + "items": { + "type": "string" + } + }, "burst-in": { "type": "string", "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", @@ -30144,7 +31340,7 @@ }, "remove-vanished": { "type": "boolean", - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted.", + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted.", "default": false }, "resync-corrupt": { @@ -30187,6 +31383,13 @@ "verified-only": { "type": "boolean", "description": "Only synchronize verified backup snapshots, exclude others." + }, + "worker-threads": { + "type": "integer", + "description": "The number of worker threads to process groups in parallel.", + "minimum": 1, + "maximum": 32, + "default": 1 } }, "required": [ @@ -30439,6 +31642,18 @@ "schema": { "type": "object", "properties": { + "active-encryption-key": { + "type": "string", + "description": "ID to uniquely identify encryption/decription key" + }, + "associated-key": { + "type": "array", + "items": { + "type": "string", + "description": "ID to uniquely identify encryption/decription key" + }, + "description": "List of cryptographic keys associated with sync job." + }, "burst-in": { "type": "string", "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...)." @@ -30501,7 +31716,7 @@ }, "remove-vanished": { "type": "boolean", - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted." + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted." }, "resync-corrupt": { "type": "boolean", @@ -30534,6 +31749,10 @@ "verified-only": { "type": "boolean", "description": "Only synchronize verified backup snapshots, exclude others." + }, + "worker-threads": { + "type": "integer", + "description": "The number of worker threads to process groups in parallel." } }, "description": "Sync Job" @@ -30633,6 +31852,20 @@ "schema": { "type": "object", "properties": { + "active-encryption-key": { + "type": "string", + "description": "ID to uniquely identify encryption/decription key", + "minLength": 3, + "maxLength": 32, + "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$" + }, + "associated-key": { + "type": "array", + "description": "List of cryptographic keys associated with sync job.", + "items": { + "type": "string" + } + }, "burst-in": { "type": "string", "description": "Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...).", @@ -30727,7 +31960,7 @@ }, "remove-vanished": { "type": "boolean", - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted.", + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted.", "default": false }, "resync-corrupt": { @@ -30770,6 +32003,13 @@ "verified-only": { "type": "boolean", "description": "Only synchronize verified backup snapshots, exclude others." + }, + "worker-threads": { + "type": "integer", + "description": "The number of worker threads to process groups in parallel.", + "minimum": 1, + "maximum": 32, + "default": 1 } } } @@ -34947,15 +36187,8 @@ }, "handle": { "type": "string", - "description": "Handles for Proxmox repositories.", - "enum": [ - "enterprise", - "no-subscription", - "test", - "ceph-squid-enterprise", - "ceph-squid-no-subscription", - "ceph-squid-test" - ] + "description": "Handle referencing a standard APT repository.", + "pattern": "^[a-z][a-z0-9]*(-[a-z0-9]+)*$" } }, "required": [ @@ -35860,8 +37093,8 @@ ] }, "put": { - "summary": "Renew the current ACME certificate if it expires within 30 days (or always if the `force`\nparameter is set).", - "description": "Renew the current ACME certificate if it expires within 30 days (or always if the `force`\nparameter is set).", + "summary": "Renew the current ACME certificate if it is within its renewal lead time (or always if the\n`force` parameter is set).", + "description": "Renew the current ACME certificate if it is within its renewal lead time (or always if the\n`force` parameter is set).", "operationId": "put_nodes_nodes_node_nodes_node_certificates_nodes_node_certificates_acme_nodes_node_certificates_acme_certificate", "tags": [ "Nodes" @@ -36538,6 +37771,10 @@ "type": "string", "description": "HTTP proxy configuration [http://][:port]" }, + "location": { + "type": "string", + "description": "The location of the PBS instance." + }, "task-log-max-days": { "type": "integer", "description": "Maximum days to keep Task logs" @@ -36740,6 +37977,10 @@ "minLength": 1, "maxLength": 128 }, + "location": { + "type": "string", + "description": "The location of the PBS instance." + }, "task-log-max-days": { "type": "integer", "description": "Maximum days to keep Task logs", @@ -38404,16 +39645,309 @@ "ProxmoxCSRFToken": [] } ] - } - }, - "//nodes/nodes/{node}/nodes/{node}/disks/nodes/{node}/disks/zfs/nodes/{node}/disks/zfs/{name}": { - "get": { - "summary": "Get zpool status details.", - "description": "Get zpool status details.", - "operationId": "get_nodes_nodes_node_nodes_node_disks_nodes_node_disks_zfs_nodes_node_disks_zfs_name", + } + }, + "//nodes/nodes/{node}/nodes/{node}/disks/nodes/{node}/disks/zfs/nodes/{node}/disks/zfs/{name}": { + "get": { + "summary": "Get zpool status details.", + "description": "Get zpool status details.", + "operationId": "get_nodes_nodes_node_nodes_node_disks_nodes_node_disks_zfs_nodes_node_disks_zfs_name", + "tags": [ + "Nodes" + ], + "parameters": [ + { + "name": "node", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/ProxmoxNodeId" + }, + "description": "The node parameter" + }, + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "description": "The name parameter" + }, + "description": "The name parameter" + } + ], + "responses": { + "200": { + "description": "zpool vdev tree with status", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "zpool vdev tree with status" + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters or malformed request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "401": { + "description": "Unauthorized - Authentication required or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "403": { + "description": "Forbidden - Insufficient permissions for the requested operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "404": { + "description": "Not Found - Requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "422": { + "description": "Unprocessable Entity - Request is well-formed but contains semantic errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "500": { + "description": "Internal Server Error - Unexpected server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "503": { + "description": "Service Unavailable - Service temporarily unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + } + }, + "security": [ + { + "ProxmoxApiToken": [], + "ProxmoxCSRFToken": [] + } + ] + } + }, + "//nodes/nodes/{node}/nodes/{node}/dns": { + "get": { + "summary": "Read DNS settings.", + "description": "Read DNS settings.", + "operationId": "get_nodes_nodes_node_nodes_node_dns", + "tags": [ + "Nodes" + ], + "parameters": [ + { + "name": "node", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/ProxmoxNodeId" + }, + "description": "The node parameter" + } + ], + "responses": { + "200": { + "description": "Returns DNS server IPs and sreach domain.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "digest": { + "type": "string", + "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications." + }, + "dns1": { + "type": "string", + "description": "First name server IP address." + }, + "dns2": { + "type": "string", + "description": "Second name server IP address." + }, + "dns3": { + "type": "string", + "description": "Third name server IP address." + }, + "search": { + "type": "string", + "description": "Search domain for host-name lookup." + } + }, + "description": "Returns DNS server IPs and sreach domain." + } + } + } + }, + "400": { + "description": "Bad Request - Invalid input parameters or malformed request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "401": { + "description": "Unauthorized - Authentication required or invalid credentials", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "403": { + "description": "Forbidden - Insufficient permissions for the requested operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "404": { + "description": "Not Found - Requested resource does not exist", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "422": { + "description": "Unprocessable Entity - Request is well-formed but contains semantic errors", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "500": { + "description": "Internal Server Error - Unexpected server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + }, + "503": { + "description": "Service Unavailable - Service temporarily unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProxmoxError" + } + } + } + } + }, + "security": [ + { + "ProxmoxApiToken": [], + "ProxmoxCSRFToken": [] + } + ] + }, + "put": { + "summary": "Update DNS settings.", + "description": "Update DNS settings.", + "operationId": "put_nodes_nodes_node_nodes_node_dns", "tags": [ "Nodes" ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "delete": { + "type": "array", + "description": "List of properties to delete.", + "items": { + "type": "string" + } + }, + "digest": { + "type": "string", + "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications.", + "pattern": "^[a-f0-9]{64}$" + }, + "dns1": { + "type": "string", + "description": "First name server IP address.", + "pattern": "^(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))$" + }, + "dns2": { + "type": "string", + "description": "Second name server IP address.", + "pattern": "^(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))$" + }, + "dns3": { + "type": "string", + "description": "Third name server IP address.", + "pattern": "^(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))$" + }, + "search": { + "type": "string", + "description": "Search domain for host-name lookup." + } + } + } + } + } + }, "parameters": [ { "name": "node", @@ -38423,26 +39957,17 @@ "$ref": "#/components/schemas/ProxmoxNodeId" }, "description": "The node parameter" - }, - { - "name": "name", - "in": "path", - "required": true, - "schema": { - "type": "string", - "description": "The name parameter" - }, - "description": "The name parameter" } ], "responses": { "200": { - "description": "zpool vdev tree with status", + "description": "Successful operation", "content": { "application/json": { "schema": { "type": "object", - "description": "zpool vdev tree with status" + "properties": {}, + "additionalProperties": false } } } @@ -38526,11 +40051,11 @@ ] } }, - "//nodes/nodes/{node}/nodes/{node}/dns": { + "//nodes/nodes/{node}/nodes/{node}/identity": { "get": { - "summary": "Read DNS settings.", - "description": "Read DNS settings.", - "operationId": "get_nodes_nodes_node_nodes_node_dns", + "summary": "Returns a unique server identity. The ID is derived from `/etc/machine-id`.", + "description": "Returns a unique server identity. The ID is derived from `/etc/machine-id`.", + "operationId": "get_nodes_nodes_node_nodes_node_identity", "tags": [ "Nodes" ], @@ -38547,186 +40072,18 @@ ], "responses": { "200": { - "description": "Returns DNS server IPs and sreach domain.", + "description": "Unique instance identity information.", "content": { "application/json": { "schema": { "type": "object", "properties": { - "digest": { - "type": "string", - "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications." - }, - "dns1": { - "type": "string", - "description": "First name server IP address." - }, - "dns2": { - "type": "string", - "description": "Second name server IP address." - }, - "dns3": { + "pbs-instance-id": { "type": "string", - "description": "Third name server IP address." - }, - "search": { - "type": "string", - "description": "Search domain for host-name lookup." + "description": "Unique instance identifier." } }, - "description": "Returns DNS server IPs and sreach domain." - } - } - } - }, - "400": { - "description": "Bad Request - Invalid input parameters or malformed request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - }, - "401": { - "description": "Unauthorized - Authentication required or invalid credentials", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - }, - "403": { - "description": "Forbidden - Insufficient permissions for the requested operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - }, - "404": { - "description": "Not Found - Requested resource does not exist", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - }, - "422": { - "description": "Unprocessable Entity - Request is well-formed but contains semantic errors", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - }, - "500": { - "description": "Internal Server Error - Unexpected server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - }, - "503": { - "description": "Service Unavailable - Service temporarily unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxmoxError" - } - } - } - } - }, - "security": [ - { - "ProxmoxApiToken": [], - "ProxmoxCSRFToken": [] - } - ] - }, - "put": { - "summary": "Update DNS settings.", - "description": "Update DNS settings.", - "operationId": "put_nodes_nodes_node_nodes_node_dns", - "tags": [ - "Nodes" - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "delete": { - "type": "array", - "description": "List of properties to delete.", - "items": { - "type": "string" - } - }, - "digest": { - "type": "string", - "description": "Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications.", - "pattern": "^[a-f0-9]{64}$" - }, - "dns1": { - "type": "string", - "description": "First name server IP address.", - "pattern": "^(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))$" - }, - "dns2": { - "type": "string", - "description": "Second name server IP address.", - "pattern": "^(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))$" - }, - "dns3": { - "type": "string", - "description": "Third name server IP address.", - "pattern": "^(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))$" - }, - "search": { - "type": "string", - "description": "Search domain for host-name lookup." - } - } - } - } - } - }, - "parameters": [ - { - "name": "node", - "in": "path", - "required": true, - "schema": { - "$ref": "#/components/schemas/ProxmoxNodeId" - }, - "description": "The node parameter" - } - ], - "responses": { - "200": { - "description": "Successful operation", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {}, - "additionalProperties": false + "description": "Unique instance identity information." } } } @@ -42228,10 +43585,7 @@ "properties": { "key": { "type": "string", - "description": "Proxmox Backup Server subscription key.", - "minLength": 15, - "maxLength": 16, - "pattern": "^pbs(?:[cbsp])-[0-9a-f]{10}$" + "description": "The subscription key to install." } }, "required": [ @@ -43232,6 +44586,10 @@ "schema": { "type": "object", "properties": { + "endtime": { + "type": "integer", + "description": "The task end time (Epoch)" + }, "exitstatus": { "type": "string", "description": "'OK', 'Error: ', or 'unknown'." @@ -44027,6 +45385,13 @@ "minLength": 1, "maxLength": 64 }, + "decryption-keys": { + "type": "array", + "description": "List of decryption keys.", + "items": { + "type": "string" + } + }, "encrypted-only": { "type": "boolean", "description": "Only synchronize encrypted backup snapshots, exclude others." @@ -44084,7 +45449,7 @@ }, "remove-vanished": { "type": "boolean", - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted.", + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted.", "default": false }, "resync-corrupt": { @@ -44106,6 +45471,13 @@ "verified-only": { "type": "boolean", "description": "Only synchronize verified backup snapshots, exclude others." + }, + "worker-threads": { + "type": "integer", + "description": "The number of worker threads to process groups in parallel.", + "minimum": 1, + "maximum": 32, + "default": 1 } }, "required": [ @@ -44239,6 +45611,13 @@ "type": "boolean", "description": "Only synchronize encrypted backup snapshots, exclude others." }, + "encryption-key": { + "type": "string", + "description": "ID to uniquely identify encryption/decription key", + "minLength": 3, + "maxLength": 32, + "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$" + }, "group-filter": { "type": "array", "description": "List of group filters.", @@ -44292,7 +45671,7 @@ }, "remove-vanished": { "type": "boolean", - "description": "Delete vanished backups. This remove the local copy if the remote backup was deleted.", + "description": "Delete vanished backups. This removes the local copy if the remote backup was deleted.", "default": false }, "store": { @@ -44310,6 +45689,13 @@ "verified-only": { "type": "boolean", "description": "Only synchronize verified backup snapshots, exclude others." + }, + "worker-threads": { + "type": "integer", + "description": "The number of worker threads to process groups in parallel.", + "minimum": 1, + "maximum": 32, + "default": 1 } }, "required": [ @@ -44709,6 +46095,10 @@ "type": "integer", "description": "The available bytes of the underlying storage. (-1 on error)" }, + "backend-type": { + "type": "string", + "description": "Datastore backend type" + }, "error": { "type": "string", "description": "An error description, for example, when the datastore could not be looked up" @@ -47205,6 +48595,13 @@ "minLength": 2, "maxLength": 32, "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$" + }, + "load-barcode": { + "type": "string", + "description": "Media Label/Barcode.", + "minLength": 2, + "maxLength": 32, + "pattern": "^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$" } } } @@ -51730,7 +53127,7 @@ "properties": { "chunk-count": { "type": "integer", - "description": "Chunk count. This is used to verify that the server got all chunks. Ignored for incremental backups.", + "description": "Number of new and re-indexed chunks. Used to verify that the server got all chunk digests.", "minimum": 0 }, "csum": { @@ -51882,8 +53279,7 @@ } }, "required": [ - "archive-name", - "size" + "archive-name" ] } } diff --git a/proxmox-backup-server/pbs-api.yaml b/proxmox-backup-server/pbs-api.yaml index 66171b0..060e0e9 100644 --- a/proxmox-backup-server/pbs-api.yaml +++ b/proxmox-backup-server/pbs-api.yaml @@ -3142,6 +3142,9 @@ paths: items: type: object properties: + backend-type: + type: string + description: Datastore backend type comment: type: string description: Comment. @@ -4595,6 +4598,219 @@ paths: security: - ProxmoxApiToken: [] ProxmoxCSRFToken: [] + //admin/admin/datastore/admin/datastore/{store}/admin/datastore/{store}/move-group: + post: + summary: Move a backup group to a different namespace within the same datastore. + description: Move a backup group to a different namespace within the same datastore. + operationId: post_admin_admin_datastore_admin_datastore_store_admin_datastore_store_move-group + tags: + - Administration + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + backup-id: + type: string + description: Backup ID. + pattern: ^[A-Za-z0-9_][A-Za-z0-9._\-]*$ + backup-type: + type: string + description: Backup types. + enum: + - vm + - ct + - host + merge-group: + type: boolean + description: If the group already exists in the target namespace, + merge snapshots into it. Requires matching ownership and non-overlapping + snapshot times. + default: true + ns: + type: string + description: Namespace. + maxLength: 256 + pattern: ^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\-]*))?$ + target-ns: + type: string + description: Namespace. + maxLength: 256 + pattern: ^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\-]*))?$ + required: + - backup-id + - backup-type + parameters: + - name: store + in: path + required: true + schema: + $ref: '#/components/schemas/ProxmoxDatastoreName' + description: The store parameter + responses: + '200': + description: Unique Process/Task Identifier + content: + application/json: + schema: + type: string + description: Unique Process/Task Identifier + '400': + description: Bad Request - Invalid input parameters or malformed request + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '403': + description: Forbidden - Insufficient permissions for the requested operation + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '404': + description: Not Found - Requested resource does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '422': + description: Unprocessable Entity - Request is well-formed but contains + semantic errors + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '503': + description: Service Unavailable - Service temporarily unavailable + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + security: + - ProxmoxApiToken: [] + ProxmoxCSRFToken: [] + //admin/admin/datastore/admin/datastore/{store}/admin/datastore/{store}/move-namespace: + post: + summary: Move a backup namespace (including all child namespaces and groups) + to a new location. + description: Move a backup namespace (including all child namespaces and groups) + to a new location. + operationId: post_admin_admin_datastore_admin_datastore_store_admin_datastore_store_move-namespace + tags: + - Administration + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + delete-source: + type: boolean + description: Remove the source namespace after moving all contents. + Defaults to true. + default: true + max-depth: + type: integer + description: How many levels of namespaces should be operated on + (0 == no recursion) + minimum: 0 + maximum: 7 + default: 7 + merge-groups: + type: boolean + description: If a group with the same name already exists in the + target namespace, merge snapshots into it. Requires matching ownership + and non-overlapping snapshot times. + default: true + ns: + type: string + description: Namespace. + maxLength: 256 + pattern: ^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\-]*))?$ + target-ns: + type: string + description: Namespace. + maxLength: 256 + pattern: ^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\-]*))?$ + required: + - ns + - target-ns + parameters: + - name: store + in: path + required: true + schema: + $ref: '#/components/schemas/ProxmoxDatastoreName' + description: The store parameter + responses: + '200': + description: Unique Process/Task Identifier + content: + application/json: + schema: + type: string + description: Unique Process/Task Identifier + '400': + description: Bad Request - Invalid input parameters or malformed request + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '403': + description: Forbidden - Insufficient permissions for the requested operation + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '404': + description: Not Found - Requested resource does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '422': + description: Unprocessable Entity - Request is well-formed but contains + semantic errors + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '503': + description: Service Unavailable - Service temporarily unavailable + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + security: + - ProxmoxApiToken: [] + ProxmoxCSRFToken: [] //admin/admin/datastore/admin/datastore/{store}/admin/datastore/{store}/namespace: delete: summary: Delete a backup namespace including all snapshots. @@ -6121,6 +6337,9 @@ paths: avail: type: integer description: Available space (bytes). + backend-type: + type: string + description: Datastore backend type counts: type: object properties: @@ -6216,6 +6435,31 @@ paths: type: string description: Unique Process/Task Identifier description: Garbage collection status. + s3-statistics: + type: object + properties: + delete: + type: integer + description: Delete requests + downloaded: + type: integer + description: Total downloaded (bytes). + get: + type: integer + description: Get requests + head: + type: integer + description: Head requests + post: + type: integer + description: Post requests + put: + type: integer + description: Put requests + uploaded: + type: integer + description: Total uploaded (bytes). + description: Statistics specific to the S3 backend total: type: integer description: Total space (bytes). @@ -7203,21 +7447,21 @@ paths: security: - ProxmoxApiToken: [] ProxmoxCSRFToken: [] - //admin/admin/s3/admin/s3/{s3-client-id}: + //admin/admin/s3/admin/s3/{s3-endpoint-id}: get: summary: Directory index. description: Directory index. - operationId: get_admin_admin_s3_admin_s3_s3-client-id + operationId: get_admin_admin_s3_admin_s3_s3-endpoint-id tags: - Administration parameters: - - name: s3-client-id + - name: s3-endpoint-id in: path required: true schema: type: string - description: The s3-client-id parameter - description: The s3-client-id parameter + description: The s3-endpoint-id parameter + description: The s3-endpoint-id parameter responses: '200': description: Successful operation @@ -7273,11 +7517,11 @@ paths: security: - ProxmoxApiToken: [] ProxmoxCSRFToken: [] - //admin/admin/s3/admin/s3/{s3-client-id}/admin/s3/{s3-client-id}/check: + //admin/admin/s3/admin/s3/{s3-endpoint-id}/admin/s3/{s3-endpoint-id}/check: put: summary: Perform basic sanity check for given s3 client configuration description: Perform basic sanity check for given s3 client configuration - operationId: put_admin_admin_s3_admin_s3_s3-client-id_admin_s3_s3-client-id_check + operationId: put_admin_admin_s3_admin_s3_s3-endpoint-id_admin_s3_s3-endpoint-id_check tags: - Administration requestBody: @@ -7299,13 +7543,13 @@ paths: required: - bucket parameters: - - name: s3-client-id + - name: s3-endpoint-id in: path required: true schema: type: string - description: The s3-client-id parameter - description: The s3-client-id parameter + description: The s3-endpoint-id parameter + description: The s3-endpoint-id parameter responses: '200': description: Successful operation @@ -7361,51 +7605,152 @@ paths: security: - ProxmoxApiToken: [] ProxmoxCSRFToken: [] - //admin/admin/sync: - get: - summary: List all configured sync jobs - description: List all configured sync jobs - operationId: get_admin_admin_sync + //admin/admin/s3/admin/s3/{s3-endpoint-id}/admin/s3/{s3-endpoint-id}/reset-counters: + put: + summary: Reset the S3 request counters for matching endpoint, bucket or datastore + (if prefix is given). + description: Reset the S3 request counters for matching endpoint, bucket or + datastore (if prefix is given). + operationId: put_admin_admin_s3_admin_s3_s3-endpoint-id_admin_s3_s3-endpoint-id_reset-counters tags: - Administration + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + bucket: + type: string + description: Bucket name for S3 object store. + minLength: 3 + maxLength: 63 + store-prefix: + type: string + description: Store prefix within bucket for S3 object keys (commonly + datastore name) + required: + - bucket parameters: - - name: store - in: query - required: false - schema: - type: string - description: Datastore name. - minLength: 3 - maxLength: 32 - pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ - description: Datastore name. - - name: sync-direction - in: query - required: false + - name: s3-endpoint-id + in: path + required: true schema: type: string - description: 'The direction of the listed sync jobs: push, pull or all.' - enum: - - all - - push - - pull - default: pull - description: 'The direction of the listed sync jobs: push, pull or all.' + description: The s3-endpoint-id parameter + description: The s3-endpoint-id parameter responses: '200': - description: List configured jobs and their status. + description: Successful operation content: application/json: schema: - type: array - items: - type: object - properties: - burst-in: - type: string - description: Byte size with optional unit (B, KB (base 10), - MB, GB, ..., KiB (base 2), MiB, Gib, ...). - burst-out: + type: object + properties: {} + additionalProperties: false + '400': + description: Bad Request - Invalid input parameters or malformed request + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '403': + description: Forbidden - Insufficient permissions for the requested operation + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '404': + description: Not Found - Requested resource does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '422': + description: Unprocessable Entity - Request is well-formed but contains + semantic errors + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '503': + description: Service Unavailable - Service temporarily unavailable + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + security: + - ProxmoxApiToken: [] + ProxmoxCSRFToken: [] + //admin/admin/sync: + get: + summary: List all configured sync jobs + description: List all configured sync jobs + operationId: get_admin_admin_sync + tags: + - Administration + parameters: + - name: store + in: query + required: false + schema: + type: string + description: Datastore name. + minLength: 3 + maxLength: 32 + pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ + description: Datastore name. + - name: sync-direction + in: query + required: false + schema: + type: string + description: 'The direction of the listed sync jobs: push, pull or all.' + enum: + - all + - push + - pull + default: pull + description: 'The direction of the listed sync jobs: push, pull or all.' + responses: + '200': + description: List configured jobs and their status. + content: + application/json: + schema: + type: array + items: + type: object + properties: + active-encryption-key: + type: string + description: ID to uniquely identify encryption/decription key + associated-key: + type: array + items: + type: string + description: ID to uniquely identify encryption/decription + key + description: List of cryptographic keys associated with sync + job. + burst-in: + type: string + description: Byte size with optional unit (B, KB (base 10), + MB, GB, ..., KiB (base 2), MiB, Gib, ...). + burst-out: type: string description: Byte size with optional unit (B, KB (base 10), MB, GB, ..., KiB (base 2), MiB, Gib, ...). @@ -7469,7 +7814,7 @@ paths: description: Datastore name. remove-vanished: type: boolean - description: Delete vanished backups. This remove the local + description: Delete vanished backups. This removes the local copy if the remote backup was deleted. resync-corrupt: type: boolean @@ -7499,6 +7844,10 @@ paths: type: boolean description: Only synchronize verified backup snapshots, exclude others. + worker-threads: + type: integer + description: The number of worker threads to process groups + in parallel. description: Status of Sync Job description: List configured jobs and their status. '400': @@ -9831,6 +10180,9 @@ paths: acr-values: type: string description: OpenID ACR List + audiences: + type: string + description: OpenID audience list. autocreate: type: boolean description: Automatically create users if they do not exist. @@ -9930,6 +10282,9 @@ paths: acr-values: type: string description: OpenID ACR List + audiences: + type: string + description: OpenID audience list. autocreate: type: boolean description: Automatically create users if they do not exist. @@ -10139,6 +10494,9 @@ paths: acr-values: type: string description: OpenID ACR List + audiences: + type: string + description: OpenID audience list. autocreate: type: boolean description: Automatically create users if they do not exist. @@ -10237,6 +10595,9 @@ paths: acr-values: type: string description: OpenID ACR List + audiences: + type: string + description: OpenID audience list. autocreate: type: boolean description: Automatically create users if they do not exist. @@ -10296,6 +10657,9 @@ paths: acr-values: type: string description: OpenID ACR List + audiences: + type: string + description: OpenID audience list. autocreate: type: boolean description: Automatically create users if they do not exist. @@ -11329,7 +11693,53 @@ paths: properties: account: type: object - description: Raw account data. + properties: + contact: + type: array + items: + type: string + description: Contact Info. + description: 'The account''s contact info. + + + This usually contains a `"mailto:"` entry + but may also contain some other + + data if the server accepts it.' + externalAccountBinding: + type: object + properties: + payload: + type: string + description: Payload + protected: + type: string + description: JOSE Header (see RFC 7515) + signature: + type: string + description: HMAC signature + description: External Account Bindings + onlyReturnExisting: + type: boolean + description: This is only used by the client when querying + an account. + orders: + type: string + description: URLs to currently pending orders. + status: + type: string + description: Status of an ACME account. + termsOfServiceAgreed: + type: boolean + description: Indicated whether the user agreed to the ACME + provider's terms of service. + description: 'ACME Account data. This is the part of the account + returned from and possibly sent to the ACME + + provider. Some fields may be uptdated by the user via a request + to the account location, others + + may not be changed.' directory: type: string description: The ACME directory URL the account was created at. @@ -11655,7 +12065,8 @@ paths: Allows to cope with long TTL of DNS records.' - description: 'The API''s format is inherited from PVE/PMG:' + description: 'ACME plugin config. The API''s format is inherited + from PVE/PMG:' description: List of ACME plugin configurations. '400': description: Bad Request - Invalid input parameters or malformed request @@ -11890,7 +12301,7 @@ paths: description: The id parameter responses: '200': - description: 'The API''s format is inherited from PVE/PMG:' + description: 'ACME plugin config. The API''s format is inherited from PVE/PMG:' content: application/json: schema: @@ -11918,7 +12329,8 @@ paths: Allows to cope with long TTL of DNS records.' - description: 'The API''s format is inherited from PVE/PMG:' + description: 'ACME plugin config. The API''s format is inherited from + PVE/PMG:' '400': description: Bad Request - Invalid input parameters or malformed request content: @@ -11991,7 +12403,9 @@ paths: type: string digest: type: string - description: Digest to protect against concurrent updates + description: Prevent changes if current configuration file has different + SHA256 digest. This can be used to prevent concurrent modifications. + pattern: ^[a-f0-9]{64}$ disable: type: boolean description: Flag to disable the config. @@ -12609,6 +13023,14 @@ paths: comment: type: string description: Comment. + counter-reset-schedule: + type: string + description: Reset notification threshold related counters at + specified schedule. + gc-on-unmount: + type: boolean + description: Run garbage collection before unmounting a removable + datastore. gc-schedule: type: string description: Run garbage collection job at specified schedule. @@ -12650,6 +13072,9 @@ paths: to the notification system.' + notification-thresholds: + type: string + description: Threshold values for notifications notify: type: string description: Datastore notification setting, enum can be one @@ -12745,6 +13170,14 @@ paths: description: Comment. maxLength: 128 pattern: ^[[:^cntrl:]]*$ + counter-reset-schedule: + type: string + description: Reset notification threshold related counters at specified + schedule. + gc-on-unmount: + type: boolean + description: Run garbage collection before unmounting a removable + datastore. gc-schedule: type: string description: Run garbage collection job at specified schedule. @@ -12798,6 +13231,9 @@ paths: - legacy-sendmail - notification-system default: notification-system + notification-thresholds: + type: string + description: Threshold values for notifications notify: type: string description: Datastore notification setting, enum can be one of @@ -13020,6 +13456,14 @@ paths: comment: type: string description: Comment. + counter-reset-schedule: + type: string + description: Reset notification threshold related counters at + specified schedule. + gc-on-unmount: + type: boolean + description: Run garbage collection before unmounting a removable + datastore. gc-schedule: type: string description: Run garbage collection job at specified schedule. @@ -13061,6 +13505,9 @@ paths: the notification system.' + notification-thresholds: + type: string + description: Threshold values for notifications notify: type: string description: Datastore notification setting, enum can be one of @@ -13147,6 +13594,10 @@ paths: description: Comment. maxLength: 128 pattern: ^[[:^cntrl:]]*$ + counter-reset-schedule: + type: string + description: Reset notification threshold related counters at specified + schedule. delete: type: array description: List of properties to delete. @@ -13157,6 +13608,10 @@ paths: description: Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications. pattern: ^[a-f0-9]{64}$ + gc-on-unmount: + type: boolean + description: Run garbage collection before unmounting a removable + datastore. gc-schedule: type: string description: Run garbage collection job at specified schedule. @@ -13204,6 +13659,9 @@ paths: - legacy-sendmail - notification-system default: notification-system + notification-thresholds: + type: string + description: Threshold values for notifications notify: type: string description: Datastore notification setting, enum can be one of @@ -13458,21 +13916,384 @@ paths: security: - ProxmoxApiToken: [] ProxmoxCSRFToken: [] - //config/config/drive/config/drive/{name}: - delete: - summary: Delete a drive configuration - description: Delete a drive configuration - operationId: delete_config_config_drive_config_drive_name + //config/config/drive/config/drive/{name}: + delete: + summary: Delete a drive configuration + description: Delete a drive configuration + operationId: delete_config_config_drive_config_drive_name + tags: + - Configuration + parameters: + - name: name + in: path + required: true + schema: + type: string + description: The name parameter + description: The name parameter + responses: + '200': + description: Successful operation + content: + application/json: + schema: + type: object + properties: {} + additionalProperties: false + '400': + description: Bad Request - Invalid input parameters or malformed request + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '403': + description: Forbidden - Insufficient permissions for the requested operation + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '404': + description: Not Found - Requested resource does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '422': + description: Unprocessable Entity - Request is well-formed but contains + semantic errors + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '503': + description: Service Unavailable - Service temporarily unavailable + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + security: + - ProxmoxApiToken: [] + ProxmoxCSRFToken: [] + get: + summary: Get drive configuration + description: Get drive configuration + operationId: get_config_config_drive_config_drive_name + tags: + - Configuration + parameters: + - name: name + in: path + required: true + schema: + type: string + description: The name parameter + description: The name parameter + responses: + '200': + description: Lto SCSI tape driver + content: + application/json: + schema: + type: object + properties: + changer: + type: string + description: Tape Changer Identifier. + changer-drivenum: + type: integer + description: Associated changer drive number (requires option + changer) + name: + type: string + description: Drive Identifier. + path: + type: string + description: The path to a LTO SCSI-generic tape device (i.e. + '/dev/sg0') + description: Lto SCSI tape driver + '400': + description: Bad Request - Invalid input parameters or malformed request + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '403': + description: Forbidden - Insufficient permissions for the requested operation + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '404': + description: Not Found - Requested resource does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '422': + description: Unprocessable Entity - Request is well-formed but contains + semantic errors + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '503': + description: Service Unavailable - Service temporarily unavailable + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + security: + - ProxmoxApiToken: [] + ProxmoxCSRFToken: [] + put: + summary: Update a drive configuration + description: Update a drive configuration + operationId: put_config_config_drive_config_drive_name + tags: + - Configuration + requestBody: + required: false + content: + application/json: + schema: + type: object + properties: + changer: + type: string + description: Tape Changer Identifier. + minLength: 3 + maxLength: 32 + pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ + changer-drivenum: + type: integer + description: Associated changer drive number (requires option changer) + minimum: 0 + maximum: 255 + default: 0 + delete: + type: array + description: List of properties to delete. + items: + type: string + digest: + type: string + description: Prevent changes if current configuration file has different + SHA256 digest. This can be used to prevent concurrent modifications. + pattern: ^[a-f0-9]{64}$ + path: + type: string + description: The path to a LTO SCSI-generic tape device (i.e. '/dev/sg0') + parameters: + - name: name + in: path + required: true + schema: + type: string + description: The name parameter + description: The name parameter + responses: + '200': + description: Successful operation + content: + application/json: + schema: + type: object + properties: {} + additionalProperties: false + '400': + description: Bad Request - Invalid input parameters or malformed request + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '403': + description: Forbidden - Insufficient permissions for the requested operation + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '404': + description: Not Found - Requested resource does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '422': + description: Unprocessable Entity - Request is well-formed but contains + semantic errors + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '503': + description: Service Unavailable - Service temporarily unavailable + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + security: + - ProxmoxApiToken: [] + ProxmoxCSRFToken: [] + //config/config/encryption-keys: + get: + summary: List configured encryption keys. + description: List configured encryption keys. + operationId: get_config_config_encryption-keys + tags: + - Configuration + parameters: + - name: include-archived + in: query + required: false + schema: + type: boolean + description: List also keys which have been archived. + default: false + description: List also keys which have been archived. + responses: + '200': + description: List of configured encryption keys. + content: + application/json: + schema: + type: array + items: + type: object + properties: + archived-at: + type: integer + description: Timestamp when key was archived (not set if key + is active). + created: + type: integer + description: Key creation time + fingerprint: + type: string + description: X509 certificate fingerprint (sha256). + hint: + type: string + description: Password hint + id: + type: string + description: ID to uniquely identify encryption/decription key + kdf: + type: string + description: Key derivation function for password protected + encryption keys. + modified: + type: integer + description: Key modification time + path: + type: string + description: Path to key (if stored in a file) + description: Encryption/Decryption Key Info with ID. + description: List of configured encryption keys. + '400': + description: Bad Request - Invalid input parameters or malformed request + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '403': + description: Forbidden - Insufficient permissions for the requested operation + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '404': + description: Not Found - Requested resource does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '422': + description: Unprocessable Entity - Request is well-formed but contains + semantic errors + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '503': + description: Service Unavailable - Service temporarily unavailable + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + security: + - ProxmoxApiToken: [] + ProxmoxCSRFToken: [] + post: + summary: Create new encryption key instance or use the provided one. + description: Create new encryption key instance or use the provided one. + operationId: post_config_config_encryption-keys tags: - Configuration - parameters: - - name: name - in: path + requestBody: required: true - schema: - type: string - description: The name parameter - description: The name parameter + content: + application/json: + schema: + type: object + properties: + id: + type: string + description: ID to uniquely identify encryption/decription key + minLength: 3 + maxLength: 32 + pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ + key: + type: string + description: Use provided key instead of creating new one. + required: + - id responses: '200': description: Successful operation @@ -13528,43 +14349,40 @@ paths: security: - ProxmoxApiToken: [] ProxmoxCSRFToken: [] - get: - summary: Get drive configuration - description: Get drive configuration - operationId: get_config_config_drive_config_drive_name + //config/config/encryption-keys/config/encryption-keys/{id}: + delete: + summary: Remove encryption key. + description: Remove encryption key. + operationId: delete_config_config_encryption-keys_config_encryption-keys_id tags: - Configuration parameters: - - name: name + - name: id in: path required: true schema: type: string - description: The name parameter - description: The name parameter + description: The id parameter + description: The id parameter + - name: digest + in: query + required: false + schema: + type: string + description: Prevent changes if current configuration file has different + SHA256 digest. This can be used to prevent concurrent modifications. + pattern: ^[a-f0-9]{64}$ + description: Prevent changes if current configuration file has different SHA256 + digest. This can be used to prevent concurrent modifications. responses: '200': - description: Lto SCSI tape driver + description: Successful operation content: application/json: schema: type: object - properties: - changer: - type: string - description: Tape Changer Identifier. - changer-drivenum: - type: integer - description: Associated changer drive number (requires option - changer) - name: - type: string - description: Drive Identifier. - path: - type: string - description: The path to a LTO SCSI-generic tape device (i.e. - '/dev/sg0') - description: Lto SCSI tape driver + properties: {} + additionalProperties: false '400': description: Bad Request - Invalid input parameters or malformed request content: @@ -13611,10 +14429,12 @@ paths: security: - ProxmoxApiToken: [] ProxmoxCSRFToken: [] - put: - summary: Update a drive configuration - description: Update a drive configuration - operationId: put_config_config_drive_config_drive_name + post: + summary: Toggle the archive state for the key by given id, archived keys are + no longer usable to encrypt contents. + description: Toggle the archive state for the key by given id, archived keys + are no longer usable to encrypt contents. + operationId: post_config_config_encryption-keys_config_encryption-keys_id tags: - Configuration requestBody: @@ -13624,39 +14444,19 @@ paths: schema: type: object properties: - changer: - type: string - description: Tape Changer Identifier. - minLength: 3 - maxLength: 32 - pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ - changer-drivenum: - type: integer - description: Associated changer drive number (requires option changer) - minimum: 0 - maximum: 255 - default: 0 - delete: - type: array - description: List of properties to delete. - items: - type: string digest: type: string description: Prevent changes if current configuration file has different SHA256 digest. This can be used to prevent concurrent modifications. pattern: ^[a-f0-9]{64}$ - path: - type: string - description: The path to a LTO SCSI-generic tape device (i.e. '/dev/sg0') parameters: - - name: name + - name: id in: path required: true schema: type: string - description: The name parameter - description: The name parameter + description: The id parameter + description: The id parameter responses: '200': description: Successful operation @@ -19051,6 +19851,10 @@ paths: port: type: integer description: The (optional) port + use-node-proxy: + type: boolean + description: Use the http proxy configuration of the node for + remote connections. description: Remote properties. description: The list of configured remotes (with config digest). '400': @@ -19146,6 +19950,11 @@ paths: port: type: integer description: The (optional) port + use-node-proxy: + type: boolean + description: Use the http proxy configuration of the node for remote + connections. + default: false required: - auth-id - host @@ -19326,6 +20135,10 @@ paths: port: type: integer description: The (optional) port + use-node-proxy: + type: boolean + description: Use the http proxy configuration of the node for + remote connections. description: Remote properties. '400': description: Bad Request - Invalid input parameters or malformed request @@ -19424,6 +20237,11 @@ paths: port: type: integer description: The (optional) port + use-node-proxy: + type: boolean + description: Use the http proxy configuration of the node for remote + connections. + default: false parameters: - name: name in: path @@ -19512,6 +20330,9 @@ paths: items: type: object properties: + backend-type: + type: string + description: Datastore backend type comment: type: string description: Comment. @@ -20536,6 +21357,17 @@ paths: items: type: object properties: + active-encryption-key: + type: string + description: ID to uniquely identify encryption/decription key + associated-key: + type: array + items: + type: string + description: ID to uniquely identify encryption/decription + key + description: List of cryptographic keys associated with sync + job. burst-in: type: string description: Byte size with optional unit (B, KB (base 10), @@ -20592,7 +21424,7 @@ paths: description: Datastore name. remove-vanished: type: boolean - description: Delete vanished backups. This remove the local + description: Delete vanished backups. This removes the local copy if the remote backup was deleted. resync-corrupt: type: boolean @@ -20622,6 +21454,10 @@ paths: type: boolean description: Only synchronize verified backup snapshots, exclude others. + worker-threads: + type: integer + description: The number of worker threads to process groups + in parallel. description: Sync Job description: List configured jobs. '400': @@ -20683,6 +21519,17 @@ paths: schema: type: object properties: + active-encryption-key: + type: string + description: ID to uniquely identify encryption/decription key + minLength: 3 + maxLength: 32 + pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ + associated-key: + type: array + description: List of cryptographic keys associated with sync job. + items: + type: string burst-in: type: string description: Byte size with optional unit (B, KB (base 10), MB, @@ -20764,7 +21611,7 @@ paths: pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ remove-vanished: type: boolean - description: Delete vanished backups. This remove the local copy + description: Delete vanished backups. This removes the local copy if the remote backup was deleted. default: false resync-corrupt: @@ -20803,6 +21650,12 @@ paths: type: boolean description: Only synchronize verified backup snapshots, exclude others. + worker-threads: + type: integer + description: The number of worker threads to process groups in parallel. + minimum: 1 + maximum: 32 + default: 1 required: - id - remote-store @@ -20964,6 +21817,15 @@ paths: schema: type: object properties: + active-encryption-key: + type: string + description: ID to uniquely identify encryption/decription key + associated-key: + type: array + items: + type: string + description: ID to uniquely identify encryption/decription key + description: List of cryptographic keys associated with sync job. burst-in: type: string description: Byte size with optional unit (B, KB (base 10), MB, @@ -21020,7 +21882,7 @@ paths: description: Datastore name. remove-vanished: type: boolean - description: Delete vanished backups. This remove the local copy + description: Delete vanished backups. This removes the local copy if the remote backup was deleted. resync-corrupt: type: boolean @@ -21050,6 +21912,10 @@ paths: type: boolean description: Only synchronize verified backup snapshots, exclude others. + worker-threads: + type: integer + description: The number of worker threads to process groups in + parallel. description: Sync Job '400': description: Bad Request - Invalid input parameters or malformed request @@ -21110,6 +21976,17 @@ paths: schema: type: object properties: + active-encryption-key: + type: string + description: ID to uniquely identify encryption/decription key + minLength: 3 + maxLength: 32 + pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ + associated-key: + type: array + description: List of cryptographic keys associated with sync job. + items: + type: string burst-in: type: string description: Byte size with optional unit (B, KB (base 10), MB, @@ -21195,7 +22072,7 @@ paths: pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ remove-vanished: type: boolean - description: Delete vanished backups. This remove the local copy + description: Delete vanished backups. This removes the local copy if the remote backup was deleted. default: false resync-corrupt: @@ -21234,6 +22111,12 @@ paths: type: boolean description: Only synchronize verified backup snapshots, exclude others. + worker-threads: + type: integer + description: The number of worker threads to process groups in parallel. + minimum: 1 + maximum: 32 + default: 1 parameters: - name: id in: path @@ -24151,14 +25034,8 @@ paths: pattern: ^[a-f0-9]{64}$ handle: type: string - description: Handles for Proxmox repositories. - enum: - - enterprise - - no-subscription - - test - - ceph-squid-enterprise - - ceph-squid-no-subscription - - ceph-squid-test + description: Handle referencing a standard APT repository. + pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$ required: - handle parameters: @@ -24732,14 +25609,14 @@ paths: - ProxmoxApiToken: [] ProxmoxCSRFToken: [] put: - summary: 'Renew the current ACME certificate if it expires within 30 days (or - always if the `force` + summary: 'Renew the current ACME certificate if it is within its renewal lead + time (or always if the - parameter is set).' - description: 'Renew the current ACME certificate if it expires within 30 days - (or always if the `force` + `force` parameter is set).' + description: 'Renew the current ACME certificate if it is within its renewal + lead time (or always if the - parameter is set).' + `force` parameter is set).' operationId: put_nodes_nodes_node_nodes_node_certificates_nodes_node_certificates_acme_nodes_node_certificates_acme_certificate tags: - Nodes @@ -25192,6 +26069,9 @@ paths: http-proxy: type: string description: HTTP proxy configuration [http://][:port] + location: + type: string + description: The location of the PBS instance. task-log-max-days: type: integer description: Maximum days to keep Task logs @@ -25342,6 +26222,9 @@ paths: description: HTTP proxy configuration [http://][:port] minLength: 1 maxLength: 128 + location: + type: string + description: The location of the PBS instance. task-log-max-days: type: integer description: Maximum days to keep Task logs @@ -26688,6 +27571,78 @@ paths: security: - ProxmoxApiToken: [] ProxmoxCSRFToken: [] + //nodes/nodes/{node}/nodes/{node}/identity: + get: + summary: Returns a unique server identity. The ID is derived from `/etc/machine-id`. + description: Returns a unique server identity. The ID is derived from `/etc/machine-id`. + operationId: get_nodes_nodes_node_nodes_node_identity + tags: + - Nodes + parameters: + - name: node + in: path + required: true + schema: + $ref: '#/components/schemas/ProxmoxNodeId' + description: The node parameter + responses: + '200': + description: Unique instance identity information. + content: + application/json: + schema: + type: object + properties: + pbs-instance-id: + type: string + description: Unique instance identifier. + description: Unique instance identity information. + '400': + description: Bad Request - Invalid input parameters or malformed request + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '401': + description: Unauthorized - Authentication required or invalid credentials + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '403': + description: Forbidden - Insufficient permissions for the requested operation + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '404': + description: Not Found - Requested resource does not exist + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '422': + description: Unprocessable Entity - Request is well-formed but contains + semantic errors + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '500': + description: Internal Server Error - Unexpected server error + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + '503': + description: Service Unavailable - Service temporarily unavailable + content: + application/json: + schema: + $ref: '#/components/schemas/ProxmoxError' + security: + - ProxmoxApiToken: [] + ProxmoxCSRFToken: [] //nodes/nodes/{node}/nodes/{node}/journal: get: summary: Read syslog entries. @@ -28944,10 +29899,7 @@ paths: properties: key: type: string - description: Proxmox Backup Server subscription key. - minLength: 15 - maxLength: 16 - pattern: ^pbs(?:[cbsp])-[0-9a-f]{10}$ + description: The subscription key to install. required: - key parameters: @@ -29604,6 +30556,9 @@ paths: schema: type: object properties: + endtime: + type: integer + description: The task end time (Epoch) exitstatus: type: string description: '''OK'', ''Error: '', or ''unknown''.' @@ -30121,6 +31076,11 @@ paths: GB, ..., KiB (base 2), MiB, Gib, ...). minLength: 1 maxLength: 64 + decryption-keys: + type: array + description: List of decryption keys. + items: + type: string encrypted-only: type: boolean description: Only synchronize encrypted backup snapshots, exclude @@ -30173,7 +31133,7 @@ paths: pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ remove-vanished: type: boolean - description: Delete vanished backups. This remove the local copy + description: Delete vanished backups. This removes the local copy if the remote backup was deleted. default: false resync-corrupt: @@ -30195,6 +31155,12 @@ paths: type: boolean description: Only synchronize verified backup snapshots, exclude others. + worker-threads: + type: integer + description: The number of worker threads to process groups in parallel. + minimum: 1 + maximum: 32 + default: 1 required: - remote-store - store @@ -30283,6 +31249,12 @@ paths: type: boolean description: Only synchronize encrypted backup snapshots, exclude others. + encryption-key: + type: string + description: ID to uniquely identify encryption/decription key + minLength: 3 + maxLength: 32 + pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ group-filter: type: array description: List of group filters. @@ -30331,7 +31303,7 @@ paths: pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ remove-vanished: type: boolean - description: Delete vanished backups. This remove the local copy + description: Delete vanished backups. This removes the local copy if the remote backup was deleted. default: false store: @@ -30349,6 +31321,12 @@ paths: type: boolean description: Only synchronize verified backup snapshots, exclude others. + worker-threads: + type: integer + description: The number of worker threads to process groups in parallel. + minimum: 1 + maximum: 32 + default: 1 required: - remote - remote-store @@ -30607,6 +31585,9 @@ paths: type: integer description: The available bytes of the underlying storage. (-1 on error) + backend-type: + type: string + description: Datastore backend type error: type: string description: An error description, for example, when the datastore @@ -32281,6 +33262,12 @@ paths: minLength: 2 maxLength: 32 pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ + load-barcode: + type: string + description: Media Label/Barcode. + minLength: 2 + maxLength: 32 + pattern: ^(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)$ parameters: - name: drive in: path @@ -35336,8 +36323,8 @@ paths: properties: chunk-count: type: integer - description: Chunk count. This is used to verify that the server - got all chunks. Ignored for incremental backups. + description: Number of new and re-indexed chunks. Used to verify + that the server got all chunk digests. minimum: 0 csum: type: string @@ -35440,7 +36427,6 @@ paths: minimum: 1 required: - archive-name - - size responses: '200': description: Successful operation