diff --git a/doc/ovhcloud_cloud_storage_block.md b/doc/ovhcloud_cloud_storage_block.md index d280feaf..582bc560 100644 --- a/doc/ovhcloud_cloud_storage_block.md +++ b/doc/ovhcloud_cloud_storage_block.md @@ -34,7 +34,6 @@ Manage block storage volumes in the given cloud project * [ovhcloud cloud storage block attach](ovhcloud_cloud_storage_block_attach.md) - Attach the given volume to the given instance * [ovhcloud cloud storage block backup](ovhcloud_cloud_storage_block_backup.md) - Manage volume backups in the given cloud project * [ovhcloud cloud storage block create](ovhcloud_cloud_storage_block_create.md) - Create a new volume -* [ovhcloud cloud storage block create-from-backup](ovhcloud_cloud_storage_block_create-from-backup.md) - Create a volume from the given backup * [ovhcloud cloud storage block delete](ovhcloud_cloud_storage_block_delete.md) - Delete the given volume * [ovhcloud cloud storage block detach](ovhcloud_cloud_storage_block_detach.md) - Detach the given volume from the given instance * [ovhcloud cloud storage block edit](ovhcloud_cloud_storage_block_edit.md) - Edit the given volume diff --git a/doc/ovhcloud_cloud_storage_block_backup_create.md b/doc/ovhcloud_cloud_storage_block_backup_create.md index 256ce8f0..c74f5eac 100644 --- a/doc/ovhcloud_cloud_storage_block_backup_create.md +++ b/doc/ovhcloud_cloud_storage_block_backup_create.md @@ -10,6 +10,7 @@ ovhcloud cloud storage block backup create [flags] ``` -h, --help help for create + --wait Wait for the backup to be READY before exiting ``` ### Options inherited from parent commands diff --git a/doc/ovhcloud_cloud_storage_block_create-from-backup.md b/doc/ovhcloud_cloud_storage_block_create-from-backup.md deleted file mode 100644 index 0ec0610a..00000000 --- a/doc/ovhcloud_cloud_storage_block_create-from-backup.md +++ /dev/null @@ -1,38 +0,0 @@ -## ovhcloud cloud storage block create-from-backup - -Create a volume from the given backup - -``` -ovhcloud cloud storage block create-from-backup [flags] -``` - -### Options - -``` - -h, --help help for create-from-backup -``` - -### Options inherited from parent commands - -``` - --cloud-project string Cloud project ID - -d, --debug Activate debug mode (will log all HTTP requests details) - -e, --ignore-errors Ignore errors in API calls when it is not fatal to the execution - -o, --output string Output format: json, yaml, interactive, or a custom format expression (using https://github.com/PaesslerAG/gval syntax) - Examples: - --output json - --output yaml - --output interactive - --output 'id' (to extract a single field) - --output 'nested.field.subfield' (to extract a nested field) - --output '[id, "name"]' (to extract multiple fields as an array) - --output '{"newKey": oldKey, "otherKey": nested.field}' (to extract and rename fields in an object) - --output 'name+","+type' (to extract and concatenate fields in a string) - --output '(nbFieldA + nbFieldB) * 10' (to compute values from numeric fields) - --profile string Use a specific profile from the configuration file -``` - -### SEE ALSO - -* [ovhcloud cloud storage block](ovhcloud_cloud_storage_block.md) - Manage block storage volumes in the given cloud project - diff --git a/doc/ovhcloud_cloud_storage_block_create.md b/doc/ovhcloud_cloud_storage_block_create.md index 17076503..fd226cab 100644 --- a/doc/ovhcloud_cloud_storage_block_create.md +++ b/doc/ovhcloud_cloud_storage_block_create.md @@ -22,7 +22,7 @@ ovhcloud cloud storage block create [flags] --replace Replace parameters file if it already exists --size int Volume size (in GB) --snapshot-id string Snapshot ID to create the volume from - --type string Volume type (classic, classic-luks, classic-multiattach, high-speed, high-speed-gen2, high-speed-gen2-luks, high-speed-luks) + --type string Volume type (CLASSIC, HIGH_SPEED, HIGH_SPEED_GEN2) --wait Wait for volume creation to be done before exiting ``` diff --git a/doc/ovhcloud_cloud_storage_block_edit.md b/doc/ovhcloud_cloud_storage_block_edit.md index b1634aad..91804486 100644 --- a/doc/ovhcloud_cloud_storage_block_edit.md +++ b/doc/ovhcloud_cloud_storage_block_edit.md @@ -14,7 +14,8 @@ ovhcloud cloud storage block edit [flags] -h, --help help for edit --name string Volume name --size int Volume size (in GB, can only be increased) - --type string Volume type (classic, classic-luks, classic-multiattach, high-speed, high-speed-gen2, high-speed-gen2-luks, high-speed-luks) + --type string Volume type (CLASSIC, HIGH_SPEED, HIGH_SPEED_GEN2) + --wait Wait for the volume to be READY before exiting ``` ### Options inherited from parent commands diff --git a/doc/ovhcloud_cloud_storage_block_snapshot_create.md b/doc/ovhcloud_cloud_storage_block_snapshot_create.md index c464e1ad..a0f90f57 100644 --- a/doc/ovhcloud_cloud_storage_block_snapshot_create.md +++ b/doc/ovhcloud_cloud_storage_block_snapshot_create.md @@ -12,6 +12,7 @@ ovhcloud cloud storage block snapshot create [flags] --description string Snapshot description -h, --help help for create --name string Snapshot name + --wait Wait for the snapshot to be READY before exiting ``` ### Options inherited from parent commands diff --git a/internal/assets/api-schemas/cloud_v2.json b/internal/assets/api-schemas/cloud_v2.json index d03d70b5..d6eedb99 100644 --- a/internal/assets/api-schemas/cloud_v2.json +++ b/internal/assets/api-schemas/cloud_v2.json @@ -24,6 +24,15 @@ "type": "object", "description": "Asynchronous operation currently running", "properties": { + "errors": { + "type": "array", + "description": "Errors that occured on the task", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.TaskError" + }, + "readOnly": true + }, "id": { "type": "string", "description": "Identifier of the current task", @@ -117,8 +126,10 @@ "CREATING", "DELETING", "ERROR", + "OUT_OF_SYNC", "READY", "SUSPENDED", + "UNKNOWN", "UPDATING" ] }, @@ -398,36 +409,34 @@ "description": "Phone number", "format": "phone-number" }, - "publicCloud.project.ModeEnum": { - "type": "string", - "description": "Possible values for cloud project mode", - "enum": [ - "CLASSIC", - "DISCOVERY" - ] - }, - "publicCloud.project.ProjectAsync": { + "publicCloud.blockStorage.Backup": { "type": "object", - "description": "A Public Cloud project", + "description": "A Public Cloud block storage backup", "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, "createdAt": { "type": "string", - "description": "Date of project creation", + "description": "Creation date of the backup", "format": "date-time", "readOnly": true }, "currentState": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.project.ProjectCurrentState" + "$ref": "#/components/schemas/publicCloud.blockStorage.BackupCurrentState" } ], - "description": "Current configuration applied to the cloud project", + "description": "Current observed state of the backup from the infrastructure", + "nullable": true, "readOnly": true }, "currentTasks": { "type": "array", - "description": "Asynchronous operations ongoing on the cloud project", + "description": "Ongoing asynchronous tasks related to the backup", "nullable": true, "items": { "$ref": "#/components/schemas/common.CurrentTask" @@ -436,13 +445,8 @@ }, "id": { "type": "string", - "description": "Project ID", - "readOnly": true - }, - "name": { - "type": "string", - "description": "Project name", - "nullable": true, + "description": "Unique identifier of the backup", + "format": "uuid", "readOnly": true }, "resourceStatus": { @@ -451,772 +455,25240 @@ "$ref": "#/components/schemas/common.ResourceStatusEnum" } ], - "description": "Reflects the readiness of the cloud project. A new target specification request will be accepted only in `READY` status", + "description": "Backup readiness in the system", "readOnly": true }, "targetSpec": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.project.ProjectTargetSpec" + "$ref": "#/components/schemas/publicCloud.blockStorage.BackupTargetSpec" } ], - "description": "Last target specification of the cloud project", + "description": "Last target specification of the backup", "readOnly": true }, "updatedAt": { "type": "string", - "description": "Date of the last cloud project update", + "description": "Last update date of the backup", "format": "date-time", "readOnly": true } } }, - "publicCloud.project.ProjectAsyncWithIAM": { + "publicCloud.blockStorage.BackupCreation": { "type": "object", - "description": "A Public Cloud project", + "description": "Payload to create a Public Cloud block storage backup", "properties": { - "createdAt": { - "type": "string", - "description": "Date of project creation", - "format": "date-time", - "readOnly": true - }, - "currentState": { + "targetSpec": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.project.ProjectCurrentState" + "$ref": "#/components/schemas/publicCloud.blockStorage.BackupTargetSpec" } ], - "description": "Current configuration applied to the cloud project", - "readOnly": true - }, - "currentTasks": { - "type": "array", - "description": "Asynchronous operations ongoing on the cloud project", + "description": "Desired target specification for the backup" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.blockStorage.BackupCurrentState": { + "type": "object", + "description": "Current state of a block storage backup as observed from the infrastructure", + "properties": { + "description": { + "type": "string", + "description": "Backup description", "nullable": true, - "items": { - "$ref": "#/components/schemas/common.CurrentTask" - }, "readOnly": true }, - "iam": { + "location": { "allOf": [ { - "$ref": "#/components/schemas/iam.ResourceMetadata" + "$ref": "#/components/schemas/publicCloud.common.Location" } ], - "description": "IAM resource metadata", - "nullable": true, + "description": "Current location", "readOnly": true }, - "id": { + "name": { "type": "string", - "description": "Project ID", + "description": "Current backup name", "readOnly": true }, - "name": { - "type": "string", - "description": "Project name", - "nullable": true, + "size": { + "type": "integer", + "description": "Size of the backup in GB", "readOnly": true }, - "resourceStatus": { - "allOf": [ - { - "$ref": "#/components/schemas/common.ResourceStatusEnum" - } - ], - "description": "Reflects the readiness of the cloud project. A new target specification request will be accepted only in `READY` status", + "volumeId": { + "type": "string", + "description": "Identifier of the source volume", + "format": "uuid", "readOnly": true + } + } + }, + "publicCloud.blockStorage.BackupTargetSpec": { + "type": "object", + "description": "Target specification for a block storage backup", + "properties": { + "description": { + "type": "string", + "description": "Desired backup description", + "nullable": true }, - "targetSpec": { + "location": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.project.ProjectTargetSpec" + "$ref": "#/components/schemas/publicCloud.common.Location" } ], - "description": "Last target specification of the cloud project", - "readOnly": true + "description": "Target location" }, - "updatedAt": { + "name": { "type": "string", - "description": "Date of the last cloud project update", - "format": "date-time", - "readOnly": true + "description": "Desired backup name" + }, + "volumeId": { + "type": "string", + "description": "Identifier of the source volume to backup", + "format": "uuid" } - } + }, + "required": [ + "location", + "name", + "volumeId" + ] }, - "publicCloud.project.ProjectCreation": { + "publicCloud.blockStorage.BackupUpdate": { "type": "object", - "description": "Input parameters for creating a cloud project.", + "description": "Payload to update a Public Cloud block storage backup", "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications; represents the current target specification value" + }, "targetSpec": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.project.ProjectTargetSpec" + "$ref": "#/components/schemas/publicCloud.blockStorage.BackupUpdateTargetSpec" } ], - "description": "Target specification for the cloud project" + "description": "Desired target specification for the backup" } }, "required": [ + "checksum", "targetSpec" ] }, - "publicCloud.project.ProjectCurrentState": { + "publicCloud.blockStorage.BackupUpdateTargetSpec": { "type": "object", - "description": "Current state of the cloud project", + "description": "Target specification for updating a block storage backup (immutable fields like location and volumeId are excluded)", "properties": { - "mode": { - "allOf": [ - { - "$ref": "#/components/schemas/publicCloud.project.ModeEnum" - } - ], - "description": "Project mode", - "readOnly": true + "description": { + "type": "string", + "description": "Desired backup description" }, "name": { "type": "string", - "description": "Name of the cloud project", - "readOnly": true + "description": "Desired backup name" } } }, - "publicCloud.project.ProjectTargetSpec": { + "publicCloud.blockStorage.Block": { "type": "object", - "description": "Target specification of the cloud project", + "description": "A Public Cloud block storage volume", "properties": { - "mode": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the volume", + "format": "date-time", + "readOnly": true + }, + "currentState": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.project.ModeEnum" + "$ref": "#/components/schemas/publicCloud.blockStorage.BlockCurrentState" } ], - "description": "Project type. Discovery mode allows to display UI in read only without adding any payment mean." + "description": "Current observed state of the volume from the infrastructure", + "nullable": true, + "readOnly": true }, - "name": { + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the volume", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { "type": "string", - "description": "Name of the public cloud project" + "description": "Unique identifier of the volume", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Volume readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.blockStorage.BlockTargetSpec" + } + ], + "description": "Last target specification of the volume", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the volume", + "format": "date-time", + "readOnly": true } - }, - "required": [ - "mode", - "name" - ] + } }, - "publicCloud.rancher.Credentials": { + "publicCloud.blockStorage.BlockAttachedInstance": { "type": "object", - "description": "Represents a username/password couple for a managed Rancher user", + "description": "An instance currently attached to a block storage volume", "properties": { - "password": { + "id": { "type": "string", - "description": "Password of the user", - "format": "password", + "description": "Instance unique identifier", + "format": "uuid", "readOnly": true + } + } + }, + "publicCloud.blockStorage.BlockCreateFrom": { + "type": "object", + "description": "Optional source to create a block storage volume from (backup, snapshot, or image). Only one source may be specified.", + "properties": { + "backupId": { + "type": "string", + "description": "UUID of a backup to restore from", + "nullable": true, + "format": "uuid" }, - "username": { + "imageId": { "type": "string", - "description": "Name of the user", - "readOnly": true + "description": "UUID of a Glance image to create the volume from. The resulting volume will be bootable. `volumeType` is required when using this field.", + "nullable": true, + "format": "uuid" + }, + "snapshotId": { + "type": "string", + "description": "UUID of a snapshot to create from", + "nullable": true, + "format": "uuid" } } }, - "publicCloud.rancher.IpRestriction": { + "publicCloud.blockStorage.BlockCreation": { "type": "object", - "description": "Allowed CIDR block for a managed Rancher service's IP restrictions", + "description": "Payload to create a Public Cloud block storage volume", "properties": { - "cidrBlock": { + "targetSpec": { "allOf": [ { - "$ref": "#/components/schemas/ipBlock" + "$ref": "#/components/schemas/publicCloud.blockStorage.BlockTargetSpec" } ], - "description": "Allowed CIDR block (/subnet is optional, if unspecified then /32 will be used)" - }, - "description": { - "type": "string", - "description": "Description of the allowed CIDR block" + "description": "Desired target specification for the volume" } }, "required": [ - "cidrBlock", - "description" + "targetSpec" ] }, - "publicCloud.rancher.Networking": { + "publicCloud.blockStorage.BlockCurrentState": { "type": "object", - "description": "Networking properties of a managed Rancher service", + "description": "Current state of a block storage volume as observed from the infrastructure", "properties": { - "egressCidrBlocks": { + "attachedInstances": { "type": "array", - "description": "Specifies the CIDR ranges for egress IP addresses used by Rancher. Ensure these ranges are allowed in any IP restrictions for services that Rancher will access.", + "description": "Instances currently attached to this volume", + "nullable": true, "items": { - "$ref": "#/components/schemas/ipBlock" + "$ref": "#/components/schemas/publicCloud.blockStorage.BlockAttachedInstance" }, "readOnly": true - } - } - }, - "publicCloud.rancher.PlanCapability": { - "type": "object", - "description": "A managed Rancher service plan capability, applicable to an existing managed Rancher", - "properties": { - "cause": { - "allOf": [ - { - "$ref": "#/components/schemas/publicCloud.rancher.PlanUnavailabilityCauseEnum" - } - ], - "description": "Cause for an unavailability", - "nullable": true, + }, + "bootable": { + "type": "boolean", + "description": "Whether the volume is bootable", "readOnly": true }, - "message": { + "description": { "type": "string", - "description": "Human-readable description of the unavailability cause", + "description": "Volume description", "nullable": true, "readOnly": true }, - "name": { + "encryption": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.PlanEnum" + "$ref": "#/components/schemas/publicCloud.blockStorage.BlockEncryption" } ], - "description": "Name of the plan", + "description": "Encryption configuration of the volume", "readOnly": true }, - "status": { + "location": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.PlanCapabilityStatusEnum" + "$ref": "#/components/schemas/publicCloud.blockStorage.BlockLocation" } ], - "description": "Status of the plan", + "description": "Current location", "readOnly": true - } - } - }, - "publicCloud.rancher.PlanCapabilityStatusEnum": { - "type": "string", - "description": "Possible statuses for a managed Rancher plan capability, applicable to an existing managed Rancher", - "enum": [ - "AVAILABLE", - "CURRENT", - "UNAVAILABLE" - ] - }, - "publicCloud.rancher.PlanEnum": { - "type": "string", - "description": "Possible values for managed Rancher plans", - "enum": [ - "OVHCLOUD_EDITION", - "STANDARD" - ] - }, - "publicCloud.rancher.PlanReference": { - "type": "object", - "description": "A managed Rancher service plan reference, applicable to service creations", - "properties": { - "cause": { - "allOf": [ - { - "$ref": "#/components/schemas/publicCloud.rancher.PlanUnavailabilityCauseEnum" - } - ], - "description": "Cause for an unavailability", - "nullable": true, + }, + "locked": { + "type": "boolean", + "description": "Whether the volume is locked", "readOnly": true }, - "message": { + "name": { "type": "string", - "description": "Human-readable description of the unavailability cause", - "nullable": true, + "description": "Current volume name", "readOnly": true }, - "name": { + "size": { + "type": "integer", + "description": "Current size of the volume in GB", + "readOnly": true + }, + "status": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.PlanEnum" + "$ref": "#/components/schemas/publicCloud.blockStorage.VolumeStatusEnum" } ], - "description": "Name of the plan", + "description": "OpenStack volume status", "readOnly": true }, - "status": { + "volumeType": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.PlanReferenceStatusEnum" + "$ref": "#/components/schemas/publicCloud.blockStorage.VolumeTypeEnum" } ], - "description": "Status of the plan", + "description": "Current volume type", "readOnly": true } } }, - "publicCloud.rancher.PlanReferenceStatusEnum": { - "type": "string", - "description": "Possible statuses for a managed Rancher plan reference", - "enum": [ - "AVAILABLE", - "UNAVAILABLE" - ] - }, - "publicCloud.rancher.PlanUnavailabilityCauseEnum": { - "type": "string", - "description": "Possible causes for a managed Rancher plan being unavailable", - "enum": [ - "CANNOT_DOWNGRADE_USING_HIGHER_FEATURES", - "CANNOT_SWITCH_PLAN_FOR_ALPHA", - "NOT_IMPLEMENTED" + "publicCloud.blockStorage.BlockEncryption": { + "type": "object", + "description": "Encryption configuration for a block storage volume", + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether the volume is encrypted at rest with LUKS" + } + }, + "required": [ + "enabled" ] }, - "publicCloud.rancher.Rancher": { + "publicCloud.blockStorage.BlockLocation": { "type": "object", - "description": "A managed Rancher service object", + "description": "Location for a block storage volume", "properties": { - "createdAt": { + "availabilityZone": { "type": "string", - "description": "Date of the managed Rancher service creation", - "format": "date-time", - "readOnly": true + "description": "Availability zone within the region", + "nullable": true }, - "currentState": { + "region": { + "type": "string", + "description": "Region code" + } + }, + "required": [ + "region" + ] + }, + "publicCloud.blockStorage.BlockTargetSpec": { + "type": "object", + "description": "Target specification for a block storage volume", + "properties": { + "createFrom": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.RancherCurrentState" + "$ref": "#/components/schemas/publicCloud.blockStorage.BlockCreateFrom" } ], - "description": "Current configuration applied to the managed Rancher service", - "readOnly": true - }, - "currentTasks": { - "type": "array", - "description": "Asynchronous operations ongoing on the managed Rancher service", - "nullable": true, - "items": { - "$ref": "#/components/schemas/common.CurrentTask" - }, - "readOnly": true - }, - "id": { - "type": "string", - "description": "Unique identifier", - "format": "uuid", - "readOnly": true + "description": "Optional source to create the volume from (backup or snapshot). Cannot be changed after creation.", + "nullable": true }, - "resourceStatus": { + "encryption": { "allOf": [ { - "$ref": "#/components/schemas/common.ResourceStatusEnum" + "$ref": "#/components/schemas/publicCloud.blockStorage.BlockEncryption" } ], - "description": "Reflects the readiness of the managed Rancher service. A new target specification request will be accepted only in `READY` status", - "readOnly": true + "description": "Encryption configuration for the volume", + "nullable": true }, - "targetSpec": { + "location": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.RancherTargetSpec" + "$ref": "#/components/schemas/publicCloud.blockStorage.BlockLocation" } ], - "description": "Last target specification of the managed Rancher service", - "readOnly": true + "description": "Target location" }, - "updatedAt": { + "name": { "type": "string", - "description": "Date of the last managed Rancher service update", - "format": "date-time", - "readOnly": true + "description": "Desired volume name" + }, + "size": { + "type": "integer", + "description": "Size of the volume in GB" + }, + "volumeType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.blockStorage.VolumeTypeEnum" + } + ], + "description": "Type of the volume. Required when creating a blank volume, omitted when creating from a backup or snapshot (inherited from source).", + "nullable": true } - } + }, + "required": [ + "location", + "name", + "size" + ] }, - "publicCloud.rancher.RancherCreation": { + "publicCloud.blockStorage.BlockUpdate": { "type": "object", - "description": "Input parameters for creating a managed Rancher service.", + "description": "Payload to update a Public Cloud block storage volume", "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications; represents the current target specification value" + }, "targetSpec": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.RancherCreationTargetSpec" + "$ref": "#/components/schemas/publicCloud.blockStorage.BlockUpdateTargetSpec" } ], - "description": "Target specification for the managed Rancher service" + "description": "Desired target specification for the volume" } }, "required": [ + "checksum", "targetSpec" ] }, - "publicCloud.rancher.RancherCreationTargetSpec": { + "publicCloud.blockStorage.BlockUpdateTargetSpec": { "type": "object", - "description": "Target specification of the managed Rancher service", + "description": "Target specification for updating a block storage volume (immutable fields like location and encryption are excluded)", "properties": { - "iamAuthEnabled": { - "type": "boolean", - "description": "Allows Rancher to use identities managed by OVHcloud IAM (Identity and Access Management) to control access" - }, "name": { "type": "string", - "description": "Name of the managed Rancher service" + "description": "Desired volume name" }, - "plan": { + "size": { + "type": "integer", + "description": "Size of the volume in GB" + }, + "volumeType": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.PlanEnum" + "$ref": "#/components/schemas/publicCloud.blockStorage.VolumeTypeEnum" } ], - "description": "Plan of the managed Rancher service. Available plans for an existing managed Rancher can be retrieved using GET /rancher/rancherID/capabilities/plan" - }, - "version": { - "type": "string", - "description": "Version of the managed Rancher service. Available versions for an existing managed Rancher can be retrieved using GET /rancher/rancherID/capabilities/version. Default is the latest version." + "description": "Target volume type. Changing this triggers an online retype (migration).", + "nullable": true } }, "required": [ "name", - "plan" + "size" ] }, - "publicCloud.rancher.RancherCurrentState": { + "publicCloud.blockStorage.Snapshot": { "type": "object", - "description": "Current state of the managed Rancher service", + "description": "A Public Cloud block storage volume snapshot", "properties": { - "bootstrapPassword": { + "checksum": { "type": "string", - "description": "Bootstrap password of the managed Rancher service, returned only on creation", - "nullable": true, - "format": "password", + "description": "Computed hash representing the current target specification value", "readOnly": true }, - "iamAuthEnabled": { - "type": "boolean", - "description": "Allows Rancher to use identities managed by OVHcloud IAM (Identity and Access Management) to control access", + "createdAt": { + "type": "string", + "description": "Creation date of the snapshot", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.blockStorage.SnapshotCurrentState" + } + ], + "description": "Current observed state of the snapshot from the infrastructure", "nullable": true, "readOnly": true }, - "ipRestrictions": { + "currentTasks": { "type": "array", - "description": "List of allowed CIDR blocks for a managed Rancher service's IP restrictions. When empty, any IP is allowed", + "description": "Ongoing asynchronous tasks related to the snapshot", "nullable": true, "items": { - "$ref": "#/components/schemas/publicCloud.rancher.IpRestriction" + "$ref": "#/components/schemas/common.CurrentTask" }, "readOnly": true }, - "name": { + "id": { "type": "string", - "description": "Name of the managed Rancher service", + "description": "Unique identifier of the snapshot", + "format": "uuid", "readOnly": true }, - "networking": { + "resourceStatus": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.Networking" + "$ref": "#/components/schemas/common.ResourceStatusEnum" } ], - "description": "Networking properties of a managed Rancher service", - "nullable": true, + "description": "Snapshot readiness in the system", "readOnly": true }, - "plan": { + "targetSpec": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.PlanEnum" + "$ref": "#/components/schemas/publicCloud.blockStorage.SnapshotTargetSpec" } ], - "description": "Plan of the managed Rancher service", + "description": "Last target specification of the snapshot", "readOnly": true }, - "region": { + "updatedAt": { + "type": "string", + "description": "Last update date of the snapshot", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.blockStorage.SnapshotCreation": { + "type": "object", + "description": "Payload to create a Public Cloud block storage volume snapshot", + "properties": { + "targetSpec": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.RegionEnum" + "$ref": "#/components/schemas/publicCloud.blockStorage.SnapshotTargetSpec" } ], - "description": "Region of the managed Rancher service", - "readOnly": true - }, - "url": { + "description": "Desired target specification for the snapshot" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.blockStorage.SnapshotCurrentState": { + "type": "object", + "description": "Current state of a block storage volume snapshot as observed from the infrastructure", + "properties": { + "description": { "type": "string", - "description": "URL of the managed Rancher service", + "description": "Snapshot description", "nullable": true, "readOnly": true }, - "usage": { + "location": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.Usage" + "$ref": "#/components/schemas/publicCloud.common.Location" } ], - "description": "Latest metrics regarding the usage of the managed Rancher service", - "nullable": true, + "description": "Current location", "readOnly": true }, - "version": { + "name": { "type": "string", - "description": "Version of the managed Rancher service", + "description": "Current snapshot name", + "readOnly": true + }, + "size": { + "type": "integer", + "description": "Size of the snapshot in GB", + "readOnly": true + }, + "volumeId": { + "type": "string", + "description": "ID of the volume this snapshot was created from", + "format": "uuid", "readOnly": true } } }, - "publicCloud.rancher.RancherTargetSpec": { + "publicCloud.blockStorage.SnapshotTargetSpec": { "type": "object", - "description": "Target specification of the managed Rancher service", + "description": "Target specification for a block storage volume snapshot", "properties": { - "iamAuthEnabled": { - "type": "boolean", - "description": "Allows Rancher to use identities managed by OVHcloud IAM (Identity and Access Management) to control access" - }, - "ipRestrictions": { - "type": "array", - "description": "List of allowed CIDR blocks for a managed Rancher service's IP restrictions. When empty, any IP is allowed", - "items": { - "$ref": "#/components/schemas/publicCloud.rancher.IpRestriction" - } - }, - "name": { + "description": { "type": "string", - "description": "Name of the managed Rancher service" + "description": "Desired snapshot description", + "nullable": true }, - "plan": { + "location": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.PlanEnum" + "$ref": "#/components/schemas/publicCloud.common.Location" } ], - "description": "Plan of the managed Rancher service. Available plans for an existing managed Rancher can be retrieved using GET /rancher/rancherID/capabilities/plan" + "description": "Target location" }, - "version": { + "name": { "type": "string", - "description": "Version of the managed Rancher service. Available versions for an existing managed Rancher can be retrieved using GET /rancher/rancherID/capabilities/version" + "description": "Desired snapshot name" + }, + "volumeId": { + "type": "string", + "description": "ID of the volume to snapshot", + "format": "uuid" } }, "required": [ + "location", "name", - "plan", - "version" + "volumeId" ] }, - "publicCloud.rancher.RancherUpdate": { + "publicCloud.blockStorage.SnapshotUpdate": { "type": "object", - "description": "Input for managed Rancher service update.", + "description": "Payload to update a Public Cloud block storage volume snapshot", "properties": { - "targetSpec": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications; represents the current target specification value" + }, + "targetSpec": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.RancherTargetSpec" + "$ref": "#/components/schemas/publicCloud.blockStorage.SnapshotUpdateTargetSpec" } ], - "description": "New target specification for the managed Rancher service" + "description": "Desired target specification for the snapshot" } }, "required": [ + "checksum", "targetSpec" ] }, - "publicCloud.rancher.RegionEnum": { + "publicCloud.blockStorage.SnapshotUpdateTargetSpec": { + "type": "object", + "description": "Target specification for updating a block storage volume snapshot (immutable fields like location and volumeId are excluded)", + "properties": { + "description": { + "type": "string", + "description": "Desired snapshot description" + }, + "name": { + "type": "string", + "description": "Desired snapshot name" + } + }, + "required": [ + "name" + ] + }, + "publicCloud.blockStorage.VolumeStatusEnum": { "type": "string", - "description": "Possible values for managed Rancher regions", + "description": "Possible statuses for a block storage volume", "enum": [ - "EU_WEST_GRA", - "EU_WEST_RBX", - "EU_WEST_SBG" + "ATTACHING", + "AVAILABLE", + "CREATING", + "DELETING", + "DETACHING", + "DOWNLOADING", + "ERROR", + "ERROR_BACKING_UP", + "ERROR_DELETING", + "ERROR_EXTENDING", + "ERROR_RESTORING", + "EXTENDING", + "IN_USE", + "RETYPING" ] }, - "publicCloud.rancher.Usage": { + "publicCloud.blockStorage.VolumeTypeEnum": { + "type": "string", + "description": "Possible volume types for a block storage volume", + "enum": [ + "CLASSIC", + "HIGH_SPEED", + "HIGH_SPEED_GEN2" + ] + }, + "publicCloud.common.Location": { "type": "object", - "description": "A metric sample about a managed Rancher usage", + "description": "Resource location", "properties": { - "datetime": { + "availabilityZone": { "type": "string", - "description": "Date of the sample", - "format": "date-time", - "readOnly": true + "description": "Availability zone within the region", + "nullable": true }, - "orchestratedVcpus": { - "type": "integer", - "description": "Total number of vCPUs orchestrated by the managed Rancher service through the downstream clusters", - "readOnly": true + "region": { + "type": "string", + "description": "Region code" } - } + }, + "required": [ + "region" + ] }, - "publicCloud.rancher.VersionCapability": { + "publicCloud.floatingIp.FloatingIP": { "type": "object", - "description": "A managed Rancher service version capability, applicable to an existing managed Rancher", + "description": "A Public Cloud floating IP", "properties": { - "cause": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the floating IP", + "format": "date-time", + "readOnly": true + }, + "currentState": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.VersionUnavailabilityCauseEnum" + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIPCurrentState" } ], - "description": "Cause for an unavailability", + "description": "Current state of the floating IP", "nullable": true, "readOnly": true }, - "changelogUrl": { - "type": "string", - "description": "Changelog URL of the version", + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the floating IP", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, "readOnly": true }, - "message": { + "id": { "type": "string", - "description": "Human-readable description of the unavailability cause", - "nullable": true, + "description": "Unique identifier of the floating IP", + "format": "uuid", "readOnly": true }, - "name": { - "type": "string", - "description": "Name of the version", + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Floating IP readiness in the system", "readOnly": true }, - "status": { + "targetSpec": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.VersionCapabilityStatusEnum" + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIPTargetSpec" } ], - "description": "Status of the version", + "description": "Last target specification of the floating IP", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the floating IP", + "format": "date-time", "readOnly": true } } }, - "publicCloud.rancher.VersionCapabilityStatusEnum": { - "type": "string", - "description": "Possible statuses for a managed Rancher version capability, applicable to an existing managed Rancher", - "enum": [ - "AVAILABLE", - "UNAVAILABLE" - ] - }, - "publicCloud.rancher.VersionReference": { + "publicCloud.floatingIp.FloatingIPCreation": { "type": "object", - "description": "A managed Rancher service version reference, applicable to service creations", + "description": "Payload to create a Public Cloud floating IP", "properties": { - "cause": { + "targetSpec": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.VersionUnavailabilityCauseEnum" + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIPTargetSpec" } ], - "description": "Cause for an unavailability", + "description": "Desired target specification for the floating IP to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.floatingIp.FloatingIPCurrentState": { + "type": "object", + "description": "Current state of a floating IP from OpenStack", + "properties": { + "description": { + "type": "string", + "description": "Floating IP description", "nullable": true, "readOnly": true }, - "changelogUrl": { - "type": "string", - "description": "Changelog URL of the version", + "ip": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "Floating IP address", "readOnly": true }, - "message": { - "type": "string", - "description": "Human-readable description of the unavailability cause", - "nullable": true, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIPLocation" + } + ], + "description": "Current location", "readOnly": true }, - "name": { - "type": "string", - "description": "Name of the version", + "network": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIPNetwork" + } + ], + "description": "Associated network", "readOnly": true }, "status": { "allOf": [ { - "$ref": "#/components/schemas/publicCloud.rancher.VersionReferenceStatusEnum" + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIPStatusEnum" } ], - "description": "Status of the version", + "description": "OpenStack floating IP status", "readOnly": true } } }, - "publicCloud.rancher.VersionReferenceStatusEnum": { - "type": "string", - "description": "Possible statuses for a managed Rancher version reference", - "enum": [ - "AVAILABLE", - "UNAVAILABLE" + "publicCloud.floatingIp.FloatingIPLocation": { + "type": "object", + "description": "Floating IP location", + "properties": { + "availabilityZone": { + "type": "string", + "description": "Availability zone within the region", + "nullable": true + }, + "region": { + "type": "string", + "description": "Region code" + } + }, + "required": [ + "region" ] }, - "publicCloud.rancher.VersionUnavailabilityCauseEnum": { + "publicCloud.floatingIp.FloatingIPNetwork": { + "type": "object", + "description": "A network reference for a floating IP", + "properties": { + "id": { + "type": "string", + "description": "Network ID", + "format": "uuid", + "readOnly": true + } + } + }, + "publicCloud.floatingIp.FloatingIPStatusEnum": { "type": "string", - "description": "Possible causes for a managed Rancher version being unavailable", + "description": "OpenStack floating IP status", "enum": [ - "CANNOT_UPGRADE_MULTIPLE_VERSIONS", - "DEPRECATED", - "DISABLED", - "END_OF_LIFE", - "END_OF_SALE", - "END_OF_SUPPORT" + "ACTIVE", + "DOWN", + "ERROR" ] }, - "time": { - "type": "string", - "description": "Time (e.g., 15:04:05)", - "format": "time", - "example": "15:04:05" - } - }, - "securitySchemes": { - "oAuth2AuthCode": { - "type": "oauth2", - "description": "Oauth2", - "x-client-id": "1bb9c7df371741c0", - "x-client-secret": "a5b4de870aca620d10fbf63cd18d205b", - "flows": { - "authorizationCode": { - "authorizationUrl": "https://www.ovh.com/auth/oauth2/authorize", - "tokenUrl": "https://www.ovh.com/auth/oauth2/token", - "scopes": { - "account/all": "Manage your account", - "all": "Manage your whole account and all your services", - "services/all": "Manage your services lifecycle and billing" - } - } - } - } - } - }, - "paths": { - "/publicCloud/project": { - "get": { - "summary": "List all Public Cloud projects", - "security": [ - { - "oAuth2AuthCode": [] - } - ], - "parameters": [ - { - "in": "header", - "name": "X-Pagination-Cursor", - "description": "Pagination cursor", - "schema": { - "type": "string" - } + "publicCloud.floatingIp.FloatingIPTargetSpec": { + "type": "object", + "description": "Desired specification for a floating IP", + "properties": { + "description": { + "type": "string", + "description": "Floating IP description", + "nullable": true }, - { - "in": "header", - "name": "X-Pagination-Size", - "description": "Pagination size", - "schema": { - "type": "integer" - } + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIPLocation" + } + ], + "description": "Target location" + } + }, + "required": [ + "location" + ] + }, + "publicCloud.floatingIp.FloatingIPUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud floating IP", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications" }, - { - "in": "query", - "name": "iamTags", - "description": "Filter resources on IAM tags", - "schema": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/iam.resource.TagFilter" - } + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIPUpdateTargetSpec" } + ], + "description": "Desired target specification for the floating IP" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.floatingIp.FloatingIPUpdateTargetSpec": { + "type": "object", + "description": "Desired specification for updating a floating IP (mutable fields only)", + "properties": { + "description": { + "type": "string", + "description": "Floating IP description" + } + }, + "required": [ + "description" + ] + }, + "publicCloud.gateway.ExternalGateway": { + "type": "object", + "description": "External gateway configuration", + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether the external gateway is enabled" + }, + "model": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.gateway.ExternalGatewayModelEnum" + } + ], + "description": "External gateway sizing model. Present only when enabled is true.", + "nullable": true + } + }, + "required": [ + "enabled" + ] + }, + "publicCloud.gateway.ExternalGatewayModelEnum": { + "type": "string", + "description": "External gateway sizing model", + "enum": [ + "2XL", + "3XL", + "L", + "M", + "S", + "XL" + ] + }, + "publicCloud.gateway.Gateway": { + "type": "object", + "description": "A Public Cloud gateway (OpenStack router)", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the gateway", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.gateway.GatewayCurrentState" + } + ], + "description": "Current state of the gateway", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the gateway", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the gateway", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Gateway readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.gateway.GatewayTargetSpec" + } + ], + "description": "Last target specification of the gateway", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the gateway", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.gateway.GatewayCreation": { + "type": "object", + "description": "Payload to create a Public Cloud gateway", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.gateway.GatewayTargetSpec" + } + ], + "description": "Desired target specification for the gateway to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.gateway.GatewayCurrentState": { + "type": "object", + "description": "Current state of a gateway from OpenStack", + "properties": { + "description": { + "type": "string", + "description": "Gateway description", + "nullable": true, + "readOnly": true + }, + "externalGateway": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.gateway.ExternalGateway" + } + ], + "description": "External gateway configuration", + "readOnly": true + }, + "externalIp": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "External IP address assigned to the gateway", + "nullable": true, + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.gateway.GatewayLocation" + } + ], + "description": "Current location", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Gateway name", + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.gateway.GatewayStatusEnum" + } + ], + "description": "OpenStack router status", + "readOnly": true + }, + "subnets": { + "type": "array", + "description": "Currently attached subnets", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.gateway.GatewaySubnet" + }, + "readOnly": true + } + } + }, + "publicCloud.gateway.GatewayLocation": { + "type": "object", + "description": "Gateway location", + "properties": { + "availabilityZone": { + "type": "string", + "description": "Availability zone within the region", + "nullable": true + }, + "region": { + "type": "string", + "description": "Region code" + } + }, + "required": [ + "region" + ] + }, + "publicCloud.gateway.GatewayStatusEnum": { + "type": "string", + "description": "OpenStack router status", + "enum": [ + "ACTIVE", + "BUILD", + "DOWN", + "ERROR" + ] + }, + "publicCloud.gateway.GatewaySubnet": { + "type": "object", + "description": "A subnet reference for a gateway", + "properties": { + "id": { + "type": "string", + "description": "Subnet ID", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.gateway.GatewayTargetSpec": { + "type": "object", + "description": "Desired specification for a gateway", + "properties": { + "description": { + "type": "string", + "description": "Gateway description", + "nullable": true + }, + "externalGateway": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.gateway.ExternalGateway" + } + ], + "description": "External gateway configuration" + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.gateway.GatewayLocation" + } + ], + "description": "Target location" + }, + "name": { + "type": "string", + "description": "Gateway name" + }, + "subnets": { + "type": "array", + "description": "Subnets to attach as router interfaces", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.gateway.GatewaySubnet" + } + } + }, + "required": [ + "externalGateway", + "location", + "name" + ] + }, + "publicCloud.gateway.GatewayUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud gateway", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.gateway.GatewayUpdateTargetSpec" + } + ], + "description": "Desired target specification for the gateway" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.gateway.GatewayUpdateTargetSpec": { + "type": "object", + "description": "Desired specification for updating a gateway (mutable fields only)", + "properties": { + "description": { + "type": "string", + "description": "Gateway description", + "nullable": true + }, + "externalGateway": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.gateway.ExternalGateway" + } + ], + "description": "External gateway configuration" + }, + "name": { + "type": "string", + "description": "Gateway name" + }, + "subnets": { + "type": "array", + "description": "Subnets to attach as router interfaces", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.gateway.GatewaySubnet" + } + } + }, + "required": [ + "externalGateway", + "name" + ] + }, + "publicCloud.instance.Autobackup": { + "type": "object", + "description": "A Public Cloud instance autobackup (Mistral crontrigger for scheduled automatic backups)", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the autobackup", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.AutobackupCurrentState" + } + ], + "description": "Current state of the autobackup", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the autobackup", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the autobackup", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Autobackup readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.AutobackupTargetSpec" + } + ], + "description": "Last target specification of the autobackup", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the autobackup", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.instance.AutobackupCreation": { + "type": "object", + "description": "Payload to create a Public Cloud instance autobackup", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.AutobackupTargetSpec" + } + ], + "description": "Desired target specification for the autobackup to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.instance.AutobackupCurrentState": { + "type": "object", + "description": "Current state of an instance autobackup as observed from the infrastructure", + "properties": { + "cron": { + "type": "string", + "description": "Cron schedule pattern", + "readOnly": true + }, + "distant": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.AutobackupDistant" + } + ], + "description": "Cross-region backup configuration", + "nullable": true, + "readOnly": true + }, + "imageName": { + "type": "string", + "description": "Backup image name prefix", + "readOnly": true + }, + "instance": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.AutobackupInstanceRef" + } + ], + "description": "Reference to the source instance", + "readOnly": true + }, + "lastExecutions": { + "type": "array", + "description": "Last 5 backup executions, newest first. Populated on GET only - null on LIST.", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.instance.AutobackupExecution" + }, + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Current location", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Crontrigger name", + "readOnly": true + }, + "nextExecutionTime": { + "type": "string", + "description": "Next scheduled execution time", + "nullable": true, + "format": "date-time", + "readOnly": true + }, + "rotation": { + "type": "integer", + "description": "Number of backup versions to keep", + "readOnly": true + }, + "workflowName": { + "type": "string", + "description": "OpenStack Mistral workflow name (e.g. ovh.backup_vm or ovh.backup_vm_remote_region)", + "readOnly": true + } + } + }, + "publicCloud.instance.AutobackupDistant": { + "type": "object", + "description": "Cross-region backup configuration for an autobackup", + "properties": { + "imageName": { + "type": "string", + "description": "Image name for cross-region backup copy" + }, + "region": { + "type": "string", + "description": "Target region for cross-region backup" + } + }, + "required": [ + "imageName", + "region" + ] + }, + "publicCloud.instance.AutobackupExecution": { + "type": "object", + "description": "A single execution of an instance autobackup, as recorded by the autobackup execution engine when the backup workflow runs", + "properties": { + "errorMessage": { + "type": "string", + "description": "Error message reported by the autobackup execution engine, populated only when state is ERROR", + "nullable": true, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Backup execution unique identifier", + "format": "uuid", + "readOnly": true + }, + "startedAt": { + "type": "string", + "description": "Timestamp when the execution started", + "nullable": true, + "format": "date-time", + "readOnly": true + }, + "state": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.AutobackupExecutionStateEnum" + } + ], + "description": "Current state of the execution", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Timestamp of the last state update reported by the autobackup execution engine", + "nullable": true, + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.instance.AutobackupExecutionStateEnum": { + "type": "string", + "description": "State of a single autobackup execution: SUCCESS when the backup completed, ERROR when it failed, RUNNING while in progress, IDLE when scheduled but not yet running.", + "enum": [ + "ERROR", + "IDLE", + "RUNNING", + "SUCCESS" + ] + }, + "publicCloud.instance.AutobackupInstanceRef": { + "type": "object", + "description": "Reference to the source instance for an autobackup", + "properties": { + "id": { + "type": "string", + "description": "Instance identifier", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.instance.AutobackupTargetSpec": { + "type": "object", + "description": "Target specification for an instance autobackup (all fields, used for creation)", + "properties": { + "cron": { + "type": "string", + "description": "Cron schedule pattern (e.g. '0 2 * * *')" + }, + "distant": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.AutobackupDistant" + } + ], + "description": "Cross-region backup configuration", + "nullable": true + }, + "imageName": { + "type": "string", + "description": "Backup image name prefix" + }, + "instance": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.AutobackupInstanceRef" + } + ], + "description": "Reference to the source instance" + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Target location" + }, + "name": { + "type": "string", + "description": "Crontrigger name" + }, + "rotation": { + "type": "integer", + "description": "Number of backup versions to keep (minimum 1)" + } + }, + "required": [ + "cron", + "imageName", + "instance", + "location", + "name", + "rotation" + ] + }, + "publicCloud.instance.Backup": { + "type": "object", + "description": "A Public Cloud instance backup (Glance image created from an instance)", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the backup", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.BackupCurrentState" + } + ], + "description": "Current state of the backup", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the backup", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the backup", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Backup readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.BackupTargetSpec" + } + ], + "description": "Last target specification of the backup", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the backup", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.instance.BackupCreation": { + "type": "object", + "description": "Payload to create a Public Cloud instance backup", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.BackupTargetSpec" + } + ], + "description": "Desired target specification for the backup to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.instance.BackupCurrentState": { + "type": "object", + "description": "Current state of an instance backup as observed from the infrastructure", + "properties": { + "instance": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.BackupInstanceRef" + } + ], + "description": "Source instance reference", + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Current location", + "readOnly": true + }, + "minDisk": { + "type": "integer", + "description": "Minimum disk size in GB required to boot", + "nullable": true, + "readOnly": true + }, + "minRam": { + "type": "integer", + "description": "Minimum RAM in MB required to boot", + "nullable": true, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Current backup name", + "readOnly": true + }, + "size": { + "type": "integer", + "description": "Image size in bytes", + "nullable": true, + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.ImageStatusEnum" + } + ], + "description": "Image status in the backend", + "readOnly": true + }, + "visibility": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.ImageVisibilityEnum" + } + ], + "description": "Image visibility", + "readOnly": true + } + } + }, + "publicCloud.instance.BackupInstanceRef": { + "type": "object", + "description": "Reference to the source instance for a backup", + "properties": { + "id": { + "type": "string", + "description": "Instance unique identifier", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.instance.BackupTargetSpec": { + "type": "object", + "description": "Target specification for an instance backup", + "properties": { + "instance": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.BackupInstanceRef" + } + ], + "description": "Source instance reference" + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Target location" + }, + "name": { + "type": "string", + "description": "Desired backup name" + } + }, + "required": [ + "instance", + "location", + "name" + ] + }, + "publicCloud.instance.ConsoleOutput": { + "type": "object", + "description": "Console output (log) retrieved from an instance", + "properties": { + "output": { + "type": "string", + "description": "The console output text", + "readOnly": true + } + } + }, + "publicCloud.instance.ImageStatusEnum": { + "type": "string", + "description": "Possible statuses for an instance image", + "enum": [ + "ACTIVE", + "DEACTIVATED", + "DELETED", + "IMPORTING", + "KILLED", + "PENDING_DELETE", + "QUEUED", + "SAVING" + ] + }, + "publicCloud.instance.ImageVisibilityEnum": { + "type": "string", + "description": "Possible visibility levels for an instance image", + "enum": [ + "COMMUNITY", + "PRIVATE", + "PUBLIC", + "SHARED" + ] + }, + "publicCloud.instance.Instance": { + "type": "object", + "description": "A Public Cloud compute instance", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the instance", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceCurrentState" + } + ], + "description": "Current state of the instance", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the instance", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the instance", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Instance readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceTargetSpec" + } + ], + "description": "Last target specification of the instance", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the instance", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.instance.InstanceActionParameters": { + "type": "object", + "description": "Optional parameters for an instance action", + "properties": { + "hard": { + "type": "boolean", + "description": "Whether to perform a hard reboot (only for REBOOT action)", + "nullable": true + }, + "imageId": { + "type": "string", + "description": "Rescue image ID (only for RESCUE action)", + "nullable": true + } + } + }, + "publicCloud.instance.InstanceActionRequest": { + "type": "object", + "description": "Payload to perform an imperative action on an instance", + "properties": { + "checksum": { + "type": "string", + "description": "Current resource checksum for optimistic concurrency control" + }, + "parameters": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceActionParameters" + } + ], + "description": "Optional parameters for the action", + "nullable": true + }, + "type": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceActionTypeEnum" + } + ], + "description": "The action to perform" + } + }, + "required": [ + "checksum", + "type" + ] + }, + "publicCloud.instance.InstanceActionTypeEnum": { + "type": "string", + "description": "Supported imperative action types for an instance", + "enum": [ + "LOCK", + "REBOOT", + "RESCUE", + "UNLOCK", + "UNRESCUE" + ] + }, + "publicCloud.instance.InstanceCreation": { + "type": "object", + "description": "Payload to create a Public Cloud instance", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceTargetSpec" + } + ], + "description": "Desired target specification for the instance to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.instance.InstanceCurrentState": { + "type": "object", + "description": "Current state details of an instance", + "properties": { + "flavor": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceFlavor" + } + ], + "description": "Flavor details", + "readOnly": true + }, + "group": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceGroupRef" + } + ], + "description": "Instance group this instance belongs to", + "nullable": true, + "readOnly": true + }, + "hostId": { + "type": "string", + "description": "Host identifier", + "nullable": true, + "readOnly": true + }, + "image": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceImage" + } + ], + "description": "Image details", + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceLocation" + } + ], + "description": "Location details", + "readOnly": true + }, + "locked": { + "type": "boolean", + "description": "Whether the instance is locked against modifications", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Instance name", + "readOnly": true + }, + "networks": { + "type": "array", + "description": "List of instance networks", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.instance.InstanceNetwork" + }, + "readOnly": true + }, + "powerState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.PowerStateEnum" + } + ], + "description": "Actual power state as reported by OpenStack", + "readOnly": true + }, + "projectId": { + "type": "string", + "description": "Project identifier", + "readOnly": true + }, + "securityGroups": { + "type": "array", + "description": "Security group references attached to the instance", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupRef" + }, + "readOnly": true + }, + "sshKeyName": { + "type": "string", + "description": "Associated SSH key name", + "nullable": true, + "readOnly": true + }, + "userId": { + "type": "string", + "description": "User identifier", + "readOnly": true + }, + "volumes": { + "type": "array", + "description": "Attached block volumes", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.instance.InstanceVolume" + }, + "readOnly": true + } + } + }, + "publicCloud.instance.InstanceFlavor": { + "type": "object", + "description": "Flavor details of an instance", + "properties": { + "disk": { + "type": "integer", + "description": "Local disk size in GB", + "readOnly": true + }, + "id": { + "type": "string", + "description": "Flavor identifier", + "format": "uuid", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Flavor name", + "readOnly": true + }, + "ram": { + "type": "integer", + "description": "RAM in MB", + "readOnly": true + }, + "vcpus": { + "type": "integer", + "description": "Number of vCPUs", + "readOnly": true + } + } + }, + "publicCloud.instance.InstanceFlavorRef": { + "type": "object", + "description": "Reference to a flavor for instance target spec", + "properties": { + "id": { + "type": "string", + "description": "Flavor identifier", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.instance.InstanceGroupRef": { + "type": "object", + "description": "Reference to an instance group", + "properties": { + "id": { + "type": "string", + "description": "Instance group identifier", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.instance.InstanceImage": { + "type": "object", + "description": "Image details of an instance", + "properties": { + "deprecated": { + "type": "boolean", + "description": "Whether the image is deprecated", + "readOnly": true + }, + "id": { + "type": "string", + "description": "Image identifier", + "format": "uuid", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Image name", + "nullable": true, + "readOnly": true + }, + "size": { + "type": "integer", + "description": "Image size in bytes", + "nullable": true, + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.ImageStatusEnum" + } + ], + "description": "Image status", + "nullable": true, + "readOnly": true + } + } + }, + "publicCloud.instance.InstanceImageRef": { + "type": "object", + "description": "Reference to an image for instance target spec", + "properties": { + "id": { + "type": "string", + "description": "Image identifier", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.instance.InstanceLocation": { + "type": "object", + "description": "Instance location", + "properties": { + "availabilityZone": { + "type": "string", + "description": "Availability zone within the region", + "nullable": true + }, + "region": { + "type": "string", + "description": "Region code" + } + }, + "required": [ + "region" + ] + }, + "publicCloud.instance.InstanceNetwork": { + "type": "object", + "description": "Network attached to the instance", + "properties": { + "addresses": { + "type": "array", + "description": "IP addresses", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.instance.InstanceNetworkAddress" + }, + "readOnly": true + }, + "floatingIpId": { + "type": "string", + "description": "Associated floating IP identifier", + "nullable": true, + "format": "uuid", + "readOnly": true + }, + "gatewayId": { + "type": "string", + "description": "Associated gateway identifier", + "nullable": true, + "format": "uuid", + "readOnly": true + }, + "id": { + "type": "string", + "description": "Network identifier", + "format": "uuid", + "readOnly": true + }, + "public": { + "type": "boolean", + "description": "True if the network is public, false if private", + "readOnly": true + }, + "subnetId": { + "type": "string", + "description": "Subnet identifier", + "nullable": true, + "format": "uuid", + "readOnly": true + } + } + }, + "publicCloud.instance.InstanceNetworkAddress": { + "type": "object", + "description": "An IP address of an instance network interface", + "properties": { + "ip": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "IP address", + "readOnly": true + }, + "mac": { + "allOf": [ + { + "$ref": "#/components/schemas/macAddress" + } + ], + "description": "MAC address", + "readOnly": true + }, + "type": { + "type": "string", + "description": "Address type (fixed, floating, ... )", + "readOnly": true + }, + "version": { + "type": "integer", + "description": "IP version", + "readOnly": true + } + } + }, + "publicCloud.instance.InstanceNetworkRef": { + "type": "object", + "description": "Reference to a network for instance target spec", + "properties": { + "floatingIpId": { + "type": "string", + "description": "Associated floating IP identifier", + "nullable": true, + "format": "uuid" + }, + "id": { + "type": "string", + "description": "Network identifier", + "nullable": true, + "format": "uuid" + }, + "public": { + "type": "boolean", + "description": "True if the network is public, false if private" + }, + "subnetId": { + "type": "string", + "description": "Subnet identifier (required for private networks)", + "nullable": true, + "format": "uuid" + } + }, + "required": [ + "public" + ] + }, + "publicCloud.instance.InstanceTargetSpec": { + "type": "object", + "description": "Target specification for an instance", + "properties": { + "flavor": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceFlavorRef" + } + ], + "description": "Flavor reference" + }, + "group": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceGroupRef" + } + ], + "description": "Instance group reference (placement policy, immutable after creation)", + "nullable": true + }, + "image": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceImageRef" + } + ], + "description": "Image reference" + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceLocation" + } + ], + "description": "Target location" + }, + "name": { + "type": "string", + "description": "Desired instance name" + }, + "networks": { + "type": "array", + "description": "Network references", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.instance.InstanceNetworkRef" + } + }, + "powerState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.PowerStateEnum" + } + ], + "description": "Desired power state (defaults to ACTIVE if omitted)", + "nullable": true + }, + "securityGroups": { + "type": "array", + "description": "Security group references to apply to all instance ports", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupRef" + } + }, + "sshKeyName": { + "type": "string", + "description": "Associated SSH key name", + "nullable": true + }, + "volumes": { + "type": "array", + "description": "Volume references", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.instance.InstanceVolumeRef" + } + } + }, + "required": [ + "flavor", + "image", + "location", + "name", + "networks", + "volumes" + ] + }, + "publicCloud.instance.InstanceUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud instance", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications; represents the current target specification value" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceUpdateTargetSpec" + } + ], + "description": "Desired target specification for the instance" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.instance.InstanceUpdateTargetSpec": { + "type": "object", + "description": "Target specification for updating an instance (location cannot be changed after creation)", + "properties": { + "flavor": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceFlavorRef" + } + ], + "description": "Flavor reference" + }, + "image": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.InstanceImageRef" + } + ], + "description": "Image reference" + }, + "name": { + "type": "string", + "description": "Desired instance name" + }, + "networks": { + "type": "array", + "description": "Network references", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.instance.InstanceNetworkRef" + } + }, + "powerState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.PowerStateEnum" + } + ], + "description": "Desired power state (defaults to ACTIVE if omitted)", + "nullable": true + }, + "securityGroups": { + "type": "array", + "description": "Security group references to apply to all instance ports", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupRef" + } + }, + "volumes": { + "type": "array", + "description": "Volume references", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.instance.InstanceVolumeRef" + } + } + }, + "required": [ + "flavor", + "image", + "name", + "networks", + "volumes" + ] + }, + "publicCloud.instance.InstanceVolume": { + "type": "object", + "description": "Volume attached to the instance", + "properties": { + "id": { + "type": "string", + "description": "Volume identifier", + "format": "uuid", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Volume name", + "readOnly": true + }, + "size": { + "type": "integer", + "description": "Volume size in GB", + "readOnly": true + } + } + }, + "publicCloud.instance.InstanceVolumeRef": { + "type": "object", + "description": "Reference to a volume for instance target spec", + "properties": { + "id": { + "type": "string", + "description": "Volume identifier", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.instance.PowerStateEnum": { + "type": "string", + "description": "Desired power state for an instance", + "enum": [ + "ACTIVE", + "RESCUE", + "SHELVED", + "SHUTOFF" + ] + }, + "publicCloud.instance.RemoteConsole": { + "type": "object", + "description": "A remote console session for an instance", + "properties": { + "protocol": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.RemoteConsoleProtocolEnum" + } + ], + "description": "The remote console protocol", + "readOnly": true + }, + "type": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.RemoteConsoleTypeEnum" + } + ], + "description": "The display type for the remote console", + "readOnly": true + }, + "url": { + "type": "string", + "description": "The URL to connect to the remote console", + "readOnly": true + } + } + }, + "publicCloud.instance.RemoteConsoleProtocolEnum": { + "type": "string", + "description": "Supported remote console protocols", + "enum": [ + "SERIAL", + "SPICE", + "VNC" + ] + }, + "publicCloud.instance.RemoteConsoleRequest": { + "type": "object", + "description": "Request payload to create a remote console session for an instance", + "properties": { + "protocol": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.RemoteConsoleProtocolEnum" + } + ], + "description": "The remote console protocol (VNC, SPICE, or SERIAL)" + }, + "type": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.RemoteConsoleTypeEnum" + } + ], + "description": "The display type for the remote console (NOVNC, XVPVNC, SPICE_HTML5, or SERIAL)" + } + }, + "required": [ + "protocol", + "type" + ] + }, + "publicCloud.instance.RemoteConsoleTypeEnum": { + "type": "string", + "description": "Supported remote console display types", + "enum": [ + "NOVNC", + "SERIAL", + "SPICE_HTML5", + "XVPVNC" + ] + }, + "publicCloud.instanceGroup.InstanceGroup": { + "type": "object", + "description": "A Public Cloud instance group (server group with placement policy)", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the instance group", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instanceGroup.InstanceGroupCurrentState" + } + ], + "description": "Current state of the instance group", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the instance group", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the instance group", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Instance group readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instanceGroup.InstanceGroupTargetSpec" + } + ], + "description": "Last target specification of the instance group", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the instance group", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.instanceGroup.InstanceGroupCreation": { + "type": "object", + "description": "Payload to create a Public Cloud instance group", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instanceGroup.InstanceGroupTargetSpec" + } + ], + "description": "Desired target specification for the instance group to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.instanceGroup.InstanceGroupCurrentState": { + "type": "object", + "description": "Current state of an instance group", + "properties": { + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Deployment location", + "readOnly": true + }, + "members": { + "type": "array", + "description": "Instances in this group", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.instanceGroup.InstanceGroupMemberRef" + }, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Instance group name", + "readOnly": true + }, + "policy": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instanceGroup.PolicyEnum" + } + ], + "description": "Placement policy", + "readOnly": true + } + } + }, + "publicCloud.instanceGroup.InstanceGroupMemberRef": { + "type": "object", + "description": "Reference to an instance member of a group", + "properties": { + "id": { + "type": "string", + "description": "Instance identifier", + "format": "uuid", + "readOnly": true + } + } + }, + "publicCloud.instanceGroup.InstanceGroupTargetSpec": { + "type": "object", + "description": "Target specification for an instance group", + "properties": { + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Target location" + }, + "name": { + "type": "string", + "description": "Instance group name" + }, + "policy": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instanceGroup.PolicyEnum" + } + ], + "description": "Placement policy" + } + }, + "required": [ + "location", + "name", + "policy" + ] + }, + "publicCloud.instanceGroup.PolicyEnum": { + "type": "string", + "description": "Placement policy for an instance group", + "enum": [ + "AFFINITY", + "ANTI_AFFINITY" + ] + }, + "publicCloud.keyManager.AlgorithmEnum": { + "type": "string", + "description": "Algorithm associated with a Key Manager secret", + "enum": [ + "AES", + "DH", + "DSA", + "EC", + "RSA" + ] + }, + "publicCloud.keyManager.BitLengthEnum": { + "type": "integer", + "description": "Bit length of a Key Manager secret", + "enum": [ + 128, + 256, + 512, + 1024, + 2048, + 4096 + ] + }, + "publicCloud.keyManager.ConsumerResourceTypeEnum": { + "type": "string", + "description": "Type of resource consuming a Key Manager secret", + "enum": [ + "IMAGE", + "INSTANCE", + "LOADBALANCER" + ] + }, + "publicCloud.keyManager.ConsumerServiceEnum": { + "type": "string", + "description": "Type of service consuming a Key Manager secret", + "enum": [ + "COMPUTE", + "IMAGE", + "LOADBALANCER", + "NETWORK" + ] + }, + "publicCloud.keyManager.Container": { + "type": "object", + "description": "A Public Cloud key manager container", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the container", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerCurrentState" + } + ], + "description": "Current observed state of the container from the infrastructure", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the container", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the container", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Container readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerTargetSpec" + } + ], + "description": "Last target specification of the container", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the container", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.keyManager.ContainerConsumer": { + "type": "object", + "description": "A consumer registered for a Key Manager container", + "properties": { + "id": { + "type": "string", + "description": "Computed consumer identifier", + "readOnly": true + }, + "resourceId": { + "type": "string", + "description": "UUID of the resource consuming the container", + "format": "uuid", + "readOnly": true + }, + "resourceType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ConsumerResourceTypeEnum" + } + ], + "description": "Type of the resource consuming the container", + "readOnly": true + }, + "service": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ConsumerServiceEnum" + } + ], + "description": "OpenStack service type of the consumer", + "readOnly": true + } + } + }, + "publicCloud.keyManager.ContainerConsumerInput": { + "type": "object", + "description": "Payload to register or unregister a consumer for a Key Manager container", + "properties": { + "resourceId": { + "type": "string", + "description": "UUID of the resource consuming the container", + "format": "uuid" + }, + "resourceType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ConsumerResourceTypeEnum" + } + ], + "description": "Type of the resource consuming the container" + }, + "service": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ConsumerServiceEnum" + } + ], + "description": "OpenStack service type of the consumer" + } + }, + "required": [ + "resourceId", + "resourceType", + "service" + ] + }, + "publicCloud.keyManager.ContainerCreation": { + "type": "object", + "description": "Payload to create a Public Cloud key manager container", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerTargetSpec" + } + ], + "description": "Desired target specification for the container" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.keyManager.ContainerCurrentState": { + "type": "object", + "description": "Current state of a key manager container as observed from the infrastructure", + "properties": { + "creatorId": { + "type": "string", + "description": "Identifier of the user who created the container", + "nullable": true, + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Current location", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Current container name", + "readOnly": true + }, + "secretRefs": { + "type": "array", + "description": "Current secret references in the container", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerSecretRef" + }, + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerStatusEnum" + } + ], + "description": "OpenStack container status", + "readOnly": true + }, + "type": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerTypeEnum" + } + ], + "description": "Current container type", + "readOnly": true + } + } + }, + "publicCloud.keyManager.ContainerSecretRef": { + "type": "object", + "description": "A secret reference within a key manager container", + "properties": { + "name": { + "type": "string", + "description": "Role name of the secret reference (e.g. private_key, certificate, public_key)" + }, + "secret": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerSecretRefSecret" + } + ], + "description": "Reference to the secret" + } + }, + "required": [ + "name", + "secret" + ] + }, + "publicCloud.keyManager.ContainerSecretRefSecret": { + "type": "object", + "description": "Reference to a secret by ID", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of the referenced secret", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.keyManager.ContainerStatusEnum": { + "type": "string", + "description": "Status of a Key Manager container in OpenStack", + "enum": [ + "ACTIVE", + "ERROR" + ] + }, + "publicCloud.keyManager.ContainerTargetSpec": { + "type": "object", + "description": "Target specification for a key manager container", + "properties": { + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Target location" + }, + "name": { + "type": "string", + "description": "Desired container name" + }, + "secretRefs": { + "type": "array", + "description": "Secret references to include in the container", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerSecretRef" + } + }, + "type": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerTypeEnum" + } + ], + "description": "Type of the container" + } + }, + "required": [ + "location", + "name", + "type" + ] + }, + "publicCloud.keyManager.ContainerTypeEnum": { + "type": "string", + "description": "Possible types for a key manager container", + "enum": [ + "CERTIFICATE", + "GENERIC", + "RSA" + ] + }, + "publicCloud.keyManager.ContainerUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud key manager container", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerUpdateTargetSpec" + } + ], + "description": "Desired target specification for the container" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.keyManager.ContainerUpdateTargetSpec": { + "type": "object", + "description": "Target specification for updating a Key Manager container (only secretRefs are mutable)", + "properties": { + "secretRefs": { + "type": "array", + "description": "Desired list of secret references. Replaces all existing references.", + "items": { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerSecretRef" + } + } + }, + "required": [ + "secretRefs" + ] + }, + "publicCloud.keyManager.ModeEnum": { + "type": "string", + "description": "Block cipher mode associated with a Key Manager secret", + "enum": [ + "CBC", + "CTR" + ] + }, + "publicCloud.keyManager.PayloadContentTypeEnum": { + "type": "string", + "description": "Content type of a Key Manager secret payload", + "enum": [ + "APPLICATION_OCTET_STREAM", + "APPLICATION_PKCS8", + "APPLICATION_PKIX_CERT", + "TEXT_PLAIN" + ] + }, + "publicCloud.keyManager.Secret": { + "type": "object", + "description": "A Public Cloud Key Manager secret", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the secret", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretCurrentState" + } + ], + "description": "Current state of the secret", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the secret", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the secret", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Secret readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretTargetSpec" + } + ], + "description": "Last target specification of the secret", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the secret", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.keyManager.SecretConsumer": { + "type": "object", + "description": "A consumer registered for a Key Manager secret", + "properties": { + "id": { + "type": "string", + "description": "Computed consumer identifier", + "readOnly": true + }, + "resourceId": { + "type": "string", + "description": "UUID of the resource consuming the secret", + "format": "uuid", + "readOnly": true + }, + "resourceType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ConsumerResourceTypeEnum" + } + ], + "description": "Type of the resource consuming the secret", + "readOnly": true + }, + "service": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ConsumerServiceEnum" + } + ], + "description": "OpenStack service type of the consumer", + "readOnly": true + } + } + }, + "publicCloud.keyManager.SecretConsumerInput": { + "type": "object", + "description": "Payload to register or unregister a consumer for a Key Manager secret", + "properties": { + "resourceId": { + "type": "string", + "description": "UUID of the resource consuming the secret", + "format": "uuid" + }, + "resourceType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ConsumerResourceTypeEnum" + } + ], + "description": "Type of the resource consuming the secret" + }, + "service": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ConsumerServiceEnum" + } + ], + "description": "OpenStack service type of the consumer" + } + }, + "required": [ + "resourceId", + "resourceType", + "service" + ] + }, + "publicCloud.keyManager.SecretCreation": { + "type": "object", + "description": "Payload to create a Key Manager secret", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretTargetSpec" + } + ], + "description": "Desired target specification for the secret to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.keyManager.SecretCurrentState": { + "type": "object", + "description": "Current state of a Key Manager secret from OpenStack", + "properties": { + "algorithm": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.AlgorithmEnum" + } + ], + "description": "Algorithm associated with the secret", + "nullable": true, + "readOnly": true + }, + "bitLength": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.BitLengthEnum" + } + ], + "description": "Bit length of the secret", + "nullable": true, + "readOnly": true + }, + "creatorId": { + "type": "string", + "description": "Identifier of the user who created the secret", + "nullable": true, + "readOnly": true + }, + "expiration": { + "type": "string", + "description": "Expiration date and time of the secret", + "nullable": true, + "format": "date-time", + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Current location of the secret", + "readOnly": true + }, + "metadata": { + "type": "object", + "description": "Key-value metadata pairs for the secret", + "nullable": true, + "additionalProperties": { + "type": "string" + }, + "readOnly": true + }, + "mode": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ModeEnum" + } + ], + "description": "Mode of the algorithm", + "nullable": true, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Human-readable name of the secret", + "nullable": true, + "readOnly": true + }, + "payloadContentType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.PayloadContentTypeEnum" + } + ], + "description": "Content type of the secret payload", + "nullable": true, + "readOnly": true + }, + "secretType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretTypeEnum" + } + ], + "description": "Type of the secret", + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretStatusEnum" + } + ], + "description": "OpenStack status of the secret", + "readOnly": true + } + } + }, + "publicCloud.keyManager.SecretPayload": { + "type": "object", + "description": "Payload content of a Key Manager secret", + "properties": { + "payload": { + "type": "string", + "description": "Secret payload data", + "format": "password", + "readOnly": true + } + } + }, + "publicCloud.keyManager.SecretStatusEnum": { + "type": "string", + "description": "Status of a Key Manager secret in OpenStack", + "enum": [ + "ACTIVE", + "ERROR" + ] + }, + "publicCloud.keyManager.SecretTargetSpec": { + "type": "object", + "description": "Desired specification for a Key Manager secret", + "properties": { + "algorithm": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.AlgorithmEnum" + } + ], + "description": "Algorithm associated with the secret", + "nullable": true + }, + "bitLength": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.BitLengthEnum" + } + ], + "description": "Bit length of the secret", + "nullable": true + }, + "expiration": { + "type": "string", + "description": "Expiration date and time of the secret", + "nullable": true, + "format": "date-time" + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Target location for the secret" + }, + "metadata": { + "type": "object", + "description": "Key-value metadata pairs for the secret", + "nullable": true, + "additionalProperties": { + "type": "string" + } + }, + "mode": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.ModeEnum" + } + ], + "description": "Mode of the algorithm", + "nullable": true + }, + "name": { + "type": "string", + "description": "Human-readable name of the secret", + "nullable": true + }, + "payload": { + "type": "string", + "description": "Secret payload data (base64-encoded). Write-only, never returned in responses. Requires payloadContentType.", + "nullable": true, + "format": "password" + }, + "payloadContentType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.PayloadContentTypeEnum" + } + ], + "description": "Content type of the secret payload", + "nullable": true + }, + "secretType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretTypeEnum" + } + ], + "description": "Type of the secret" + } + }, + "required": [ + "location", + "secretType" + ] + }, + "publicCloud.keyManager.SecretTypeEnum": { + "type": "string", + "description": "Type of a Key Manager secret", + "enum": [ + "CERTIFICATE", + "OPAQUE", + "PASSPHRASE", + "PRIVATE", + "PUBLIC", + "SYMMETRIC" + ] + }, + "publicCloud.keyManager.SecretUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud Key Manager secret", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretUpdateTargetSpec" + } + ], + "description": "Desired target specification for the secret" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.keyManager.SecretUpdateTargetSpec": { + "type": "object", + "description": "Target specification for updating a Key Manager secret (only metadata is mutable)", + "properties": { + "metadata": { + "type": "object", + "description": "Metadata key-value pairs for the secret. Replaces all existing metadata.", + "additionalProperties": { + "type": "string" + } + } + }, + "required": [ + "metadata" + ] + }, + "publicCloud.loadbalancer.HealthMonitorCurrentState": { + "type": "object", + "description": "Current state of a health monitor from OpenStack", + "properties": { + "delay": { + "type": "integer", + "description": "Time in seconds between sending health check probes to members", + "readOnly": true + }, + "domainName": { + "type": "string", + "description": "Domain name injected into the HTTP Host header", + "nullable": true, + "readOnly": true + }, + "expectedCodes": { + "type": "string", + "description": "Expected HTTP status codes for HTTP/HTTPS health checks", + "nullable": true, + "readOnly": true + }, + "httpMethod": { + "type": "string", + "description": "HTTP method used for HTTP/HTTPS health checks", + "nullable": true, + "readOnly": true + }, + "httpVersion": { + "type": "string", + "description": "HTTP version for HTTP/HTTPS health checks", + "nullable": true, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Health monitor unique identifier", + "format": "uuid", + "readOnly": true + }, + "maxRetries": { + "type": "integer", + "description": "Number of consecutive health check failures before marking a member as INACTIVE", + "readOnly": true + }, + "maxRetriesDown": { + "type": "integer", + "description": "Number of consecutive health check failures before marking a member as ERROR", + "nullable": true, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Human-readable name for the health monitor", + "nullable": true, + "readOnly": true + }, + "operatingStatus": { + "type": "string", + "description": "Operating status of the health monitor", + "nullable": true, + "readOnly": true + }, + "provisioningStatus": { + "type": "string", + "description": "Provisioning status of the health monitor", + "nullable": true, + "readOnly": true + }, + "timeout": { + "type": "integer", + "description": "Maximum time in seconds to wait for a health check reply", + "readOnly": true + }, + "type": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.HealthMonitorTypeEnum" + } + ], + "description": "Type of health check probe", + "readOnly": true + }, + "urlPath": { + "type": "string", + "description": "URI path for HTTP/HTTPS health checks", + "nullable": true, + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.HealthMonitorHttpMethodEnum": { + "type": "string", + "description": "HTTP method used by the health monitor for HTTP/HTTPS type probes", + "enum": [ + "CONNECT", + "DELETE", + "GET", + "HEAD", + "OPTIONS", + "PATCH", + "POST", + "PUT", + "TRACE" + ] + }, + "publicCloud.loadbalancer.HealthMonitorTargetSpec": { + "type": "object", + "description": "Desired specification for creating a health monitor on a pool", + "properties": { + "delay": { + "type": "integer", + "description": "Time in seconds between sending health check probes to members" + }, + "domainName": { + "type": "string", + "description": "Domain name injected into the HTTP Host header for HTTP/HTTPS health checks", + "nullable": true + }, + "expectedCodes": { + "type": "string", + "description": "Expected HTTP status codes for HTTP/HTTPS health checks (e.g. 200, 200-202, 200-202,401)", + "nullable": true + }, + "httpMethod": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.HealthMonitorHttpMethodEnum" + } + ], + "description": "HTTP method used for HTTP/HTTPS health checks", + "nullable": true + }, + "httpVersion": { + "type": "string", + "description": "HTTP version for HTTP/HTTPS health checks (1.0 or 1.1)", + "nullable": true + }, + "maxRetries": { + "type": "integer", + "description": "Number of consecutive health check failures before marking a member as INACTIVE (1-10)" + }, + "maxRetriesDown": { + "type": "integer", + "description": "Number of consecutive health check failures before marking a member as ERROR (1-10)", + "nullable": true + }, + "name": { + "type": "string", + "description": "Human-readable name for the health monitor", + "nullable": true + }, + "timeout": { + "type": "integer", + "description": "Maximum time in seconds to wait for a health check reply (must be less than or equal to delay)" + }, + "type": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.HealthMonitorTypeEnum" + } + ], + "description": "Type of health check probe (immutable after creation)" + }, + "urlPath": { + "type": "string", + "description": "URI path for HTTP/HTTPS health checks (must start with /)", + "nullable": true + } + }, + "required": [ + "delay", + "maxRetries", + "timeout", + "type" + ] + }, + "publicCloud.loadbalancer.HealthMonitorTypeEnum": { + "type": "string", + "description": "Type of health monitor probe", + "enum": [ + "HTTP", + "HTTPS", + "PING", + "SCTP", + "TCP", + "TLS_HELLO", + "UDP_CONNECT" + ] + }, + "publicCloud.loadbalancer.HealthMonitorUpdateTargetSpec": { + "type": "object", + "description": "Desired specification for updating a health monitor on a pool (excludes immutable fields)", + "properties": { + "delay": { + "type": "integer", + "description": "Time in seconds between sending health check probes to members" + }, + "domainName": { + "type": "string", + "description": "Domain name injected into the HTTP Host header for HTTP/HTTPS health checks", + "nullable": true + }, + "expectedCodes": { + "type": "string", + "description": "Expected HTTP status codes for HTTP/HTTPS health checks (e.g. 200, 200-202, 200-202,401)", + "nullable": true + }, + "httpMethod": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.HealthMonitorHttpMethodEnum" + } + ], + "description": "HTTP method used for HTTP/HTTPS health checks", + "nullable": true + }, + "httpVersion": { + "type": "string", + "description": "HTTP version for HTTP/HTTPS health checks (1.0 or 1.1)", + "nullable": true + }, + "maxRetries": { + "type": "integer", + "description": "Number of consecutive health check failures before marking a member as INACTIVE (1-10)" + }, + "maxRetriesDown": { + "type": "integer", + "description": "Number of consecutive health check failures before marking a member as ERROR (1-10)", + "nullable": true + }, + "name": { + "type": "string", + "description": "Human-readable name for the health monitor", + "nullable": true + }, + "timeout": { + "type": "integer", + "description": "Maximum time in seconds to wait for a health check reply (must be less than or equal to delay)" + }, + "urlPath": { + "type": "string", + "description": "URI path for HTTP/HTTPS health checks (must start with /)", + "nullable": true + } + }, + "required": [ + "delay", + "maxRetries", + "timeout" + ] + }, + "publicCloud.loadbalancer.L7Policy": { + "type": "object", + "description": "A Public Cloud load balancer L7 policy", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the L7 policy", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7PolicyCurrentState" + } + ], + "description": "Current state of the L7 policy", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the L7 policy", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the L7 policy", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "L7 policy readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7PolicyTargetSpec" + } + ], + "description": "Last target specification of the L7 policy", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the L7 policy", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.L7PolicyActionEnum": { + "type": "string", + "description": "Action to take when an L7 policy matches", + "enum": [ + "REDIRECT_PREFIX", + "REDIRECT_TO_POOL", + "REDIRECT_TO_URL", + "REJECT" + ] + }, + "publicCloud.loadbalancer.L7PolicyCreation": { + "type": "object", + "description": "Payload to create a Public Cloud load balancer L7 policy", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7PolicyTargetSpec" + } + ], + "description": "Desired target specification for the L7 policy to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.loadbalancer.L7PolicyCurrentState": { + "type": "object", + "description": "Current state of an L7 policy from OpenStack", + "properties": { + "action": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7PolicyActionEnum" + } + ], + "description": "Action taken when the policy matches", + "readOnly": true + }, + "description": { + "type": "string", + "description": "Description of the L7 policy", + "nullable": true, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Human-readable name of the L7 policy", + "nullable": true, + "readOnly": true + }, + "operatingStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerOperatingStatusEnum" + } + ], + "description": "Operating status of the L7 policy", + "nullable": true, + "readOnly": true + }, + "position": { + "type": "integer", + "description": "Evaluation position of this policy relative to other policies", + "nullable": true, + "readOnly": true + }, + "provisioningStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerProvisioningStatusEnum" + } + ], + "description": "Provisioning status of the L7 policy in OpenStack", + "nullable": true, + "readOnly": true + }, + "redirectHttpCode": { + "type": "integer", + "description": "HTTP status code used for redirect responses", + "nullable": true, + "readOnly": true + }, + "redirectPool": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7PolicyRedirectPoolDetail" + } + ], + "description": "Pool traffic is redirected to", + "nullable": true, + "readOnly": true + }, + "redirectPrefix": { + "type": "string", + "description": "URL prefix requests are redirected to", + "nullable": true, + "readOnly": true + }, + "redirectUrl": { + "type": "string", + "description": "URL requests are redirected to", + "nullable": true, + "readOnly": true + }, + "rules": { + "type": "array", + "description": "L7 rules associated with this policy", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7RuleState" + }, + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.L7PolicyRedirectPoolDetail": { + "type": "object", + "description": "Pool details for an L7 policy redirect in current state", + "properties": { + "id": { + "type": "string", + "description": "Identifier of the pool traffic is redirected to", + "format": "uuid", + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.L7PolicyRedirectPoolRef": { + "type": "object", + "description": "Reference to a pool for L7 policy redirect", + "properties": { + "id": { + "type": "string", + "description": "Identifier of the pool to redirect traffic to", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.loadbalancer.L7PolicyTargetSpec": { + "type": "object", + "description": "Desired specification for creating an L7 policy", + "properties": { + "action": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7PolicyActionEnum" + } + ], + "description": "Action to take when the policy matches (REDIRECT_PREFIX, REDIRECT_TO_POOL, REDIRECT_TO_URL, REJECT)" + }, + "description": { + "type": "string", + "description": "Description of the L7 policy", + "nullable": true + }, + "name": { + "type": "string", + "description": "Human-readable name of the L7 policy", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Evaluation position of this policy relative to other policies (starting at 1)", + "nullable": true + }, + "redirectHttpCode": { + "type": "integer", + "description": "HTTP status code used for redirect responses (e.g. 301, 302, 303, 307, 308)", + "nullable": true + }, + "redirectPool": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7PolicyRedirectPoolRef" + } + ], + "description": "Reference to the pool to redirect traffic to (for REDIRECT_TO_POOL action)", + "nullable": true + }, + "redirectPrefix": { + "type": "string", + "description": "URL prefix to redirect requests to (for REDIRECT_PREFIX action)", + "nullable": true + }, + "redirectUrl": { + "type": "string", + "description": "URL to redirect requests to (for REDIRECT_TO_URL action)", + "nullable": true + }, + "rules": { + "type": "array", + "description": "L7 rules that determine when this policy matches", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7RuleSpec" + } + } + }, + "required": [ + "action" + ] + }, + "publicCloud.loadbalancer.L7PolicyUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud load balancer L7 policy", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7PolicyUpdateTargetSpec" + } + ], + "description": "Desired target specification for the L7 policy" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.loadbalancer.L7PolicyUpdateTargetSpec": { + "type": "object", + "description": "Updatable specification for an L7 policy (all fields are mutable)", + "properties": { + "action": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7PolicyActionEnum" + } + ], + "description": "Action to take when the policy matches (determines which redirect fields are valid)" + }, + "description": { + "type": "string", + "description": "Description of the L7 policy", + "nullable": true + }, + "name": { + "type": "string", + "description": "Human-readable name of the L7 policy", + "nullable": true + }, + "position": { + "type": "integer", + "description": "Evaluation position of this policy relative to other policies (starting at 1)", + "nullable": true + }, + "redirectHttpCode": { + "type": "integer", + "description": "HTTP status code used for redirect responses (e.g. 301, 302, 303, 307, 308)", + "nullable": true + }, + "redirectPool": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7PolicyRedirectPoolRef" + } + ], + "description": "Reference to the pool to redirect traffic to (for REDIRECT_TO_POOL action)", + "nullable": true + }, + "redirectPrefix": { + "type": "string", + "description": "URL prefix to redirect requests to (for REDIRECT_PREFIX action)", + "nullable": true + }, + "redirectUrl": { + "type": "string", + "description": "URL to redirect requests to (for REDIRECT_TO_URL action)", + "nullable": true + }, + "rules": { + "type": "array", + "description": "L7 rules that determine when this policy matches", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7RuleSpec" + } + } + }, + "required": [ + "action" + ] + }, + "publicCloud.loadbalancer.L7RuleCompareTypeEnum": { + "type": "string", + "description": "Comparison method for an L7 rule", + "enum": [ + "CONTAINS", + "ENDS_WITH", + "EQUAL_TO", + "REGEX", + "STARTS_WITH" + ] + }, + "publicCloud.loadbalancer.L7RuleSpec": { + "type": "object", + "description": "Desired specification for an L7 rule embedded in an L7 policy", + "properties": { + "compareType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7RuleCompareTypeEnum" + } + ], + "description": "Comparison method for matching the value" + }, + "invert": { + "type": "boolean", + "description": "When true, inverts the logic of the rule (matches when the rule does not match)", + "nullable": true + }, + "key": { + "type": "string", + "description": "Key to use for the comparison (required for COOKIE and HEADER rule types)", + "nullable": true + }, + "type": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7RuleTypeEnum" + } + ], + "description": "Type of attribute to match (COOKIE, FILE_TYPE, HEADER, HOST_NAME, PATH)" + }, + "value": { + "type": "string", + "description": "Value to compare against the attribute" + } + }, + "required": [ + "compareType", + "type", + "value" + ] + }, + "publicCloud.loadbalancer.L7RuleState": { + "type": "object", + "description": "Current state of an L7 rule from OpenStack", + "properties": { + "compareType": { + "type": "string", + "description": "Comparison method used for matching", + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the L7 rule", + "format": "uuid", + "readOnly": true + }, + "invert": { + "type": "boolean", + "description": "Whether the rule logic is inverted", + "nullable": true, + "readOnly": true + }, + "key": { + "type": "string", + "description": "Key used for the comparison (for COOKIE and HEADER rule types)", + "nullable": true, + "readOnly": true + }, + "operatingStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerOperatingStatusEnum" + } + ], + "description": "Operating status of the L7 rule", + "nullable": true, + "readOnly": true + }, + "provisioningStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerProvisioningStatusEnum" + } + ], + "description": "Provisioning status of the L7 rule in OpenStack", + "nullable": true, + "readOnly": true + }, + "type": { + "type": "string", + "description": "Type of attribute matched by the rule", + "readOnly": true + }, + "value": { + "type": "string", + "description": "Value compared against the attribute", + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.L7RuleTypeEnum": { + "type": "string", + "description": "Type of attribute to match in an L7 rule", + "enum": [ + "COOKIE", + "FILE_TYPE", + "HEADER", + "HOST_NAME", + "PATH" + ] + }, + "publicCloud.loadbalancer.Listener": { + "type": "object", + "description": "A Public Cloud load balancer listener", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the listener", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerCurrentState" + } + ], + "description": "Current state of the listener", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the listener", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the listener", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Listener readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerTargetSpec" + } + ], + "description": "Last target specification of the listener", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the listener", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.ListenerCreation": { + "type": "object", + "description": "Payload to create a Public Cloud load balancer listener", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerTargetSpec" + } + ], + "description": "Desired target specification for the listener to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.loadbalancer.ListenerCurrentState": { + "type": "object", + "description": "Current state of a load balancer listener from OpenStack", + "properties": { + "allowedCidrs": { + "type": "array", + "description": "CIDR blocks allowed to connect to this listener", + "nullable": true, + "items": { + "type": "string" + }, + "readOnly": true + }, + "connectionLimit": { + "type": "integer", + "description": "Maximum number of connections permitted for this listener (-1 for unlimited)", + "nullable": true, + "readOnly": true + }, + "defaultPool": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerDefaultPoolDetail" + } + ], + "description": "Default pool that handles traffic for this listener", + "nullable": true, + "readOnly": true + }, + "defaultTlsContainerRef": { + "type": "string", + "description": "Reference to the default TLS certificate container", + "nullable": true, + "readOnly": true + }, + "description": { + "type": "string", + "description": "Listener description", + "nullable": true, + "readOnly": true + }, + "insertHeaders": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerInsertHeaders" + } + ], + "description": "Headers inserted into requests before forwarding to backend members", + "nullable": true, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Listener name", + "readOnly": true + }, + "operatingStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerOperatingStatusEnum" + } + ], + "description": "Operating status", + "readOnly": true + }, + "protocol": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerProtocolEnum" + } + ], + "description": "Protocol of the listener", + "readOnly": true + }, + "protocolPort": { + "type": "integer", + "description": "Port on which the listener accepts traffic", + "readOnly": true + }, + "provisioningStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerProvisioningStatusEnum" + } + ], + "description": "Provisioning status in OpenStack", + "readOnly": true + }, + "sniContainerRefs": { + "type": "array", + "description": "References to TLS certificate containers for SNI", + "nullable": true, + "items": { + "type": "string" + }, + "readOnly": true + }, + "timeoutClientData": { + "type": "integer", + "description": "Frontend client inactivity timeout in milliseconds", + "nullable": true, + "readOnly": true + }, + "timeoutMemberConnect": { + "type": "integer", + "description": "Backend member connection timeout in milliseconds", + "nullable": true, + "readOnly": true + }, + "timeoutMemberData": { + "type": "integer", + "description": "Backend member inactivity timeout in milliseconds", + "nullable": true, + "readOnly": true + }, + "timeoutTcpInspect": { + "type": "integer", + "description": "Time in milliseconds to wait for additional TCP packets for content inspection", + "nullable": true, + "readOnly": true + }, + "tlsVersions": { + "type": "array", + "description": "List of TLS protocol versions allowed", + "nullable": true, + "items": { + "type": "string" + }, + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.ListenerDefaultPoolDetail": { + "type": "object", + "description": "Default pool details for a listener in current state", + "properties": { + "id": { + "type": "string", + "description": "Identifier of the default pool for this listener", + "format": "uuid", + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.ListenerDefaultPoolRef": { + "type": "object", + "description": "Reference to a default pool for a listener", + "properties": { + "id": { + "type": "string", + "description": "Identifier of the default pool for this listener", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.loadbalancer.ListenerInsertHeaders": { + "type": "object", + "description": "Headers that the load balancer inserts into requests before forwarding to backend members", + "properties": { + "xForwardedFor": { + "type": "boolean", + "description": "When true, inserts X-Forwarded-For header with the client IP address", + "nullable": true + }, + "xForwardedPort": { + "type": "boolean", + "description": "When true, inserts X-Forwarded-Port header with the listener port", + "nullable": true + }, + "xForwardedProto": { + "type": "boolean", + "description": "When true, inserts X-Forwarded-Proto header with the listener protocol", + "nullable": true + }, + "xSslClientDn": { + "type": "boolean", + "description": "When true, inserts X-SSL-Client-DN header with the client certificate distinguished name", + "nullable": true + }, + "xSslClientHasCert": { + "type": "boolean", + "description": "When true, inserts X-SSL-Client-Has-Cert header indicating whether a client certificate is presented", + "nullable": true + }, + "xSslClientVerify": { + "type": "boolean", + "description": "When true, inserts X-SSL-Client-Verify header with the client certificate verification result", + "nullable": true + } + } + }, + "publicCloud.loadbalancer.ListenerProtocolEnum": { + "type": "string", + "description": "Protocol of a load balancer listener", + "enum": [ + "HTTP", + "HTTPS", + "SCTP", + "TCP", + "TERMINATED_HTTPS", + "UDP" + ] + }, + "publicCloud.loadbalancer.ListenerPutTargetSpec": { + "type": "object", + "description": "Desired specification for updating a load balancer listener (excludes immutable fields)", + "properties": { + "allowedCidrs": { + "type": "array", + "description": "CIDR blocks allowed to connect to this listener", + "nullable": true, + "items": { + "$ref": "#/components/schemas/ipBlock" + } + }, + "connectionLimit": { + "type": "integer", + "description": "Maximum number of connections permitted for this listener (-1 for unlimited)", + "nullable": true + }, + "defaultPool": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerDefaultPoolRef" + } + ], + "description": "Reference to the default pool that handles traffic for this listener", + "nullable": true + }, + "defaultTlsContainerRef": { + "type": "string", + "description": "Reference to the default TLS certificate container (for TERMINATED_HTTPS)", + "nullable": true + }, + "description": { + "type": "string", + "description": "Listener description", + "nullable": true + }, + "insertHeaders": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerInsertHeaders" + } + ], + "description": "Optional headers to insert into requests before forwarding to backend members", + "nullable": true + }, + "name": { + "type": "string", + "description": "Listener name" + }, + "sniContainerRefs": { + "type": "array", + "description": "References to TLS certificate containers for SNI (for TERMINATED_HTTPS)", + "nullable": true, + "items": { + "type": "string" + } + }, + "timeoutClientData": { + "type": "integer", + "description": "Frontend client inactivity timeout in milliseconds", + "nullable": true + }, + "timeoutMemberConnect": { + "type": "integer", + "description": "Backend member connection timeout in milliseconds", + "nullable": true + }, + "timeoutMemberData": { + "type": "integer", + "description": "Backend member inactivity timeout in milliseconds", + "nullable": true + }, + "timeoutTcpInspect": { + "type": "integer", + "description": "Time in milliseconds to wait for additional TCP packets for content inspection", + "nullable": true + }, + "tlsVersions": { + "type": "array", + "description": "List of TLS protocol versions allowed (e.g. TLSv1.2, TLSv1.3)", + "nullable": true, + "items": { + "type": "string" + } + } + }, + "required": [ + "name" + ] + }, + "publicCloud.loadbalancer.ListenerTargetSpec": { + "type": "object", + "description": "Desired specification for creating a load balancer listener", + "properties": { + "allowedCidrs": { + "type": "array", + "description": "CIDR blocks allowed to connect to this listener", + "nullable": true, + "items": { + "$ref": "#/components/schemas/ipBlock" + } + }, + "connectionLimit": { + "type": "integer", + "description": "Maximum number of connections permitted for this listener (-1 for unlimited)", + "nullable": true + }, + "defaultPool": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerDefaultPoolRef" + } + ], + "description": "Reference to the default pool that handles traffic for this listener", + "nullable": true + }, + "defaultTlsContainerRef": { + "type": "string", + "description": "Reference to the default TLS certificate container (for TERMINATED_HTTPS)", + "nullable": true + }, + "description": { + "type": "string", + "description": "Listener description", + "nullable": true + }, + "insertHeaders": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerInsertHeaders" + } + ], + "description": "Optional headers to insert into requests before forwarding to backend members", + "nullable": true + }, + "name": { + "type": "string", + "description": "Listener name" + }, + "protocol": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerProtocolEnum" + } + ], + "description": "Protocol of the listener" + }, + "protocolPort": { + "type": "integer", + "description": "Port on which the listener accepts traffic" + }, + "sniContainerRefs": { + "type": "array", + "description": "References to TLS certificate containers for SNI (for TERMINATED_HTTPS)", + "nullable": true, + "items": { + "type": "string" + } + }, + "timeoutClientData": { + "type": "integer", + "description": "Frontend client inactivity timeout in milliseconds", + "nullable": true + }, + "timeoutMemberConnect": { + "type": "integer", + "description": "Backend member connection timeout in milliseconds", + "nullable": true + }, + "timeoutMemberData": { + "type": "integer", + "description": "Backend member inactivity timeout in milliseconds", + "nullable": true + }, + "timeoutTcpInspect": { + "type": "integer", + "description": "Time in milliseconds to wait for additional TCP packets for content inspection", + "nullable": true + }, + "tlsVersions": { + "type": "array", + "description": "List of TLS protocol versions allowed (e.g. TLSv1.2, TLSv1.3)", + "nullable": true, + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "protocol", + "protocolPort" + ] + }, + "publicCloud.loadbalancer.ListenerUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud load balancer listener", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerPutTargetSpec" + } + ], + "description": "Desired target specification for the listener" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.loadbalancer.Loadbalancer": { + "type": "object", + "description": "A Public Cloud load balancer", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the load balancer", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerCurrentState" + } + ], + "description": "Current state of the load balancer", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the load balancer", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the load balancer", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Load balancer readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerTargetSpec" + } + ], + "description": "Last target specification of the load balancer", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the load balancer", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.LoadbalancerCreation": { + "type": "object", + "description": "Payload to create a Public Cloud load balancer", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerTargetSpec" + } + ], + "description": "Desired target specification for the load balancer to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.loadbalancer.LoadbalancerCurrentState": { + "type": "object", + "description": "Current state of a load balancer from OpenStack", + "properties": { + "description": { + "type": "string", + "description": "Load balancer description", + "readOnly": true + }, + "flavor": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerFlavorRef" + } + ], + "description": "Octavia flavor", + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Location details", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Load balancer name", + "readOnly": true + }, + "operatingStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerOperatingStatusEnum" + } + ], + "description": "Operating status", + "readOnly": true + }, + "provisioningStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerProvisioningStatusEnum" + } + ], + "description": "Provisioning status in OpenStack", + "readOnly": true + }, + "vipAddress": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "Virtual IP address", + "readOnly": true + }, + "vipNetwork": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerNetworkRef" + } + ], + "description": "Network of the VIP", + "readOnly": true + }, + "vipSubnet": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerSubnetRef" + } + ], + "description": "Subnet of the VIP", + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.LoadbalancerFlavorNameEnum": { + "type": "string", + "description": "Available Octavia load balancer flavor names", + "enum": [ + "LARGE", + "MEDIUM", + "SMALL", + "XL" + ] + }, + "publicCloud.loadbalancer.LoadbalancerFlavorRef": { + "type": "object", + "description": "Reference to an Octavia flavor by name", + "properties": { + "name": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerFlavorNameEnum" + } + ], + "description": "Octavia flavor name" + } + }, + "required": [ + "name" + ] + }, + "publicCloud.loadbalancer.LoadbalancerNetworkRef": { + "type": "object", + "description": "Reference to a network", + "properties": { + "id": { + "type": "string", + "description": "Network identifier", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.loadbalancer.LoadbalancerOperatingStatusEnum": { + "type": "string", + "description": "Operating status of a load balancer", + "enum": [ + "DEGRADED", + "DRAINING", + "ERROR", + "NO_MONITOR", + "OFFLINE", + "ONLINE" + ] + }, + "publicCloud.loadbalancer.LoadbalancerProvisioningStatusEnum": { + "type": "string", + "description": "Provisioning status of a load balancer in OpenStack", + "enum": [ + "ACTIVE", + "DELETED", + "ERROR", + "PENDING_CREATE", + "PENDING_DELETE", + "PENDING_UPDATE" + ] + }, + "publicCloud.loadbalancer.LoadbalancerPutTargetSpec": { + "type": "object", + "description": "Desired specification for updating a load balancer (excludes immutable fields)", + "properties": { + "description": { + "type": "string", + "description": "Load balancer description", + "nullable": true + }, + "name": { + "type": "string", + "description": "Load balancer name" + } + }, + "required": [ + "name" + ] + }, + "publicCloud.loadbalancer.LoadbalancerSubnetRef": { + "type": "object", + "description": "Reference to a subnet", + "properties": { + "id": { + "type": "string", + "description": "Subnet identifier", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.loadbalancer.LoadbalancerTargetSpec": { + "type": "object", + "description": "Desired specification for a load balancer", + "properties": { + "description": { + "type": "string", + "description": "Load balancer description", + "nullable": true + }, + "flavor": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerFlavorRef" + } + ], + "description": "Octavia flavor reference" + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Target location" + }, + "name": { + "type": "string", + "description": "Load balancer name" + }, + "vipNetwork": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerNetworkRef" + } + ], + "description": "Network for VIP allocation" + }, + "vipSubnet": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerSubnetRef" + } + ], + "description": "Subnet for VIP allocation" + } + }, + "required": [ + "flavor", + "location", + "name", + "vipNetwork", + "vipSubnet" + ] + }, + "publicCloud.loadbalancer.LoadbalancerUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud load balancer", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerPutTargetSpec" + } + ], + "description": "Desired target specification for the load balancer" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.loadbalancer.Member": { + "type": "object", + "description": "A Public Cloud load balancer pool member", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the member", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.MemberCurrentState" + } + ], + "description": "Current state of the member", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the member", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the member", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Member readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.MemberTargetSpec" + } + ], + "description": "Last target specification of the member", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the member", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.MemberCreation": { + "type": "object", + "description": "Payload to create a Public Cloud load balancer pool member", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.MemberTargetSpec" + } + ], + "description": "Desired target specification for the member to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.loadbalancer.MemberCurrentState": { + "type": "object", + "description": "Current state of a load balancer pool member from OpenStack", + "properties": { + "address": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "IP address of the member backend server", + "readOnly": true + }, + "backup": { + "type": "boolean", + "description": "Whether this is a backup member", + "nullable": true, + "readOnly": true + }, + "monitor": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.MemberMonitor" + } + ], + "description": "Alternate address and port for health monitoring. If not specified, the member address and protocol port will be used for health monitoring", + "nullable": true, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Member name", + "readOnly": true + }, + "operatingStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerOperatingStatusEnum" + } + ], + "description": "Operating status", + "readOnly": true + }, + "protocolPort": { + "type": "integer", + "description": "Port the member backend server listens on", + "readOnly": true + }, + "provisioningStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerProvisioningStatusEnum" + } + ], + "description": "Provisioning status in OpenStack", + "readOnly": true + }, + "subnet": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerSubnetRef" + } + ], + "description": "Subnet reference for the member", + "nullable": true, + "readOnly": true + }, + "weight": { + "type": "integer", + "description": "Weight for load balancing", + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.MemberMonitor": { + "type": "object", + "description": "Alternate address and port for health monitoring of a pool member", + "properties": { + "address": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "Alternate IP address for health monitoring", + "nullable": true + }, + "port": { + "type": "integer", + "description": "Alternate port for health monitoring", + "nullable": true + } + } + }, + "publicCloud.loadbalancer.MemberTargetSpec": { + "type": "object", + "description": "Desired specification for creating a load balancer pool member", + "properties": { + "address": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "IP address of the member backend server" + }, + "backup": { + "type": "boolean", + "description": "Whether this is a backup member", + "nullable": true + }, + "monitor": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.MemberMonitor" + } + ], + "description": "Alternate address and port for health monitoring. If not specified, the member address and protocol port will be used for health monitoring", + "nullable": true + }, + "name": { + "type": "string", + "description": "Member name", + "nullable": true + }, + "protocolPort": { + "type": "integer", + "description": "Port the member backend server listens on" + }, + "subnet": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerSubnetRef" + } + ], + "description": "Subnet reference for the member", + "nullable": true + }, + "weight": { + "type": "integer", + "description": "Weight for load balancing (1-256)", + "nullable": true + } + }, + "required": [ + "address", + "protocolPort" + ] + }, + "publicCloud.loadbalancer.MemberUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud load balancer pool member", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.MemberUpdateTargetSpec" + } + ], + "description": "Desired target specification for the member" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.loadbalancer.MemberUpdateTargetSpec": { + "type": "object", + "description": "Desired specification for updating a load balancer pool member (excludes immutable fields)", + "properties": { + "backup": { + "type": "boolean", + "description": "Whether this is a backup member", + "nullable": true + }, + "monitor": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.MemberMonitor" + } + ], + "description": "Alternate address and port for health monitoring. If not specified, the member address and protocol port will be used for health monitoring", + "nullable": true + }, + "name": { + "type": "string", + "description": "Member name", + "nullable": true + }, + "weight": { + "type": "integer", + "description": "Weight for load balancing (1-256)", + "nullable": true + } + } + }, + "publicCloud.loadbalancer.Pool": { + "type": "object", + "description": "A Public Cloud load balancer pool", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the pool", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.PoolCurrentState" + } + ], + "description": "Current state of the pool", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the pool", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the pool", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Pool readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.PoolTargetSpec" + } + ], + "description": "Last target specification of the pool", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the pool", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.PoolAlgorithmEnum": { + "type": "string", + "description": "Load balancing algorithm for a pool", + "enum": [ + "LEAST_CONNECTIONS", + "ROUND_ROBIN", + "SOURCE_IP", + "SOURCE_IP_PORT" + ] + }, + "publicCloud.loadbalancer.PoolCreation": { + "type": "object", + "description": "Payload to create a Public Cloud load balancer pool", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.PoolTargetSpec" + } + ], + "description": "Desired target specification for the pool to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.loadbalancer.PoolCurrentState": { + "type": "object", + "description": "Current state of a load balancer pool from OpenStack", + "properties": { + "algorithm": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.PoolAlgorithmEnum" + } + ], + "description": "Load balancing algorithm", + "readOnly": true + }, + "description": { + "type": "string", + "description": "Pool description", + "nullable": true, + "readOnly": true + }, + "healthMonitor": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.HealthMonitorCurrentState" + } + ], + "description": "Health monitor associated with this pool", + "nullable": true, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Pool name", + "nullable": true, + "readOnly": true + }, + "operatingStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerOperatingStatusEnum" + } + ], + "description": "Operating status", + "readOnly": true + }, + "persistence": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.SessionPersistence" + } + ], + "description": "Session persistence configuration", + "nullable": true, + "readOnly": true + }, + "protocol": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.PoolProtocolEnum" + } + ], + "description": "Protocol of the pool", + "readOnly": true + }, + "provisioningStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerProvisioningStatusEnum" + } + ], + "description": "Provisioning status in OpenStack", + "readOnly": true + } + } + }, + "publicCloud.loadbalancer.PoolProtocolEnum": { + "type": "string", + "description": "Protocol of a load balancer pool", + "enum": [ + "HTTP", + "HTTPS", + "PROXY", + "PROXYV2", + "SCTP", + "TCP", + "UDP" + ] + }, + "publicCloud.loadbalancer.PoolTargetSpec": { + "type": "object", + "description": "Desired specification for creating a load balancer pool", + "properties": { + "algorithm": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.PoolAlgorithmEnum" + } + ], + "description": "Load balancing algorithm" + }, + "description": { + "type": "string", + "description": "Pool description", + "nullable": true + }, + "healthMonitor": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.HealthMonitorTargetSpec" + } + ], + "description": "Health monitor configuration for this pool", + "nullable": true + }, + "name": { + "type": "string", + "description": "Pool name", + "nullable": true + }, + "persistence": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.SessionPersistence" + } + ], + "description": "Session persistence configuration", + "nullable": true + }, + "protocol": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.PoolProtocolEnum" + } + ], + "description": "Protocol of the pool" + } + }, + "required": [ + "algorithm", + "protocol" + ] + }, + "publicCloud.loadbalancer.PoolUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud load balancer pool", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.PoolUpdateTargetSpec" + } + ], + "description": "Desired target specification for the pool" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.loadbalancer.PoolUpdateTargetSpec": { + "type": "object", + "description": "Desired specification for updating a load balancer pool (excludes immutable fields)", + "properties": { + "algorithm": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.PoolAlgorithmEnum" + } + ], + "description": "Load balancing algorithm" + }, + "description": { + "type": "string", + "description": "Pool description", + "nullable": true + }, + "healthMonitor": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.HealthMonitorUpdateTargetSpec" + } + ], + "description": "Health monitor configuration for this pool", + "nullable": true + }, + "name": { + "type": "string", + "description": "Pool name", + "nullable": true + }, + "persistence": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.SessionPersistence" + } + ], + "description": "Session persistence configuration", + "nullable": true + } + }, + "required": [ + "algorithm" + ] + }, + "publicCloud.loadbalancer.SessionPersistence": { + "type": "object", + "description": "Session persistence configuration for a load balancer pool", + "properties": { + "cookieName": { + "type": "string", + "description": "Name of the cookie for HTTP_COOKIE or APP_COOKIE persistence types", + "nullable": true + }, + "type": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.loadbalancer.SessionPersistenceTypeEnum" + } + ], + "description": "Type of session persistence" + } + }, + "required": [ + "type" + ] + }, + "publicCloud.loadbalancer.SessionPersistenceTypeEnum": { + "type": "string", + "description": "Type of session persistence for a load balancer pool", + "enum": [ + "APP_COOKIE", + "HTTP_COOKIE", + "SOURCE_IP" + ] + }, + "publicCloud.network.Network": { + "type": "object", + "description": "A Public Cloud network", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the network", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.network.NetworkCurrentState" + } + ], + "description": "Current state of the network", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the network", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the network", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Network readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.network.NetworkTargetSpec" + } + ], + "description": "Last target specification of the network", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the network", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.network.NetworkCreation": { + "type": "object", + "description": "Payload to create a Public Cloud network", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.network.NetworkTargetSpec" + } + ], + "description": "Desired target specification for the network to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.network.NetworkCurrentState": { + "type": "object", + "description": "Current state of a network from OpenStack", + "properties": { + "description": { + "type": "string", + "description": "Network description", + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Location details", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Network name", + "readOnly": true + } + } + }, + "publicCloud.network.NetworkPutTargetSpec": { + "type": "object", + "description": "Desired specification for updating a network (excludes immutable fields)", + "properties": { + "name": { + "type": "string", + "description": "Network name" + } + }, + "required": [ + "name" + ] + }, + "publicCloud.network.NetworkTargetSpec": { + "type": "object", + "description": "Desired specification for a network", + "properties": { + "description": { + "type": "string", + "description": "Network description", + "nullable": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Target location" + }, + "name": { + "type": "string", + "description": "Network name" + } + }, + "required": [ + "location", + "name" + ] + }, + "publicCloud.network.NetworkUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud network", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.network.NetworkPutTargetSpec" + } + ], + "description": "Desired target specification for the network" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.network.Subnet": { + "type": "object", + "description": "A Public Cloud subnet", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the subnet", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.network.SubnetCurrentState" + } + ], + "description": "Current state of the subnet", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the subnet", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the subnet", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Subnet readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.network.SubnetTargetSpec" + } + ], + "description": "Last target specification of the subnet", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the subnet", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.network.SubnetAllocationPool": { + "type": "object", + "description": "IP address pool for dynamic allocation within a subnet", + "properties": { + "end": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "End IP address of the pool" + }, + "start": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "Start IP address of the pool" + } + }, + "required": [ + "end", + "start" + ] + }, + "publicCloud.network.SubnetCreation": { + "type": "object", + "description": "Payload to create a Public Cloud subnet", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.network.SubnetTargetSpec" + } + ], + "description": "Desired target specification for the subnet to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.network.SubnetCurrentState": { + "type": "object", + "description": "Current state of a subnet from OpenStack", + "properties": { + "allocationPools": { + "type": "array", + "description": "Allocation pools", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.network.SubnetAllocationPool" + }, + "readOnly": true + }, + "cidr": { + "allOf": [ + { + "$ref": "#/components/schemas/ipBlock" + } + ], + "description": "CIDR address range", + "readOnly": true + }, + "description": { + "type": "string", + "description": "Subnet description", + "readOnly": true + }, + "dhcpEnabled": { + "type": "boolean", + "description": "Whether DHCP is enabled", + "readOnly": true + }, + "dnsNameservers": { + "type": "array", + "description": "DNS nameservers", + "nullable": true, + "items": { + "type": "string" + }, + "readOnly": true + }, + "gatewayIp": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "Default gateway IP", + "nullable": true, + "readOnly": true + }, + "hostRoutes": { + "type": "array", + "description": "Static host routes", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.network.SubnetHostRoute" + }, + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Location details", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Subnet name", + "readOnly": true + } + } + }, + "publicCloud.network.SubnetHostRoute": { + "type": "object", + "description": "Static host route for devices in a subnet", + "properties": { + "destination": { + "allOf": [ + { + "$ref": "#/components/schemas/ipBlock" + } + ], + "description": "Destination CIDR", + "readOnly": true + }, + "nextHop": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "Next hop IP address", + "readOnly": true + } + } + }, + "publicCloud.network.SubnetPutTargetSpec": { + "type": "object", + "description": "Desired specification for updating a subnet (excludes immutable fields)", + "properties": { + "allocationPools": { + "type": "array", + "description": "IP address allocation pools", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.network.SubnetAllocationPool" + } + }, + "description": { + "type": "string", + "description": "Subnet description", + "nullable": true + }, + "dhcpEnabled": { + "type": "boolean", + "description": "Whether DHCP is enabled", + "nullable": true + }, + "dnsNameservers": { + "type": "array", + "description": "DNS nameservers for the subnet", + "nullable": true, + "items": { + "type": "string" + } + }, + "gatewayIp": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "Default gateway IP address", + "nullable": true + }, + "name": { + "type": "string", + "description": "Subnet name" + } + }, + "required": [ + "name" + ] + }, + "publicCloud.network.SubnetTargetSpec": { + "type": "object", + "description": "Desired specification for a subnet", + "properties": { + "allocationPools": { + "type": "array", + "description": "IP address allocation pools", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.network.SubnetAllocationPool" + } + }, + "cidr": { + "allOf": [ + { + "$ref": "#/components/schemas/ipBlock" + } + ], + "description": "CIDR address range (immutable after creation)" + }, + "description": { + "type": "string", + "description": "Subnet description", + "nullable": true + }, + "dhcpEnabled": { + "type": "boolean", + "description": "Whether DHCP is enabled", + "nullable": true + }, + "dnsNameservers": { + "type": "array", + "description": "DNS nameservers for the subnet", + "nullable": true, + "items": { + "type": "string" + } + }, + "gatewayIp": { + "allOf": [ + { + "$ref": "#/components/schemas/ip" + } + ], + "description": "Default gateway IP address", + "nullable": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Target location" + }, + "name": { + "type": "string", + "description": "Subnet name" + } + }, + "required": [ + "cidr", + "location", + "name" + ] + }, + "publicCloud.network.SubnetUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud subnet", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.network.SubnetPutTargetSpec" + } + ], + "description": "Desired target specification for the subnet" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.project.ModeEnum": { + "type": "string", + "description": "Possible values for cloud project mode", + "enum": [ + "CLASSIC", + "DISCOVERY" + ] + }, + "publicCloud.project.ProjectAsync": { + "type": "object", + "description": "A Public Cloud project", + "properties": { + "createdAt": { + "type": "string", + "description": "Date of project creation", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.project.ProjectCurrentState" + } + ], + "description": "Current configuration applied to the cloud project", + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Asynchronous operations ongoing on the cloud project", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Project ID", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Project name", + "nullable": true, + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Reflects the readiness of the cloud project. A new target specification request will be accepted only in `READY` status", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.project.ProjectTargetSpec" + } + ], + "description": "Last target specification of the cloud project", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Date of the last cloud project update", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.project.ProjectAsyncWithIAM": { + "type": "object", + "description": "A Public Cloud project", + "properties": { + "createdAt": { + "type": "string", + "description": "Date of project creation", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.project.ProjectCurrentState" + } + ], + "description": "Current configuration applied to the cloud project", + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Asynchronous operations ongoing on the cloud project", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "iam": { + "allOf": [ + { + "$ref": "#/components/schemas/iam.ResourceMetadata" + } + ], + "description": "IAM resource metadata", + "nullable": true, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Project ID", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Project name", + "nullable": true, + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Reflects the readiness of the cloud project. A new target specification request will be accepted only in `READY` status", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.project.ProjectTargetSpec" + } + ], + "description": "Last target specification of the cloud project", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Date of the last cloud project update", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.project.ProjectCreation": { + "type": "object", + "description": "Input parameters for creating a cloud project.", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.project.ProjectTargetSpec" + } + ], + "description": "Target specification for the cloud project" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.project.ProjectCurrentState": { + "type": "object", + "description": "Current state of the cloud project", + "properties": { + "mode": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.project.ModeEnum" + } + ], + "description": "Project mode", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Name of the cloud project", + "readOnly": true + } + } + }, + "publicCloud.project.ProjectTargetSpec": { + "type": "object", + "description": "Target specification of the cloud project", + "properties": { + "mode": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.project.ModeEnum" + } + ], + "description": "Project type. Discovery mode allows to display UI in read only without adding any payment mean." + }, + "name": { + "type": "string", + "description": "Name of the public cloud project" + } + }, + "required": [ + "mode", + "name" + ] + }, + "publicCloud.quota.Quota": { + "type": "object", + "description": "A Public Cloud project quota", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the quota", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaCurrentState" + } + ], + "description": "Current state of the quota", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the quota", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Project ID this quota belongs to", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Quota readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaTargetSpec" + } + ], + "description": "Last target specification of the quota", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the quota", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaCurrentState": { + "type": "object", + "description": "Current state of the project quota", + "properties": { + "availableProfiles": { + "type": "array", + "description": "Quota profiles available to this project", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.quota.QuotaProfile" + }, + "readOnly": true + }, + "preventAutomaticQuotaUpgrade": { + "type": "boolean", + "description": "When true, automatic quota upgrades are disabled for this project", + "readOnly": true + }, + "regions": { + "type": "array", + "description": "Current state per region", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.quota.QuotaRegionCurrentState" + }, + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaLimit": { + "type": "object", + "description": "Quota limit without usage tracking (for per-item size caps)", + "properties": { + "limit": { + "type": "integer", + "description": "Maximum allowed", + "readOnly": true + }, + "unit": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUnitEnum" + } + ], + "description": "Unit of measurement", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaProfile": { + "type": "object", + "description": "A Public Cloud quota profile (read-only reference data)", + "properties": { + "compute": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaProfileCompute" + } + ], + "description": "Compute limits", + "nullable": true, + "readOnly": true + }, + "keyManager": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaProfileKeyManager" + } + ], + "description": "Key manager limits", + "nullable": true, + "readOnly": true + }, + "keypair": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaProfileKeypair" + } + ], + "description": "Keypair limits", + "nullable": true, + "readOnly": true + }, + "loadbalancer": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaProfileLoadbalancer" + } + ], + "description": "Loadbalancer limits", + "nullable": true, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Profile name", + "readOnly": true + }, + "network": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaProfileNetwork" + } + ], + "description": "Network limits", + "nullable": true, + "readOnly": true + }, + "share": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaProfileShare" + } + ], + "description": "File storage limits", + "nullable": true, + "readOnly": true + }, + "volume": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaProfileVolume" + } + ], + "description": "Block storage limits", + "nullable": true, + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaProfileCompute": { + "type": "object", + "description": "Compute limits for a quota profile", + "properties": { + "cores": { + "type": "integer", + "description": "Maximum allowed CPU cores", + "readOnly": true + }, + "instances": { + "type": "integer", + "description": "Maximum allowed instances", + "readOnly": true + }, + "memory": { + "type": "integer", + "description": "Maximum allowed memory in MB", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaProfileKeyManager": { + "type": "object", + "description": "Key manager limits for a quota profile", + "properties": { + "containers": { + "type": "integer", + "description": "Maximum allowed containers", + "readOnly": true + }, + "secrets": { + "type": "integer", + "description": "Maximum allowed secrets", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaProfileKeypair": { + "type": "object", + "description": "Keypair limits for a quota profile", + "properties": { + "keypairs": { + "type": "integer", + "description": "Maximum allowed keypairs", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaProfileLoadbalancer": { + "type": "object", + "description": "Loadbalancer limits for a quota profile", + "properties": { + "healthMonitors": { + "type": "integer", + "description": "Maximum allowed health monitors", + "readOnly": true + }, + "l7Policies": { + "type": "integer", + "description": "Maximum allowed L7 policies", + "readOnly": true + }, + "l7Rules": { + "type": "integer", + "description": "Maximum allowed L7 rules", + "readOnly": true + }, + "listeners": { + "type": "integer", + "description": "Maximum allowed listeners", + "readOnly": true + }, + "loadbalancers": { + "type": "integer", + "description": "Maximum allowed loadbalancers", + "readOnly": true + }, + "members": { + "type": "integer", + "description": "Maximum allowed pool members", + "readOnly": true + }, + "pools": { + "type": "integer", + "description": "Maximum allowed pools", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaProfileNetwork": { + "type": "object", + "description": "Network limits for a quota profile", + "properties": { + "floatingIps": { + "type": "integer", + "description": "Maximum allowed floating IPs", + "readOnly": true + }, + "gateways": { + "type": "integer", + "description": "Maximum allowed gateways", + "readOnly": true + }, + "networks": { + "type": "integer", + "description": "Maximum allowed networks", + "readOnly": true + }, + "securityGroupRules": { + "type": "integer", + "description": "Maximum allowed security group rules", + "readOnly": true + }, + "securityGroups": { + "type": "integer", + "description": "Maximum allowed security groups", + "readOnly": true + }, + "subnets": { + "type": "integer", + "description": "Maximum allowed subnets", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaProfileShare": { + "type": "object", + "description": "File storage limits for a quota profile", + "properties": { + "backupSizeTotal": { + "type": "integer", + "description": "Maximum allowed total backup storage size in GB", + "readOnly": true + }, + "backups": { + "type": "integer", + "description": "Maximum allowed share backups", + "readOnly": true + }, + "shares": { + "type": "integer", + "description": "Maximum allowed shares", + "readOnly": true + }, + "sizeTotal": { + "type": "integer", + "description": "Maximum allowed total share storage size in GB", + "readOnly": true + }, + "snapshots": { + "type": "integer", + "description": "Maximum allowed share snapshots", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaProfileVolume": { + "type": "object", + "description": "Block storage limits for a quota profile", + "properties": { + "backupSizeTotal": { + "type": "integer", + "description": "Maximum allowed total backup storage size in GB", + "readOnly": true + }, + "backups": { + "type": "integer", + "description": "Maximum allowed volume backups", + "readOnly": true + }, + "sizeTotal": { + "type": "integer", + "description": "Maximum allowed total volume storage size in GB", + "readOnly": true + }, + "snapshots": { + "type": "integer", + "description": "Maximum allowed volume snapshots", + "readOnly": true + }, + "volumes": { + "type": "integer", + "description": "Maximum allowed volumes", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaRegionCompute": { + "type": "object", + "description": "Per-region compute quota usage", + "properties": { + "cores": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "CPU cores quota usage", + "readOnly": true + }, + "instances": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Instances quota usage", + "readOnly": true + }, + "memory": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Memory quota usage in MB", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaRegionCurrentState": { + "type": "object", + "description": "Current state of the project quota in a single region", + "properties": { + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Region where the quota applies", + "readOnly": true + }, + "profile": { + "type": "string", + "description": "Currently applied quota profile name", + "readOnly": true + }, + "usage": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsageDetails" + } + ], + "description": "Quota usage for this region", + "nullable": true, + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaRegionKeyManager": { + "type": "object", + "description": "Per-region key manager quota usage", + "properties": { + "containers": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Containers quota usage", + "readOnly": true + }, + "secrets": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Secrets quota usage", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaRegionKeypair": { + "type": "object", + "description": "Per-region keypair quota", + "properties": { + "keypairs": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Keypairs quota", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaRegionLoadbalancer": { + "type": "object", + "description": "Per-region load balancer quota usage", + "properties": { + "healthMonitors": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Health monitors quota usage", + "readOnly": true + }, + "l7Policies": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "L7 policies quota usage", + "readOnly": true + }, + "l7Rules": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "L7 rules quota usage", + "readOnly": true + }, + "listeners": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Listeners quota usage", + "readOnly": true + }, + "loadbalancers": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Load balancers quota usage", + "readOnly": true + }, + "members": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Pool members quota usage", + "readOnly": true + }, + "pools": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Pools quota usage", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaRegionNetwork": { + "type": "object", + "description": "Per-region network quota usage", + "properties": { + "floatingIps": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Floating IPs quota usage", + "readOnly": true + }, + "gateways": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Gateways quota usage", + "readOnly": true + }, + "networks": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Networks quota usage", + "readOnly": true + }, + "securityGroupRules": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Security group rules quota usage", + "readOnly": true + }, + "securityGroups": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Security groups quota usage", + "readOnly": true + }, + "subnets": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Subnets quota usage", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaRegionShare": { + "type": "object", + "description": "Per-region file storage quota usage", + "properties": { + "backupSizeTotal": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "File storage backup storage quota usage", + "readOnly": true + }, + "backups": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "File storage backups quota usage", + "readOnly": true + }, + "perShareSize": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaLimit" + } + ], + "description": "Maximum size per individual share", + "readOnly": true + }, + "shareNetworks": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Share networks quota usage", + "readOnly": true + }, + "shares": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "File storages quota usage", + "readOnly": true + }, + "sizeTotal": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Total file storage size quota usage in GB", + "readOnly": true + }, + "snapshotSizeTotal": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "File storage snapshot storage quota usage", + "readOnly": true + }, + "snapshots": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "File storage snapshots quota usage", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaRegionTargetSpec": { + "type": "object", + "description": "Target specification for the project quota in a single region", + "properties": { + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Region where the profile applies" + }, + "profile": { + "type": "string", + "description": "Quota profile to apply in this region. Available values are in currentState.availableProfiles." + } + }, + "required": [ + "location", + "profile" + ] + }, + "publicCloud.quota.QuotaRegionVolume": { + "type": "object", + "description": "Per-region volume quota usage", + "properties": { + "backupSizeTotal": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Volume backup storage quota usage", + "readOnly": true + }, + "backups": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Volume backups quota usage", + "readOnly": true + }, + "perVolumeSize": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaLimit" + } + ], + "description": "Maximum size per individual volume", + "readOnly": true + }, + "sizeTotal": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Total volume storage quota usage", + "readOnly": true + }, + "snapshots": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Volume snapshots quota usage", + "readOnly": true + }, + "volumes": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUsage" + } + ], + "description": "Volumes quota usage", + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaTargetSpec": { + "type": "object", + "description": "Target specification for the project quota", + "properties": { + "preventAutomaticQuotaUpgrade": { + "type": "boolean", + "description": "When true, automatic quota upgrades are disabled for this project", + "readOnly": true + }, + "regions": { + "type": "array", + "description": "Target quota profile per region", + "items": { + "$ref": "#/components/schemas/publicCloud.quota.QuotaRegionTargetSpec" + }, + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaUnitEnum": { + "type": "string", + "description": "Unit of measurement for quota limits and usage", + "enum": [ + "COUNT", + "GB", + "GiB", + "MB", + "MiB" + ] + }, + "publicCloud.quota.QuotaUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud project quota", + "properties": { + "checksum": { + "type": "string", + "description": "Checksum of the current resource, for optimistic concurrency" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUpdateTargetSpec" + } + ], + "description": "Update specification" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.quota.QuotaUpdateTargetSpec": { + "type": "object", + "description": "Update specification for the project quota", + "properties": { + "preventAutomaticQuotaUpgrade": { + "type": "boolean", + "description": "When true, automatic quota upgrades are disabled for this project" + }, + "regions": { + "type": "array", + "description": "Target quota profile per region. Regions omitted are left unchanged.", + "items": { + "$ref": "#/components/schemas/publicCloud.quota.QuotaRegionTargetSpec" + } + } + }, + "required": [ + "preventAutomaticQuotaUpgrade", + "regions" + ] + }, + "publicCloud.quota.QuotaUsage": { + "type": "object", + "description": "Quota usage with limit and current consumption", + "properties": { + "limit": { + "type": "integer", + "description": "Maximum allowed", + "readOnly": true + }, + "unit": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUnitEnum" + } + ], + "description": "Unit of measurement", + "readOnly": true + }, + "used": { + "type": "integer", + "description": "Currently used (may be omitted when not available)", + "nullable": true, + "readOnly": true + } + } + }, + "publicCloud.quota.QuotaUsageDetails": { + "type": "object", + "description": "Quota usage across all services for a single region", + "properties": { + "compute": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaRegionCompute" + } + ], + "description": "Compute quota usage", + "nullable": true, + "readOnly": true + }, + "keyManager": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaRegionKeyManager" + } + ], + "description": "Key manager quota usage", + "nullable": true, + "readOnly": true + }, + "keypair": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaRegionKeypair" + } + ], + "description": "Keypair quota usage", + "nullable": true, + "readOnly": true + }, + "loadbalancer": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaRegionLoadbalancer" + } + ], + "description": "Load balancer quota usage", + "nullable": true, + "readOnly": true + }, + "network": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaRegionNetwork" + } + ], + "description": "Network quota usage", + "nullable": true, + "readOnly": true + }, + "share": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaRegionShare" + } + ], + "description": "File storage quota usage", + "nullable": true, + "readOnly": true + }, + "volume": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.quota.QuotaRegionVolume" + } + ], + "description": "Block storage quota usage", + "nullable": true, + "readOnly": true + } + } + }, + "publicCloud.rancher.Credentials": { + "type": "object", + "description": "Represents a username/password couple for a managed Rancher user", + "properties": { + "password": { + "type": "string", + "description": "Password of the user", + "format": "password", + "readOnly": true + }, + "username": { + "type": "string", + "description": "Name of the user", + "readOnly": true + } + } + }, + "publicCloud.rancher.EligibilityReference": { + "type": "object", + "description": "A managed Rancher service eligibility reference, applicable to service creations", + "properties": { + "freeTrial": { + "type": "boolean", + "description": "Whether the project is eligible for free trial for the Rancher product", + "readOnly": true + } + } + }, + "publicCloud.rancher.IpRestriction": { + "type": "object", + "description": "Allowed CIDR block for a managed Rancher service's IP restrictions", + "properties": { + "cidrBlock": { + "allOf": [ + { + "$ref": "#/components/schemas/ipBlock" + } + ], + "description": "Allowed CIDR block (/subnet is optional, if unspecified then /32 will be used)" + }, + "description": { + "type": "string", + "description": "Description of the allowed CIDR block" + } + }, + "required": [ + "cidrBlock", + "description" + ] + }, + "publicCloud.rancher.Networking": { + "type": "object", + "description": "Networking properties of a managed Rancher service", + "properties": { + "egressCidrBlocks": { + "type": "array", + "description": "Specifies the CIDR ranges for egress IP addresses used by Rancher. Ensure these ranges are allowed in any IP restrictions for services that Rancher will access.", + "items": { + "$ref": "#/components/schemas/ipBlock" + }, + "readOnly": true + } + } + }, + "publicCloud.rancher.PlanCapability": { + "type": "object", + "description": "A managed Rancher service plan capability, applicable to an existing managed Rancher", + "properties": { + "cause": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.PlanUnavailabilityCauseEnum" + } + ], + "description": "Cause for an unavailability", + "nullable": true, + "readOnly": true + }, + "message": { + "type": "string", + "description": "Human-readable description of the unavailability cause", + "nullable": true, + "readOnly": true + }, + "name": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.PlanEnum" + } + ], + "description": "Name of the plan", + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.PlanCapabilityStatusEnum" + } + ], + "description": "Status of the plan", + "readOnly": true + } + } + }, + "publicCloud.rancher.PlanCapabilityStatusEnum": { + "type": "string", + "description": "Possible statuses for a managed Rancher plan capability, applicable to an existing managed Rancher", + "enum": [ + "AVAILABLE", + "CURRENT", + "UNAVAILABLE" + ] + }, + "publicCloud.rancher.PlanEnum": { + "type": "string", + "description": "Possible values for managed Rancher plans", + "enum": [ + "OVHCLOUD_EDITION", + "STANDARD" + ] + }, + "publicCloud.rancher.PlanReference": { + "type": "object", + "description": "A managed Rancher service plan reference, applicable to service creations", + "properties": { + "cause": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.PlanUnavailabilityCauseEnum" + } + ], + "description": "Cause for an unavailability", + "nullable": true, + "readOnly": true + }, + "message": { + "type": "string", + "description": "Human-readable description of the unavailability cause", + "nullable": true, + "readOnly": true + }, + "name": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.PlanEnum" + } + ], + "description": "Name of the plan", + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.PlanReferenceStatusEnum" + } + ], + "description": "Status of the plan", + "readOnly": true + } + } + }, + "publicCloud.rancher.PlanReferenceStatusEnum": { + "type": "string", + "description": "Possible statuses for a managed Rancher plan reference", + "enum": [ + "AVAILABLE", + "UNAVAILABLE" + ] + }, + "publicCloud.rancher.PlanUnavailabilityCauseEnum": { + "type": "string", + "description": "Possible causes for a managed Rancher plan being unavailable", + "enum": [ + "CANNOT_DOWNGRADE_USING_HIGHER_FEATURES", + "CANNOT_SWITCH_PLAN_FOR_ALPHA", + "NOT_IMPLEMENTED" + ] + }, + "publicCloud.rancher.Rancher": { + "type": "object", + "description": "A managed Rancher service object", + "properties": { + "createdAt": { + "type": "string", + "description": "Date of the managed Rancher service creation", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.RancherCurrentState" + } + ], + "description": "Current configuration applied to the managed Rancher service", + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Asynchronous operations ongoing on the managed Rancher service", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Reflects the readiness of the managed Rancher service. A new target specification request will be accepted only in `READY` status", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.RancherTargetSpec" + } + ], + "description": "Last target specification of the managed Rancher service", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Date of the last managed Rancher service update", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.rancher.RancherCreation": { + "type": "object", + "description": "Input parameters for creating a managed Rancher service.", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.RancherCreationTargetSpec" + } + ], + "description": "Target specification for the managed Rancher service" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.rancher.RancherCreationTargetSpec": { + "type": "object", + "description": "Target specification of the managed Rancher service", + "properties": { + "iamAuthEnabled": { + "type": "boolean", + "description": "Allows Rancher to use identities managed by OVHcloud IAM (Identity and Access Management) to control access" + }, + "name": { + "type": "string", + "description": "Name of the managed Rancher service" + }, + "plan": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.PlanEnum" + } + ], + "description": "Plan of the managed Rancher service. Available plans for an existing managed Rancher can be retrieved using GET /rancher/rancherID/capabilities/plan" + }, + "version": { + "type": "string", + "description": "Version of the managed Rancher service. Available versions for an existing managed Rancher can be retrieved using GET /rancher/rancherID/capabilities/version. Default is the latest version." + } + }, + "required": [ + "name", + "plan" + ] + }, + "publicCloud.rancher.RancherCurrentState": { + "type": "object", + "description": "Current state of the managed Rancher service", + "properties": { + "bootstrapPassword": { + "type": "string", + "description": "Bootstrap password of the managed Rancher service, returned only on creation", + "nullable": true, + "format": "password", + "readOnly": true + }, + "iamAuthEnabled": { + "type": "boolean", + "description": "Allows Rancher to use identities managed by OVHcloud IAM (Identity and Access Management) to control access", + "nullable": true, + "readOnly": true + }, + "ipRestrictions": { + "type": "array", + "description": "List of allowed CIDR blocks for a managed Rancher service's IP restrictions. When empty, any IP is allowed", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.rancher.IpRestriction" + }, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Name of the managed Rancher service", + "readOnly": true + }, + "networking": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.Networking" + } + ], + "description": "Networking properties of a managed Rancher service", + "nullable": true, + "readOnly": true + }, + "plan": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.PlanEnum" + } + ], + "description": "Plan of the managed Rancher service", + "readOnly": true + }, + "region": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.RegionEnum" + } + ], + "description": "Region of the managed Rancher service", + "readOnly": true + }, + "url": { + "type": "string", + "description": "URL of the managed Rancher service", + "nullable": true, + "readOnly": true + }, + "usage": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.Usage" + } + ], + "description": "Latest metrics regarding the usage of the managed Rancher service", + "nullable": true, + "readOnly": true + }, + "version": { + "type": "string", + "description": "Version of the managed Rancher service", + "readOnly": true + } + } + }, + "publicCloud.rancher.RancherTargetSpec": { + "type": "object", + "description": "Target specification of the managed Rancher service", + "properties": { + "iamAuthEnabled": { + "type": "boolean", + "description": "Allows Rancher to use identities managed by OVHcloud IAM (Identity and Access Management) to control access" + }, + "ipRestrictions": { + "type": "array", + "description": "List of allowed CIDR blocks for a managed Rancher service's IP restrictions. When empty, any IP is allowed", + "items": { + "$ref": "#/components/schemas/publicCloud.rancher.IpRestriction" + } + }, + "name": { + "type": "string", + "description": "Name of the managed Rancher service" + }, + "plan": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.PlanEnum" + } + ], + "description": "Plan of the managed Rancher service. Available plans for an existing managed Rancher can be retrieved using GET /rancher/rancherID/capabilities/plan" + }, + "version": { + "type": "string", + "description": "Version of the managed Rancher service. Available versions for an existing managed Rancher can be retrieved using GET /rancher/rancherID/capabilities/version" + } + }, + "required": [ + "name", + "plan", + "version" + ] + }, + "publicCloud.rancher.RancherUpdate": { + "type": "object", + "description": "Input for managed Rancher service update.", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.RancherTargetSpec" + } + ], + "description": "New target specification for the managed Rancher service" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.rancher.RegionEnum": { + "type": "string", + "description": "Possible values for managed Rancher regions", + "enum": [ + "EU_WEST_GRA", + "EU_WEST_RBX", + "EU_WEST_SBG" + ] + }, + "publicCloud.rancher.Usage": { + "type": "object", + "description": "A metric sample about a managed Rancher usage", + "properties": { + "datetime": { + "type": "string", + "description": "Date of the sample", + "format": "date-time", + "readOnly": true + }, + "orchestratedVcpus": { + "type": "integer", + "description": "Total number of vCPUs orchestrated by the managed Rancher service through the downstream clusters", + "readOnly": true + } + } + }, + "publicCloud.rancher.VersionCapability": { + "type": "object", + "description": "A managed Rancher service version capability, applicable to an existing managed Rancher", + "properties": { + "cause": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.VersionUnavailabilityCauseEnum" + } + ], + "description": "Cause for an unavailability", + "nullable": true, + "readOnly": true + }, + "changelogUrl": { + "type": "string", + "description": "Changelog URL of the version", + "readOnly": true + }, + "message": { + "type": "string", + "description": "Human-readable description of the unavailability cause", + "nullable": true, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Name of the version", + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.VersionCapabilityStatusEnum" + } + ], + "description": "Status of the version", + "readOnly": true + } + } + }, + "publicCloud.rancher.VersionCapabilityStatusEnum": { + "type": "string", + "description": "Possible statuses for a managed Rancher version capability, applicable to an existing managed Rancher", + "enum": [ + "AVAILABLE", + "UNAVAILABLE" + ] + }, + "publicCloud.rancher.VersionReference": { + "type": "object", + "description": "A managed Rancher service version reference, applicable to service creations", + "properties": { + "cause": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.VersionUnavailabilityCauseEnum" + } + ], + "description": "Cause for an unavailability", + "nullable": true, + "readOnly": true + }, + "changelogUrl": { + "type": "string", + "description": "Changelog URL of the version", + "readOnly": true + }, + "message": { + "type": "string", + "description": "Human-readable description of the unavailability cause", + "nullable": true, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Name of the version", + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.rancher.VersionReferenceStatusEnum" + } + ], + "description": "Status of the version", + "readOnly": true + } + } + }, + "publicCloud.rancher.VersionReferenceStatusEnum": { + "type": "string", + "description": "Possible statuses for a managed Rancher version reference", + "enum": [ + "AVAILABLE", + "UNAVAILABLE" + ] + }, + "publicCloud.rancher.VersionUnavailabilityCauseEnum": { + "type": "string", + "description": "Possible causes for a managed Rancher version being unavailable", + "enum": [ + "CANNOT_UPGRADE_MULTIPLE_VERSIONS", + "DEPRECATED", + "DISABLED", + "END_OF_LIFE", + "END_OF_SALE", + "END_OF_SUPPORT" + ] + }, + "publicCloud.reference.Region": { + "type": "object", + "description": "A Public Cloud region (read-only reference data)", + "properties": { + "availabilityZones": { + "type": "array", + "description": "Availability zones in this region", + "nullable": true, + "items": { + "type": "string" + }, + "readOnly": true + }, + "continent": { + "type": "string", + "description": "Continent code", + "readOnly": true + }, + "country": { + "type": "string", + "description": "Country code", + "nullable": true, + "readOnly": true + }, + "datacenterName": { + "type": "string", + "description": "Datacenter display name", + "nullable": true, + "readOnly": true + }, + "name": { + "type": "string", + "description": "Region identifier (e.g. GRA1)", + "readOnly": true + }, + "services": { + "type": "array", + "description": "Available OpenStack services", + "items": { + "type": "string" + }, + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.reference.RegionStatusEnum" + } + ], + "description": "Region status", + "readOnly": true + } + } + }, + "publicCloud.reference.RegionStatusEnum": { + "type": "string", + "description": "Possible statuses for a cloud region", + "enum": [ + "DISABLED", + "ENABLED", + "MAINTENANCE" + ] + }, + "publicCloud.reference.instance.Flavor": { + "type": "object", + "description": "A Public Cloud instance flavor (read-only reference data)", + "properties": { + "description": { + "type": "string", + "description": "Flavor description", + "nullable": true, + "readOnly": true + }, + "disk": { + "type": "integer", + "description": "Root disk size in GB", + "readOnly": true + }, + "ephemeral": { + "type": "integer", + "description": "Ephemeral disk size in GB", + "readOnly": true + }, + "id": { + "type": "string", + "description": "Flavor unique identifier", + "format": "uuid", + "readOnly": true + }, + "isPublic": { + "type": "boolean", + "description": "Whether the flavor is publicly available", + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Flavor location", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Flavor name", + "readOnly": true + }, + "ram": { + "type": "integer", + "description": "RAM in MB", + "readOnly": true + }, + "swap": { + "type": "integer", + "description": "Swap space in MB", + "readOnly": true + }, + "vcpus": { + "type": "integer", + "description": "Number of virtual CPUs", + "readOnly": true + } + } + }, + "publicCloud.reference.instance.Image": { + "type": "object", + "description": "A Public Cloud instance image (read-only reference data)", + "properties": { + "createdAt": { + "type": "string", + "description": "Image creation date", + "format": "date-time", + "readOnly": true + }, + "id": { + "type": "string", + "description": "Image unique identifier", + "format": "uuid", + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Image location", + "readOnly": true + }, + "minDisk": { + "type": "integer", + "description": "Minimum disk size required in GB", + "readOnly": true + }, + "minRam": { + "type": "integer", + "description": "Minimum RAM required in MB", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Image name", + "readOnly": true + }, + "size": { + "type": "integer", + "description": "Image size in bytes", + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.ImageStatusEnum" + } + ], + "description": "Image status", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Image last update date", + "format": "date-time", + "readOnly": true + }, + "visibility": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.instance.ImageVisibilityEnum" + } + ], + "description": "Image visibility", + "readOnly": true + } + } + }, + "publicCloud.securityGroup.EthernetTypeEnum": { + "type": "string", + "description": "Ethernet type for a security group rule", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "publicCloud.securityGroup.ProtocolEnum": { + "type": "string", + "description": "Network protocol for a security group rule", + "enum": [ + "AH", + "DCCP", + "EGP", + "ESP", + "GRE", + "ICMP", + "ICMPV6", + "IGMP", + "OSPF", + "PGM", + "RSVP", + "SCTP", + "TCP", + "UDP", + "UDPLITE", + "VRRP" + ] + }, + "publicCloud.securityGroup.SecurityGroup": { + "type": "object", + "description": "A Public Cloud security group", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the security group", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupCurrentState" + } + ], + "description": "Current state of the security group", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the security group", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the security group", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Security group readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupTargetSpec" + } + ], + "description": "Last target specification of the security group", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the security group", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.securityGroup.SecurityGroupCreation": { + "type": "object", + "description": "Payload to create a Public Cloud security group", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupTargetSpec" + } + ], + "description": "Desired target specification for the security group to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.securityGroup.SecurityGroupCurrentState": { + "type": "object", + "description": "Current state of a security group from OpenStack", + "properties": { + "defaultRules": { + "type": "array", + "description": "Default egress rules auto-created by OpenStack", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupStateRule" + }, + "readOnly": true + }, + "description": { + "type": "string", + "description": "Security group description", + "nullable": true, + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Geographic location", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Security group name", + "readOnly": true + }, + "rules": { + "type": "array", + "description": "User-specified firewall rules", + "items": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupStateRule" + }, + "readOnly": true + } + } + }, + "publicCloud.securityGroup.SecurityGroupRef": { + "type": "object", + "description": "Reference to a security group", + "properties": { + "id": { + "type": "string", + "description": "Security group identifier", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "publicCloud.securityGroup.SecurityGroupStateRule": { + "type": "object", + "description": "Actual firewall rule from OpenStack for a security group", + "properties": { + "description": { + "type": "string", + "description": "Rule description", + "nullable": true, + "readOnly": true + }, + "direction": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.securityGroup.TrafficFlowEnum" + } + ], + "description": "Traffic flow", + "readOnly": true + }, + "ethernetType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.securityGroup.EthernetTypeEnum" + } + ], + "description": "Ethernet type", + "readOnly": true + }, + "id": { + "type": "string", + "description": "Rule identifier from OpenStack", + "format": "uuid", + "readOnly": true + }, + "portRangeMax": { + "type": "integer", + "description": "Maximum port number", + "nullable": true, + "readOnly": true + }, + "portRangeMin": { + "type": "integer", + "description": "Minimum port number", + "nullable": true, + "readOnly": true + }, + "protocol": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.securityGroup.ProtocolEnum" + } + ], + "description": "Network protocol", + "nullable": true, + "readOnly": true + }, + "remoteGroup": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupRef" + } + ], + "description": "Reference to remote security group", + "nullable": true, + "readOnly": true + }, + "remoteIpPrefix": { + "allOf": [ + { + "$ref": "#/components/schemas/ipBlock" + } + ], + "description": "Remote CIDR prefix", + "nullable": true, + "readOnly": true + } + } + }, + "publicCloud.securityGroup.SecurityGroupTargetRule": { + "type": "object", + "description": "Desired firewall rule for a security group", + "properties": { + "description": { + "type": "string", + "description": "Rule description", + "nullable": true + }, + "direction": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.securityGroup.TrafficFlowEnum" + } + ], + "description": "Traffic flow" + }, + "ethernetType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.securityGroup.EthernetTypeEnum" + } + ], + "description": "Ethernet type" + }, + "portRangeMax": { + "type": "integer", + "description": "Maximum port number", + "nullable": true + }, + "portRangeMin": { + "type": "integer", + "description": "Minimum port number", + "nullable": true + }, + "protocol": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.securityGroup.ProtocolEnum" + } + ], + "description": "Network protocol", + "nullable": true + }, + "remoteGroup": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupRef" + } + ], + "description": "Reference to remote security group (mutually exclusive with remoteIpPrefix)", + "nullable": true + }, + "remoteIpPrefix": { + "allOf": [ + { + "$ref": "#/components/schemas/ipBlock" + } + ], + "description": "Remote CIDR prefix (mutually exclusive with remoteGroup)", + "nullable": true + } + }, + "required": [ + "direction", + "ethernetType" + ] + }, + "publicCloud.securityGroup.SecurityGroupTargetSpec": { + "type": "object", + "description": "Desired specification for creating a security group", + "properties": { + "description": { + "type": "string", + "description": "Security group description", + "nullable": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Geographic location" + }, + "name": { + "type": "string", + "description": "Security group name" + }, + "rules": { + "type": "array", + "description": "Desired firewall rules", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupTargetRule" + } + } + }, + "required": [ + "location", + "name" + ] + }, + "publicCloud.securityGroup.SecurityGroupUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud security group", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupUpdateTargetSpec" + } + ], + "description": "Desired target specification for the security group" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.securityGroup.SecurityGroupUpdateTargetSpec": { + "type": "object", + "description": "Desired specification for updating a security group (mutable fields only)", + "properties": { + "description": { + "type": "string", + "description": "Security group description", + "nullable": true + }, + "name": { + "type": "string", + "description": "Security group name" + }, + "rules": { + "type": "array", + "description": "Desired firewall rules", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupTargetRule" + } + } + }, + "required": [ + "name" + ] + }, + "publicCloud.securityGroup.TrafficFlowEnum": { + "type": "string", + "description": "Flow rule of traffic for a security group rule", + "enum": [ + "EGRESS", + "INGRESS" + ] + }, + "publicCloud.sshKey.SSHKey": { + "type": "object", + "description": "A Public Cloud SSH key (stored in database, synced to OpenStack on instance creation)", + "properties": { + "createdAt": { + "type": "string", + "description": "Creation date of the SSH key", + "format": "date-time", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Unique name of the SSH key", + "readOnly": true + }, + "publicKey": { + "type": "string", + "description": "SSH public key content", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the SSH key", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.sshKey.SSHKeyCreation": { + "type": "object", + "description": "Payload to create a Public Cloud SSH key", + "properties": { + "name": { + "type": "string", + "description": "Unique name for the SSH key" + }, + "publicKey": { + "type": "string", + "description": "SSH public key content" + } + }, + "required": [ + "name", + "publicKey" + ] + }, + "publicCloud.storage.file.FileStorage": { + "type": "object", + "description": "A Public Cloud file storage (NFS share)", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the file storage", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageCurrentState" + } + ], + "description": "Current observed state of the file storage from the infrastructure", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the file storage", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the file storage", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "File storage readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageTargetSpec" + } + ], + "description": "Last target specification of the file storage", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the file storage", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.storage.file.FileStorageAccessLevelEnum": { + "type": "string", + "description": "Access levels for file storage access rules", + "enum": [ + "READ_ONLY", + "READ_WRITE" + ] + }, + "publicCloud.storage.file.FileStorageAccessRule": { + "type": "object", + "description": "An access rule controlling which IP addresses can access a file storage", + "properties": { + "accessLevel": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageAccessLevelEnum" + } + ], + "description": "Access level granted (read-write or read-only)", + "readOnly": true + }, + "accessTo": { + "type": "string", + "description": "IP address or CIDR allowed to access the file storage", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the access rule", + "nullable": true, + "format": "date-time", + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the access rule", + "format": "uuid", + "readOnly": true + }, + "state": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageAccessRuleStateEnum" + } + ], + "description": "Current state of the access rule", + "readOnly": true + } + } + }, + "publicCloud.storage.file.FileStorageAccessRuleInput": { + "type": "object", + "description": "Input for an access rule controlling which IP addresses can access a file storage", + "properties": { + "accessLevel": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageAccessLevelEnum" + } + ], + "description": "Access level granted (read-write or read-only)" + }, + "accessTo": { + "type": "string", + "description": "IP address or CIDR allowed to access the file storage" + } + }, + "required": [ + "accessLevel", + "accessTo" + ] + }, + "publicCloud.storage.file.FileStorageAccessRuleStateEnum": { + "type": "string", + "description": "Possible states for a file storage access rule", + "enum": [ + "ACTIVE", + "APPLYING", + "DENYING", + "ERROR" + ] + }, + "publicCloud.storage.file.FileStorageCreation": { + "type": "object", + "description": "Payload to create a Public Cloud file storage", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageTargetSpec" + } + ], + "description": "Desired target specification for the file storage" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.storage.file.FileStorageCurrentState": { + "type": "object", + "description": "Current state of a file storage as observed from the infrastructure", + "properties": { + "accessRules": { + "type": "array", + "description": "Current access rules on the file storage", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageAccessRule" + }, + "readOnly": true + }, + "description": { + "type": "string", + "description": "File storage description", + "nullable": true, + "readOnly": true + }, + "exportLocations": { + "type": "array", + "description": "NFS export paths for mounting the file storage", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageExportLocation" + }, + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Current resource location", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Current file storage name", + "readOnly": true + }, + "networkId": { + "type": "string", + "description": "Private network ID the file storage is attached to", + "format": "uuid", + "readOnly": true + }, + "protocol": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageProtocolEnum" + } + ], + "description": "File sharing protocol", + "readOnly": true + }, + "shareType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageTypeEnum" + } + ], + "description": "File storage type (performance tier)", + "readOnly": true + }, + "size": { + "type": "integer", + "description": "Current size of the file storage in GB", + "readOnly": true + }, + "subnetId": { + "type": "string", + "description": "Subnet ID within the private network", + "format": "uuid", + "readOnly": true + } + } + }, + "publicCloud.storage.file.FileStorageExportLocation": { + "type": "object", + "description": "An NFS export path for a file storage", + "properties": { + "path": { + "type": "string", + "description": "NFS export path for mounting", + "readOnly": true + }, + "preferred": { + "type": "boolean", + "description": "Whether this is the preferred export location", + "readOnly": true + } + } + }, + "publicCloud.storage.file.FileStorageProtocolEnum": { + "type": "string", + "description": "Supported file sharing protocols", + "enum": [ + "NFS" + ] + }, + "publicCloud.storage.file.FileStorageSnapshot": { + "type": "object", + "description": "A snapshot of a Public Cloud file storage (NFS share)", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the snapshot", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageSnapshotCurrentState" + } + ], + "description": "Current observed state of the snapshot from the infrastructure", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the snapshot", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Unique identifier of the snapshot", + "format": "uuid", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Snapshot readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageSnapshotTargetSpec" + } + ], + "description": "Last target specification of the snapshot", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the snapshot", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.storage.file.FileStorageSnapshotCreation": { + "type": "object", + "description": "Payload to create a Public Cloud file storage snapshot", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageSnapshotTargetSpec" + } + ], + "description": "Desired target specification for the snapshot" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.storage.file.FileStorageSnapshotCurrentState": { + "type": "object", + "description": "Current state of a file storage snapshot as observed from the infrastructure", + "properties": { + "description": { + "type": "string", + "description": "Snapshot description", + "nullable": true, + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Current resource location", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Current snapshot name", + "nullable": true, + "readOnly": true + }, + "shareId": { + "type": "string", + "description": "ID of the parent file storage share", + "format": "uuid", + "readOnly": true + }, + "shareProto": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageProtocolEnum" + } + ], + "description": "File sharing protocol of the parent share", + "readOnly": true + }, + "shareSize": { + "type": "integer", + "description": "Size of the parent share in GB at the time of the snapshot", + "readOnly": true + }, + "snapshotSize": { + "type": "integer", + "description": "Size of the snapshot in GB", + "readOnly": true + } + } + }, + "publicCloud.storage.file.FileStorageSnapshotTargetSpec": { + "type": "object", + "description": "Target specification for a file storage snapshot", + "properties": { + "description": { + "type": "string", + "description": "Description of the snapshot", + "nullable": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Location of the snapshot" + }, + "name": { + "type": "string", + "description": "Desired snapshot name", + "nullable": true + }, + "shareId": { + "type": "string", + "description": "ID of the parent file storage share", + "format": "uuid" + } + }, + "required": [ + "location", + "shareId" + ] + }, + "publicCloud.storage.file.FileStorageSnapshotUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud file storage snapshot", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications; represents the current target specification value" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageSnapshotUpdateTargetSpec" + } + ], + "description": "Desired target specification for the snapshot" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.storage.file.FileStorageSnapshotUpdateTargetSpec": { + "type": "object", + "description": "Target specification for updating a file storage snapshot (only name and description are mutable)", + "properties": { + "description": { + "type": "string", + "description": "Description of the snapshot", + "nullable": true + }, + "name": { + "type": "string", + "description": "Desired snapshot name", + "nullable": true + } + } + }, + "publicCloud.storage.file.FileStorageTargetSpec": { + "type": "object", + "description": "Target specification for a file storage", + "properties": { + "accessRules": { + "type": "array", + "description": "Access rules controlling which IPs can access the file storage", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageAccessRuleInput" + } + }, + "description": { + "type": "string", + "description": "Description of the file storage", + "nullable": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.common.Location" + } + ], + "description": "Desired resource location" + }, + "name": { + "type": "string", + "description": "Desired file storage name" + }, + "networkId": { + "type": "string", + "description": "Private network ID to attach the file storage to", + "format": "uuid" + }, + "protocol": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageProtocolEnum" + } + ], + "description": "File sharing protocol" + }, + "shareType": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageTypeEnum" + } + ], + "description": "File storage type (performance tier)" + }, + "size": { + "type": "integer", + "description": "Size of the file storage in GB" + }, + "subnetId": { + "type": "string", + "description": "Subnet ID within the private network", + "format": "uuid" + } + }, + "required": [ + "location", + "name", + "networkId", + "protocol", + "shareType", + "size", + "subnetId" + ] + }, + "publicCloud.storage.file.FileStorageTypeEnum": { + "type": "string", + "description": "Supported file storage types (performance tiers)", + "enum": [ + "STANDARD_1AZ" + ] + }, + "publicCloud.storage.file.FileStorageUpdate": { + "type": "object", + "description": "Payload to update a Public Cloud file storage", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications; represents the current target specification value" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageUpdateTargetSpec" + } + ], + "description": "Desired target specification for the file storage" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.storage.file.FileStorageUpdateTargetSpec": { + "type": "object", + "description": "Target specification for updating a file storage (immutable fields like protocol, shareType, networkId, subnetId are excluded)", + "properties": { + "accessRules": { + "type": "array", + "description": "Access rules controlling which IPs can access the file storage (replaces all existing rules)", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageAccessRuleInput" + } + }, + "description": { + "type": "string", + "description": "Description of the file storage", + "nullable": true + }, + "name": { + "type": "string", + "description": "Desired file storage name" + }, + "size": { + "type": "integer", + "description": "Size of the file storage in GB (can only be increased, not reduced)" + } + }, + "required": [ + "name", + "size" + ] + }, + "publicCloud.storage.object.Bucket": { + "type": "object", + "description": "An S3-compatible object storage bucket", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash representing the current target specification value", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "Creation date of the bucket", + "format": "date-time", + "readOnly": true + }, + "currentState": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketCurrentState" + } + ], + "description": "Current observed state of the bucket", + "nullable": true, + "readOnly": true + }, + "currentTasks": { + "type": "array", + "description": "Ongoing asynchronous tasks related to the bucket", + "nullable": true, + "items": { + "$ref": "#/components/schemas/common.CurrentTask" + }, + "readOnly": true + }, + "id": { + "type": "string", + "description": "Bucket name (used as unique identifier)", + "readOnly": true + }, + "resourceStatus": { + "allOf": [ + { + "$ref": "#/components/schemas/common.ResourceStatusEnum" + } + ], + "description": "Bucket readiness in the system", + "readOnly": true + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketTargetSpec" + } + ], + "description": "Last target specification of the bucket", + "readOnly": true + }, + "updatedAt": { + "type": "string", + "description": "Last update date of the bucket", + "format": "date-time", + "readOnly": true + } + } + }, + "publicCloud.storage.object.BucketCreation": { + "type": "object", + "description": "Payload to create an S3 bucket", + "properties": { + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketTargetSpec" + } + ], + "description": "Desired target specification for the bucket to create" + } + }, + "required": [ + "targetSpec" + ] + }, + "publicCloud.storage.object.BucketCurrentState": { + "type": "object", + "description": "Current observed state of an S3 bucket from the S3 backend", + "properties": { + "encryption": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketEncryptionConfig" + } + ], + "description": "Current encryption configuration", + "nullable": true, + "readOnly": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketLocation" + } + ], + "description": "Geographic region where the bucket is located", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Bucket name", + "readOnly": true + }, + "objectLock": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketObjectLockConfig" + } + ], + "description": "Current object lock configuration", + "nullable": true, + "readOnly": true + }, + "tags": { + "type": "object", + "description": "Current metadata tags", + "nullable": true, + "additionalProperties": { + "type": "string" + }, + "readOnly": true + }, + "versioning": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketVersioningConfig" + } + ], + "description": "Current versioning configuration", + "nullable": true, + "readOnly": true + } + } + }, + "publicCloud.storage.object.BucketEncryptionAlgorithmEnum": { + "type": "string", + "description": "Supported encryption algorithms for S3 buckets", + "enum": [ + "AES256" + ] + }, + "publicCloud.storage.object.BucketEncryptionConfig": { + "type": "object", + "description": "Server-side encryption configuration for an S3 bucket", + "properties": { + "algorithm": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketEncryptionAlgorithmEnum" + } + ], + "description": "Encryption algorithm (e.g. AES256)" + } + }, + "required": [ + "algorithm" + ] + }, + "publicCloud.storage.object.BucketLocation": { + "type": "object", + "description": "Geographic region for an S3 bucket", + "properties": { + "region": { + "type": "string", + "description": "Region identifier (e.g. GRA, SBG, BHS)" + } + }, + "required": [ + "region" + ] + }, + "publicCloud.storage.object.BucketObjectLockConfig": { + "type": "object", + "description": "Object lock (WORM) configuration for an S3 bucket", + "properties": { + "mode": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketObjectLockModeEnum" + } + ], + "description": "Object lock retention mode" + }, + "retentionDays": { + "type": "integer", + "description": "Number of days to retain objects" + }, + "retentionYears": { + "type": "integer", + "description": "Number of years to retain objects (alternative to retentionDays)", + "nullable": true, + "readOnly": true + } + }, + "required": [ + "mode", + "retentionDays" + ] + }, + "publicCloud.storage.object.BucketObjectLockModeEnum": { + "type": "string", + "description": "Object lock retention modes", + "enum": [ + "COMPLIANCE", + "GOVERNANCE" + ] + }, + "publicCloud.storage.object.BucketTargetSpec": { + "type": "object", + "description": "Target specification for an S3 bucket", + "properties": { + "encryption": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketEncryptionConfig" + } + ], + "description": "Server-side encryption configuration", + "nullable": true + }, + "location": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketLocation" + } + ], + "description": "Target geographic region" + }, + "name": { + "type": "string", + "description": "Bucket name (must be globally unique and DNS-compatible)" + }, + "objectLock": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketObjectLockConfig" + } + ], + "description": "Object lock (WORM) configuration; requires versioning to be enabled", + "nullable": true + }, + "ownerUserId": { + "type": "string", + "description": "Owner user identifier", + "nullable": true + }, + "tags": { + "type": "object", + "description": "Metadata tags for the bucket", + "nullable": true, + "additionalProperties": { + "type": "string" + } + }, + "versioning": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketVersioningConfig" + } + ], + "description": "Versioning configuration", + "nullable": true + } + }, + "required": [ + "location", + "name" + ] + }, + "publicCloud.storage.object.BucketUpdate": { + "type": "object", + "description": "Payload to update an S3 bucket", + "properties": { + "checksum": { + "type": "string", + "description": "Computed hash controlling concurrent modifications; represents the current target specification value" + }, + "targetSpec": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketUpdateTargetSpec" + } + ], + "description": "Desired target specification for the bucket" + } + }, + "required": [ + "checksum", + "targetSpec" + ] + }, + "publicCloud.storage.object.BucketUpdateTargetSpec": { + "type": "object", + "description": "Target specification for updating an S3 bucket (mutable fields only)", + "properties": { + "encryption": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketEncryptionConfig" + } + ], + "description": "Server-side encryption configuration", + "nullable": true + }, + "objectLock": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketObjectLockConfig" + } + ], + "description": "Object lock (WORM) configuration; requires versioning to be enabled", + "nullable": true + }, + "ownerUserId": { + "type": "string", + "description": "Owner user identifier", + "nullable": true + }, + "tags": { + "type": "object", + "description": "Metadata tags for the bucket", + "nullable": true, + "additionalProperties": { + "type": "string" + } + }, + "versioning": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketVersioningConfig" + } + ], + "description": "Versioning configuration", + "nullable": true + } + } + }, + "publicCloud.storage.object.BucketVersioningConfig": { + "type": "object", + "description": "Versioning configuration for an S3 bucket", + "properties": { + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketVersioningStatusEnum" + } + ], + "description": "Versioning status" + } + }, + "required": [ + "status" + ] + }, + "publicCloud.storage.object.BucketVersioningStatusEnum": { + "type": "string", + "description": "Versioning status for an S3 bucket", + "enum": [ + "DISABLED", + "ENABLED", + "SUSPENDED" + ] + }, + "publicCloud.storage.object.LifecycleRule": { + "type": "object", + "description": "An S3 bucket lifecycle rule", + "properties": { + "abortIncompleteMultipartUpload": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.LifecycleRuleAbortIncompleteMultipartUpload" + } + ], + "description": "Settings for aborting incomplete multipart uploads", + "nullable": true + }, + "expiration": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.LifecycleRuleExpiration" + } + ], + "description": "Expiration settings for current version objects", + "nullable": true + }, + "filter": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.LifecycleRuleFilter" + } + ], + "description": "Filter criteria for the rule", + "nullable": true + }, + "id": { + "type": "string", + "description": "Lifecycle rule unique identifier" + }, + "noncurrentVersionExpiration": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.LifecycleRuleNoncurrentVersionExpiration" + } + ], + "description": "Expiration settings for noncurrent version objects", + "nullable": true + }, + "noncurrentVersionTransitions": { + "type": "array", + "description": "Transition rules for noncurrent version objects", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.storage.object.LifecycleRuleNoncurrentVersionTransition" + } + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.LifecycleRuleStatusEnum" + } + ], + "description": "Whether the rule is enabled or disabled" + }, + "transitions": { + "type": "array", + "description": "Transition rules for current version objects", + "nullable": true, + "items": { + "$ref": "#/components/schemas/publicCloud.storage.object.LifecycleRuleTransition" + } + } + }, + "required": [ + "id", + "status" + ] + }, + "publicCloud.storage.object.LifecycleRuleAbortIncompleteMultipartUpload": { + "type": "object", + "description": "Settings for aborting incomplete multipart uploads in a lifecycle rule", + "properties": { + "daysAfterInitiation": { + "type": "integer", + "description": "Number of days after initiation to abort incomplete multipart uploads" + } + }, + "required": [ + "daysAfterInitiation" + ] + }, + "publicCloud.storage.object.LifecycleRuleExpiration": { + "type": "object", + "description": "Expiration settings for current object versions in a lifecycle rule", + "properties": { + "date": { + "type": "string", + "description": "Date when objects expire", + "nullable": true, + "format": "date" + }, + "days": { + "type": "integer", + "description": "Number of days after creation when objects expire", + "nullable": true + }, + "expiredObjectDeleteMarker": { + "type": "boolean", + "description": "Whether to remove expired object delete markers", + "nullable": true + } + } + }, + "publicCloud.storage.object.LifecycleRuleFilter": { + "type": "object", + "description": "Filter criteria to select which objects a lifecycle rule applies to", + "properties": { + "objectSizeGreaterThan": { + "type": "integer", + "description": "Minimum object size in bytes for the rule to apply", + "nullable": true + }, + "objectSizeLessThan": { + "type": "integer", + "description": "Maximum object size in bytes for the rule to apply", + "nullable": true + }, + "prefix": { + "type": "string", + "description": "Key prefix to filter objects", + "nullable": true + }, + "tags": { + "type": "object", + "description": "Key-value tag pairs to filter objects", + "nullable": true, + "additionalProperties": { + "type": "string" + } + } + } + }, + "publicCloud.storage.object.LifecycleRuleNoncurrentVersionExpiration": { + "type": "object", + "description": "Expiration settings for noncurrent object versions in a lifecycle rule", + "properties": { + "newerNoncurrentVersions": { + "type": "integer", + "description": "Number of newer noncurrent versions to retain", + "nullable": true + }, + "noncurrentDays": { + "type": "integer", + "description": "Number of days after an object version becomes noncurrent before it expires" + } + }, + "required": [ + "noncurrentDays" + ] + }, + "publicCloud.storage.object.LifecycleRuleNoncurrentVersionTransition": { + "type": "object", + "description": "Storage class transition for noncurrent object versions", + "properties": { + "newerNoncurrentVersions": { + "type": "integer", + "description": "Number of newer noncurrent versions to retain before transitioning", + "nullable": true + }, + "noncurrentDays": { + "type": "integer", + "description": "Number of days after an object version becomes noncurrent before it transitions" + }, + "storageClass": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.StorageClassEnum" + } + ], + "description": "Target storage class for the transition" + } + }, + "required": [ + "noncurrentDays", + "storageClass" + ] + }, + "publicCloud.storage.object.LifecycleRulePut": { + "type": "object", + "description": "Payload to replace all lifecycle rules for an S3 bucket", + "properties": { + "rules": { + "type": "array", + "description": "Array of lifecycle rules. An empty array deletes all rules.", + "items": { + "$ref": "#/components/schemas/publicCloud.storage.object.LifecycleRule" + } + } + }, + "required": [ + "rules" + ] + }, + "publicCloud.storage.object.LifecycleRuleStatusEnum": { + "type": "string", + "description": "Possible statuses for an S3 bucket lifecycle rule", + "enum": [ + "DISABLED", + "ENABLED" + ] + }, + "publicCloud.storage.object.LifecycleRuleTransition": { + "type": "object", + "description": "Storage class transition for current object versions", + "properties": { + "date": { + "type": "string", + "description": "Date (YYYY-MM-DD) when objects transition to another storage class", + "nullable": true + }, + "days": { + "type": "integer", + "description": "Number of days after creation when objects transition", + "nullable": true + }, + "storageClass": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.StorageClassEnum" + } + ], + "description": "Target storage class for the transition" + } + }, + "required": [ + "storageClass" + ] + }, + "publicCloud.storage.object.LifecycleRulesResponse": { + "type": "object", + "description": "Response containing lifecycle rules for an S3 bucket", + "properties": { + "rules": { + "type": "array", + "description": "Array of lifecycle rules", + "items": { + "$ref": "#/components/schemas/publicCloud.storage.object.LifecycleRule" + }, + "readOnly": true + } + } + }, + "publicCloud.storage.object.ReplicationRule": { + "type": "object", + "description": "An S3 bucket replication rule", + "properties": { + "deleteMarkerReplication": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.ReplicationRuleStatusEnum" + } + ], + "description": "Whether delete markers are replicated" + }, + "destination": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.ReplicationRuleDestination" + } + ], + "description": "Destination bucket and settings for replicated objects" + }, + "filter": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.ReplicationRuleFilter" + } + ], + "description": "Filter criteria for the rule", + "nullable": true + }, + "id": { + "type": "string", + "description": "Replication rule unique identifier" + }, + "priority": { + "type": "integer", + "description": "Priority of the replication rule" + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.ReplicationRuleStatusEnum" + } + ], + "description": "Whether the rule is enabled or disabled" + } + }, + "required": [ + "deleteMarkerReplication", + "destination", + "id", + "priority", + "status" + ] + }, + "publicCloud.storage.object.ReplicationRuleDestination": { + "type": "object", + "description": "Destination configuration for replicated objects", + "properties": { + "name": { + "type": "string", + "description": "Name of the destination bucket" + }, + "region": { + "type": "string", + "description": "Region of the destination bucket" + }, + "storageClass": { + "allOf": [ + { + "$ref": "#/components/schemas/publicCloud.storage.object.StorageClassEnum" + } + ], + "description": "Storage class for replicated objects in the destination bucket", + "nullable": true + } + }, + "required": [ + "name", + "region" + ] + }, + "publicCloud.storage.object.ReplicationRuleFilter": { + "type": "object", + "description": "Filter criteria to select which objects a replication rule applies to", + "properties": { + "prefix": { + "type": "string", + "description": "Key prefix to filter objects", + "nullable": true + }, + "tags": { + "type": "object", + "description": "Key-value tag pairs to filter objects", + "nullable": true, + "additionalProperties": { + "type": "string" + } + } + } + }, + "publicCloud.storage.object.ReplicationRulePut": { + "type": "object", + "description": "Payload to replace all replication rules for an S3 bucket", + "properties": { + "rules": { + "type": "array", + "description": "Array of replication rules. An empty array deletes all rules.", + "items": { + "$ref": "#/components/schemas/publicCloud.storage.object.ReplicationRule" + } + } + }, + "required": [ + "rules" + ] + }, + "publicCloud.storage.object.ReplicationRuleStatusEnum": { + "type": "string", + "description": "Possible statuses for an S3 bucket replication rule", + "enum": [ + "DISABLED", + "ENABLED" + ] + }, + "publicCloud.storage.object.ReplicationRulesResponse": { + "type": "object", + "description": "Response containing replication rules for an S3 bucket", + "properties": { + "rules": { + "type": "array", + "description": "Array of replication rules", + "items": { + "$ref": "#/components/schemas/publicCloud.storage.object.ReplicationRule" + }, + "readOnly": true + } + } + }, + "publicCloud.storage.object.StorageClassEnum": { + "type": "string", + "description": "Available S3 storage classes", + "enum": [ + "DEEP_ARCHIVE", + "GLACIER_IR", + "HIGH_PERF", + "STANDARD", + "STANDARD_IA" + ] + }, + "time": { + "type": "string", + "description": "Time (e.g., 15:04:05)", + "format": "time", + "example": "15:04:05" + } + }, + "securitySchemes": { + "oAuth2AuthCode": { + "type": "oauth2", + "description": "Oauth2", + "x-client-id": "1bb9c7df371741c0", + "x-client-secret": "a5b4de870aca620d10fbf63cd18d205b", + "flows": { + "authorizationCode": { + "authorizationUrl": "https://auth.eu.ovhcloud.com/oauth2/authorize", + "tokenUrl": "https://auth.eu.ovhcloud.com/oauth2/token", + "scopes": { + "account/all": "Manage your account", + "all": "Manage your whole account and all your services", + "services/all": "Manage your services lifecycle and billing" + } + } + } + } + } + }, + "paths": { + "/publicCloud/project": { + "get": { + "summary": "List all Public Cloud projects", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "query", + "name": "iamTags", + "description": "Filter resources on IAM tags", + "schema": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/iam.resource.TagFilter" + } + } + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.project.ProjectAsyncWithIAM" + } + } + } + } + } + }, + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:get", + "required": true + } + ], + "x-expanded-response": "PublicCloudProjectProjectAsyncWithIAM" + }, + "post": { + "summary": "Create a new cloud project", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.project.ProjectCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.project.ProjectAsync" + } + } + } + } + }, + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:create", + "required": true + }, + { + "name": "billingAccount:apiovh:subscription/publicCloudProject/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}": { + "get": { + "summary": "Get details on a Public Cloud project", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.project.ProjectAsyncWithIAM" + } + } + } + } + }, + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:get", + "required": true + } + ] + }, + "put": { + "summary": "Update an existing cloud project", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.project.ProjectCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.project.ProjectAsync" + } + } + } + } + }, + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/compute/autobackup": { + "get": { + "summary": "List Public Cloud instance autobackups", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.instance.Autobackup" + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/autobackup/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudInstanceAutobackup" + }, + "post": { + "summary": "Create a new Public Cloud instance autobackup", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.AutobackupCreation" + }, + "examples": { + "Create cross-region autobackup": { + "value": { + "targetSpec": { + "cron": "0 2 * * *", + "distant": { + "imageName": "my-instance-backup-remote", + "region": "SBG1" + }, + "imageName": "my-instance-backup", + "instance": { + "id": "b2c3d4e5-f6a7-8b9c-0d1e-2f3a4b5c6d7e" + }, + "location": { + "region": "GRA1" + }, + "name": "my-autobackup-remote", + "rotation": 7 + } + }, + "summary": "Create a daily autobackup with cross-region copy" + }, + "Create local autobackup": { + "value": { + "targetSpec": { + "cron": "0 2 * * *", + "imageName": "my-instance-backup", + "instance": { + "id": "b2c3d4e5-f6a7-8b9c-0d1e-2f3a4b5c6d7e" + }, + "location": { + "region": "GRA1" + }, + "name": "my-autobackup", + "rotation": 7 + } + }, + "summary": "Create a daily autobackup keeping 7 versions" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.Autobackup" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/autobackup/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/compute/autobackup/{autobackupId}": { + "delete": { + "summary": "Delete a Public Cloud instance autobackup", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "autobackupId", + "description": "Autobackup ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.Autobackup" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::AutobackupDoesNotExist": { + "value": { + "class": "Client::NotFound::AutobackupDoesNotExist", + "message": "Autobackup policy not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/autobackup/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud instance autobackup", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "autobackupId", + "description": "Autobackup ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.Autobackup" + }, + "examples": { + "Example": { + "value": { + "checksum": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", + "createdAt": "2026-03-15T10:30:00Z", + "currentState": { + "cron": "0 2 * * *", + "imageName": "my-instance-backup", + "instance": { + "id": "b2c3d4e5-f6a7-8b9c-0d1e-2f3a4b5c6d7e" + }, + "lastExecutions": [ + { + "errorMessage": null, + "id": "11111111-1111-1111-1111-111111111111", + "startedAt": "2026-03-15T02:00:00Z", + "state": "SUCCESS", + "updatedAt": "2026-03-15T02:04:12Z" + }, + { + "errorMessage": "Failed to create snapshot: quota exceeded for snapshots", + "id": "22222222-2222-2222-2222-222222222222", + "startedAt": "2026-03-14T02:00:00Z", + "state": "ERROR", + "updatedAt": "2026-03-14T02:01:47Z" + }, + { + "errorMessage": null, + "id": "33333333-3333-3333-3333-333333333333", + "startedAt": "2026-03-16T02:00:00Z", + "state": "RUNNING", + "updatedAt": "2026-03-16T02:00:05Z" + } + ], + "location": { + "region": "GRA1" + }, + "name": "my-autobackup", + "nextExecutionTime": "2026-03-16T02:00:00Z", + "rotation": 7, + "workflowName": "ovh.backup_vm" + }, + "currentTasks": [], + "id": "c4d5e6f7-a8b9-0c1d-2e3f-4a5b6c7d8e9f", + "resourceStatus": "READY", + "targetSpec": { + "cron": "0 2 * * *", + "imageName": "my-instance-backup", + "instance": { + "id": "b2c3d4e5-f6a7-8b9c-0d1e-2f3a4b5c6d7e" + }, + "location": { + "region": "GRA1" + }, + "name": "my-autobackup", + "rotation": 7 + }, + "updatedAt": "2026-03-15T10:35:00Z" + }, + "summary": "Example" + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::AutobackupDoesNotExist": { + "value": { + "class": "Client::NotFound::AutobackupDoesNotExist", + "message": "Autobackup policy not found" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/autobackup/get", + "required": true + } + ], + "x-response-identifier": "id" + } + }, + "/publicCloud/project/{projectId}/compute/backup": { + "get": { + "summary": "List Public Cloud instance backups", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.instance.Backup" + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/backup/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudInstanceBackup" + }, + "post": { + "summary": "Create a new Public Cloud instance backup", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.BackupCreation" + }, + "examples": { + "Create backup": { + "value": { + "targetSpec": { + "instance": { + "id": "3f49128c-48b0-44ce-ac0c-f17a68078a5c" + }, + "location": { + "region": "GRA1" + }, + "name": "my-instance-backup" + } + }, + "summary": "Create a backup of a running instance" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.Backup" + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + }, + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/backup/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/compute/backup/{backupId}": { + "delete": { + "summary": "Delete a Public Cloud instance backup", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "backupId", + "description": "Backup ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.Backup" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::InstanceBackupDoesNotExist": { + "value": { + "class": "Client::NotFound::InstanceBackupDoesNotExist", + "message": "Instance backup not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/backup/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud instance backup", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "backupId", + "description": "Backup ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.Backup" + }, + "examples": { + "Example": { + "value": { + "checksum": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", + "createdAt": "2026-03-15T10:30:00Z", + "currentState": { + "instance": { + "id": "3f49128c-48b0-44ce-ac0c-f17a68078a5c" + }, + "location": { + "region": "GRA1" + }, + "minDisk": 50, + "minRam": 7000, + "name": "my-instance-backup", + "size": 10737418240, + "status": "ACTIVE", + "visibility": "PRIVATE" + }, + "currentTasks": [], + "id": "b8e2f4a6-1c3d-5e7f-9a0b-2d4e6f8a0c2e", + "resourceStatus": "READY", + "targetSpec": { + "instance": { + "id": "3f49128c-48b0-44ce-ac0c-f17a68078a5c" + }, + "location": { + "region": "GRA1" + }, + "name": "my-instance-backup" + }, + "updatedAt": "2026-03-15T10:35:00Z" + }, + "summary": "Example" + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::InstanceBackupDoesNotExist": { + "value": { + "class": "Client::NotFound::InstanceBackupDoesNotExist", + "message": "Instance backup not found" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/backup/get", + "required": true + } + ], + "x-response-identifier": "id" + } + }, + "/publicCloud/project/{projectId}/compute/instance": { + "get": { + "summary": "List Public Cloud instances", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.instance.Instance" + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudInstanceInstance" + }, + "post": { + "summary": "Create a new Public Cloud instance", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.InstanceCreation" + }, + "examples": { + "Create instance": { + "value": { + "targetSpec": { + "flavor": { + "id": "068a57cf-b1b4-428f-9b17-4f32a526390c" + }, + "image": { + "id": "8d75e170-1ef9-4e25-8fc8-d231929e56e8" + }, + "location": { + "region": "GRA1" + }, + "name": "b2-7-gra1", + "networks": [ + { + "public": true + }, + { + "floatingIpId": "2a5d5f2f-f9b8-4e9e-b3c2-4f7c9e3d0a11", + "id": "07e9dc62-8879-4a84-afc9-aae07640f4d9", + "public": false, + "subnetId": "de04e8aa-f187-11f0-8eac-0050568ce122" + } + ], + "sshKeyName": "example-key", + "volumes": [ + { + "id": "3809b388-066f-4c79-9d77-881a7cd19629" + } + ] + } + }, + "summary": "Create an instance with minimal target spec" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.Instance" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::NameAlreadyInUse": { + "value": { + "class": "Client::Conflict::NameAlreadyInUse", + "message": "This name is already in use" + } + }, + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/create", + "required": true + }, + { + "name": "publicCloudProject:apiovh:instance/usePublicIP", + "description": "Required when configuring a public network", + "required": false + } + ] + } + }, + "/publicCloud/project/{projectId}/compute/instance/{instanceId}": { + "delete": { + "summary": "Delete a Public Cloud instance", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "instanceId", + "description": "Instance ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.Instance" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::InstanceDoesNotExist": { + "value": { + "class": "Client::NotFound::InstanceDoesNotExist", + "message": "Instance not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud instance", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "instanceId", + "description": "Instance ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.Instance" + }, + "examples": { + "Example": { + "value": { + "checksum": "2ca2c085daf219b8fc232f7debf662d3", + "createdAt": "2026-01-13T07:44:09Z", + "currentState": { + "flavor": { + "disk": 50, + "id": "068a57cf-b1b4-428f-9b17-4f32a526390c", + "name": "b2-7", + "ram": 7000, + "vcpus": 2 + }, + "hostId": "ca6b3b32604b9708149fbc88929730102eddedc04d4bcf1ee897ac96", + "image": { + "deprecated": false, + "id": "8d75e170-1ef9-4e25-8fc8-d231929e56e8", + "name": "Rocky Linux 9", + "size": 10737418240, + "status": "ACTIVE" + }, + "location": { + "region": "GRA1" + }, + "locked": false, + "name": "b2-7-gra1", + "networks": [ + { + "addresses": [ + { + "ip": "1.2.3.4", + "mac": "fa:16:3e:f6:a9:76", + "type": "fixed", + "version": 4 + }, + { + "ip": "2001:41d0:394:610::284", + "mac": "fa:16:3e:f6:a9:76", + "type": "fixed", + "version": 6 + } + ], + "id": "fbdf6240-8b56-4626-b57c-25e4af487606", + "public": true + }, + { + "addresses": [ + { + "ip": "10.1.1.99", + "mac": "fa:16:3e:7c:19:c6", + "type": "fixed", + "version": 4 + } + ], + "floatingIpId": "2a5d5f2f-f9b8-4e9e-b3c2-4f7c9e3d0a11", + "gatewayId": "5b6f6d9a-0d34-4db0-bf4d-1c5c1234abcd", + "id": "07e9dc62-8879-4a84-afc9-aae07640f4d9", + "public": false, + "subnetId": "de04e8aa-f187-11f0-8eac-0050568ce122" + } + ], + "powerState": "ACTIVE", + "projectId": "356931134f174c5f88c3fe61e2203017", + "securityGroups": [ + { + "id": "03d7387e-247a-11f1-a352-0050568ce122" + } + ], + "sshKeyName": "example-key", + "userId": "af0e25a89d734337b9c221608a84c6b5", + "volumes": [ + { + "id": "3809b388-066f-4c79-9d77-881a7cd19629", + "name": "classic-GRA1.10GB", + "size": 10 + } + ] + }, + "currentTasks": [], + "id": "3f49128c-48b0-44ce-ac0c-f17a68078a5c", + "resourceStatus": "READY", + "targetSpec": { + "flavor": { + "id": "068a57cf-b1b4-428f-9b17-4f32a526390c" + }, + "image": { + "id": "8d75e170-1ef9-4e25-8fc8-d231929e56e8" + }, + "location": { + "region": "GRA1" + }, + "name": "b2-7-gra1", + "networks": [ + { + "public": true + }, + { + "floatingIpId": "2a5d5f2f-f9b8-4e9e-b3c2-4f7c9e3d0a11", + "id": "07e9dc62-8879-4a84-afc9-aae07640f4d9", + "public": false, + "subnetId": "de04e8aa-f187-11f0-8eac-0050568ce122" + } + ], + "powerState": "ACTIVE", + "sshKeyName": "example-key", + "volumes": [ + { + "id": "3809b388-066f-4c79-9d77-881a7cd19629" + } + ] + }, + "updatedAt": "2026-01-13T08:01:59Z" + }, + "summary": "Example" + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::InstanceDoesNotExist": { + "value": { + "class": "Client::NotFound::InstanceDoesNotExist", + "message": "Instance not found" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update an existing Public Cloud instance", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "instanceId", + "description": "Instance ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.InstanceUpdate" + }, + "examples": { + "Update instance target spec": { + "value": { + "checksum": "2ca2c085daf219b8fc232f7debf662d3", + "targetSpec": { + "flavor": { + "id": "068a57cf-b1b4-428f-9b17-4f32a526390c" + }, + "image": { + "id": "8d75e170-1ef9-4e25-8fc8-d231929e56e8" + }, + "name": "b2-7-gra1", + "networks": [ + { + "public": true + }, + { + "floatingIpId": "2a5d5f2f-f9b8-4e9e-b3c2-4f7c9e3d0a11", + "id": "07e9dc62-8879-4a84-afc9-aae07640f4d9", + "public": false, + "subnetId": "de04e8aa-f187-11f0-8eac-0050568ce122" + } + ], + "volumes": [ + { + "id": "3809b388-066f-4c79-9d77-881a7cd19629" + } + ] + } + }, + "summary": "Update flavor and image of an instance using optimistic concurrency with checksum" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.Instance" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::InstanceDoesNotExist": { + "value": { + "class": "Client::NotFound::InstanceDoesNotExist", + "message": "Instance not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/edit", + "required": true + }, + { + "name": "publicCloudProject:apiovh:instance/usePublicIP", + "description": "Required when configuring a public network", + "required": false + } + ] + } + }, + "/publicCloud/project/{projectId}/compute/instance/{instanceId}/action": { + "post": { + "summary": "Perform an action on a Public Cloud instance (reboot, rescue, unrescue)", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "instanceId", + "description": "Instance ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.InstanceActionRequest" + }, + "examples": { + "Lock instance": { + "value": { + "checksum": "2ca2c085daf219b8fc232f7debf662d3", + "type": "LOCK" + }, + "summary": "Lock an instance to prevent accidental modifications" + }, + "Reboot instance": { + "value": { + "checksum": "2ca2c085daf219b8fc232f7debf662d3", + "parameters": { + "hard": true + }, + "type": "REBOOT" + }, + "summary": "Perform a hard reboot on an instance" + }, + "Rescue instance": { + "value": { + "checksum": "2ca2c085daf219b8fc232f7debf662d3", + "parameters": { + "imageId": "8d75e170-1ef9-4e25-8fc8-d231929e56e8" + }, + "type": "RESCUE" + }, + "summary": "Put an instance in rescue mode" + }, + "Unlock instance": { + "value": { + "checksum": "2ca2c085daf219b8fc232f7debf662d3", + "type": "UNLOCK" + }, + "summary": "Unlock a previously locked instance" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.Instance" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::InstanceDoesNotExist": { + "value": { + "class": "Client::NotFound::InstanceDoesNotExist", + "message": "Instance not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/runAction", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/compute/instance/{instanceId}/console": { + "post": { + "summary": "Create a remote console for a Public Cloud instance", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "instanceId", + "description": "Instance ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.RemoteConsoleRequest" + }, + "examples": { + "Serial console": { + "value": { + "protocol": "SERIAL", + "type": "SERIAL" + }, + "summary": "Create a serial console" + }, + "VNC console": { + "value": { + "protocol": "VNC", + "type": "NOVNC" + }, + "summary": "Create a noVNC remote console" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.RemoteConsole" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::InstanceDoesNotExist": { + "value": { + "class": "Client::NotFound::InstanceDoesNotExist", + "message": "Instance not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/createConsole", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/compute/instance/{instanceId}/consoleOutput": { + "get": { + "summary": "Get console output from a Public Cloud instance", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "instanceId", + "description": "Instance ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "query", + "name": "length", + "description": "Number of lines to retrieve from the end of the console log. If omitted, returns all available output.", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instance.ConsoleOutput" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::InstanceDoesNotExist": { + "value": { + "class": "Client::NotFound::InstanceDoesNotExist", + "message": "Instance not found" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/getConsoleOutput", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/compute/instance/{instanceId}/events": { + "get": { + "summary": "List events for a Public Cloud instance. Returns an audit log of actions performed on the instance.", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "instanceId", + "description": "Instance ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/common.Event" + } + }, + "examples": { + "Instance events": { + "value": [ + { + "createdAt": "2026-03-20T14:30:00Z", + "kind": "REBOOT", + "link": null, + "message": "Instance reboot completed", + "type": "TASK_SUCCESS" + }, + { + "createdAt": "2026-03-19T10:00:00Z", + "kind": "CREATE", + "link": null, + "message": "Instance create completed", + "type": "TASK_SUCCESS" + } + ], + "summary": "Example event list for an instance" + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instance/event/get", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/compute/instanceGroup": { + "get": { + "summary": "List Public Cloud instance groups", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.instanceGroup.InstanceGroup" + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instanceGroup/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudInstanceGroupInstanceGroup" + }, + "post": { + "summary": "Create a new Public Cloud instance group", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instanceGroup.InstanceGroupCreation" + }, + "examples": { + "Create instance group": { + "value": { + "targetSpec": { + "location": { + "region": "GRA1" + }, + "name": "my-anti-affinity-group", + "policy": "ANTI_AFFINITY" + } + }, + "summary": "Create an instance group with anti-affinity policy" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instanceGroup.InstanceGroup" + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instanceGroup/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/compute/instanceGroup/{instanceGroupId}": { + "delete": { + "summary": "Delete a Public Cloud instance group", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "instanceGroupId", + "description": "Instance group ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instanceGroup.InstanceGroup" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::InstanceGroupDoesNotExist": { + "value": { + "class": "Client::NotFound::InstanceGroupDoesNotExist", + "message": "Instance group not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instanceGroup/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud instance group", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "instanceGroupId", + "description": "Instance group ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.instanceGroup.InstanceGroup" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::InstanceGroupDoesNotExist": { + "value": { + "class": "Client::NotFound::InstanceGroupDoesNotExist", + "message": "Instance group not found" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:instanceGroup/get", + "required": true + } + ], + "x-response-identifier": "id" + } + }, + "/publicCloud/project/{projectId}/floatingIp": { + "get": { + "summary": "List floating IPs", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIP" + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:floatingIp/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudFloatingIpFloatingIP" + }, + "post": { + "summary": "Create a floating IP", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIPCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIP" + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:floatingIp/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/floatingIp/{floatingIpId}": { + "delete": { + "summary": "Delete a floating IP", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "floatingIpId", + "description": "Floating ip ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIP" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::FloatingIPDoesNotExist": { + "value": { + "class": "Client::NotFound::FloatingIPDoesNotExist", + "message": "Floating IP not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:floatingIp/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a floating IP", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "floatingIpId", + "description": "Floating ip ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIP" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::FloatingIPDoesNotExist": { + "value": { + "class": "Client::NotFound::FloatingIPDoesNotExist", + "message": "Floating IP not found" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:floatingIp/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update a floating IP", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "floatingIpId", + "description": "Floating ip ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIPUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.floatingIp.FloatingIP" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::FloatingIPDoesNotExist": { + "value": { + "class": "Client::NotFound::FloatingIPDoesNotExist", + "message": "Floating IP not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:floatingIp/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/gateway": { + "get": { + "summary": "List gateways", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.gateway.Gateway" + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:gateway/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudGatewayGateway" + }, + "post": { + "summary": "Create a gateway", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.gateway.GatewayCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.gateway.Gateway" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:gateway/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/gateway/{gatewayId}": { + "delete": { + "summary": "Delete a gateway", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "gatewayId", + "description": "Gateway ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.gateway.Gateway" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::GatewayDoesNotExist": { + "value": { + "class": "Client::NotFound::GatewayDoesNotExist", + "message": "Gateway not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:gateway/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a gateway", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "gatewayId", + "description": "Gateway ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.gateway.Gateway" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::GatewayDoesNotExist": { + "value": { + "class": "Client::NotFound::GatewayDoesNotExist", + "message": "Gateway not found" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:gateway/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update a gateway", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "gatewayId", + "description": "Gateway ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.gateway.GatewayUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.gateway.Gateway" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::GatewayDoesNotExist": { + "value": { + "class": "Client::NotFound::GatewayDoesNotExist", + "message": "Gateway not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:gateway/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/keyManager/container": { + "get": { + "summary": "List Public Cloud key manager containers", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.keyManager.Container" + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/container/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudKeyManagerContainer" + }, + "post": { + "summary": "Create a new Public Cloud key manager container", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.Container" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::ServiceNotAvailableInRegion": { + "value": { + "class": "Client::BadRequest::ServiceNotAvailableInRegion", + "message": "This service is not available in the selected region" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/container/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/keyManager/container/{containerId}": { + "delete": { + "summary": "Delete a Public Cloud key manager container", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "containerId", + "description": "Container ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.Container" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ContainerDoesNotExist": { + "value": { + "class": "Client::NotFound::ContainerDoesNotExist", + "message": "Container not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/container/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud key manager container", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "containerId", + "description": "Container ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.Container" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ContainerDoesNotExist": { + "value": { + "class": "Client::NotFound::ContainerDoesNotExist", + "message": "Container not found" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/container/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update a Public Cloud key manager container", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "containerId", + "description": "Container ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.Container" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ContainerDoesNotExist": { + "value": { + "class": "Client::NotFound::ContainerDoesNotExist", + "message": "Container not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/container/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/keyManager/container/{containerId}/consumer": { + "get": { + "summary": "List consumers of a Key Manager container", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "containerId", + "description": "Container ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerConsumer" + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/container/consumer/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudKeyManagerContainerConsumer" + }, + "post": { + "summary": "Register a consumer for a Key Manager container", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "containerId", + "description": "Container ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerConsumerInput" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerConsumer" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ContainerDoesNotExist": { + "value": { + "class": "Client::NotFound::ContainerDoesNotExist", + "message": "Container not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/container/consumer/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/keyManager/container/{containerId}/consumer/{consumerId}": { + "delete": { + "summary": "Delete a consumer from a Key Manager container", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "consumerId", + "description": "Consumer ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "containerId", + "description": "Container ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerConsumer" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ConsumerDoesNotExist": { + "value": { + "class": "Client::NotFound::ConsumerDoesNotExist", + "message": "Consumer not found" + } + }, + "Client::NotFound::ContainerDoesNotExist": { + "value": { + "class": "Client::NotFound::ContainerDoesNotExist", + "message": "Container not found" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/container/consumer/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a consumer of a Key Manager container", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "consumerId", + "description": "Consumer ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "containerId", + "description": "Container ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.ContainerConsumer" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ConsumerDoesNotExist": { + "value": { + "class": "Client::NotFound::ConsumerDoesNotExist", + "message": "Consumer not found" + } + }, + "Client::NotFound::ContainerDoesNotExist": { + "value": { + "class": "Client::NotFound::ContainerDoesNotExist", + "message": "Container not found" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/container/consumer/get", + "required": true + } + ], + "x-response-identifier": "id" + } + }, + "/publicCloud/project/{projectId}/keyManager/secret": { + "get": { + "summary": "List Public Cloud Key Manager secrets", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.keyManager.Secret" + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/secret/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudKeyManagerSecret" + }, + "post": { + "summary": "Create a new Public Cloud Key Manager secret", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.Secret" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + }, + "Client::BadRequest::ServiceNotAvailableInRegion": { + "value": { + "class": "Client::BadRequest::ServiceNotAvailableInRegion", + "message": "This service is not available in the selected region" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/secret/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/keyManager/secret/{secretId}": { + "delete": { + "summary": "Delete a Public Cloud Key Manager secret", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "secretId", + "description": "Secret ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.Secret" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SecretDoesNotExist": { + "value": { + "class": "Client::NotFound::SecretDoesNotExist", + "message": "Secret not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/secret/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud Key Manager secret", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "secretId", + "description": "Secret ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.Secret" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SecretDoesNotExist": { + "value": { + "class": "Client::NotFound::SecretDoesNotExist", + "message": "Secret not found" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/secret/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update a Public Cloud Key Manager secret", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "secretId", + "description": "Secret ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.Secret" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SecretDoesNotExist": { + "value": { + "class": "Client::NotFound::SecretDoesNotExist", + "message": "Secret not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/secret/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/keyManager/secret/{secretId}/consumer": { + "get": { + "summary": "List consumers of a Key Manager secret", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "secretId", + "description": "Secret ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretConsumer" + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/secret/consumer/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudKeyManagerSecretConsumer" + }, + "post": { + "summary": "Register a consumer for a Key Manager secret", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "secretId", + "description": "Secret ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretConsumerInput" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretConsumer" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SecretDoesNotExist": { + "value": { + "class": "Client::NotFound::SecretDoesNotExist", + "message": "Secret not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/secret/consumer/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/keyManager/secret/{secretId}/consumer/{consumerId}": { + "delete": { + "summary": "Delete a consumer from a Key Manager secret", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "consumerId", + "description": "Consumer ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "secretId", + "description": "Secret ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretConsumer" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ConsumerDoesNotExist": { + "value": { + "class": "Client::NotFound::ConsumerDoesNotExist", + "message": "Consumer not found" + } + }, + "Client::NotFound::SecretDoesNotExist": { + "value": { + "class": "Client::NotFound::SecretDoesNotExist", + "message": "Secret not found" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/secret/consumer/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a consumer of a Key Manager secret", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "consumerId", + "description": "Consumer ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "secretId", + "description": "Secret ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretConsumer" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ConsumerDoesNotExist": { + "value": { + "class": "Client::NotFound::ConsumerDoesNotExist", + "message": "Consumer not found" + } + }, + "Client::NotFound::SecretDoesNotExist": { + "value": { + "class": "Client::NotFound::SecretDoesNotExist", + "message": "Secret not found" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/secret/consumer/get", + "required": true + } + ], + "x-response-identifier": "id" + } + }, + "/publicCloud/project/{projectId}/keyManager/secret/{secretId}/payload": { + "post": { + "summary": "Fetch the payload of a Key Manager secret", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "secretId", + "description": "Secret ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.keyManager.SecretPayload" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SecretDoesNotExist": { + "value": { + "class": "Client::NotFound::SecretDoesNotExist", + "message": "Secret not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "KeyManager" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:keyManager/secret/payload/get", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/loadbalancer": { + "get": { + "summary": "List Public Cloud load balancers", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Loadbalancer" + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudLoadbalancerLoadbalancer" + }, + "post": { + "summary": "Create a new Public Cloud load balancer", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Loadbalancer" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::ServiceNotAvailableInRegion": { + "value": { + "class": "Client::BadRequest::ServiceNotAvailableInRegion", + "message": "This service is not available in the selected region" + } + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::FlavorDoesNotExist": { + "value": { + "class": "Client::NotFound::FlavorDoesNotExist", + "message": "Flavor not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/loadbalancer/{loadbalancerId}": { + "delete": { + "summary": "Delete a Public Cloud load balancer", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Loadbalancer" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::LoadBalancerDoesNotExist": { + "value": { + "class": "Client::NotFound::LoadBalancerDoesNotExist", + "message": "Load balancer not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud load balancer", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Loadbalancer" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::LoadBalancerDoesNotExist": { + "value": { + "class": "Client::NotFound::LoadBalancerDoesNotExist", + "message": "Load balancer not found" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update an existing Public Cloud load balancer", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.LoadbalancerUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Loadbalancer" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::LoadBalancerDoesNotExist": { + "value": { + "class": "Client::NotFound::LoadBalancerDoesNotExist", + "message": "Load balancer not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/loadbalancer/{loadbalancerId}/listener": { + "get": { + "summary": "List Public Cloud load balancer listeners", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Listener" + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/listener/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudLoadbalancerListener" + }, + "post": { + "summary": "Create a new Public Cloud load balancer listener", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Listener" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::ServiceNotAvailableInRegion": { + "value": { + "class": "Client::BadRequest::ServiceNotAvailableInRegion", + "message": "This service is not available in the selected region" + } + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::LoadBalancerDoesNotExist": { + "value": { + "class": "Client::NotFound::LoadBalancerDoesNotExist", + "message": "Load balancer not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/listener/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/loadbalancer/{loadbalancerId}/listener/{listenerId}": { + "delete": { + "summary": "Delete a Public Cloud load balancer listener", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "listenerId", + "description": "Listener ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Listener" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ListenerDoesNotExist": { + "value": { + "class": "Client::NotFound::ListenerDoesNotExist", + "message": "Listener not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/listener/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud load balancer listener", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "listenerId", + "description": "Listener ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Listener" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ListenerDoesNotExist": { + "value": { + "class": "Client::NotFound::ListenerDoesNotExist", + "message": "Listener not found" + } + }, + "Client::NotFound::LoadBalancerDoesNotExist": { + "value": { + "class": "Client::NotFound::LoadBalancerDoesNotExist", + "message": "Load balancer not found" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/listener/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update an existing Public Cloud load balancer listener", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "listenerId", + "description": "Listener ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.ListenerUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Listener" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ListenerDoesNotExist": { + "value": { + "class": "Client::NotFound::ListenerDoesNotExist", + "message": "Listener not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/listener/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/loadbalancer/{loadbalancerId}/listener/{listenerId}/l7policy": { + "get": { + "summary": "List Public Cloud load balancer L7 policies", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "listenerId", + "description": "Listener ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7Policy" + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/listener/L7policy/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudLoadbalancerL7Policy" + }, + "post": { + "summary": "Create a new Public Cloud load balancer L7 policy", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "listenerId", + "description": "Listener ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7PolicyCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7Policy" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::ServiceNotAvailableInRegion": { + "value": { + "class": "Client::BadRequest::ServiceNotAvailableInRegion", + "message": "This service is not available in the selected region" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/listener/L7policy/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/loadbalancer/{loadbalancerId}/listener/{listenerId}/l7policy/{l7PolicyId}": { + "delete": { + "summary": "Delete a Public Cloud load balancer L7 policy", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "l7PolicyId", + "description": "L7 policy ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "listenerId", + "description": "Listener ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7Policy" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ListenerDoesNotExist": { + "value": { + "class": "Client::NotFound::ListenerDoesNotExist", + "message": "Listener not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/listener/L7policy/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud load balancer L7 policy", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "l7PolicyId", + "description": "L7 policy ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "listenerId", + "description": "Listener ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7Policy" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ListenerDoesNotExist": { + "value": { + "class": "Client::NotFound::ListenerDoesNotExist", + "message": "Listener not found" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/listener/L7policy/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update an existing Public Cloud load balancer L7 policy", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "l7PolicyId", + "description": "L7 policy ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "listenerId", + "description": "Listener ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7PolicyUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.L7Policy" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ListenerDoesNotExist": { + "value": { + "class": "Client::NotFound::ListenerDoesNotExist", + "message": "Listener not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/listener/L7policy/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/loadbalancer/{loadbalancerId}/pool": { + "get": { + "summary": "List Public Cloud load balancer pools", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Pool" + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/pool/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudLoadbalancerPool" + }, + "post": { + "summary": "Create a new Public Cloud load balancer pool", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.PoolCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Pool" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::ServiceNotAvailableInRegion": { + "value": { + "class": "Client::BadRequest::ServiceNotAvailableInRegion", + "message": "This service is not available in the selected region" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/pool/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/loadbalancer/{loadbalancerId}/pool/{poolId}": { + "delete": { + "summary": "Delete a Public Cloud load balancer pool", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "poolId", + "description": "Pool ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Pool" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::PoolDoesNotExist": { + "value": { + "class": "Client::NotFound::PoolDoesNotExist", + "message": "Pool not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/pool/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud load balancer pool", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "poolId", + "description": "Pool ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Pool" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::PoolDoesNotExist": { + "value": { + "class": "Client::NotFound::PoolDoesNotExist", + "message": "Pool not found" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/pool/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update an existing Public Cloud load balancer pool", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "poolId", + "description": "Pool ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.PoolUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Pool" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::PoolDoesNotExist": { + "value": { + "class": "Client::NotFound::PoolDoesNotExist", + "message": "Pool not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/pool/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/loadbalancer/{loadbalancerId}/pool/{poolId}/member": { + "get": { + "summary": "List Public Cloud load balancer pool members", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "poolId", + "description": "Pool ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Member" + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/pool/member/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudLoadbalancerMember" + }, + "post": { + "summary": "Create a new Public Cloud load balancer pool member", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "poolId", + "description": "Pool ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.MemberCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Member" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::ServiceNotAvailableInRegion": { + "value": { + "class": "Client::BadRequest::ServiceNotAvailableInRegion", + "message": "This service is not available in the selected region" + } + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::PoolDoesNotExist": { + "value": { + "class": "Client::NotFound::PoolDoesNotExist", + "message": "Pool not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/pool/member/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/loadbalancer/{loadbalancerId}/pool/{poolId}/member/{memberId}": { + "delete": { + "summary": "Delete a Public Cloud load balancer pool member", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "memberId", + "description": "Member ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "poolId", + "description": "Pool ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Member" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::MemberDoesNotExist": { + "value": { + "class": "Client::NotFound::MemberDoesNotExist", + "message": "Member not found" + } + }, + "Client::NotFound::PoolDoesNotExist": { + "value": { + "class": "Client::NotFound::PoolDoesNotExist", + "message": "Pool not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/pool/member/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud load balancer pool member", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "memberId", + "description": "Member ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "poolId", + "description": "Pool ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Member" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::MemberDoesNotExist": { + "value": { + "class": "Client::NotFound::MemberDoesNotExist", + "message": "Member not found" + } + }, + "Client::NotFound::PoolDoesNotExist": { + "value": { + "class": "Client::NotFound::PoolDoesNotExist", + "message": "Pool not found" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/pool/member/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update an existing Public Cloud load balancer pool member", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "loadbalancerId", + "description": "Loadbalancer ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "memberId", + "description": "Member ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "poolId", + "description": "Pool ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.MemberUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.loadbalancer.Member" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::MemberDoesNotExist": { + "value": { + "class": "Client::NotFound::MemberDoesNotExist", + "message": "Member not found" + } + }, + "Client::NotFound::PoolDoesNotExist": { + "value": { + "class": "Client::NotFound::PoolDoesNotExist", + "message": "Pool not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Loadbalancer" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:loadbalancer/pool/member/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/network": { + "get": { + "summary": "List Public Cloud networks", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.network.Network" + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:network/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudNetworkNetwork" + }, + "post": { + "summary": "Create a new Public Cloud network", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.network.NetworkCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.network.Network" + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:network/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/network/{networkId}": { + "delete": { + "summary": "Delete a Public Cloud network", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "networkId", + "description": "Network ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.network.Network" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::NetworkDoesNotExist": { + "value": { + "class": "Client::NotFound::NetworkDoesNotExist", + "message": "Network not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:network/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud network", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "networkId", + "description": "Network ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.network.Network" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::NetworkDoesNotExist": { + "value": { + "class": "Client::NotFound::NetworkDoesNotExist", + "message": "Network not found" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:network/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update an existing Public Cloud network", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "networkId", + "description": "Network ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.network.NetworkUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.network.Network" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::NetworkDoesNotExist": { + "value": { + "class": "Client::NotFound::NetworkDoesNotExist", + "message": "Network not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:network/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/network/{networkId}/subnet": { + "get": { + "summary": "List subnets within a network", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "networkId", + "description": "Network ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.network.Subnet" + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:network/subnet/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudNetworkSubnet" + }, + "post": { + "summary": "Create a subnet in a network", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "networkId", + "description": "Network ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.network.SubnetCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.network.Subnet" + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:network/subnet/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/network/{networkId}/subnet/{subnetId}": { + "delete": { + "summary": "Delete a subnet from a network", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "networkId", + "description": "Network ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "subnetId", + "description": "Subnet ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.network.Subnet" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SubnetDoesNotExist": { + "value": { + "class": "Client::NotFound::SubnetDoesNotExist", + "message": "Subnet not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:network/subnet/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a subnet within a network", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "networkId", + "description": "Network ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "subnetId", + "description": "Subnet ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.network.Subnet" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SubnetDoesNotExist": { + "value": { + "class": "Client::NotFound::SubnetDoesNotExist", + "message": "Subnet not found" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:network/subnet/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update a subnet in a network", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "networkId", + "description": "Network ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "subnetId", + "description": "Subnet ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.network.SubnetUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.network.Subnet" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SubnetDoesNotExist": { + "value": { + "class": "Client::NotFound::SubnetDoesNotExist", + "message": "Subnet not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:network/subnet/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/quota": { + "get": { + "summary": "Get the project quota", + "description": "Get the project quota. When the `region` query parameter is set, the response narrows `targetSpec.regions` and `currentState.regions` to that single region. Omit it to get all regions.", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "region", + "description": "Optional region filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.quota.Quota" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::ServiceNotAvailableInRegion": { + "value": { + "class": "Client::BadRequest::ServiceNotAvailableInRegion", + "message": "This service is not available in the selected region" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Quota" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:quota/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update the project quota", + "description": "Update the project quota. Regions omitted from `targetSpec.regions` are left unchanged. `preventAutomaticQuotaUpgrade` is required.", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.quota.QuotaUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.quota.Quota" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + }, + "Client::BadRequest::ServiceNotAvailableInRegion": { + "value": { + "class": "Client::BadRequest::ServiceNotAvailableInRegion", + "message": "This service is not available in the selected region" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Quota" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:quota/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/rancher": { + "get": { + "summary": "List managed Rancher services", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.rancher.Rancher" + } + }, + "examples": { + "Example": { + "value": [ + { + "createdAt": "2020-12-31T07:39:19Z", + "currentState": { + "iamAuthEnabled": false, + "ipRestrictions": [ + { + "cidrBlock": "198.51.100.1/32", + "description": "My IP restriction" + } + ], + "name": "my_rancher", + "networking": { + "egressCidrBlocks": [ + "203.0.113.0/24" + ] + }, + "plan": "OVHCLOUD_EDITION", + "region": "EU_WEST_RBX", + "url": "https://aaaaaa.bbbb.rancher.ovhcloud.example", + "usage": { + "datetime": "2020-12-31T13:00:00Z", + "orchestratedVcpus": 16 + }, + "version": "1.0.0" + }, + "currentTasks": [], + "id": "d6b6579e-8d60-4487-bf08-8b4ddf98f7d3", + "resourceStatus": "READY", + "targetSpec": { + "iamAuthEnabled": false, + "ipRestrictions": [ + { + "cidrBlock": "198.51.100.1/32", + "description": "My IP restriction" + } + ], + "name": "my_rancher", + "plan": "OVHCLOUD_EDITION", + "version": "1.0.0" + }, + "updatedAt": "2020-12-31T07:39:19Z" + }, + { + "createdAt": "2020-12-31T13:37:46Z", + "currentState": { + "iamAuthEnabled": false, + "ipRestrictions": [], + "name": "rancher2", + "plan": "STANDARD", + "region": "EU_WEST_RBX", + "url": "https://cccccc.bbbb.rancher.ovhcloud.example", + "version": "1.0.0" + }, + "currentTasks": [ + { + "id": "30017036-ddb2-40a8-ad56-6d765b059aab", + "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/222ce105-a3f7-44c4-a7d3-dbb5983c045d/task/30017036-ddb2-40a8-ad56-6d765b059aab", + "type": "RANCHER_UPDATE" + } + ], + "id": "222ce105-a3f7-44c4-a7d3-dbb5983c045d", + "resourceStatus": "UPDATING", + "targetSpec": { + "iamAuthEnabled": false, + "ipRestrictions": [], + "name": "rancher2", + "plan": "STANDARD", + "version": "1.1.0" + }, + "updatedAt": "2020-12-31T13:40:46Z" + } + ], + "summary": "Example" + } + } + } + } + }, + "500": { + "description": "Error 500 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Server::InternalServerError::Maintenance": { + "value": { + "class": "Server::InternalServerError::Maintenance", + "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available" + } + } + } + } + } + } + }, + "tags": [ + "Rancher" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:rancher/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudRancherRancher" + }, + "post": { + "summary": "Create a new managed Rancher service", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.rancher.RancherCreation" + }, + "examples": { + "Create a STANDARD managed Rancher on the latest version": { + "value": { + "targetSpec": { + "iamAuthEnabled": false, + "name": "my_rancher", + "plan": "STANDARD" + } + }, + "summary": "Request body for creating a managed Rancher on plan STANDARD" + }, + "Create an OVHCLOUD_EDITION managed Rancher on a specific version": { + "value": { + "targetSpec": { + "iamAuthEnabled": false, + "name": "my_rancher", + "plan": "OVHCLOUD_EDITION", + "version": "1.0.0" + } + }, + "summary": "Request body for creating a managed Rancher on plan OVHCLOUD_EDITION with a specific version" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.rancher.Rancher" + }, + "examples": { + "Example": { + "value": { + "createdAt": "2020-12-31T07:39:19Z", + "currentState": { + "bootstrapPassword": "jL%IctBOu)-$D@wa", + "iamAuthEnabled": false, + "ipRestrictions": [], + "name": "my_rancher", + "plan": "OVHCLOUD_EDITION", + "region": "EU_WEST_RBX", + "version": "1.0.0" + }, + "currentTasks": [ + { + "id": "aad7c39d-ed0e-44c3-9624-096a0ef569f2", + "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/d6b6579e-8d60-4487-bf08-8b4ddf98f7d3/task/aad7c39d-ed0e-44c3-9624-096a0ef569f2", + "type": "RANCHER_CREATE" + } + ], + "id": "d6b6579e-8d60-4487-bf08-8b4ddf98f7d3", + "resourceStatus": "CREATING", + "targetSpec": { + "iamAuthEnabled": false, + "ipRestrictions": [], + "name": "my_rancher", + "plan": "OVHCLOUD_EDITION", + "version": "1.0.0" + }, + "updatedAt": "2020-12-31T07:39:19Z" + }, + "summary": "Example" + } + } + } + } + }, + "500": { + "description": "Error 500 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Server::InternalServerError::Maintenance": { + "value": { + "class": "Server::InternalServerError::Maintenance", + "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available" + } + } + } + } + } + } + }, + "tags": [ + "Rancher" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:rancher/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/rancher/{rancherId}": { + "delete": { + "summary": "Delete a managed Rancher service", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "rancherId", + "description": "Rancher ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.rancher.Rancher" + }, + "examples": { + "Example": { + "value": { + "createdAt": "2020-12-31T07:39:19Z", + "currentState": { + "iamAuthEnabled": false, + "ipRestrictions": [], + "name": "my_rancher", + "networking": { + "egressCidrBlocks": [ + "203.0.113.0/24" + ] + }, + "plan": "OVHCLOUD_EDITION", + "region": "EU_WEST_RBX", + "url": "https://aaaaaa.bbbb.rancher.ovhcloud.example", + "usage": { + "datetime": "2020-12-31T09:00:00Z", + "orchestratedVcpus": 16 + }, + "version": "1.0.0" + }, + "currentTasks": [ + { + "id": "aad7c39d-ed0e-44c3-9624-096a0ef569f2", + "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/d6b6579e-8d60-4487-bf08-8b4ddf98f7d3/task/aad7c39d-ed0e-44c3-9624-096a0ef569f2", + "type": "RANCHER_DELETE" + } + ], + "id": "d6b6579e-8d60-4487-bf08-8b4ddf98f7d3", + "resourceStatus": "DELETING", + "targetSpec": { + "iamAuthEnabled": false, + "ipRestrictions": [], + "name": "my_rancher", + "plan": "OVHCLOUD_EDITION", + "version": "1.0.0" + }, + "updatedAt": "2020-12-31T09:10:19Z" + }, + "summary": "Example" + } + } + } + } + }, + "500": { + "description": "Error 500 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Server::InternalServerError::Maintenance": { + "value": { + "class": "Server::InternalServerError::Maintenance", + "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available" + } + } + } + } + } + } + }, + "tags": [ + "Rancher" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:rancher/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a managed Rancher service", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "rancherId", + "description": "Rancher ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.rancher.Rancher" + }, + "examples": { + "Example": { + "value": { + "createdAt": "2020-12-31T07:39:19Z", + "currentState": { + "iamAuthEnabled": false, + "ipRestrictions": [ + { + "cidrBlock": "198.51.100.1/32", + "description": "My IP restriction" + } + ], + "name": "my_rancher", + "networking": { + "egressCidrBlocks": [ + "203.0.113.0/24" + ] + }, + "plan": "OVHCLOUD_EDITION", + "region": "EU_WEST_RBX", + "url": "https://aaaaaa.bbbb.rancher.ovhcloud.example", + "usage": { + "datetime": "2020-12-31T20:00:00Z", + "orchestratedVcpus": 16 + }, + "version": "1.0.0" + }, + "id": "d6b6579e-8d60-4487-bf08-8b4ddf98f7d3", + "resourceStatus": "READY", + "targetSpec": { + "iamAuthEnabled": false, + "ipRestrictions": [ + { + "cidrBlock": "198.51.100.1/32", + "description": "My IP restriction" + } + ], + "name": "my_rancher", + "plan": "OVHCLOUD_EDITION", + "version": "1.0.0" + }, + "updatedAt": "2020-12-31T07:39:19Z" + }, + "summary": "Example" + } + } + } + } + }, + "500": { + "description": "Error 500 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Server::InternalServerError::Maintenance": { + "value": { + "class": "Server::InternalServerError::Maintenance", + "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available" + } + } + } + } + } + } + }, + "tags": [ + "Rancher" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:rancher/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update an existing managed Rancher service", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "rancherId", + "description": "Rancher ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.rancher.RancherUpdate" + }, + "examples": { + "Update rancher to plan STANDARD": { + "value": { + "targetSpec": { + "iamAuthEnabled": false, + "name": "my_rancher", + "plan": "STANDARD", + "version": "1.0.0" + } + }, + "summary": "Request body when updating plan to STANDARD" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.rancher.Rancher" + }, + "examples": { + "Update the version of a managed Rancher version": { + "value": { + "createdAt": "2020-12-31T07:39:19Z", + "currentState": { + "iamAuthEnabled": false, + "ipRestrictions": [], + "name": "my_rancher", + "networking": { + "egressCidrBlocks": [ + "203.0.113.0/24" + ] + }, + "plan": "OVHCLOUD_EDITION", + "region": "EU_WEST_RBX", + "url": "https://aaaaaa.bbbb.rancher.ovhcloud.example", + "usage": { + "datetime": "2020-12-31T09:00:00Z", + "orchestratedVcpus": 16 + }, + "version": "1.0.0" + }, + "currentTasks": [ + { + "id": "aad7c39d-ed0e-44c3-9624-096a0ef569f2", + "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/d6b6579e-8d60-4487-bf08-8b4ddf98f7d3/task/aad7c39d-ed0e-44c3-9624-096a0ef569f2", + "type": "RANCHER_UPDATE" + } + ], + "id": "d6b6579e-8d60-4487-bf08-8b4ddf98f7d3", + "resourceStatus": "UPDATING", + "targetSpec": { + "iamAuthEnabled": false, + "ipRestrictions": [], + "name": "my_rancher", + "plan": "OVHCLOUD_EDITION", + "version": "1.1.0" + }, + "updatedAt": "2020-12-31T09:14:19Z" + }, + "summary": "Response body when updating the version of a managed Rancher" + } + } + } + } + }, + "500": { + "description": "Error 500 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Server::InternalServerError::Maintenance": { + "value": { + "class": "Server::InternalServerError::Maintenance", + "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available" + } + } + } + } + } + } + }, + "tags": [ + "Rancher" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:rancher/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/rancher/{rancherId}/adminCredentials": { + "post": { + "summary": "Reset the admin password", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "rancherId", + "description": "Rancher ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.rancher.Credentials" + }, + "examples": { + "Example": { + "value": { + "password": "u}m.ZBA'>g?!D3DD", + "username": "admin" + }, + "summary": "Example" + } + } + } + } + }, + "500": { + "description": "Error 500 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Server::InternalServerError::Maintenance": { + "value": { + "class": "Server::InternalServerError::Maintenance", + "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available" + } + } + } + } + } + } + }, + "tags": [ + "Rancher" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:rancher/adminCredentials/reset", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/rancher/{rancherId}/capabilities/plan": { + "get": { + "summary": "List available and current plans for the given managed Rancher service", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "rancherId", + "description": "Rancher ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.rancher.PlanCapability" + } + }, + "examples": { + "Get plans - can switch to another plan": { + "value": [ + { + "name": "OVHCLOUD_EDITION", + "status": "CURRENT" + }, + { + "name": "STANDARD", + "status": "AVAILABLE" + } + ], + "summary": "Response body when listing plans for a specific rancher that can switch to another plan" + }, + "Get plans - cannot switch to another plan": { + "value": [ + { + "cause": "CANNOT_DOWNGRADE_USING_HIGHER_FEATURES", + "message": "You are currently using STANDARD plan features and cannot downgrade to OVHCLOUD_EDITION plan.", + "name": "OVHCLOUD_EDITION", + "status": "UNAVAILABLE" + }, + { + "name": "STANDARD", + "status": "CURRENT" + } + ], + "summary": "Response body when listing plans for a specific rancher that cannot switch to another plan" + } + } + } + } + }, + "500": { + "description": "Error 500 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Server::InternalServerError::Maintenance": { + "value": { + "class": "Server::InternalServerError::Maintenance", + "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available" + } + } + } + } + } + } + }, + "tags": [ + "Rancher" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:rancher/capabilities/plan/get", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/rancher/{rancherId}/capabilities/version": { + "get": { + "summary": "List available and current versions for the given managed Rancher service", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "rancherId", + "description": "Rancher ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.rancher.VersionCapability" + } + }, + "examples": { + "Example": { + "value": [ + { + "changelogUrl": "https://github.com/rancher/rancher/releases/tag/v1.0.0", + "name": "1.0.0", + "status": "AVAILABLE" + }, + { + "changelogUrl": "https://github.com/rancher/rancher/releases/tag/v1.1.0", + "name": "1.1.0", + "status": "AVAILABLE" + }, + { + "cause": "CANNOT_UPGRADE_MULTIPLE_VERSIONS", + "changelogUrl": "https://github.com/rancher/rancher/releases/tag/v1.2.0", + "message": "You cannot upgrade directly to this version, please upgrade to the next minor first.", + "name": "1.2.0", + "status": "UNAVAILABLE" + } + ], + "summary": "Example" + } + } + } + } + }, + "500": { + "description": "Error 500 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Server::InternalServerError::Maintenance": { + "value": { + "class": "Server::InternalServerError::Maintenance", + "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available" + } + } + } + } + } + } + }, + "tags": [ + "Rancher" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:rancher/capabilities/version/get", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/rancher/{rancherId}/event": { + "get": { + "summary": "List all events related to the managed Rancher service", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "rancherId", + "description": "Rancher ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/common.Event" + } + }, + "examples": { + "Example": { + "value": [ + { + "createdAt": "2020-12-31T20:10:01Z", + "kind": "RANCHER_UPDATE", + "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/132645az-9c16-4021-b920-dfd22d8848c4/task/8e2478fa-af3b-4576-b344-af3546f52b5b", + "message": "Task started to update Rancher", + "type": "TASK_START" + }, + { + "createdAt": "2020-12-01T20:10:00Z", + "kind": "RANCHER_UPDATE", + "message": "Rancher target spec updated", + "type": "TARGET_SPEC_UPDATE" + } + ], + "summary": "Example" + } + } + } + } + }, + "500": { + "description": "Error 500 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Server::InternalServerError::Maintenance": { + "value": { + "class": "Server::InternalServerError::Maintenance", + "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available" + } + } + } + } + } + } + }, + "tags": [ + "Rancher" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:rancher/event/get", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/rancher/{rancherId}/task": { + "get": { + "summary": "List all asynchronous operations related to the managed Rancher service", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "rancherId", + "description": "Rancher ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/common.Task" + } + }, + "examples": { + "Example": { + "value": [ + { + "createdAt": "2020-12-01T20:00:00Z", + "errors": [], + "id": "6ffe3c08-3b65-4ede-a0e6-8b137e333e54", + "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/132645az-9c16-4021-b920-dfd22d8848c4", + "message": "Cloud project a755273a123456788da6d6fcc71a95f3: update rancher 132645az-9c16-4021-b920-dfd22d8848c4", + "progress": [ + { + "name": "test", + "status": "RUNNING" + }, + { + "name": "another step", + "status": "DONE" + }, + { + "name": "yet another step", + "status": "PENDING" + } + ], + "startedAt": "2020-12-01T20:01:00Z", + "status": "RUNNING", + "type": "PlanUpdate", + "updatedAt": "2020-12-01T20:02:00Z" + } + ], + "summary": "Example" + } + } + } + } + }, + "500": { + "description": "Error 500 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Server::InternalServerError::Maintenance": { + "value": { + "class": "Server::InternalServerError::Maintenance", + "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available" + } + } + } + } + } + } + }, + "tags": [ + "Rancher" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:rancher/task/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "CommonTask" + } + }, + "/publicCloud/project/{projectId}/rancher/{rancherId}/task/{taskId}": { + "get": { + "summary": "Get a specific task related to the managed Rancher service", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "rancherId", + "description": "Rancher ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "taskId", + "description": "Task ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/common.Task" + }, + "examples": { + "Example": { + "value": { + "createdAt": "2020-12-01T20:00:00Z", + "errors": [], + "id": "6ffe3c08-3b65-4ede-a0e6-8b137e333e54", + "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/132645az-9c16-4021-b920-dfd22d8848c4", + "message": "Cloud project a755273a123456788da6d6fcc71a95f3: update rancher 132645az-9c16-4021-b920-dfd22d8848c4", + "progress": [ + { + "name": "test", + "status": "RUNNING" + }, + { + "name": "another step", + "status": "DONE" + }, + { + "name": "yet another step", + "status": "PENDING" + } + ], + "startedAt": "2020-12-01T20:01:00Z", + "status": "RUNNING", + "type": "RANCHER_UPDATE", + "updatedAt": "2020-12-01T20:02:00Z" + }, + "summary": "Example" + } + } + } + } + }, + "500": { + "description": "Error 500 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Server::InternalServerError::Maintenance": { + "value": { + "class": "Server::InternalServerError::Maintenance", + "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available" + } + } + } + } + } + } + }, + "tags": [ + "Rancher" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:rancher/task/get", + "required": true + } + ], + "x-response-identifier": "id" + } + }, + "/publicCloud/project/{projectId}/reference/instance/flavor": { + "get": { + "summary": "List instance flavors", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "region", + "description": "Optional region filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.reference.instance.Flavor" + } + } + } + } + } + }, + "tags": [ + "Reference" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:reference/instance/flavor/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudReferenceInstanceFlavor" + } + }, + "/publicCloud/project/{projectId}/reference/instance/flavor/{id}": { + "get": { + "summary": "Get an instance flavor", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.reference.instance.Flavor" + } + } + } + } + }, + "tags": [ + "Reference" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:reference/instance/flavor/get", + "required": true + } + ], + "x-response-identifier": "id" + } + }, + "/publicCloud/project/{projectId}/reference/instance/image": { + "get": { + "summary": "List instance images", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "region", + "description": "Optional region filter", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.reference.instance.Image" + } + } + } + } + } + }, + "tags": [ + "Reference" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:reference/instance/image/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudReferenceInstanceImage" + } + }, + "/publicCloud/project/{projectId}/reference/instance/image/{id}": { + "get": { + "summary": "Get an instance image", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.reference.instance.Image" + } + } + } + } + }, + "tags": [ + "Reference" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:reference/instance/image/get", + "required": true + } + ], + "x-response-identifier": "id" + } + }, + "/publicCloud/project/{projectId}/reference/rancher/eligibility": { + "get": { + "summary": "List available eligibility for creating a managed Rancher service", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.rancher.EligibilityReference" + }, + "examples": { + "Example": { + "value": { + "freeTrial": true + }, + "summary": "Example" + } + } + } + } + } + }, + "tags": [ + "Reference" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:reference/rancher/eligibility/get", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/reference/rancher/plan": { + "get": { + "summary": "List available plans for creating a managed Rancher service", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.rancher.PlanReference" + } + }, + "examples": { + "Example": { + "value": [ + { + "name": "OVHCLOUD_EDITION", + "status": "AVAILABLE" + }, + { + "name": "STANDARD", + "status": "AVAILABLE" + } + ], + "summary": "Example" + } + } + } + } + } + }, + "tags": [ + "Reference" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:reference/rancher/plan/get", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/reference/rancher/version": { + "get": { + "summary": "List available versions for creating a managed Rancher service", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.rancher.VersionReference" + } + }, + "examples": { + "Example": { + "value": [ + { + "changelogUrl": "https://github.com/rancher/rancher/releases/tag/v1.0.0", + "name": "1.0.0", + "status": "AVAILABLE" + }, + { + "changelogUrl": "https://github.com/rancher/rancher/releases/tag/v1.1.0", + "name": "1.1.0", + "status": "AVAILABLE" + } + ], + "summary": "Example" + } + } + } + } + } + }, + "tags": [ + "Reference" + ], + "x-badges": [ + { + "color": "green", + "label": "Stable production version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:reference/rancher/version/get", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/reference/region": { + "get": { + "summary": "List available regions", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.reference.Region" + } + } + } + } + } + }, + "tags": [ + "Reference" + ], + "x-badges": [ + { + "color": "blue", + "label": "Beta version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:reference/region/get", + "required": true + } + ], + "x-response-identifier": "name", + "x-expanded-response": "PublicCloudReferenceRegion" + } + }, + "/publicCloud/project/{projectId}/reference/region/{name}": { + "get": { + "summary": "Get a region", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "name", + "description": "Name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.reference.Region" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ResourceDoesNotExist": { + "value": { + "class": "Client::NotFound::ResourceDoesNotExist", + "message": "Resource not found" + } + } + } + } + } + } + }, + "tags": [ + "Reference" + ], + "x-badges": [ + { + "color": "blue", + "label": "Beta version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:reference/region/get", + "required": true + } + ], + "x-response-identifier": "name" + } + }, + "/publicCloud/project/{projectId}/securityGroup": { + "get": { + "summary": "List security groups", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroup" + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:securityGroup/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudSecurityGroupSecurityGroup" + }, + "post": { + "summary": "Create a security group", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroup" + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:securityGroup/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/securityGroup/{securityGroupId}": { + "delete": { + "summary": "Delete a security group", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "securityGroupId", + "description": "Security group ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroup" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SecurityGroupDoesNotExist": { + "value": { + "class": "Client::NotFound::SecurityGroupDoesNotExist", + "message": "Security group not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:securityGroup/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a security group", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "securityGroupId", + "description": "Security group ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroup" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SecurityGroupDoesNotExist": { + "value": { + "class": "Client::NotFound::SecurityGroupDoesNotExist", + "message": "Security group not found" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:securityGroup/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update a security group", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "securityGroupId", + "description": "Security group ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroupUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.securityGroup.SecurityGroup" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SecurityGroupDoesNotExist": { + "value": { + "class": "Client::NotFound::SecurityGroupDoesNotExist", + "message": "Security group not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Network" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:securityGroup/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/sshKey": { + "get": { + "summary": "List SSH keys", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.sshKey.SSHKey" + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:sshKey/get", + "required": true + } + ], + "x-response-identifier": "name", + "x-expanded-response": "PublicCloudSshKeySSHKey" + }, + "post": { + "summary": "Create an SSH key", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.sshKey.SSHKeyCreation" + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.sshKey.SSHKey" + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::NameAlreadyInUse": { + "value": { + "class": "Client::Conflict::NameAlreadyInUse", + "message": "This name is already in use" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:sshKey/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/sshKey/{name}": { + "delete": { + "summary": "Delete an SSH key", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "name", + "description": "Name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.sshKey.SSHKey" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SSHKeyDoesNotExist": { + "value": { + "class": "Client::NotFound::SSHKeyDoesNotExist", + "message": "SSH key not found" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:sshKey/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get an SSH key", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "name", + "description": "Name", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.sshKey.SSHKey" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::SSHKeyDoesNotExist": { + "value": { + "class": "Client::NotFound::SSHKeyDoesNotExist", + "message": "SSH key not found" + } + } + } + } + } + } + }, + "tags": [ + "Compute" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:sshKey/get", + "required": true + } + ], + "x-response-identifier": "name" + } + }, + "/publicCloud/project/{projectId}/storage/block/backup": { + "get": { + "summary": "List Public Cloud block storage backups", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "volumeId", + "description": "Filter by source volume ID", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Backup" + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/backup/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudBlockStorageBackup" + }, + "post": { + "summary": "Create a new Public Cloud block storage backup", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.BackupCreation" + }, + "examples": { + "Create block storage backup": { + "value": { + "targetSpec": { + "description": "Daily backup", + "location": { + "region": "GRA1" + }, + "name": "my-backup", + "volumeId": "a53bbebb-2366-4d4e-b074-5cb81515173e" + } + }, + "summary": "Create a backup from an existing volume" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Backup" + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/backup/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/storage/block/backup/{id}": { + "delete": { + "summary": "Delete a Public Cloud block storage backup", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Backup" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::BlockStorageBackupDoesNotExist": { + "value": { + "class": "Client::NotFound::BlockStorageBackupDoesNotExist", + "message": "Block storage backup not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/backup/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud block storage backup", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Backup" + }, + "examples": { + "Example": { + "value": { + "checksum": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", + "createdAt": "2026-03-10T10:00:00Z", + "currentState": { + "description": "Daily backup", + "location": { + "region": "GRA1" + }, + "name": "my-backup", + "size": 20, + "volumeId": "a53bbebb-2366-4d4e-b074-5cb81515173e" + }, + "currentTasks": null, + "id": "b64ccfcc-3477-5e5f-c185-6dc92626284f", + "resourceStatus": "READY", + "targetSpec": { + "description": "Daily backup", + "location": { + "region": "GRA1" + }, + "name": "my-backup", + "volumeId": "a53bbebb-2366-4d4e-b074-5cb81515173e" + }, + "updatedAt": "2026-03-10T10:05:00Z" + }, + "summary": "Example" + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::BlockStorageBackupDoesNotExist": { + "value": { + "class": "Client::NotFound::BlockStorageBackupDoesNotExist", + "message": "Block storage backup not found" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/backup/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update an existing Public Cloud block storage backup", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.BackupUpdate" + }, + "examples": { + "Update block storage backup": { + "value": { + "checksum": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", + "targetSpec": { + "description": "Updated daily backup", + "name": "my-backup-renamed" + } + }, + "summary": "Update name or description of a backup using optimistic concurrency with checksum" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Backup" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::BlockStorageBackupDoesNotExist": { + "value": { + "class": "Client::NotFound::BlockStorageBackupDoesNotExist", + "message": "Block storage backup not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/backup/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/storage/block/snapshot": { + "get": { + "summary": "List Public Cloud block storage volume snapshots", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "volumeId", + "description": "Filter by source volume ID", + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Snapshot" + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/snapshot/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudBlockStorageSnapshot" + }, + "post": { + "summary": "Create a new Public Cloud block storage volume snapshot", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.SnapshotCreation" + }, + "examples": { + "Create snapshot": { + "value": { + "targetSpec": { + "description": "Daily snapshot", + "location": { + "region": "GRA1" + }, + "name": "my-snapshot", + "volumeId": "a53bbebb-2366-4d4e-b074-5cb81515173e" + } + }, + "summary": "Create a snapshot of a block storage volume" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Snapshot" + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/snapshot/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/storage/block/snapshot/{id}": { + "delete": { + "summary": "Delete a Public Cloud block storage volume snapshot", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Snapshot" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::BlockStorageSnapshotDoesNotExist": { + "value": { + "class": "Client::NotFound::BlockStorageSnapshotDoesNotExist", + "message": "Block storage snapshot not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/snapshot/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud block storage volume snapshot", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Snapshot" + }, + "examples": { + "Example": { + "value": { + "checksum": "7bf8bf99e9ef536779fe1b99ef2f1896", + "createdAt": "2026-01-20T17:10:32Z", + "currentState": { + "description": "Daily snapshot", + "location": { + "region": "GRA1" + }, + "name": "my-snapshot", + "size": 20, + "volumeId": "a53bbebb-2366-4d4e-b074-5cb81515173e" + }, + "currentTasks": null, + "id": "f64bbfcc-3477-5e5f-c185-6dc92626284f", + "resourceStatus": "READY", + "targetSpec": { + "description": "Daily snapshot", + "location": { + "region": "GRA1" + }, + "name": "my-snapshot", + "volumeId": "a53bbebb-2366-4d4e-b074-5cb81515173e" + }, + "updatedAt": "2026-01-20T17:13:34Z" + }, + "summary": "Example" + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::BlockStorageSnapshotDoesNotExist": { + "value": { + "class": "Client::NotFound::BlockStorageSnapshotDoesNotExist", + "message": "Block storage snapshot not found" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/snapshot/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update an existing Public Cloud block storage volume snapshot", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.SnapshotUpdate" + }, + "examples": { + "Update snapshot": { + "value": { + "checksum": "7bf8bf99e9ef536779fe1b99ef2f1896", + "targetSpec": { + "description": "Updated description", + "name": "my-snapshot-renamed" + } + }, + "summary": "Update name or description of a snapshot using optimistic concurrency with checksum" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Snapshot" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::BlockStorageSnapshotDoesNotExist": { + "value": { + "class": "Client::NotFound::BlockStorageSnapshotDoesNotExist", + "message": "Block storage snapshot not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/snapshot/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/storage/block/volume": { + "get": { + "summary": "List Public Cloud block storage volumes", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Block" + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudBlockStorageBlock" + }, + "post": { + "summary": "Create a new Public Cloud block storage volume", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.BlockCreation" + }, + "examples": { + "Create block storage": { + "value": { + "targetSpec": { + "location": { + "region": "GRA1" + }, + "name": "test-volume", + "size": 10, + "volumeType": "CLASSIC" + } + }, + "summary": "Create a block storage volume with minimal target spec" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Block" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/storage/block/volume/{id}": { + "delete": { + "summary": "Delete a Public Cloud block storage volume", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Block" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::VolumeDoesNotExist": { + "value": { + "class": "Client::NotFound::VolumeDoesNotExist", + "message": "Volume not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud block storage volume", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Block" + }, + "examples": { + "Example": { + "value": { + "checksum": "6af6af88d8df425668fd0c98de1e0795", + "createdAt": "2026-01-20T17:10:32Z", + "currentState": { + "bootable": false, + "encryption": { + "enabled": false + }, + "location": { + "region": "GRA1" + }, + "locked": false, + "name": "test-from-apiv2", + "size": 20, + "status": "AVAILABLE", + "volumeType": "CLASSIC" + }, + "currentTasks": null, + "id": "a53bbebb-2366-4d4e-b074-5cb81515173e", + "resourceStatus": "READY", + "targetSpec": { + "location": { + "region": "GRA1" + }, + "name": "test-from-apiv2", + "size": 20, + "volumeType": "CLASSIC" + }, + "updatedAt": "2026-01-20T17:13:34Z" + }, + "summary": "Example" + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::VolumeDoesNotExist": { + "value": { + "class": "Client::NotFound::VolumeDoesNotExist", + "message": "Volume not found" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/get", + "required": true + } + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update an existing Public Cloud block storage volume", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "id", + "description": "Id", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.BlockUpdate" + }, + "examples": { + "Update block storage target spec": { + "value": { + "checksum": "6af6af88d8df425668fd0c98de1e0795", + "targetSpec": { + "name": "test-from-apiv2-renamed", + "size": 20 + } + }, + "summary": "Update size or name of a volume using optimistic concurrency with checksum" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.blockStorage.Block" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::VolumeDoesNotExist": { + "value": { + "class": "Client::NotFound::VolumeDoesNotExist", + "message": "Volume not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "Block" + ], + "x-badges": [ + { + "color": "blue", + "label": "Alpha version" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:volume/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/storage/file/share": { + "get": { + "summary": "List Public Cloud file storages", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } + }, + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorage" + } + } + } + } + } + }, + "tags": [ + "Storage", + "File" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:share/get", + "required": true + } + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudStorageFileFileStorage" + }, + "post": { + "summary": "Create a new Public Cloud file storage", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageCreation" + }, + "examples": { + "Create file storage": { + "value": { + "targetSpec": { + "accessRules": [ + { + "accessLevel": "READ_WRITE", + "accessTo": "10.0.0.42" + } + ], + "description": "Production data share", + "location": { + "region": "GRA1" + }, + "name": "my-share", + "networkId": "b2c3d4e5-f6a7-8901-bcde-f12345678901", + "protocol": "NFS", + "shareType": "STANDARD_1AZ", + "size": 100, + "subnetId": "c3d4e5f6-a7b8-9012-cdef-234567890abc" + } + }, + "summary": "Create an NFS file storage with access rules" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorage" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + }, + "Client::BadRequest::ServiceNotAvailableInRegion": { + "value": { + "class": "Client::BadRequest::ServiceNotAvailableInRegion", + "message": "This service is not available in the selected region" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "File" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:share/create", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/storage/file/share/{fileStorageId}": { + "delete": { + "summary": "Delete a Public Cloud file storage", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "fileStorageId", + "description": "File storage ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorage" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ShareDoesNotExist": { + "value": { + "class": "Client::NotFound::ShareDoesNotExist", + "message": "File share not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { + "value": { + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } + } + } + } + } + }, + "tags": [ + "Storage", + "File" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:share/delete", + "required": true + } + ] + }, + "get": { + "summary": "Get a Public Cloud file storage", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "path", + "name": "fileStorageId", + "description": "File storage ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" } } ], @@ -1226,42 +25698,173 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/publicCloud.project.ProjectAsyncWithIAM" + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorage" + }, + "examples": { + "Example": { + "value": { + "checksum": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", + "createdAt": "2026-02-10T14:30:00Z", + "currentState": { + "accessRules": [ + { + "accessLevel": "READ_WRITE", + "accessTo": "10.0.0.42", + "createdAt": "2026-02-10T14:32:00Z", + "id": "e5f6a7b8-c901-2345-def6-789012abcdef", + "state": "ACTIVE" + } + ], + "description": "Production data share", + "exportLocations": [ + { + "path": "10.0.0.1:/shares/share-abc123", + "preferred": true + } + ], + "location": { + "region": "GRA1" + }, + "name": "my-share", + "networkId": "b2c3d4e5-f6a7-8901-bcde-f12345678901", + "protocol": "NFS", + "shareType": "STANDARD_1AZ", + "size": 100, + "subnetId": "c3d4e5f6-a7b8-9012-cdef-234567890abc" + }, + "currentTasks": null, + "id": "d4e5f6a7-b890-1234-cdef-567890abcdef", + "resourceStatus": "READY", + "targetSpec": { + "accessRules": [ + { + "accessLevel": "READ_WRITE", + "accessTo": "10.0.0.42" + } + ], + "description": "Production data share", + "location": { + "region": "GRA1" + }, + "name": "my-share", + "networkId": "b2c3d4e5-f6a7-8901-bcde-f12345678901", + "protocol": "NFS", + "shareType": "STANDARD_1AZ", + "size": 100, + "subnetId": "c3d4e5f6-a7b8-9012-cdef-234567890abc" + }, + "updatedAt": "2026-02-10T14:35:00Z" + }, + "summary": "Example" + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ShareDoesNotExist": { + "value": { + "class": "Client::NotFound::ShareDoesNotExist", + "message": "File share not found" + } } } } } } }, + "tags": [ + "Storage", + "File" + ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:get", + "name": "publicCloudProject:apiovh:share/get", "required": true } ], - "x-expanded-response": "PublicCloudProjectProjectAsyncWithIAM" + "x-response-identifier": "id" }, - "post": { - "summary": "Create a new cloud project", + "put": { + "summary": "Update an existing Public Cloud file storage", "security": [ { "oAuth2AuthCode": [] } ], + "parameters": [ + { + "in": "path", + "name": "fileStorageId", + "description": "File storage ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/publicCloud.project.ProjectCreation" + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageUpdate" + }, + "examples": { + "Update file storage": { + "value": { + "checksum": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", + "targetSpec": { + "accessRules": [ + { + "accessLevel": "READ_WRITE", + "accessTo": "10.0.0.42" + }, + { + "accessLevel": "READ_ONLY", + "accessTo": "10.0.0.43" + } + ], + "name": "my-share-renamed", + "size": 200 + } + }, + "summary": "Update name, extend size, or modify access rules" + } } } } @@ -1272,12 +25875,109 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/publicCloud.project.ProjectAsync" + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorage" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::BadRequest::InvalidParameter": { + "value": { + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" + } + } + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ShareDoesNotExist": { + "value": { + "class": "Client::NotFound::ShareDoesNotExist", + "message": "File share not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } + } } } } } }, + "tags": [ + "Storage", + "File" + ], "x-badges": [ { "color": "orange", @@ -1286,19 +25986,15 @@ ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:create", - "required": true - }, - { - "name": "billingAccount:apiovh:subscription/publicCloudProject/create", + "name": "publicCloudProject:apiovh:share/edit", "required": true } ] } }, - "/publicCloud/project/{projectId}": { + "/publicCloud/project/{projectId}/storage/file/snapshot": { "get": { - "summary": "Get details on a Public Cloud project", + "summary": "List Public Cloud file storage snapshots", "security": [ { "oAuth2AuthCode": [] @@ -1306,48 +26002,21 @@ ], "parameters": [ { - "in": "path", - "name": "projectId", - "description": "Project ID", - "required": true, + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/publicCloud.project.ProjectAsyncWithIAM" - } - } - } - } - }, - "x-badges": [ - { - "color": "green", - "label": "Stable production version" - } - ], - "x-iam-actions": [ - { - "name": "publicCloudProject:apiovh:get", - "required": true - } - ] - }, - "put": { - "summary": "Update an existing cloud project", - "security": [ + }, { - "oAuth2AuthCode": [] - } - ], - "parameters": [ + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, { "in": "path", "name": "projectId", @@ -1358,28 +26027,25 @@ } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/publicCloud.project.ProjectCreation" - } - } - } - }, "responses": { "200": { "description": "successful operation", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/publicCloud.project.ProjectAsync" + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageSnapshot" + } } } } } }, + "tags": [ + "Storage", + "File" + ], "x-badges": [ { "color": "orange", @@ -1388,37 +26054,21 @@ ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:edit", + "name": "publicCloudProject:apiovh:storage/file/snapshot/get", "required": true } - ] - } - }, - "/publicCloud/project/{projectId}/rancher": { - "get": { - "summary": "List managed Rancher services", + ], + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudStorageFileFileStorageSnapshot" + }, + "post": { + "summary": "Create a new Public Cloud file storage snapshot", "security": [ { "oAuth2AuthCode": [] } ], "parameters": [ - { - "in": "header", - "name": "X-Pagination-Cursor", - "description": "Pagination cursor", - "schema": { - "type": "string" - } - }, - { - "in": "header", - "name": "X-Pagination-Size", - "description": "Pagination size", - "schema": { - "type": "integer" - } - }, { "in": "path", "name": "projectId", @@ -1429,100 +26079,73 @@ } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageSnapshotCreation" + }, + "examples": { + "Create snapshot": { + "value": { + "targetSpec": { + "description": "Daily backup snapshot", + "location": { + "region": "GRA1" + }, + "name": "my-share-snapshot", + "shareId": "d1e2f3a4-b5c6-7890-abcd-ef1234567890" + } + }, + "summary": "Create a snapshot of a file storage" + } + } + } + } + }, "responses": { "200": { "description": "successful operation", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/publicCloud.rancher.Rancher" + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageSnapshot" + } + } + } + }, + "400": { + "description": "Error 400 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } } }, "examples": { - "Example": { - "value": [ - { - "createdAt": "2020-12-31T07:39:19Z", - "currentState": { - "iamAuthEnabled": false, - "ipRestrictions": [ - { - "cidrBlock": "198.51.100.1/32", - "description": "My IP restriction" - } - ], - "name": "my_rancher", - "networking": { - "egressCidrBlocks": [ - "203.0.113.0/24" - ] - }, - "plan": "OVHCLOUD_EDITION", - "region": "EU_WEST_RBX", - "url": "https://aaaaaa.bbbb.rancher.ovhcloud.example", - "usage": { - "datetime": "2020-12-31T13:00:00Z", - "orchestratedVcpus": 16 - }, - "version": "1.0.0" - }, - "currentTasks": [], - "id": "d6b6579e-8d60-4487-bf08-8b4ddf98f7d3", - "resourceStatus": "READY", - "targetSpec": { - "iamAuthEnabled": false, - "ipRestrictions": [ - { - "cidrBlock": "198.51.100.1/32", - "description": "My IP restriction" - } - ], - "name": "my_rancher", - "plan": "OVHCLOUD_EDITION", - "version": "1.0.0" - }, - "updatedAt": "2020-12-31T07:39:19Z" - }, - { - "createdAt": "2020-12-31T13:37:46Z", - "currentState": { - "iamAuthEnabled": false, - "ipRestrictions": [], - "name": "rancher2", - "plan": "STANDARD", - "region": "EU_WEST_RBX", - "url": "https://cccccc.bbbb.rancher.ovhcloud.example", - "version": "1.0.0" - }, - "currentTasks": [ - { - "id": "30017036-ddb2-40a8-ad56-6d765b059aab", - "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/222ce105-a3f7-44c4-a7d3-dbb5983c045d/task/30017036-ddb2-40a8-ad56-6d765b059aab", - "type": "RANCHER_UPDATE" - } - ], - "id": "222ce105-a3f7-44c4-a7d3-dbb5983c045d", - "resourceStatus": "UPDATING", - "targetSpec": { - "iamAuthEnabled": false, - "ipRestrictions": [], - "name": "rancher2", - "plan": "STANDARD", - "version": "1.1.0" - }, - "updatedAt": "2020-12-31T13:40:46Z" - } - ], - "summary": "Example" + "Client::BadRequest::ServiceNotAvailableInRegion": { + "value": { + "class": "Client::BadRequest::ServiceNotAvailableInRegion", + "message": "This service is not available in the selected region" + } } } } } }, - "500": { - "description": "Error 500 response", + "404": { + "description": "Error 404 response", "content": { "application/json": { "schema": { @@ -1540,10 +26163,39 @@ } }, "examples": { - "Server::InternalServerError::Maintenance": { + "Client::NotFound::ShareDoesNotExist": { "value": { - "class": "Server::InternalServerError::Maintenance", - "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available." + "class": "Client::NotFound::ShareDoesNotExist", + "message": "File share not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" } } } @@ -1552,25 +26204,26 @@ } }, "tags": [ - "Rancher" + "Storage", + "File" ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:rancher/get", + "name": "publicCloudProject:apiovh:storage/file/snapshot/create", "required": true } - ], - "x-response-identifier": "id", - "x-expanded-response": "PublicCloudRancherRancher" - }, - "post": { - "summary": "Create a new managed Rancher service", + ] + } + }, + "/publicCloud/project/{projectId}/storage/file/snapshot/{snapshotId}": { + "delete": { + "summary": "Delete a Public Cloud file storage snapshot", "security": [ { "oAuth2AuthCode": [] @@ -1585,88 +26238,66 @@ "schema": { "type": "string" } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/publicCloud.rancher.RancherCreation" - }, - "examples": { - "Create a STANDARD managed Rancher on the latest version": { - "value": { - "targetSpec": { - "iamAuthEnabled": false, - "name": "my_rancher", - "plan": "STANDARD" - } - }, - "summary": "Request body for creating a managed Rancher on plan STANDARD" - }, - "Create an OVHCLOUD_EDITION managed Rancher on a specific version": { - "value": { - "targetSpec": { - "iamAuthEnabled": false, - "name": "my_rancher", - "plan": "OVHCLOUD_EDITION", - "version": "1.0.0" - } - }, - "summary": "Request body for creating a managed Rancher on plan OVHCLOUD_EDITION with a specific version" - } - } + }, + { + "in": "path", + "name": "snapshotId", + "description": "Snapshot ID", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } } - }, + ], "responses": { "200": { "description": "successful operation", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/publicCloud.rancher.Rancher" - }, - "examples": { - "Example": { - "value": { - "createdAt": "2020-12-31T07:39:19Z", - "currentState": { - "bootstrapPassword": "jL%IctBOu)-$D@wa", - "iamAuthEnabled": false, - "ipRestrictions": [], - "name": "my_rancher", - "plan": "OVHCLOUD_EDITION", - "region": "EU_WEST_RBX", - "version": "1.0.0" - }, - "currentTasks": [ - { - "id": "aad7c39d-ed0e-44c3-9624-096a0ef569f2", - "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/d6b6579e-8d60-4487-bf08-8b4ddf98f7d3/task/aad7c39d-ed0e-44c3-9624-096a0ef569f2", - "type": "RANCHER_CREATE" - } - ], - "id": "d6b6579e-8d60-4487-bf08-8b4ddf98f7d3", - "resourceStatus": "CREATING", - "targetSpec": { - "iamAuthEnabled": false, - "ipRestrictions": [], - "name": "my_rancher", - "plan": "OVHCLOUD_EDITION", - "version": "1.0.0" - }, - "updatedAt": "2020-12-31T07:39:19Z" + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageSnapshot" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" }, - "summary": "Example" + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::NotFound::ShareDoesNotExist": { + "value": { + "class": "Client::NotFound::ShareDoesNotExist", + "message": "File share not found" + } + }, + "Client::NotFound::SnapshotDoesNotExist": { + "value": { + "class": "Client::NotFound::SnapshotDoesNotExist", + "message": "Snapshot not found" + } } } } } }, - "500": { - "description": "Error 500 response", + "409": { + "description": "Error 409 response", "content": { "application/json": { "schema": { @@ -1684,10 +26315,16 @@ } }, "examples": { - "Server::InternalServerError::Maintenance": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { "value": { - "class": "Server::InternalServerError::Maintenance", - "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available." + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" } } } @@ -1696,25 +26333,24 @@ } }, "tags": [ - "Rancher" + "Storage", + "File" ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:rancher/create", + "name": "publicCloudProject:apiovh:storage/file/snapshot/delete", "required": true } ] - } - }, - "/publicCloud/project/{projectId}/rancher/{rancherId}": { - "delete": { - "summary": "Delete a managed Rancher service", + }, + "get": { + "summary": "Get a Public Cloud file storage snapshot", "security": [ { "oAuth2AuthCode": [] @@ -1732,8 +26368,8 @@ }, { "in": "path", - "name": "rancherId", - "description": "Rancher ID", + "name": "snapshotId", + "description": "Snapshot ID", "required": true, "schema": { "type": "string", @@ -1747,47 +26383,36 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/publicCloud.rancher.Rancher" + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageSnapshot" }, "examples": { "Example": { "value": { - "createdAt": "2020-12-31T07:39:19Z", + "checksum": "b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6a7", + "createdAt": "2026-02-10T15:00:00Z", "currentState": { - "iamAuthEnabled": false, - "ipRestrictions": [], - "name": "my_rancher", - "networking": { - "egressCidrBlocks": [ - "203.0.113.0/24" - ] - }, - "plan": "OVHCLOUD_EDITION", - "region": "EU_WEST_RBX", - "url": "https://aaaaaa.bbbb.rancher.ovhcloud.example", - "usage": { - "datetime": "2020-12-31T09:00:00Z", - "orchestratedVcpus": 16 + "description": "Daily backup snapshot", + "location": { + "region": "GRA1" }, - "version": "1.0.0" + "name": "my-share-snapshot", + "shareId": "d1e2f3a4-b5c6-7890-abcd-ef1234567890", + "shareProto": "NFS", + "shareSize": 100, + "snapshotSize": 1 }, - "currentTasks": [ - { - "id": "aad7c39d-ed0e-44c3-9624-096a0ef569f2", - "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/d6b6579e-8d60-4487-bf08-8b4ddf98f7d3/task/aad7c39d-ed0e-44c3-9624-096a0ef569f2", - "type": "RANCHER_DELETE" - } - ], - "id": "d6b6579e-8d60-4487-bf08-8b4ddf98f7d3", - "resourceStatus": "DELETING", + "currentTasks": null, + "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "resourceStatus": "READY", "targetSpec": { - "iamAuthEnabled": false, - "ipRestrictions": [], - "name": "my_rancher", - "plan": "OVHCLOUD_EDITION", - "version": "1.0.0" + "description": "Daily backup snapshot", + "location": { + "region": "GRA1" + }, + "name": "my-share-snapshot", + "shareId": "d1e2f3a4-b5c6-7890-abcd-ef1234567890" }, - "updatedAt": "2020-12-31T09:10:19Z" + "updatedAt": "2026-02-10T15:05:00Z" }, "summary": "Example" } @@ -1795,8 +26420,8 @@ } } }, - "500": { - "description": "Error 500 response", + "404": { + "description": "Error 404 response", "content": { "application/json": { "schema": { @@ -1814,10 +26439,16 @@ } }, "examples": { - "Server::InternalServerError::Maintenance": { + "Client::NotFound::ShareDoesNotExist": { "value": { - "class": "Server::InternalServerError::Maintenance", - "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available." + "class": "Client::NotFound::ShareDoesNotExist", + "message": "File share not found" + } + }, + "Client::NotFound::SnapshotDoesNotExist": { + "value": { + "class": "Client::NotFound::SnapshotDoesNotExist", + "message": "Snapshot not found" } } } @@ -1826,23 +26457,25 @@ } }, "tags": [ - "Rancher" + "Storage", + "File" ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:rancher/delete", + "name": "publicCloudProject:apiovh:storage/file/snapshot/get", "required": true } - ] + ], + "x-response-identifier": "id" }, - "get": { - "summary": "Get a managed Rancher service", + "put": { + "summary": "Update an existing Public Cloud file storage snapshot", "security": [ { "oAuth2AuthCode": [] @@ -1860,8 +26493,8 @@ }, { "in": "path", - "name": "rancherId", - "description": "Rancher ID", + "name": "snapshotId", + "description": "Snapshot ID", "required": true, "schema": { "type": "string", @@ -1869,87 +26502,172 @@ } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageSnapshotUpdate" + }, + "examples": { + "Update snapshot": { + "value": { + "checksum": "b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6a7", + "targetSpec": { + "description": "Updated backup snapshot", + "name": "my-share-snapshot-renamed" + } + }, + "summary": "Update snapshot name and description" + } + } + } + } + }, "responses": { "200": { "description": "successful operation", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/publicCloud.rancher.Rancher" + "$ref": "#/components/schemas/publicCloud.storage.file.FileStorageSnapshot" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } + } }, "examples": { - "Example": { + "Client::NotFound::ShareDoesNotExist": { "value": { - "createdAt": "2020-12-31T07:39:19Z", - "currentState": { - "iamAuthEnabled": false, - "ipRestrictions": [ - { - "cidrBlock": "198.51.100.1/32", - "description": "My IP restriction" - } - ], - "name": "my_rancher", - "networking": { - "egressCidrBlocks": [ - "203.0.113.0/24" - ] - }, - "plan": "OVHCLOUD_EDITION", - "region": "EU_WEST_RBX", - "url": "https://aaaaaa.bbbb.rancher.ovhcloud.example", - "usage": { - "datetime": "2020-12-31T20:00:00Z", - "orchestratedVcpus": 16 - }, - "version": "1.0.0" - }, - "id": "d6b6579e-8d60-4487-bf08-8b4ddf98f7d3", - "resourceStatus": "READY", - "targetSpec": { - "iamAuthEnabled": false, - "ipRestrictions": [ - { - "cidrBlock": "198.51.100.1/32", - "description": "My IP restriction" - } - ], - "name": "my_rancher", - "plan": "OVHCLOUD_EDITION", - "version": "1.0.0" - }, - "updatedAt": "2020-12-31T07:39:19Z" + "class": "Client::NotFound::ShareDoesNotExist", + "message": "File share not found" + } + }, + "Client::NotFound::SnapshotDoesNotExist": { + "value": { + "class": "Client::NotFound::SnapshotDoesNotExist", + "message": "Snapshot not found" + } + } + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" }, - "summary": "Example" + "message": { + "type": "string", + "description": "Error message" + } + } + }, + "examples": { + "Client::Conflict::ChecksumMismatch": { + "value": { + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" + } } } } } + } + }, + "tags": [ + "Storage", + "File" + ], + "x-badges": [ + { + "color": "orange", + "label": "Internal use only" + } + ], + "x-iam-actions": [ + { + "name": "publicCloudProject:apiovh:storage/file/snapshot/edit", + "required": true + } + ] + } + }, + "/publicCloud/project/{projectId}/storage/object/bucket": { + "get": { + "summary": "List S3 buckets", + "security": [ + { + "oAuth2AuthCode": [] + } + ], + "parameters": [ + { + "in": "header", + "name": "X-Pagination-Cursor", + "description": "Pagination cursor", + "schema": { + "type": "string" + } }, - "500": { - "description": "Error 500 response", + { + "in": "header", + "name": "X-Pagination-Size", + "description": "Pagination size", + "schema": { + "type": "integer" + } + }, + { + "in": "path", + "name": "projectId", + "description": "Project ID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", "content": { "application/json": { "schema": { - "type": "object", - "description": "Common error model", - "properties": { - "class": { - "type": "string", - "description": "Class of the error" - }, - "message": { - "type": "string", - "description": "Error message" - } - } - }, - "examples": { - "Server::InternalServerError::Maintenance": { - "value": { - "class": "Server::InternalServerError::Maintenance", - "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available." - } + "type": "array", + "items": { + "$ref": "#/components/schemas/publicCloud.storage.object.Bucket" } } } @@ -1957,24 +26675,26 @@ } }, "tags": [ - "Rancher" + "Storage", + "Object" ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:rancher/get", + "name": "publicCloudProject:apiovh:bucket/get", "required": true } ], - "x-response-identifier": "id" + "x-response-identifier": "id", + "x-expanded-response": "PublicCloudStorageObjectBucket" }, - "put": { - "summary": "Update an existing managed Rancher service", + "post": { + "summary": "Create a new S3 bucket", "security": [ { "oAuth2AuthCode": [] @@ -1989,16 +26709,6 @@ "schema": { "type": "string" } - }, - { - "in": "path", - "name": "rancherId", - "description": "Rancher ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "requestBody": { @@ -2006,19 +26716,25 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/publicCloud.rancher.RancherUpdate" + "$ref": "#/components/schemas/publicCloud.storage.object.BucketCreation" }, "examples": { - "Update rancher to plan STANDARD": { + "Create bucket": { "value": { "targetSpec": { - "iamAuthEnabled": false, - "name": "my_rancher", - "plan": "STANDARD", - "version": "1.0.0" + "location": { + "region": "GRA" + }, + "name": "my-data-bucket", + "tags": { + "env": "production" + }, + "versioning": { + "status": "ENABLED" + } } }, - "summary": "Request body when updating plan to STANDARD" + "summary": "Create a bucket with versioning and tags" } } } @@ -2030,56 +26746,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/publicCloud.rancher.Rancher" - }, - "examples": { - "Update the version of a managed Rancher version": { - "value": { - "createdAt": "2020-12-31T07:39:19Z", - "currentState": { - "iamAuthEnabled": false, - "ipRestrictions": [], - "name": "my_rancher", - "networking": { - "egressCidrBlocks": [ - "203.0.113.0/24" - ] - }, - "plan": "OVHCLOUD_EDITION", - "region": "EU_WEST_RBX", - "url": "https://aaaaaa.bbbb.rancher.ovhcloud.example", - "usage": { - "datetime": "2020-12-31T09:00:00Z", - "orchestratedVcpus": 16 - }, - "version": "1.0.0" - }, - "currentTasks": [ - { - "id": "aad7c39d-ed0e-44c3-9624-096a0ef569f2", - "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/d6b6579e-8d60-4487-bf08-8b4ddf98f7d3/task/aad7c39d-ed0e-44c3-9624-096a0ef569f2", - "type": "RANCHER_UPDATE" - } - ], - "id": "d6b6579e-8d60-4487-bf08-8b4ddf98f7d3", - "resourceStatus": "UPDATING", - "targetSpec": { - "iamAuthEnabled": false, - "ipRestrictions": [], - "name": "my_rancher", - "plan": "OVHCLOUD_EDITION", - "version": "1.1.0" - }, - "updatedAt": "2020-12-31T09:14:19Z" - }, - "summary": "Response body when updating the version of a managed Rancher" - } + "$ref": "#/components/schemas/publicCloud.storage.object.Bucket" } } } }, - "500": { - "description": "Error 500 response", + "400": { + "description": "Error 400 response", "content": { "application/json": { "schema": { @@ -2097,85 +26770,18 @@ } }, "examples": { - "Server::InternalServerError::Maintenance": { + "Client::BadRequest::InvalidParameter": { "value": { - "class": "Server::InternalServerError::Maintenance", - "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available." + "class": "Client::BadRequest::InvalidParameter", + "message": "Invalid parameter in the request" } } } } } - } - }, - "tags": [ - "Rancher" - ], - "x-badges": [ - { - "color": "green", - "label": "Stable production version" - } - ], - "x-iam-actions": [ - { - "name": "publicCloudProject:apiovh:rancher/edit", - "required": true - } - ] - } - }, - "/publicCloud/project/{projectId}/rancher/{rancherId}/adminCredentials": { - "post": { - "summary": "Reset the admin password", - "security": [ - { - "oAuth2AuthCode": [] - } - ], - "parameters": [ - { - "in": "path", - "name": "projectId", - "description": "Project ID", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "rancherId", - "description": "Rancher ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/publicCloud.rancher.Credentials" - }, - "examples": { - "Example": { - "value": { - "password": "u}m.ZBA'>g?!D3DD", - "username": "admin" - }, - "summary": "Example" - } - } - } - } }, - "500": { - "description": "Error 500 response", + "409": { + "description": "Error 409 response", "content": { "application/json": { "schema": { @@ -2193,10 +26799,16 @@ } }, "examples": { - "Server::InternalServerError::Maintenance": { + "Client::Conflict::NameAlreadyInUse": { "value": { - "class": "Server::InternalServerError::Maintenance", - "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available." + "class": "Client::Conflict::NameAlreadyInUse", + "message": "This name is already in use" + } + }, + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" } } } @@ -2205,25 +26817,26 @@ } }, "tags": [ - "Rancher" + "Storage", + "Object" ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:rancher/adminCredentials/reset", + "name": "publicCloudProject:apiovh:bucket/create", "required": true } ] } }, - "/publicCloud/project/{projectId}/rancher/{rancherId}/capabilities/plan": { - "get": { - "summary": "List available and current plans for the given managed Rancher service", + "/publicCloud/project/{projectId}/storage/object/bucket/{bucketName}": { + "delete": { + "summary": "Delete an S3 bucket", "security": [ { "oAuth2AuthCode": [] @@ -2231,21 +26844,14 @@ ], "parameters": [ { - "in": "header", - "name": "X-Pagination-Cursor", - "description": "Pagination cursor", + "in": "path", + "name": "bucketName", + "description": "Bucket name", + "required": true, "schema": { "type": "string" } }, - { - "in": "header", - "name": "X-Pagination-Size", - "description": "Pagination size", - "schema": { - "type": "integer" - } - }, { "in": "path", "name": "projectId", @@ -2254,16 +26860,6 @@ "schema": { "type": "string" } - }, - { - "in": "path", - "name": "rancherId", - "description": "Rancher ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { @@ -2272,46 +26868,42 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/publicCloud.rancher.PlanCapability" + "$ref": "#/components/schemas/publicCloud.storage.object.Bucket" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } } }, "examples": { - "Get plans - can switch to another plan": { - "value": [ - { - "name": "OVHCLOUD_EDITION", - "status": "CURRENT" - }, - { - "name": "STANDARD", - "status": "AVAILABLE" - } - ], - "summary": "Response body when listing plans for a specific rancher that can switch to another plan" - }, - "Get plans - cannot switch to another plan": { - "value": [ - { - "cause": "CANNOT_DOWNGRADE_USING_HIGHER_FEATURES", - "message": "You are currently using STANDARD plan features and cannot downgrade to OVHCLOUD_EDITION plan.", - "name": "OVHCLOUD_EDITION", - "status": "UNAVAILABLE" - }, - { - "name": "STANDARD", - "status": "CURRENT" - } - ], - "summary": "Response body when listing plans for a specific rancher that cannot switch to another plan" + "Client::NotFound::BucketDoesNotExist": { + "value": { + "class": "Client::NotFound::BucketDoesNotExist", + "message": "S3 bucket not found" + } } } } } }, - "500": { - "description": "Error 500 response", + "409": { + "description": "Error 409 response", "content": { "application/json": { "schema": { @@ -2329,10 +26921,16 @@ } }, "examples": { - "Server::InternalServerError::Maintenance": { + "Client::Conflict::ResourceAlreadyBeingDeleted": { "value": { - "class": "Server::InternalServerError::Maintenance", - "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available." + "class": "Client::Conflict::ResourceAlreadyBeingDeleted", + "message": "Resource is already being deleted" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" } } } @@ -2341,25 +26939,24 @@ } }, "tags": [ - "Rancher" + "Storage", + "Object" ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:rancher/capabilities/plan/get", + "name": "publicCloudProject:apiovh:bucket/delete", "required": true } ] - } - }, - "/publicCloud/project/{projectId}/rancher/{rancherId}/capabilities/version": { + }, "get": { - "summary": "List available and current versions for the given managed Rancher service", + "summary": "Get an S3 bucket", "security": [ { "oAuth2AuthCode": [] @@ -2367,21 +26964,14 @@ ], "parameters": [ { - "in": "header", - "name": "X-Pagination-Cursor", - "description": "Pagination cursor", + "in": "path", + "name": "bucketName", + "description": "Bucket name", + "required": true, "schema": { "type": "string" } }, - { - "in": "header", - "name": "X-Pagination-Size", - "description": "Pagination size", - "schema": { - "type": "integer" - } - }, { "in": "path", "name": "projectId", @@ -2390,16 +26980,6 @@ "schema": { "type": "string" } - }, - { - "in": "path", - "name": "rancherId", - "description": "Rancher ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { @@ -2408,40 +26988,56 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/publicCloud.rancher.VersionCapability" - } + "$ref": "#/components/schemas/publicCloud.storage.object.Bucket" }, "examples": { "Example": { - "value": [ - { - "changelogUrl": "https://github.com/rancher/rancher/releases/tag/v1.0.0", - "name": "1.0.0", - "status": "AVAILABLE" + "value": { + "checksum": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", + "createdAt": "2026-02-01T10:00:00Z", + "currentState": { + "encryption": { + "algorithm": "AES256" + }, + "location": { + "region": "GRA" + }, + "name": "my-data-bucket", + "tags": { + "env": "production" + }, + "versioning": { + "status": "ENABLED" + } }, - { - "changelogUrl": "https://github.com/rancher/rancher/releases/tag/v1.1.0", - "name": "1.1.0", - "status": "AVAILABLE" + "currentTasks": [], + "id": "my-data-bucket", + "resourceStatus": "READY", + "targetSpec": { + "encryption": { + "algorithm": "AES256" + }, + "location": { + "region": "GRA" + }, + "name": "my-data-bucket", + "tags": { + "env": "production" + }, + "versioning": { + "status": "ENABLED" + } }, - { - "cause": "CANNOT_UPGRADE_MULTIPLE_VERSIONS", - "changelogUrl": "https://github.com/rancher/rancher/releases/tag/v1.2.0", - "message": "You cannot upgrade directly to this version, please upgrade to the next minor first.", - "name": "1.2.0", - "status": "UNAVAILABLE" - } - ], - "summary": "Example" + "updatedAt": "2026-02-01T10:05:00Z" + }, + "summary": "A bucket with versioning and encryption enabled" } } } } }, - "500": { - "description": "Error 500 response", + "404": { + "description": "Error 404 response", "content": { "application/json": { "schema": { @@ -2459,10 +27055,10 @@ } }, "examples": { - "Server::InternalServerError::Maintenance": { + "Client::NotFound::BucketDoesNotExist": { "value": { - "class": "Server::InternalServerError::Maintenance", - "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available." + "class": "Client::NotFound::BucketDoesNotExist", + "message": "S3 bucket not found" } } } @@ -2471,25 +27067,25 @@ } }, "tags": [ - "Rancher" + "Storage", + "Object" ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:rancher/capabilities/version/get", + "name": "publicCloudProject:apiovh:bucket/get", "required": true } - ] - } - }, - "/publicCloud/project/{projectId}/rancher/{rancherId}/event": { - "get": { - "summary": "List all events related to the managed Rancher service", + ], + "x-response-identifier": "id" + }, + "put": { + "summary": "Update an S3 bucket configuration", "security": [ { "oAuth2AuthCode": [] @@ -2497,21 +27093,14 @@ ], "parameters": [ { - "in": "header", - "name": "X-Pagination-Cursor", - "description": "Pagination cursor", + "in": "path", + "name": "bucketName", + "description": "Bucket name", + "required": true, "schema": { "type": "string" } }, - { - "in": "header", - "name": "X-Pagination-Size", - "description": "Pagination size", - "schema": { - "type": "integer" - } - }, { "in": "path", "name": "projectId", @@ -2520,54 +27109,79 @@ "schema": { "type": "string" } - }, - { - "in": "path", - "name": "rancherId", - "description": "Rancher ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.storage.object.BucketUpdate" + }, + "examples": { + "Update bucket": { + "value": { + "checksum": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4", + "targetSpec": { + "encryption": { + "algorithm": "AES256" + }, + "tags": { + "env": "production" + }, + "versioning": { + "status": "ENABLED" + } + } + }, + "summary": "Add encryption to a bucket using optimistic concurrency with checksum" + } + } + } + } + }, "responses": { "200": { "description": "successful operation", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/common.Event" + "$ref": "#/components/schemas/publicCloud.storage.object.Bucket" + } + } + } + }, + "404": { + "description": "Error 404 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } } }, "examples": { - "Example": { - "value": [ - { - "createdAt": "2020-12-31T20:10:01Z", - "kind": "RANCHER_UPDATE", - "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/132645az-9c16-4021-b920-dfd22d8848c4/task/8e2478fa-af3b-4576-b344-af3546f52b5b", - "message": "Task started to update Rancher", - "type": "TASK_START" - }, - { - "createdAt": "2020-12-01T20:10:00Z", - "kind": "RANCHER_UPDATE", - "message": "Rancher target spec updated", - "type": "TARGET_SPEC_UPDATE" - } - ], - "summary": "Example" + "Client::NotFound::BucketDoesNotExist": { + "value": { + "class": "Client::NotFound::BucketDoesNotExist", + "message": "S3 bucket not found" + } } } } } }, - "500": { - "description": "Error 500 response", + "409": { + "description": "Error 409 response", "content": { "application/json": { "schema": { @@ -2585,10 +27199,16 @@ } }, "examples": { - "Server::InternalServerError::Maintenance": { + "Client::Conflict::ChecksumMismatch": { "value": { - "class": "Server::InternalServerError::Maintenance", - "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available." + "class": "Client::Conflict::ChecksumMismatch", + "message": "Checksum mismatch — a concurrent update was detected. Refresh the resource and retry" + } + }, + "Client::Conflict::ResourceInInvalidState": { + "value": { + "class": "Client::Conflict::ResourceInInvalidState", + "message": "Resource cannot be modified in its current state" } } } @@ -2597,25 +27217,26 @@ } }, "tags": [ - "Rancher" + "Storage", + "Object" ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:rancher/event/get", + "name": "publicCloudProject:apiovh:bucket/edit", "required": true } ] } }, - "/publicCloud/project/{projectId}/rancher/{rancherId}/task": { + "/publicCloud/project/{projectId}/storage/object/bucket/{bucketName}/lifecycle": { "get": { - "summary": "List all asynchronous operations related to the managed Rancher service", + "summary": "List lifecycle rules for an S3 bucket", "security": [ { "oAuth2AuthCode": [] @@ -2623,21 +27244,14 @@ ], "parameters": [ { - "in": "header", - "name": "X-Pagination-Cursor", - "description": "Pagination cursor", + "in": "path", + "name": "bucketName", + "description": "Bucket name", + "required": true, "schema": { "type": "string" } }, - { - "in": "header", - "name": "X-Pagination-Size", - "description": "Pagination size", - "schema": { - "type": "integer" - } - }, { "in": "path", "name": "projectId", @@ -2646,16 +27260,6 @@ "schema": { "type": "string" } - }, - { - "in": "path", - "name": "rancherId", - "description": "Rancher ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } } ], "responses": { @@ -2664,48 +27268,13 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/common.Task" - } - }, - "examples": { - "Example": { - "value": [ - { - "createdAt": "2020-12-01T20:00:00Z", - "errors": [], - "id": "6ffe3c08-3b65-4ede-a0e6-8b137e333e54", - "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/132645az-9c16-4021-b920-dfd22d8848c4", - "message": "Cloud project a755273a123456788da6d6fcc71a95f3: update rancher 132645az-9c16-4021-b920-dfd22d8848c4", - "progress": [ - { - "name": "test", - "status": "RUNNING" - }, - { - "name": "another step", - "status": "DONE" - }, - { - "name": "yet another step", - "status": "PENDING" - } - ], - "startedAt": "2020-12-01T20:01:00Z", - "status": "RUNNING", - "type": "PlanUpdate", - "updatedAt": "2020-12-01T20:02:00Z" - } - ], - "summary": "Example" - } + "$ref": "#/components/schemas/publicCloud.storage.object.LifecycleRulesResponse" } } } - }, - "500": { - "description": "Error 500 response", + }, + "409": { + "description": "Error 409 response", "content": { "application/json": { "schema": { @@ -2723,10 +27292,10 @@ } }, "examples": { - "Server::InternalServerError::Maintenance": { + "Client::Conflict::RegionInMaintenance": { "value": { - "class": "Server::InternalServerError::Maintenance", - "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available." + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" } } } @@ -2735,27 +27304,25 @@ } }, "tags": [ - "Rancher" + "Storage", + "Object" ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:rancher/task/get", + "name": "publicCloudProject:apiovh:storage/object/bucket/lifecycle/get", "required": true } - ], - "x-response-identifier": "id", - "x-expanded-response": "CommonTask" - } - }, - "/publicCloud/project/{projectId}/rancher/{rancherId}/task/{taskId}": { - "get": { - "summary": "Get a specific task related to the managed Rancher service", + ] + }, + "put": { + "summary": "Replace all lifecycle rules for an S3 bucket", + "description": "Replaces the entire lifecycle configuration with the provided rules array. An empty array deletes all rules.", "security": [ { "oAuth2AuthCode": [] @@ -2764,8 +27331,8 @@ "parameters": [ { "in": "path", - "name": "projectId", - "description": "Project ID", + "name": "bucketName", + "description": "Bucket name", "required": true, "schema": { "type": "string" @@ -2773,68 +27340,37 @@ }, { "in": "path", - "name": "rancherId", - "description": "Rancher ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "taskId", - "description": "Task ID", + "name": "projectId", + "description": "Project ID", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.storage.object.LifecycleRulePut" + } + } + } + }, "responses": { "200": { "description": "successful operation", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/common.Task" - }, - "examples": { - "Example": { - "value": { - "createdAt": "2020-12-01T20:00:00Z", - "errors": [], - "id": "6ffe3c08-3b65-4ede-a0e6-8b137e333e54", - "link": "/v2/publicCloud/project/a755273a123456788da6d6fcc71a95f3/rancher/132645az-9c16-4021-b920-dfd22d8848c4", - "message": "Cloud project a755273a123456788da6d6fcc71a95f3: update rancher 132645az-9c16-4021-b920-dfd22d8848c4", - "progress": [ - { - "name": "test", - "status": "RUNNING" - }, - { - "name": "another step", - "status": "DONE" - }, - { - "name": "yet another step", - "status": "PENDING" - } - ], - "startedAt": "2020-12-01T20:01:00Z", - "status": "RUNNING", - "type": "RANCHER_UPDATE", - "updatedAt": "2020-12-01T20:02:00Z" - }, - "summary": "Example" - } + "$ref": "#/components/schemas/publicCloud.storage.object.LifecycleRulesResponse" } } } }, - "500": { - "description": "Error 500 response", + "409": { + "description": "Error 409 response", "content": { "application/json": { "schema": { @@ -2852,10 +27388,10 @@ } }, "examples": { - "Server::InternalServerError::Maintenance": { + "Client::Conflict::RegionInMaintenance": { "value": { - "class": "Server::InternalServerError::Maintenance", - "message": "The Managed Rancher Service API is in maintenance mode. Only GET endpoints are available." + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" } } } @@ -2864,26 +27400,26 @@ } }, "tags": [ - "Rancher" + "Storage", + "Object" ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:rancher/task/get", + "name": "publicCloudProject:apiovh:storage/object/bucket/lifecycle/edit", "required": true } - ], - "x-response-identifier": "id" + ] } }, - "/publicCloud/project/{projectId}/reference/rancher/plan": { + "/publicCloud/project/{projectId}/storage/object/bucket/{bucketName}/replication": { "get": { - "summary": "List available plans for creating a managed Rancher service", + "summary": "List replication rules for an S3 bucket", "security": [ { "oAuth2AuthCode": [] @@ -2891,21 +27427,14 @@ ], "parameters": [ { - "in": "header", - "name": "X-Pagination-Cursor", - "description": "Pagination cursor", + "in": "path", + "name": "bucketName", + "description": "Bucket name", + "required": true, "schema": { "type": "string" } }, - { - "in": "header", - "name": "X-Pagination-Size", - "description": "Pagination size", - "schema": { - "type": "integer" - } - }, { "in": "path", "name": "projectId", @@ -2922,24 +27451,35 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/publicCloud.rancher.PlanReference" + "$ref": "#/components/schemas/publicCloud.storage.object.ReplicationRulesResponse" + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } } }, "examples": { - "Example": { - "value": [ - { - "name": "OVHCLOUD_EDITION", - "status": "AVAILABLE" - }, - { - "name": "STANDARD", - "status": "AVAILABLE" - } - ], - "summary": "Example" + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } } } } @@ -2947,26 +27487,25 @@ } }, "tags": [ - "Rancher", - "Reference" + "Storage", + "Object" ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:reference/rancher/plan/get", + "name": "publicCloudProject:apiovh:storage/object/bucket/replication/get", "required": true } ] - } - }, - "/publicCloud/project/{projectId}/reference/rancher/version": { - "get": { - "summary": "List available versions for creating a managed Rancher service", + }, + "put": { + "summary": "Replace all replication rules for an S3 bucket", + "description": "Replaces the entire replication configuration with the provided rules array. An empty array deletes all rules.", "security": [ { "oAuth2AuthCode": [] @@ -2974,21 +27513,14 @@ ], "parameters": [ { - "in": "header", - "name": "X-Pagination-Cursor", - "description": "Pagination cursor", + "in": "path", + "name": "bucketName", + "description": "Bucket name", + "required": true, "schema": { "type": "string" } }, - { - "in": "header", - "name": "X-Pagination-Size", - "description": "Pagination size", - "schema": { - "type": "integer" - } - }, { "in": "path", "name": "projectId", @@ -2999,32 +27531,51 @@ } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/publicCloud.storage.object.ReplicationRulePut" + } + } + } + }, "responses": { "200": { "description": "successful operation", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/publicCloud.rancher.VersionReference" + "$ref": "#/components/schemas/publicCloud.storage.object.ReplicationRulesResponse" + } + } + } + }, + "409": { + "description": "Error 409 response", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Common error model", + "properties": { + "class": { + "type": "string", + "description": "Class of the error" + }, + "message": { + "type": "string", + "description": "Error message" + } } }, "examples": { - "Example": { - "value": [ - { - "changelogUrl": "https://github.com/rancher/rancher/releases/tag/v1.0.0", - "name": "1.0.0", - "status": "AVAILABLE" - }, - { - "changelogUrl": "https://github.com/rancher/rancher/releases/tag/v1.1.0", - "name": "1.1.0", - "status": "AVAILABLE" - } - ], - "summary": "Example" + "Client::Conflict::RegionInMaintenance": { + "value": { + "class": "Client::Conflict::RegionInMaintenance", + "message": "This region is currently in maintenance" + } } } } @@ -3032,18 +27583,18 @@ } }, "tags": [ - "Rancher", - "Reference" + "Storage", + "Object" ], "x-badges": [ { - "color": "green", - "label": "Stable production version" + "color": "orange", + "label": "Internal use only" } ], "x-iam-actions": [ { - "name": "publicCloudProject:apiovh:reference/rancher/version/get", + "name": "publicCloudProject:apiovh:storage/object/bucket/replication/edit", "required": true } ] @@ -3195,6 +27746,31 @@ } }, "tags": [ + { + "name": "Compute", + "x-tag-expanded": false, + "description": "Missing description" + }, + { + "name": "Network", + "x-tag-expanded": false, + "description": "Missing description" + }, + { + "name": "KeyManager", + "x-tag-expanded": false, + "description": "Missing description" + }, + { + "name": "Loadbalancer", + "x-tag-expanded": false, + "description": "Missing description" + }, + { + "name": "Quota", + "x-tag-expanded": false, + "description": "Missing description" + }, { "name": "Rancher", "x-tag-expanded": false, @@ -3204,6 +27780,26 @@ "name": "Reference", "x-tag-expanded": false, "description": "Missing description" + }, + { + "name": "Storage", + "x-tag-expanded": false, + "description": "Missing description" + }, + { + "name": "Block", + "x-tag-expanded": false, + "description": "Missing description" + }, + { + "name": "File", + "x-tag-expanded": false, + "description": "Missing description" + }, + { + "name": "Object", + "x-tag-expanded": false, + "description": "Missing description" } ] } diff --git a/internal/cmd/cloud_storage_block.go b/internal/cmd/cloud_storage_block.go index 3308d7d7..8627717e 100644 --- a/internal/cmd/cloud_storage_block.go +++ b/internal/cmd/cloud_storage_block.go @@ -42,7 +42,8 @@ func initCloudVolumeCommand(cloudCmd *cobra.Command) { volumeEditCmd.Flags().StringVar(&cloud.VolumeEditSpec.Description, "description", "", "Volume description") volumeEditCmd.Flags().StringVar(&cloud.VolumeEditSpec.Name, "name", "", "Volume name") volumeEditCmd.Flags().IntVar(&cloud.VolumeEditSpec.Size, "size", 0, "Volume size (in GB, can only be increased)") - volumeEditCmd.Flags().StringVar(&cloud.VolumeEditSpec.Type, "type", "", "Volume type (classic, classic-luks, classic-multiattach, high-speed, high-speed-gen2, high-speed-gen2-luks, high-speed-luks)") + volumeEditCmd.Flags().StringVar(&cloud.VolumeEditSpec.Type, "type", "", "Volume type (CLASSIC, HIGH_SPEED, HIGH_SPEED_GEN2)") + volumeEditCmd.Flags().BoolVar(&flags.WaitForTask, "wait", false, "Wait for the volume to be READY before exiting") addInteractiveEditorFlag(volumeEditCmd) storageBlockCmd.AddCommand(volumeEditCmd) @@ -85,6 +86,7 @@ func initCloudVolumeCommand(cloudCmd *cobra.Command) { } volumeSnapshotCreateCmd.Flags().StringVar(&cloud.VolumeSnapShotSpec.Description, "description", "", "Snapshot description") volumeSnapshotCreateCmd.Flags().StringVar(&cloud.VolumeSnapShotSpec.Name, "name", "", "Snapshot name") + volumeSnapshotCreateCmd.Flags().BoolVar(&flags.WaitForTask, "wait", false, "Wait for the snapshot to be READY before exiting") volumeSnapshotCmd.AddCommand(volumeSnapshotCreateCmd) volumeSnapshotListCmd := &cobra.Command{ @@ -125,12 +127,14 @@ func initCloudVolumeCommand(cloudCmd *cobra.Command) { Args: cobra.ExactArgs(1), }) - volumeBackupCmd.AddCommand(&cobra.Command{ + volumeBackupCreateCmd := &cobra.Command{ Use: "create ", Short: "Create a backup of the given volume", Run: cloud.CreateVolumeBackup, Args: cobra.ExactArgs(2), - }) + } + volumeBackupCreateCmd.Flags().BoolVar(&flags.WaitForTask, "wait", false, "Wait for the backup to be READY before exiting") + volumeBackupCmd.AddCommand(volumeBackupCreateCmd) volumeBackupCmd.AddCommand(&cobra.Command{ Use: "delete ", @@ -146,13 +150,6 @@ func initCloudVolumeCommand(cloudCmd *cobra.Command) { Args: cobra.ExactArgs(2), }) - storageBlockCmd.AddCommand(&cobra.Command{ - Use: "create-from-backup ", - Short: "Create a volume from the given backup", - Run: cloud.CreateVolumeFromBackup, - Args: cobra.ExactArgs(2), - }) - cloudCmd.AddCommand(storageBlockCmd) } @@ -171,7 +168,7 @@ func getVolumeCreateCmd() *cobra.Command { volumeCreateCmd.Flags().StringVar(&cloud.VolumeSpec.Name, "name", "", "Volume name") volumeCreateCmd.Flags().IntVar(&cloud.VolumeSpec.Size, "size", 0, "Volume size (in GB)") volumeCreateCmd.Flags().StringVar(&cloud.VolumeSpec.SnapshotId, "snapshot-id", "", "Snapshot ID to create the volume from") - volumeCreateCmd.Flags().StringVar(&cloud.VolumeSpec.Type, "type", "", "Volume type (classic, classic-luks, classic-multiattach, high-speed, high-speed-gen2, high-speed-gen2-luks, high-speed-luks)") + volumeCreateCmd.Flags().StringVar(&cloud.VolumeSpec.Type, "type", "", "Volume type (CLASSIC, HIGH_SPEED, HIGH_SPEED_GEN2)") addParameterFileFlags(volumeCreateCmd, false, assets.CloudOpenapiSchema, "/cloud/project/{serviceName}/region/{regionName}/volume", "post", cloud.VolumeCreateExample, nil) addInteractiveEditorFlag(volumeCreateCmd) diff --git a/internal/cmd/cloud_storage_block_test.go b/internal/cmd/cloud_storage_block_test.go index 43565ec7..cfc347ce 100644 --- a/internal/cmd/cloud_storage_block_test.go +++ b/internal/cmd/cloud_storage_block_test.go @@ -14,14 +14,18 @@ import ( func (ms *MockSuite) TestCloudStorageBlockListCmd(assert, require *td.T) { httpmock.RegisterResponder(http.MethodGet, - "https://eu.api.ovh.com/v1/cloud/project/fakeProjectID/volume", + "https://eu.api.ovh.com/v2/publicCloud/project/fakeProjectID/storage/block/volume", httpmock.NewStringResponder(200, `[ { "id": "vol-1", - "name": "test-volume", - "region": "GRA9", - "type": "high-speed-gen2", - "status": "available" + "resourceStatus": "READY", + "currentState": { + "name": "test-volume", + "size": 50, + "volumeType": "HIGH_SPEED_GEN2", + "status": "AVAILABLE", + "location": { "region": "EU-WEST-PAR" } + } } ]`)) @@ -34,14 +38,22 @@ func (ms *MockSuite) TestCloudStorageBlockListCmd(assert, require *td.T) { func (ms *MockSuite) TestCloudStorageBlockGetCmd(assert, require *td.T) { httpmock.RegisterResponder(http.MethodGet, - "https://eu.api.ovh.com/v1/cloud/project/fakeProjectID/volume/vol-1", + "https://eu.api.ovh.com/v2/publicCloud/project/fakeProjectID/storage/block/volume/vol-1", httpmock.NewStringResponder(200, `{ "id": "vol-1", - "name": "test-volume", - "region": "GRA9", - "type": "high-speed-gen2", - "status": "available", - "size": 50 + "resourceStatus": "READY", + "currentState": { + "name": "test-volume", + "size": 50, + "volumeType": "HIGH_SPEED_GEN2", + "status": "AVAILABLE", + "location": { "region": "EU-WEST-PAR" } + }, + "targetSpec": { + "name": "test-volume", + "size": 50, + "volumeType": "HIGH_SPEED_GEN2" + } }`)) out, err := cmd.Execute("cloud", "storage", "block", "get", "vol-1", "--cloud-project", "fakeProjectID") @@ -49,11 +61,14 @@ func (ms *MockSuite) TestCloudStorageBlockGetCmd(assert, require *td.T) { require.CmpNoError(err) assert.Cmp(out, td.Contains("vol-1")) assert.Cmp(out, td.Contains("test-volume")) + // Optional fields absent from the response (description, availabilityZone, + // attachedInstances) must not leak Go's "" placeholder. + assert.Cmp(out, td.Not(td.Contains(""))) } func (ms *MockSuite) TestCloudStorageBlockDeleteCmd(assert, require *td.T) { httpmock.RegisterResponder(http.MethodDelete, - "https://eu.api.ovh.com/v1/cloud/project/fakeProjectID/volume/vol-1", + "https://eu.api.ovh.com/v2/publicCloud/project/fakeProjectID/storage/block/volume/vol-1", httpmock.NewStringResponder(200, ``)) out, err := cmd.Execute("cloud", "storage", "block", "delete", "vol-1", "--cloud-project", "fakeProjectID") @@ -64,14 +79,17 @@ func (ms *MockSuite) TestCloudStorageBlockDeleteCmd(assert, require *td.T) { func (ms *MockSuite) TestCloudStorageBlockSnapshotListCmd(assert, require *td.T) { httpmock.RegisterResponder(http.MethodGet, - "https://eu.api.ovh.com/v1/cloud/project/fakeProjectID/volume/snapshot", + "https://eu.api.ovh.com/v2/publicCloud/project/fakeProjectID/storage/block/snapshot", httpmock.NewStringResponder(200, `[ { "id": "snap-1", - "name": "test-snapshot", - "region": "GRA9", - "description": "test", - "status": "available" + "resourceStatus": "READY", + "currentState": { + "name": "test-snapshot", + "size": 10, + "volumeId": "vol-1", + "location": { "region": "EU-WEST-PAR" } + } } ]`)) @@ -83,26 +101,17 @@ func (ms *MockSuite) TestCloudStorageBlockSnapshotListCmd(assert, require *td.T) func (ms *MockSuite) TestCloudStorageBlockBackupListCmd(assert, require *td.T) { httpmock.RegisterResponder(http.MethodGet, - "https://eu.api.ovh.com/v1/cloud/project/fakeProjectID/region", - httpmock.NewStringResponder(200, `["GRA9"]`)) - - httpmock.RegisterResponder(http.MethodGet, - "https://eu.api.ovh.com/v1/cloud/project/fakeProjectID/region/GRA9", - httpmock.NewStringResponder(200, `{ - "name": "GRA9", - "type": "region", - "status": "UP", - "services": [{"name": "volume", "status": "UP"}] - }`)) - - httpmock.RegisterResponder(http.MethodGet, - "https://eu.api.ovh.com/v1/cloud/project/fakeProjectID/region/GRA9/volumeBackup", + "https://eu.api.ovh.com/v2/publicCloud/project/fakeProjectID/storage/block/backup", httpmock.NewStringResponder(200, `[ { "id": "backup-1", - "name": "test-backup", - "region": "GRA9", - "status": "ok" + "resourceStatus": "READY", + "currentState": { + "name": "test-backup", + "size": 10, + "volumeId": "vol-1", + "location": { "region": "EU-WEST-PAR" } + } } ]`)) diff --git a/internal/services/cloud/cloud_storage_block.go b/internal/services/cloud/cloud_storage_block.go index 551fc5f8..93d4b000 100644 --- a/internal/services/cloud/cloud_storage_block.go +++ b/internal/services/cloud/cloud_storage_block.go @@ -11,9 +11,7 @@ import ( "net/url" "time" - "github.com/ovh/ovhcloud-cli/internal/assets" "github.com/ovh/ovhcloud-cli/internal/display" - filtersLib "github.com/ovh/ovhcloud-cli/internal/filters" "github.com/ovh/ovhcloud-cli/internal/flags" httpLib "github.com/ovh/ovhcloud-cli/internal/http" "github.com/ovh/ovhcloud-cli/internal/services/common" @@ -21,7 +19,32 @@ import ( ) var ( - volumeColumnsToDisplay = []string{"id", "name", "region", "type", "status"} + volumeColumnsToDisplay = []string{ + "id", + "currentState.name name", + "currentState.location.region region", + "currentState.volumeType type", + "currentState.size size", + "currentState.status status", + } + + snapshotColumnsToDisplay = []string{ + "id", + "currentState.name name", + "currentState.location.region region", + "currentState.size size", + "currentState.volumeId volumeId", + "resourceStatus status", + } + + backupColumnsToDisplay = []string{ + "id", + "currentState.name name", + "currentState.location.region region", + "currentState.size size", + "currentState.volumeId volumeId", + "resourceStatus status", + } //go:embed templates/cloud_volume.tmpl volumeTemplate string @@ -54,6 +77,29 @@ var ( } ) +// volumeV2Endpoint returns the project-scoped v2 block storage volume endpoint. +func volumeV2Endpoint(projectID string) string { + return fmt.Sprintf("/v2/publicCloud/project/%s/storage/block/volume", projectID) +} + +// getVolumeLocation fetches the location (region/availability zone) of a volume, +// required to create project-scoped snapshots and backups in the v2 API. +func getVolumeLocation(projectID, volumeID string) (map[string]any, error) { + var volume struct { + CurrentState struct { + Location map[string]any `json:"location"` + } `json:"currentState"` + } + endpoint := fmt.Sprintf("%s/%s", volumeV2Endpoint(projectID), url.PathEscape(volumeID)) + if err := httpLib.Client.Get(endpoint, &volume); err != nil { + return nil, err + } + if len(volume.CurrentState.Location) == 0 { + return nil, fmt.Errorf("could not determine location of volume %s", volumeID) + } + return volume.CurrentState.Location, nil +} + func ListCloudVolumes(_ *cobra.Command, _ []string) { projectID, err := getConfiguredCloudProject() if err != nil { @@ -61,7 +107,7 @@ func ListCloudVolumes(_ *cobra.Command, _ []string) { return } - common.ManageListRequestNoExpand(fmt.Sprintf("/v1/cloud/project/%s/volume", projectID), volumeColumnsToDisplay, flags.GenericFilters) + common.ManageListRequestNoExpand(volumeV2Endpoint(projectID), volumeColumnsToDisplay, flags.GenericFilters) } func GetVolume(_ *cobra.Command, args []string) { @@ -71,74 +117,129 @@ func GetVolume(_ *cobra.Command, args []string) { return } - common.ManageObjectRequest(fmt.Sprintf("/v1/cloud/project/%s/volume", projectID), args[0], volumeTemplate) + common.ManageObjectRequest(volumeV2Endpoint(projectID), args[0], volumeTemplate) } -func EditVolume(cmd *cobra.Command, args []string) { +func EditVolume(_ *cobra.Command, args []string) { projectID, err := getConfiguredCloudProject() if err != nil { display.OutputError(&flags.OutputFormatConfig, "%s", err) return } - // Fetch the volume to get its region for the region-scoped endpoint - var volume map[string]any - if err := httpLib.Client.Get( - fmt.Sprintf("/v1/cloud/project/%s/volume/%s", projectID, url.PathEscape(args[0])), - &volume, - ); err != nil { + endpoint := fmt.Sprintf("%s/%s", volumeV2Endpoint(projectID), url.PathEscape(args[0])) + + // The v2 update requires the current checksum (optimistic locking) and a full + // target spec, so fetch the volume first and use its values as defaults. + var volume struct { + Checksum string `json:"checksum"` + CurrentState struct { + Name string `json:"name"` + Size int `json:"size"` + VolumeType string `json:"volumeType"` + } `json:"currentState"` + } + if err := httpLib.Client.Get(endpoint, &volume); err != nil { display.OutputError(&flags.OutputFormatConfig, "failed to fetch volume: %s", err) return } - region := volume["region"].(string) - if err := common.EditResource( - cmd, - "/cloud/project/{serviceName}/region/{regionName}/volume/{volumeId}", - fmt.Sprintf("/v1/cloud/project/%s/region/%s/volume/%s", projectID, url.PathEscape(region), url.PathEscape(args[0])), - VolumeEditSpec, - assets.CloudOpenapiSchema, - ); err != nil { - display.OutputError(&flags.OutputFormatConfig, "%s", err) + targetSpec := map[string]any{ + "name": volume.CurrentState.Name, + "size": volume.CurrentState.Size, + "volumeType": volume.CurrentState.VolumeType, + } + if VolumeEditSpec.Name != "" { + targetSpec["name"] = VolumeEditSpec.Name + } + if VolumeEditSpec.Size != 0 { + targetSpec["size"] = VolumeEditSpec.Size + } + if VolumeEditSpec.Type != "" { + targetSpec["volumeType"] = VolumeEditSpec.Type + } + + body := map[string]any{ + "checksum": volume.Checksum, + "targetSpec": targetSpec, + } + + var updated map[string]any + if err := httpLib.Client.Put(endpoint, body, &updated); err != nil { + display.OutputError(&flags.OutputFormatConfig, "failed to update volume: %s", err) + return + } + + if !flags.WaitForTask { + display.OutputInfo(&flags.OutputFormatConfig, updated, "⚡️ Volume %s update started", args[0]) return } + + ready, err := waitForCloudResourceReady(endpoint, 10*time.Minute) + if err != nil { + display.OutputError(&flags.OutputFormatConfig, "failed to wait for volume update: %s", err) + return + } + + display.OutputInfo(&flags.OutputFormatConfig, ready, "✅ Volume %s updated successfully", args[0]) } -func CreateVolume(cmd *cobra.Command, args []string) { +func CreateVolume(_ *cobra.Command, args []string) { projectID, err := getConfiguredCloudProject() if err != nil { display.OutputError(&flags.OutputFormatConfig, "%s", err) return } - endpoint := fmt.Sprintf("/v1/cloud/project/%s/region/%s/volume", projectID, url.PathEscape(args[0])) - task, err := common.CreateResource( - cmd, - "/cloud/project/{serviceName}/region/{regionName}/volume", - endpoint, - VolumeCreateExample, - VolumeSpec, - assets.CloudOpenapiSchema, - []string{"name", "size", "type"}, - ) - if err != nil { - display.OutputError(&flags.OutputFormatConfig, "%s", err) + // args[0] is the region; it goes into the target spec location in the v2 API. + location := map[string]any{"region": args[0]} + if VolumeSpec.AvailabilityZone != "" { + location["availabilityZone"] = VolumeSpec.AvailabilityZone + } + + targetSpec := map[string]any{ + "name": VolumeSpec.Name, + "size": VolumeSpec.Size, + "location": location, + } + if VolumeSpec.Type != "" { + targetSpec["volumeType"] = VolumeSpec.Type + } + + createFrom := map[string]any{} + if VolumeSpec.BackupId != "" { + createFrom["backupId"] = VolumeSpec.BackupId + } + if VolumeSpec.ImageId != "" { + createFrom["imageId"] = VolumeSpec.ImageId + } + if VolumeSpec.SnapshotId != "" { + createFrom["snapshotId"] = VolumeSpec.SnapshotId + } + if len(createFrom) > 0 { + targetSpec["createFrom"] = createFrom + } + + var response map[string]any + if err := httpLib.Client.Post(volumeV2Endpoint(projectID), map[string]any{"targetSpec": targetSpec}, &response); err != nil { + display.OutputError(&flags.OutputFormatConfig, "failed to create volume: %s", err) return } + volumeID, _ := response["id"].(string) + if !flags.WaitForTask { - display.OutputInfo(&flags.OutputFormatConfig, task, `⚡️ Volume creation started successfully (operation ID: %s) -You can check the status of the operation with: 'ovhcloud cloud operation get %[1]s'`, task["id"]) + display.OutputInfo(&flags.OutputFormatConfig, response, "⚡️ Volume %s creation started", volumeID) return } - volumeID, err := waitForCloudOperation(projectID, task["id"].(string), "ablockstorage.CreateVolume", 10*time.Minute) + ready, err := waitForCloudResourceReady(fmt.Sprintf("%s/%s", volumeV2Endpoint(projectID), url.PathEscape(volumeID)), 10*time.Minute) if err != nil { display.OutputError(&flags.OutputFormatConfig, "failed to wait for volume creation: %s", err) return } - display.OutputInfo(&flags.OutputFormatConfig, nil, "✅ Volume %s created successfully", volumeID) + display.OutputInfo(&flags.OutputFormatConfig, ready, "✅ Volume %s created successfully", volumeID) } func DeleteVolume(_ *cobra.Command, args []string) { @@ -148,7 +249,7 @@ func DeleteVolume(_ *cobra.Command, args []string) { return } - endpoint := fmt.Sprintf("/v1/cloud/project/%s/volume/%s", projectID, url.PathEscape(args[0])) + endpoint := fmt.Sprintf("%s/%s", volumeV2Endpoint(projectID), url.PathEscape(args[0])) if err := httpLib.Client.Delete(endpoint, nil); err != nil { display.OutputError(&flags.OutputFormatConfig, "failed to delete volume: %s", err) return @@ -157,6 +258,8 @@ func DeleteVolume(_ *cobra.Command, args []string) { display.OutputInfo(&flags.OutputFormatConfig, nil, "✅ Volume %s deleted successfully", args[0]) } +// AttachVolumeToInstance still uses the v1 API: the v2 block storage API does not +// expose a dedicated attach endpoint yet. func AttachVolumeToInstance(_ *cobra.Command, args []string) { projectID, err := getConfiguredCloudProject() if err != nil { @@ -176,6 +279,8 @@ func AttachVolumeToInstance(_ *cobra.Command, args []string) { display.OutputInfo(&flags.OutputFormatConfig, nil, "✅ Volume %s attached to instance %s successfully", args[0], args[1]) } +// DetachVolumeFromInstance still uses the v1 API: the v2 block storage API does +// not expose a dedicated detach endpoint yet. func DetachVolumeFromInstance(_ *cobra.Command, args []string) { projectID, err := getConfiguredCloudProject() if err != nil { @@ -202,38 +307,62 @@ func CreateVolumeSnapshot(_ *cobra.Command, args []string) { return } - var ( - endpoint = fmt.Sprintf("/v1/cloud/project/%s/volume/%s/snapshot", projectID, url.PathEscape(args[0])) - response map[string]any - ) + location, err := getVolumeLocation(projectID, args[0]) + if err != nil { + display.OutputError(&flags.OutputFormatConfig, "failed to fetch volume: %s", err) + return + } - if err := httpLib.Client.Post(endpoint, VolumeSnapShotSpec, &response); err != nil { + targetSpec := map[string]any{ + "name": VolumeSnapShotSpec.Name, + "volumeId": args[0], + "location": location, + } + if VolumeSnapShotSpec.Description != "" { + targetSpec["description"] = VolumeSnapShotSpec.Description + } + + var response map[string]any + endpoint := fmt.Sprintf("/v2/publicCloud/project/%s/storage/block/snapshot", projectID) + if err := httpLib.Client.Post(endpoint, map[string]any{"targetSpec": targetSpec}, &response); err != nil { display.OutputError(&flags.OutputFormatConfig, "failed to create snapshot: %s", err) return } - display.OutputInfo(&flags.OutputFormatConfig, response, "✅ Snapshot for volume %s created successfully, id : %s", args[0], response["id"]) + snapshotID, _ := response["id"].(string) + + if !flags.WaitForTask { + display.OutputInfo(&flags.OutputFormatConfig, response, "⚡️ Snapshot %s creation started for volume %s", snapshotID, args[0]) + return + } + + ready, err := waitForCloudResourceReady(fmt.Sprintf("%s/%s", endpoint, url.PathEscape(snapshotID)), 10*time.Minute) + if err != nil { + display.OutputError(&flags.OutputFormatConfig, "failed to wait for snapshot creation: %s", err) + return + } + + display.OutputInfo(&flags.OutputFormatConfig, ready, "✅ Snapshot %s created successfully for volume %s", snapshotID, args[0]) } -func ListVolumeSnapshots(cmd *cobra.Command, args []string) { +func ListVolumeSnapshots(cmd *cobra.Command, _ []string) { projectID, err := getConfiguredCloudProject() if err != nil { display.OutputError(&flags.OutputFormatConfig, "%s", err) return } - endpoint := fmt.Sprintf("/v1/cloud/project/%s/volume/snapshot", projectID) - volume, err := cmd.Flags().GetString("volume-id") if err != nil { display.OutputError(&flags.OutputFormatConfig, "%s", err) return } if volume != "" { - flags.GenericFilters = append(flags.GenericFilters, fmt.Sprintf("volumeId==%q", volume)) + flags.GenericFilters = append(flags.GenericFilters, fmt.Sprintf("currentState.volumeId==%q", volume)) } - common.ManageListRequestNoExpand(endpoint, []string{"id", "name", "region", "description", "status"}, flags.GenericFilters) + endpoint := fmt.Sprintf("/v2/publicCloud/project/%s/storage/block/snapshot", projectID) + common.ManageListRequestNoExpand(endpoint, snapshotColumnsToDisplay, flags.GenericFilters) } func DeleteVolumeSnapshot(_ *cobra.Command, args []string) { @@ -243,7 +372,7 @@ func DeleteVolumeSnapshot(_ *cobra.Command, args []string) { return } - endpoint := fmt.Sprintf("/v1/cloud/project/%s/volume/snapshot/%s", projectID, url.PathEscape(args[0])) + endpoint := fmt.Sprintf("/v2/publicCloud/project/%s/storage/block/snapshot/%s", projectID, url.PathEscape(args[0])) if err := httpLib.Client.Delete(endpoint, nil); err != nil { display.OutputError(&flags.OutputFormatConfig, "failed to delete snapshot: %s", err) return @@ -252,134 +381,117 @@ func DeleteVolumeSnapshot(_ *cobra.Command, args []string) { display.OutputInfo(&flags.OutputFormatConfig, nil, "✅ Snapshot %s deleted successfully", args[0]) } - -func findVolumeBackup(backupId string) (string, map[string]any, error) { +func ListVolumeBackups(_ *cobra.Command, _ []string) { projectID, err := getConfiguredCloudProject() if err != nil { - return "", nil, err + display.OutputError(&flags.OutputFormatConfig, "%s", err) + return } - // Fetch regions with volume feature available - regions, err := getCloudRegionsWithFeatureAvailable(projectID, "volume") - if err != nil { - return "", nil, fmt.Errorf("failed to fetch regions with volume feature available: %s", err) - } + endpoint := fmt.Sprintf("/v2/publicCloud/project/%s/storage/block/backup", projectID) + common.ManageListRequestNoExpand(endpoint, backupColumnsToDisplay, flags.GenericFilters) +} - // Search for the given backup in all regions - // TODO: speed up with parallel search or by adding a required region argument - for _, region := range regions { - var ( - volumeBackup map[string]any - endpoint = fmt.Sprintf("/v1/cloud/project/%s/region/%s/volumeBackup/%s", - projectID, url.PathEscape(region.(string)), url.PathEscape(backupId)) - ) - if err := httpLib.Client.Get(endpoint, &volumeBackup); err == nil { - return endpoint, volumeBackup, nil - } +func GetVolumeBackup(_ *cobra.Command, args []string) { + projectID, err := getConfiguredCloudProject() + if err != nil { + display.OutputError(&flags.OutputFormatConfig, "%s", err) + return } - return "", nil, errors.New("no volume backup found with given ID") + common.ManageObjectRequest(fmt.Sprintf("/v2/publicCloud/project/%s/storage/block/backup", projectID), args[0], "") } -func ListVolumeBackups(_ *cobra.Command, args []string) { +func DeleteVolumeBackup(_ *cobra.Command, args []string) { projectID, err := getConfiguredCloudProject() if err != nil { display.OutputError(&flags.OutputFormatConfig, "%s", err) return } - // Fetch regions with volume feature available - regions, err := getCloudRegionsWithFeatureAvailable(projectID, "volume") - if err != nil { - display.OutputError(&flags.OutputFormatConfig, "failed to fetch regions with volume feature available: %s", err) + endpoint := fmt.Sprintf("/v2/publicCloud/project/%s/storage/block/backup/%s", projectID, url.PathEscape(args[0])) + if err := httpLib.Client.Delete(endpoint, nil); err != nil { + display.OutputError(&flags.OutputFormatConfig, "failed to delete volume backup: %s", err) return } - // Fetch volumes in all regions - endpoint := fmt.Sprintf("/v1/cloud/project/%s/region", projectID) - volumeBackups, err := httpLib.FetchObjectsParallel[[]map[string]any](endpoint+"/%s/volumeBackup", regions, true) + display.OutputInfo(&flags.OutputFormatConfig, nil, "✅ Volume backup %s deleted successfully", args[0]) +} + +func CreateVolumeBackup(_ *cobra.Command, args []string) { + projectID, err := getConfiguredCloudProject() if err != nil { - display.OutputError(&flags.OutputFormatConfig, "failed to fetch volume backups: %s", err) + display.OutputError(&flags.OutputFormatConfig, "%s", err) return } - // Flatten volumes in a single array - var allVolumeBackups []map[string]any - for _, regionVolumes := range volumeBackups { - allVolumeBackups = append(allVolumeBackups, regionVolumes...) - } - - // Filter results - allVolumeBackups, err = filtersLib.FilterLines(allVolumeBackups, flags.GenericFilters) + location, err := getVolumeLocation(projectID, args[0]) if err != nil { - display.OutputError(&flags.OutputFormatConfig, "failed to filter results: %s", err) + display.OutputError(&flags.OutputFormatConfig, "failed to fetch volume: %s", err) return } - display.RenderTable(allVolumeBackups, []string{"id", "name", "region", "status"}, &flags.OutputFormatConfig) -} + targetSpec := map[string]any{ + "name": args[1], + "volumeId": args[0], + "location": location, + } -func GetVolumeBackup(_ *cobra.Command, args []string) { - _, backup, err := findVolumeBackup(args[0]) - if err != nil { - display.OutputError(&flags.OutputFormatConfig, "%s", err) + var response map[string]any + endpoint := fmt.Sprintf("/v2/publicCloud/project/%s/storage/block/backup", projectID) + if err := httpLib.Client.Post(endpoint, map[string]any{"targetSpec": targetSpec}, &response); err != nil { + display.OutputError(&flags.OutputFormatConfig, "failed to create volume backup: %s", err) return } - display.OutputObject(backup, args[0], "", &flags.OutputFormatConfig) -} + backupID, _ := response["id"].(string) -func DeleteVolumeBackup(_ *cobra.Command, args []string) { - endpoint, _, err := findVolumeBackup(args[0]) - if err != nil { - display.OutputError(&flags.OutputFormatConfig, "%s", err) + if !flags.WaitForTask { + display.OutputInfo(&flags.OutputFormatConfig, response, "⚡️ Backup %s creation started for volume %s", backupID, args[0]) return } - if err := httpLib.Client.Delete(endpoint, nil); err != nil { - display.OutputError(&flags.OutputFormatConfig, "failed to delete volume backup: %s", err) + ready, err := waitForCloudResourceReady(fmt.Sprintf("%s/%s", endpoint, url.PathEscape(backupID)), 30*time.Minute) + if err != nil { + display.OutputError(&flags.OutputFormatConfig, "failed to wait for backup creation: %s", err) return } - display.OutputInfo(&flags.OutputFormatConfig, nil, "✅ Volume backup %s deleted successfully", args[0]) + display.OutputInfo(&flags.OutputFormatConfig, ready, "✅ Volume backup %s created successfully for volume %s", backupID, args[0]) } -func CreateVolumeBackup(cmd *cobra.Command, args []string) { +// findVolumeBackupV1 locates a volume backup across all regions using the v1 API. +// It is still used by operations that have no v2 equivalent yet (restore and +// create-volume-from-backup). +func findVolumeBackupV1(backupId string) (string, error) { projectID, err := getConfiguredCloudProject() if err != nil { - display.OutputError(&flags.OutputFormatConfig, "%s", err) - return + return "", err } - // Fetch volume to get its region - var volume map[string]any - if err := httpLib.Client.Get( - fmt.Sprintf("/v1/cloud/project/%s/volume/%s", projectID, url.PathEscape(args[0])), - &volume, - ); err != nil { - display.OutputError(&flags.OutputFormatConfig, "failed to fetch volume: %s", err) - return + regions, err := getCloudRegionsWithFeatureAvailable(projectID, "volume") + if err != nil { + return "", fmt.Errorf("failed to fetch regions with volume feature available: %s", err) } - endpoint := fmt.Sprintf("/v1/cloud/project/%s/region/%s/volumeBackup", projectID, url.PathEscape(volume["region"].(string))) - - var ( - response map[string]any - body = map[string]string{ - "volumeId": args[0], - "name": args[1], + for _, region := range regions { + var ( + volumeBackup map[string]any + endpoint = fmt.Sprintf("/v1/cloud/project/%s/region/%s/volumeBackup/%s", + projectID, url.PathEscape(region.(string)), url.PathEscape(backupId)) + ) + if err := httpLib.Client.Get(endpoint, &volumeBackup); err == nil { + return endpoint, nil } - ) - if err := httpLib.Client.Post(endpoint, body, &response); err != nil { - display.OutputError(&flags.OutputFormatConfig, "failed to create volume backup: %s", err) - return } - display.OutputInfo(&flags.OutputFormatConfig, response, "✅ Volume backup for volume %s created successfully (id: %s)", args[0], response["id"]) + return "", errors.New("no volume backup found with given ID") } +// RestoreVolumeBackup still uses the v1 API: the v2 block storage API does not +// expose a restore endpoint yet. func RestoreVolumeBackup(_ *cobra.Command, args []string) { - endpoint, _, err := findVolumeBackup(args[0]) + endpoint, err := findVolumeBackupV1(args[0]) if err != nil { display.OutputError(&flags.OutputFormatConfig, "%s", err) return @@ -396,27 +508,3 @@ func RestoreVolumeBackup(_ *cobra.Command, args []string) { display.OutputInfo(&flags.OutputFormatConfig, nil, "✅ Volume backup %s is being restored to volume %s", args[0], args[1]) } - -func CreateVolumeFromBackup(cmd *cobra.Command, args []string) { - endpoint, _, err := findVolumeBackup(args[0]) - if err != nil { - display.OutputError(&flags.OutputFormatConfig, "%s", err) - return - } - - body := map[string]string{ - "name": args[1], - } - - var response map[string]any - if err := httpLib.Client.Post( - endpoint+"/volume", - body, - &response, - ); err != nil { - display.OutputError(&flags.OutputFormatConfig, "failed to create volume from backup: %s", err) - return - } - - display.OutputInfo(&flags.OutputFormatConfig, response, "✅ Volume %s created successfully from backup %s", response["id"], args[0]) -} diff --git a/internal/services/cloud/templates/cloud_volume.tmpl b/internal/services/cloud/templates/cloud_volume.tmpl index 0e1e01b8..31d999bc 100644 --- a/internal/services/cloud/templates/cloud_volume.tmpl +++ b/internal/services/cloud/templates/cloud_volume.tmpl @@ -1,17 +1,29 @@ 🚀 Volume {{.ServiceName}} ======= +{{if index .Result "currentState" "description"}} +_{{index .Result "currentState" "description"}}_ +{{end}} +## General information -_{{index .Result "description"}}_ +**Status**: {{index .Result "resourceStatus"}} +**Creation date**: {{index .Result "createdAt"}} +**Update date**: {{index .Result "updatedAt"}} -## General information +## Current state + +**Name**: {{index .Result "currentState" "name"}} +**Region**: {{index .Result "currentState" "location" "region"}} +{{if index .Result "currentState" "location" "availabilityZone"}}**Availability zone**: {{index .Result "currentState" "location" "availabilityZone"}} +{{end}}**Type**: {{index .Result "currentState" "volumeType"}} +**Status**: {{index .Result "currentState" "status"}} +**Size**: {{index .Result "currentState" "size"}}GB +**Bootable**: {{index .Result "currentState" "bootable"}} +{{if index .Result "currentState" "attachedInstances"}}**Attached instances**: {{index .Result "currentState" "attachedInstances"}} +{{end}} +## Target state -**Name**: {{index .Result "name"}} -**Region**: {{index .Result "region"}} -**Availability zone**: {{index .Result "availabilityZone"}} -**Type**: {{index .Result "type"}} -**Status**: {{index .Result "status"}} -**Size**: {{index .Result "size"}}GB -**Creation time**: {{index .Result "creationDate"}} -**Attached instances**: {{index .Result "attachedTo"}} +**Name**: {{index .Result "targetSpec" "name"}} +**Type**: {{index .Result "targetSpec" "volumeType"}} +**Size**: {{index .Result "targetSpec" "size"}}GB -💡 Use option -o json or -o yaml to get the raw output with all information \ No newline at end of file +💡 Use option -o json or -o yaml to get the raw output with all information diff --git a/internal/services/cloud/utils.go b/internal/services/cloud/utils.go index 3e376f63..d53dd02f 100644 --- a/internal/services/cloud/utils.go +++ b/internal/services/cloud/utils.go @@ -158,3 +158,53 @@ func waitForCloudOperation(projectID, operationID, action string, retryDuration } } } + +// waitForCloudResourceReady polls a v2 asynchronous resource at the given full +// endpoint (e.g. ".../storage/block/volume/{id}") until its "resourceStatus" +// reaches "READY". It fails if the resource reports an "ERROR" status and times +// out after retryDuration. Tasks reported in error are logged but not treated as +// fatal, as they can be transient. The last fetched resource is returned. +func waitForCloudResourceReady(endpoint string, retryDuration time.Duration) (map[string]any, error) { + ctx, cancel := context.WithTimeout(context.Background(), retryDuration) + defer cancel() + + ticker := time.NewTicker(5 * time.Second) + defer ticker.Stop() + + for { + var resource map[string]any + if err := httpLib.Client.Get(endpoint, &resource); err != nil { + return nil, fmt.Errorf("error fetching resource: %w", err) + } + + status, _ := resource["resourceStatus"].(string) + switch status { + case "READY": + return resource, nil + case "ERROR": + return nil, errors.New("resource ended in error state (resourceStatus=ERROR)") + } + + // Log tasks reported in error but keep waiting: such errors can be + // temporary and get resolved by the backend. + if tasks, ok := resource["currentTasks"].([]any); ok { + for _, t := range tasks { + task, ok := t.(map[string]any) + if !ok { + continue + } + if taskStatus, _ := task["status"].(string); taskStatus == "ERROR" { + log.Printf("resource task %v is in error state, still waiting…", task["type"]) + } + } + } + + select { + case <-ctx.Done(): + return nil, errors.New("timeout waiting for resource to be ready") + case <-ticker.C: + log.Printf("Still waiting for resource to be ready (resourceStatus=%s)…", status) + continue + } + } +}