diff --git a/services/iaas/v1alpha1/iaas.json b/services/iaas/v1alpha1/iaas.json index 8d5d3a7..34381b4 100644 --- a/services/iaas/v1alpha1/iaas.json +++ b/services/iaas/v1alpha1/iaas.json @@ -1,6 +1,24 @@ { "components": { "parameters": { + "v1AffinityGroupID": { + "description": "The identifier (ID) of a STACKIT Affinity Group.", + "in": "path", + "name": "affinityGroupId", + "required": true, + "schema": { + "$ref": "#/components/schemas/UUID" + } + }, + "v1BackupID": { + "description": "The identifier (ID) of a STACKIT Backup.", + "in": "path", + "name": "backupId", + "required": true, + "schema": { + "$ref": "#/components/schemas/UUID" + } + }, "v1ConsumerProjectID": { "description": "The identifier (ID) of a STACKIT Project that consumes an image share.", "in": "path", @@ -10,6 +28,16 @@ "$ref": "#/components/schemas/UUID" } }, + "v1Force": { + "description": "Force action.", + "in": "query", + "name": "force", + "schema": { + "default": false, + "example": true, + "type": "boolean" + } + }, "v1ImageID": { "description": "The identifier (ID) of a STACKIT Image.", "in": "path", @@ -85,6 +113,15 @@ "$ref": "#/components/schemas/UUID" } }, + "v1NetworkRangeID": { + "description": "The identifier (ID) of a STACKIT Network Range.", + "in": "path", + "name": "networkRangeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/UUID" + } + }, "v1OrganizationID": { "description": "The identifier (ID) of a STACKIT Organization.", "in": "path", @@ -121,6 +158,15 @@ "$ref": "#/components/schemas/ReqId" } }, + "v1RouteID": { + "description": "The identifier (ID) of a STACKIT Route.", + "in": "path", + "name": "routeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/UUID" + } + }, "v1SecurityGroupID": { "description": "The identifier (ID) of a STACKIT Security Group.", "in": "path", @@ -167,6 +213,15 @@ "$ref": "#/components/schemas/ServiceAccountMail" } }, + "v1SnapshotID": { + "description": "The identifier (ID) of a STACKIT Snapshot.", + "in": "path", + "name": "snapshotId", + "required": true, + "schema": { + "$ref": "#/components/schemas/UUID" + } + }, "v1VirtualIPID": { "description": "The identifier (ID) of a Virtual IP.", "in": "path", @@ -384,6 +439,9 @@ } }, "description": "A request which was not authorized." + }, + "UpdateAccepted": { + "description": "An update was accepted." } }, "schemas": { @@ -424,6 +482,65 @@ }, "type": "object" }, + "AffinityGroup": { + "description": "Definition of an affinity group.", + "properties": { + "id": { + "allOf": [ + { + "$ref": "#/components/schemas/UUID" + } + ], + "readOnly": true + }, + "members": { + "description": "The servers that are part of the affinity group.", + "example": [ + "d61a8564-c8dd-4ffb-bc15-143e7d0c85ed" + ], + "items": { + "$ref": "#/components/schemas/UUID" + }, + "readOnly": true, + "type": "array" + }, + "name": { + "$ref": "#/components/schemas/GenericName" + }, + "policy": { + "$ref": "#/components/schemas/AffinityGroupPolicy" + } + }, + "required": [ + "name", + "policy" + ], + "type": "object" + }, + "AffinityGroupList": { + "description": "A list of affinity groups.", + "items": { + "$ref": "#/components/schemas/AffinityGroup" + }, + "type": "array" + }, + "AffinityGroupListResponse": { + "description": "Response object for affinity group list request.", + "properties": { + "items": { + "$ref": "#/components/schemas/AffinityGroupList" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "AffinityGroupPolicy": { + "description": "The affinity group policy.", + "example": "anti-affinity", + "type": "string" + }, "AllowedAddresses": { "description": "A list of IPs or CIDR notations.", "items": { @@ -568,6 +685,126 @@ ], "type": "object" }, + "Backup": { + "description": "Object that represents a backup.", + "properties": { + "availabilityZone": { + "allOf": [ + { + "$ref": "#/components/schemas/AvailabilityZone" + } + ], + "readOnly": true + }, + "createdAt": { + "allOf": [ + { + "$ref": "#/components/schemas/CreatedAt" + } + ], + "readOnly": true + }, + "id": { + "allOf": [ + { + "$ref": "#/components/schemas/UUID" + } + ], + "readOnly": true + }, + "labels": { + "$ref": "#/components/schemas/Labels" + }, + "name": { + "$ref": "#/components/schemas/GenericName" + }, + "size": { + "allOf": [ + { + "$ref": "#/components/schemas/SizeInGB" + } + ], + "readOnly": true + }, + "snapshotId": { + "allOf": [ + { + "$ref": "#/components/schemas/UUID" + } + ], + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/BackupStatus" + } + ], + "readOnly": true + }, + "updatedAt": { + "allOf": [ + { + "$ref": "#/components/schemas/UpdatedAt" + } + ], + "readOnly": true + }, + "volumeId": { + "allOf": [ + { + "$ref": "#/components/schemas/UUID" + } + ], + "readOnly": true + } + }, + "type": "object" + }, + "BackupList": { + "description": "A list containing backup objects.", + "items": { + "$ref": "#/components/schemas/Backup" + }, + "type": "array" + }, + "BackupListResponse": { + "description": "Backup list response.", + "properties": { + "items": { + "$ref": "#/components/schemas/BackupList" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "BackupSource": { + "description": "The source object of a backup.", + "properties": { + "id": { + "$ref": "#/components/schemas/UUID" + }, + "type": { + "$ref": "#/components/schemas/BackupSourceTypes" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + }, + "BackupSourceTypes": { + "description": "The source types of a backup.", + "type": "string" + }, + "BackupStatus": { + "description": "The status of a backup object.", + "example": "AVAILABLE", + "type": "string" + }, "BaseSecurityGroupRule": { "description": "The base schema for a security group rule.", "properties": { @@ -702,6 +939,47 @@ "pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\/(3[0-2]|2[0-9]|1[0-9]|[0-9]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))(\\/((1(1[0-9]|2[0-8]))|([0-9][0-9])|([0-9])))?$", "type": "string" }, + "CIDRv6": { + "description": "Classless Inter-Domain Routing (CIDR) for IPv6.", + "example": "2001:0db8:85a3:0800::/56", + "pattern": "^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))(\\/((1(1[0-9]|2[0-8]))|([0-9][0-9])|([0-9])))?$", + "type": "string" + }, + "CreateAffinityGroupPayload": { + "description": "Definition of an affinity group.", + "properties": { + "id": { + "allOf": [ + { + "$ref": "#/components/schemas/UUID" + } + ], + "readOnly": true + }, + "members": { + "description": "The servers that are part of the affinity group.", + "example": [ + "d61a8564-c8dd-4ffb-bc15-143e7d0c85ed" + ], + "items": { + "$ref": "#/components/schemas/UUID" + }, + "readOnly": true, + "type": "array" + }, + "name": { + "$ref": "#/components/schemas/GenericName" + }, + "policy": { + "$ref": "#/components/schemas/AffinityGroupPolicy" + } + }, + "required": [ + "name", + "policy" + ], + "type": "object" + }, "CreateAreaAddressFamily": { "description": "The addressFamily object for a area create request.", "minProperties": 1, @@ -723,6 +1001,24 @@ ], "description": "The config object for a IPv4 network area." }, + "CreateBackupPayload": { + "description": "Object that represents a backup create request body.", + "properties": { + "labels": { + "$ref": "#/components/schemas/Labels" + }, + "name": { + "$ref": "#/components/schemas/GenericName" + }, + "source": { + "$ref": "#/components/schemas/BackupSource" + } + }, + "required": [ + "source" + ], + "type": "object" + }, "CreateImagePayload": { "description": "Object that represents an Image and its parameters. Used for Creating and returning (get/list).", "properties": { @@ -853,37 +1149,147 @@ ], "type": "object" }, - "CreateNicPayload": { - "description": "Object that represents a network interface.", + "CreateNetworkAddressFamily": { + "description": "The addressFamily object for a network create request.", + "minProperties": 1, "properties": { - "allowedAddresses": { - "$ref": "#/components/schemas/AllowedAddresses" - }, - "device": { - "allOf": [ - { - "$ref": "#/components/schemas/UUID" - } - ], - "readOnly": true - }, - "id": { - "allOf": [ - { - "$ref": "#/components/schemas/UUID" - } - ], - "readOnly": true - }, "ipv4": { - "$ref": "#/components/schemas/IP" + "$ref": "#/components/schemas/CreateNetworkIPv4Body" }, "ipv6": { - "$ref": "#/components/schemas/IPv6" - }, - "labels": { - "$ref": "#/components/schemas/Labels" - }, + "$ref": "#/components/schemas/CreateNetworkIPv6Body" + } + }, + "type": "object" + }, + "CreateNetworkAreaPayload": { + "properties": { + "addressFamily": { + "$ref": "#/components/schemas/CreateAreaAddressFamily" + }, + "labels": { + "$ref": "#/components/schemas/Labels" + }, + "name": { + "$ref": "#/components/schemas/GenericName" + } + }, + "required": [ + "name", + "addressFamily" + ], + "type": "object" + }, + "CreateNetworkAreaRangePayload": { + "properties": { + "ipv4": { + "$ref": "#/components/schemas/NetworkRangeList" + } + }, + "type": "object" + }, + "CreateNetworkAreaRoutePayload": { + "properties": { + "ipv4": { + "$ref": "#/components/schemas/RouteList" + } + }, + "type": "object" + }, + "CreateNetworkIPv4Body": { + "description": "The config object for an IPv4 network.", + "properties": { + "gateway": { + "$ref": "#/components/schemas/NetworkGateway" + }, + "nameservers": { + "$ref": "#/components/schemas/Nameserver" + }, + "prefix": { + "$ref": "#/components/schemas/CIDR" + }, + "prefixLength": { + "example": 24, + "maximum": 29, + "minimum": 8, + "type": "integer" + } + }, + "type": "object" + }, + "CreateNetworkIPv6Body": { + "description": "The config object for an IPv6 network.", + "properties": { + "gateway": { + "$ref": "#/components/schemas/NetworkGateway" + }, + "nameservers": { + "$ref": "#/components/schemas/Nameserverv6" + }, + "prefix": { + "$ref": "#/components/schemas/CIDRv6" + }, + "prefixLength": { + "example": 64, + "maximum": 128, + "minimum": 56, + "type": "integer" + } + }, + "type": "object" + }, + "CreateNetworkPayload": { + "description": "Object that represents the request body for a network create.", + "properties": { + "addressFamily": { + "$ref": "#/components/schemas/CreateNetworkAddressFamily" + }, + "labels": { + "$ref": "#/components/schemas/Labels" + }, + "name": { + "$ref": "#/components/schemas/GenericName" + }, + "routed": { + "$ref": "#/components/schemas/Routed" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "CreateNicPayload": { + "description": "Object that represents a network interface.", + "properties": { + "allowedAddresses": { + "$ref": "#/components/schemas/AllowedAddresses" + }, + "device": { + "allOf": [ + { + "$ref": "#/components/schemas/UUID" + } + ], + "readOnly": true + }, + "id": { + "allOf": [ + { + "$ref": "#/components/schemas/UUID" + } + ], + "readOnly": true + }, + "ipv4": { + "$ref": "#/components/schemas/IP" + }, + "ipv6": { + "$ref": "#/components/schemas/IPv6" + }, + "labels": { + "$ref": "#/components/schemas/Labels" + }, "mac": { "allOf": [ { @@ -1252,6 +1658,64 @@ ], "type": "object" }, + "CreateSnapshotPayload": { + "description": "Object that represents a snapshot.", + "properties": { + "createdAt": { + "allOf": [ + { + "$ref": "#/components/schemas/CreatedAt" + } + ], + "readOnly": true + }, + "id": { + "allOf": [ + { + "$ref": "#/components/schemas/UUID" + } + ], + "readOnly": true + }, + "labels": { + "$ref": "#/components/schemas/Labels" + }, + "name": { + "$ref": "#/components/schemas/GenericName" + }, + "size": { + "allOf": [ + { + "$ref": "#/components/schemas/SizeInGB" + } + ], + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/SnapshotStatus" + } + ], + "readOnly": true + }, + "updatedAt": { + "allOf": [ + { + "$ref": "#/components/schemas/UpdatedAt" + } + ], + "readOnly": true + }, + "volumeId": { + "$ref": "#/components/schemas/UUID" + } + }, + "required": [ + "volumeId" + ], + "type": "object" + }, "CreateVirtualIPPayload": { "description": "Object that represents a virtual IP.", "properties": { @@ -1405,6 +1869,7 @@ "properties": { "code": { "example": 404, + "format": "int64", "type": "integer" }, "msg": { @@ -2321,6 +2786,18 @@ "minItems": 1, "type": "array" }, + "NetworkRangeListResponse": { + "description": "Network Range list response.", + "properties": { + "items": { + "$ref": "#/components/schemas/NetworkRangeList" + } + }, + "required": [ + "items" + ], + "type": "object" + }, "OpenStackProjectId": { "description": "The identifier (ID) of an OpenStack project.", "example": "d61a8564c8dd4ffbbc15143e7d0c85ed", @@ -2329,6 +2806,38 @@ "pattern": "^[0-9a-f]{32}$", "type": "string" }, + "PartialUpdateNetworkAreaPayload": { + "properties": { + "addressFamily": { + "$ref": "#/components/schemas/UpdateAreaAddressFamily" + }, + "labels": { + "$ref": "#/components/schemas/Labels" + }, + "name": { + "$ref": "#/components/schemas/GenericName" + } + }, + "type": "object" + }, + "PartialUpdateNetworkPayload": { + "description": "Object that represents the request body for a network update.", + "properties": { + "addressFamily": { + "$ref": "#/components/schemas/UpdateNetworkAddressFamily" + }, + "labels": { + "$ref": "#/components/schemas/Labels" + }, + "name": { + "$ref": "#/components/schemas/GenericName" + }, + "routed": { + "$ref": "#/components/schemas/Routed" + } + }, + "type": "object" + }, "PortRange": { "description": "Object that represents a range of ports.", "properties": { @@ -2401,6 +2910,7 @@ "ProjectCount": { "description": "The amount of projects currently referencing a specific area.", "example": 10, + "format": "int64", "minimum": 0, "type": "integer" }, @@ -2531,56 +3041,254 @@ ], "type": "object" }, - "RemoveMemberFromVirtualIPPayload": { - "description": "Object that represents a virtual IP member.", + "Quota": { + "description": "Object that represents a single resource quota.", "properties": { - "member": { - "$ref": "#/components/schemas/UUID" + "limit": { + "example": 1338, + "format": "int64", + "type": "integer" + }, + "usage": { + "example": 17, + "format": "int64", + "type": "integer" } }, "required": [ - "member" + "limit", + "usage" ], "type": "object" }, - "ReqId": { - "description": "Identifier (ID) representing a single API request.", - "example": "req-d61a8564c8dd4ffbbc15143e7d0c85ed", - "maxLength": 36, - "minLength": 36, - "pattern": "^req-[0-9a-f]{32}$", - "type": "string" - }, - "Request": { - "description": "Object that represents a request.", - "properties": { - "details": { - "example": "This worked!", - "type": "string" + "QuotaList": { + "description": "Object that represents the quotas for a project.", + "example": { + "backupGigabytes": { + "limit": 100000000, + "usage": 0 }, - "requestAction": { - "$ref": "#/components/schemas/ResourceAction" + "backups": { + "limit": 1000, + "usage": 0 }, - "requestId": { - "$ref": "#/components/schemas/ReqId" + "gigabytes": { + "limit": 1000000000, + "usage": 69 }, - "requestType": { - "$ref": "#/components/schemas/Resource" + "networks": { + "limit": 1000, + "usage": 1 }, - "resources": { - "example": [ + "nics": { + "limit": 1000, + "usage": 5 + }, + "publicIps": { + "limit": 1000, + "usage": 3 + }, + "ram": { + "limit": 1000000000, + "usage": 196608 + }, + "securityGroupRules": { + "limit": 100, + "usage": 10 + }, + "securityGroups": { + "limit": 10, + "usage": 5 + }, + "snapshots": { + "limit": 1000, + "usage": 0 + }, + "vcpu": { + "limit": 10000, + "usage": 48 + }, + "volumes": { + "limit": 1000, + "usage": 3 + } + }, + "properties": { + "backupGigabytes": { + "allOf": [ { - "id": "d61a8564-c8dd-4ffb-bc15-143e7d0c85ed", - "status": "CREATING", - "type": "SERVER" + "$ref": "#/components/schemas/Quota" } ], - "items": { - "$ref": "#/components/schemas/RequestResource" - }, - "type": "array" + "description": "Total size in GiB of backups." }, - "status": { + "backups": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of backups." + }, + "gigabytes": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Total size in GiB of volumes and snapshots." + }, + "networks": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of networks." + }, + "nics": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of network interfaces." + }, + "publicIps": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of public IP addresses." + }, + "ram": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Amount of server RAM in MiB." + }, + "securityGroupRules": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of security group rules." + }, + "securityGroups": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of security groups." + }, + "snapshots": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of snapshots." + }, + "vcpu": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of server cores." + }, + "volumes": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of volumes." + } + }, + "required": [ + "vcpu", + "ram", + "volumes", + "snapshots", + "backups", + "gigabytes", + "backupGigabytes", + "publicIps", + "networks", + "nics", + "securityGroups", + "securityGroupRules" + ], + "type": "object" + }, + "QuotaListResponse": { + "description": "Quotas list response.", + "properties": { + "quotas": { + "$ref": "#/components/schemas/QuotaList" + } + }, + "required": [ + "quotas" + ], + "type": "object" + }, + "RemoveMemberFromVirtualIPPayload": { + "description": "Object that represents a virtual IP member.", + "properties": { + "member": { + "$ref": "#/components/schemas/UUID" + } + }, + "required": [ + "member" + ], + "type": "object" + }, + "ReqId": { + "description": "Identifier (ID) representing a single API request.", + "example": "req-d61a8564c8dd4ffbbc15143e7d0c85ed", + "maxLength": 36, + "minLength": 36, + "pattern": "^req-[0-9a-f]{32}$", + "type": "string" + }, + "Request": { + "description": "Object that represents a request.", + "properties": { + "details": { + "example": "This worked!", + "type": "string" + }, + "requestAction": { + "$ref": "#/components/schemas/ResourceAction" + }, + "requestId": { + "$ref": "#/components/schemas/ReqId" + }, + "requestType": { + "$ref": "#/components/schemas/Resource" + }, + "resources": { + "example": [ + { + "id": "d61a8564-c8dd-4ffb-bc15-143e7d0c85ed", + "status": "CREATING", + "type": "SERVER" + } + ], + "items": { + "$ref": "#/components/schemas/RequestResource" + }, + "type": "array" + }, + "status": { "$ref": "#/components/schemas/ResourceState" } }, @@ -2711,6 +3419,18 @@ }, "type": "array" }, + "RouteListResponse": { + "description": "Route list response.", + "properties": { + "items": { + "$ref": "#/components/schemas/RouteList" + } + }, + "required": [ + "items" + ], + "type": "object" + }, "Routed": { "description": "Shows if the network is routed and therefore accessible from other networks.", "example": true, @@ -3222,6 +3942,88 @@ "format": "int64", "type": "integer" }, + "Snapshot": { + "description": "Object that represents a snapshot.", + "properties": { + "createdAt": { + "allOf": [ + { + "$ref": "#/components/schemas/CreatedAt" + } + ], + "readOnly": true + }, + "id": { + "allOf": [ + { + "$ref": "#/components/schemas/UUID" + } + ], + "readOnly": true + }, + "labels": { + "$ref": "#/components/schemas/Labels" + }, + "name": { + "$ref": "#/components/schemas/GenericName" + }, + "size": { + "allOf": [ + { + "$ref": "#/components/schemas/SizeInGB" + } + ], + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/SnapshotStatus" + } + ], + "readOnly": true + }, + "updatedAt": { + "allOf": [ + { + "$ref": "#/components/schemas/UpdatedAt" + } + ], + "readOnly": true + }, + "volumeId": { + "$ref": "#/components/schemas/UUID" + } + }, + "required": [ + "volumeId" + ], + "type": "object" + }, + "SnapshotList": { + "description": "A list containing snapshot objects.", + "items": { + "$ref": "#/components/schemas/Snapshot" + }, + "type": "array" + }, + "SnapshotListResponse": { + "description": "Snapshot list response.", + "properties": { + "items": { + "$ref": "#/components/schemas/SnapshotList" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "SnapshotStatus": { + "description": "The status of a snapshot object.", + "example": "AVAILABLE", + "type": "string" + }, "Stateful": { "default": true, "description": "Shows if a security group is stateful or stateless. You can only have one type of security groups per network interface/server.", @@ -3315,40 +4117,116 @@ }, "type": "object" }, - "UpdateImagePayload": { - "description": "Object that represents an update request body of an Image.", + "UpdateBackupPayload": { + "description": "Object that represents a backup.", "properties": { - "config": { - "$ref": "#/components/schemas/ImageConfig" + "availabilityZone": { + "allOf": [ + { + "$ref": "#/components/schemas/AvailabilityZone" + } + ], + "readOnly": true }, - "diskFormat": { - "$ref": "#/components/schemas/DiskFormat" + "createdAt": { + "allOf": [ + { + "$ref": "#/components/schemas/CreatedAt" + } + ], + "readOnly": true + }, + "id": { + "allOf": [ + { + "$ref": "#/components/schemas/UUID" + } + ], + "readOnly": true }, "labels": { "$ref": "#/components/schemas/Labels" }, - "minDiskSize": { - "$ref": "#/components/schemas/SizeInGB" - }, - "minRam": { - "$ref": "#/components/schemas/SizeInMB" - }, "name": { "$ref": "#/components/schemas/GenericName" }, - "protected": { - "example": false, - "type": "boolean" - } - }, - "type": "object" - }, - "UpdateImageSharePayload": { - "description": "Share details of an Image. For requests ParentOrganization and Projects are mutually exclusive.", - "properties": { - "parentOrganization": { - "description": "Image is shared with all projects inside the image owners organization.", - "type": "boolean" + "size": { + "allOf": [ + { + "$ref": "#/components/schemas/SizeInGB" + } + ], + "readOnly": true + }, + "snapshotId": { + "allOf": [ + { + "$ref": "#/components/schemas/UUID" + } + ], + "readOnly": true + }, + "status": { + "allOf": [ + { + "$ref": "#/components/schemas/BackupStatus" + } + ], + "readOnly": true + }, + "updatedAt": { + "allOf": [ + { + "$ref": "#/components/schemas/UpdatedAt" + } + ], + "readOnly": true + }, + "volumeId": { + "allOf": [ + { + "$ref": "#/components/schemas/UUID" + } + ], + "readOnly": true + } + }, + "type": "object" + }, + "UpdateImagePayload": { + "description": "Object that represents an update request body of an Image.", + "properties": { + "config": { + "$ref": "#/components/schemas/ImageConfig" + }, + "diskFormat": { + "$ref": "#/components/schemas/DiskFormat" + }, + "labels": { + "$ref": "#/components/schemas/Labels" + }, + "minDiskSize": { + "$ref": "#/components/schemas/SizeInGB" + }, + "minRam": { + "$ref": "#/components/schemas/SizeInMB" + }, + "name": { + "$ref": "#/components/schemas/GenericName" + }, + "protected": { + "example": false, + "type": "boolean" + } + }, + "type": "object" + }, + "UpdateImageSharePayload": { + "description": "Share details of an Image. For requests ParentOrganization and Projects are mutually exclusive.", + "properties": { + "parentOrganization": { + "description": "Image is shared with all projects inside the image owners organization.", + "type": "boolean" }, "projects": { "description": "List of all projects the Image is shared with.", @@ -3368,6 +4246,43 @@ }, "type": "object" }, + "UpdateNetworkAddressFamily": { + "description": "The addressFamily object for a network update request.", + "minProperties": 1, + "properties": { + "ipv4": { + "$ref": "#/components/schemas/UpdateNetworkIPv4Body" + }, + "ipv6": { + "$ref": "#/components/schemas/UpdateNetworkIPv6Body" + } + }, + "type": "object" + }, + "UpdateNetworkIPv4Body": { + "description": "The config object for a IPv4 network update.", + "properties": { + "gateway": { + "$ref": "#/components/schemas/NetworkGateway" + }, + "nameservers": { + "$ref": "#/components/schemas/Nameserver" + } + }, + "type": "object" + }, + "UpdateNetworkIPv6Body": { + "description": "The config object for a IPv6 network update.", + "properties": { + "gateway": { + "$ref": "#/components/schemas/NetworkGateway" + }, + "nameservers": { + "$ref": "#/components/schemas/Nameserverv6" + } + }, + "type": "object" + }, "UpdateNicPayload": { "description": "Object that represents a network interface update.", "properties": { @@ -3450,6 +4365,18 @@ }, "type": "object" }, + "UpdateSnapshotPayload": { + "description": "Object that represents an update request body of a snapshot.", + "properties": { + "labels": { + "$ref": "#/components/schemas/Labels" + }, + "name": { + "$ref": "#/components/schemas/GenericName" + } + }, + "type": "object" + }, "UpdateVirtualIPPayload": { "description": "Object that represents a virtual IP update request body.", "properties": { @@ -3800,6 +4727,15 @@ "description": "An error message.", "example": "Project not found", "type": "string" + }, + "v1alpha1UpdateRouteOfAreaPayload": { + "description": "Object that represents the request body for a route update.", + "properties": { + "labels": { + "$ref": "#/components/schemas/Labels" + } + }, + "type": "object" } } }, @@ -4118,12 +5054,49 @@ { "$ref": "#/components/parameters/v1OrganizationID" } - ] - }, - "/v1alpha1/organizations/{organizationId}/network-areas/{areaId}": { - "get": { - "description": "Get details about a network area in an organization.", - "operationId": "GetNetworkArea", + ], + "post": { + "description": "Create a new network area in an organization.", + "operationId": "CreateNetworkArea", + "requestBody": { + "content": { + "application/json": { + "example": { + "addressFamily": { + "ipv4": { + "defaultNameservers": [ + "10.1.2.10" + ], + "defaultPrefixLen": 24, + "maxPrefixLen": 28, + "minPrefixLen": 22, + "networkRanges": [ + { + "prefix": "10.0.0.0/16" + } + ], + "routes": [ + { + "nexthop": "10.1.2.10", + "prefix": "192.168.0.0/24" + } + ], + "transferNetwork": "10.1.2.0/24" + } + }, + "labels": { + "environment": "production" + }, + "name": "My STACKIT Internet Network Area" + }, + "schema": { + "$ref": "#/components/schemas/CreateNetworkAreaPayload" + } + } + }, + "description": "Request an Area creation.", + "required": true + }, "responses": { "200": { "content": { @@ -4133,7 +5106,7 @@ } } }, - "description": "Show network area details." + "description": "Area has been successfully created." }, "400": { "$ref": "#/components/responses/BadRequest" @@ -4151,31 +5124,16 @@ "$ref": "#/components/responses/InternalServerError" } }, - "summary": "Get details about a network area." - }, - "parameters": [ - { - "$ref": "#/components/parameters/v1OrganizationID" - }, - { - "$ref": "#/components/parameters/v1NetworkAreaID" - } - ] + "summary": "Create new network area in an organization." + } }, - "/v1alpha1/organizations/{organizationId}/network-areas/{areaId}/projects": { - "get": { - "description": "Get a list of all projects using a network area.", - "operationId": "ListNetworkAreaProjects", + "/v1alpha1/organizations/{organizationId}/network-areas/{areaId}": { + "delete": { + "description": "Delete an existing network area in an organization. This is only possible if no projects are using the area anymore.", + "operationId": "DeleteNetworkArea", "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectListResponse" - } - } - }, - "description": "List projects for a network area." + "202": { + "description": "Delete request for area has been accepted." }, "400": { "$ref": "#/components/responses/BadRequest" @@ -4189,35 +5147,28 @@ "404": { "$ref": "#/components/responses/NotFound" }, + "409": { + "$ref": "#/components/responses/Conflict" + }, "500": { "$ref": "#/components/responses/InternalServerError" } }, - "summary": "List all projects using a network area." + "summary": "Delete a network area." }, - "parameters": [ - { - "$ref": "#/components/parameters/v1OrganizationID" - }, - { - "$ref": "#/components/parameters/v1NetworkAreaID" - } - ] - }, - "/v1alpha1/organizations/{organizationId}/requests/{requestId}": { "get": { - "description": "Lookup an organization request ID from a previous request. This allows to find resource IDs of resources generated during a organization request.", - "operationId": "GetOrganizationRequest", + "description": "Get details about a network area in an organization.", + "operationId": "GetNetworkArea", "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Request" + "$ref": "#/components/schemas/NetworkArea" } } }, - "description": "Show organization request details." + "description": "Show network area details." }, "400": { "$ref": "#/components/responses/BadRequest" @@ -4235,31 +5186,56 @@ "$ref": "#/components/responses/InternalServerError" } }, - "summary": "Lookup an organization request ID." + "summary": "Get details about a network area." }, "parameters": [ { "$ref": "#/components/parameters/v1OrganizationID" }, { - "$ref": "#/components/parameters/v1RequestID" + "$ref": "#/components/parameters/v1NetworkAreaID" } - ] - }, - "/v1alpha1/projects/{projectId}": { - "get": { - "description": "Get details about a STACKIT project.", - "operationId": "GetProjectDetails", + ], + "patch": { + "description": "Update the settings of a network area in an organization.", + "operationId": "PartialUpdateNetworkArea", + "requestBody": { + "content": { + "application/json": { + "example": { + "addressFamily": { + "ipv4": { + "defaultNameservers": [ + "10.1.2.10" + ], + "defaultPrefixLen": 24, + "maxPrefixLen": 26, + "minPrefixLen": 22 + } + }, + "labels": { + "environment": "production" + }, + "name": "My STACKIT Internet Network Area" + }, + "schema": { + "$ref": "#/components/schemas/PartialUpdateNetworkAreaPayload" + } + } + }, + "description": "Request to update an Area.", + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Project" + "$ref": "#/components/schemas/NetworkArea" } } }, - "description": "Show project details." + "description": "Area has been updated." }, "400": { "$ref": "#/components/responses/BadRequest" @@ -4277,33 +5253,23 @@ "$ref": "#/components/responses/InternalServerError" } }, - "summary": "Get project details." - }, - "parameters": [ - { - "$ref": "#/components/parameters/v1ProjectID" - } - ] + "summary": "Update network area settings." + } }, - "/v1alpha1/projects/{projectId}/images": { + "/v1alpha1/organizations/{organizationId}/network-areas/{areaId}/network-ranges": { "get": { - "description": "Get a list of all images inside a project.", - "operationId": "ListImages", - "parameters": [ - { - "$ref": "#/components/parameters/v1LabelSelector" - } - ], + "description": "Get a list of all network ranges in a network area.", + "operationId": "ListNetworkAreaRanges", "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ImageListResponse" + "$ref": "#/components/schemas/NetworkRangeListResponse" } } }, - "description": "List project images." + "description": "List all network ranges." }, "400": { "$ref": "#/components/responses/BadRequest" @@ -4321,28 +5287,965 @@ "$ref": "#/components/responses/InternalServerError" } }, - "summary": "List all Images inside a project." + "summary": "List all network ranges in a network area." }, "parameters": [ { - "$ref": "#/components/parameters/v1ProjectID" + "$ref": "#/components/parameters/v1OrganizationID" + }, + { + "$ref": "#/components/parameters/v1NetworkAreaID" } ], "post": { - "description": "Create a new Image in a project. This call, if successful, returns a pre-signed URL for the customer to upload the image.", - "operationId": "CreateImage", + "description": "Create a new network range in an existing network area.", + "operationId": "CreateNetworkAreaRange", "requestBody": { "content": { "application/json": { - "examples": { - "allParams": { - "value": { - "active": true, - "diskFormat": "qcow2", - "labels": { - "foo": "Foo Value" - }, - "minDiskSize": 10, + "example": { + "ipv4": [ + { + "prefix": "10.1.2.0/24" + } + ] + }, + "schema": { + "$ref": "#/components/schemas/CreateNetworkAreaRangePayload" + } + } + }, + "description": "Request an addition of network ranges to an area.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkRangeListResponse" + } + } + }, + "description": "Adding network ranges was successful." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Create new network range in a network area." + } + }, + "/v1alpha1/organizations/{organizationId}/network-areas/{areaId}/network-ranges/{networkRangeId}": { + "delete": { + "description": "Delete a network range of a network area. The deletion will fail if the network range is still used.", + "operationId": "DeleteNetworkAreaRange", + "responses": { + "202": { + "description": "Delete request for network range accepted." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Delete a network range." + }, + "get": { + "description": "Get details about a network range in a network area.", + "operationId": "GetNetworkAreaRange", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NetworkRange" + } + } + }, + "description": "Show network range details." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Get details about a network range." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1OrganizationID" + }, + { + "$ref": "#/components/parameters/v1NetworkAreaID" + }, + { + "$ref": "#/components/parameters/v1NetworkRangeID" + } + ] + }, + "/v1alpha1/organizations/{organizationId}/network-areas/{areaId}/projects": { + "get": { + "description": "Get a list of all projects using a network area.", + "operationId": "ListNetworkAreaProjects", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProjectListResponse" + } + } + }, + "description": "List projects for a network area." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "List all projects using a network area." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1OrganizationID" + }, + { + "$ref": "#/components/parameters/v1NetworkAreaID" + } + ] + }, + "/v1alpha1/organizations/{organizationId}/network-areas/{areaId}/routes": { + "get": { + "description": "Get a list of all network routes defined in a network area.", + "operationId": "ListNetworkAreaRoutes", + "parameters": [ + { + "$ref": "#/components/parameters/v1LabelSelector" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RouteListResponse" + } + } + }, + "description": "List network routes." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "List all network routes in a network area." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1OrganizationID" + }, + { + "$ref": "#/components/parameters/v1NetworkAreaID" + } + ], + "post": { + "description": "Create one or several new network routes in a network area.", + "operationId": "CreateNetworkAreaRoute", + "requestBody": { + "content": { + "application/json": { + "example": { + "ipv4": [ + { + "nexthop": "10.1.2.10", + "prefix": "192.168.0.0/24" + } + ] + }, + "schema": { + "$ref": "#/components/schemas/CreateNetworkAreaRoutePayload" + } + } + }, + "description": "Request an addition of routes to an area.", + "required": true + }, + "responses": { + "202": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RouteListResponse" + } + } + }, + "description": "Create request for network routes accepted." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Create new network routes." + } + }, + "/v1alpha1/organizations/{organizationId}/network-areas/{areaId}/routes/{routeId}": { + "delete": { + "description": "Delete a network route of a network area.", + "operationId": "DeleteNetworkAreaRoute", + "responses": { + "202": { + "description": "Delete request for the network route has been accepted." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Delete a network route." + }, + "get": { + "description": "Get details about a network route defined in a network area.", + "operationId": "GetNetworkAreaRoute", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Route" + } + } + }, + "description": "Show route details." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Get details about a network route." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1OrganizationID" + }, + { + "$ref": "#/components/parameters/v1NetworkAreaID" + }, + { + "$ref": "#/components/parameters/v1RouteID" + } + ], + "patch": { + "description": "Update a network route defined in a network area.", + "operationId": "v1alpha1UpdateRouteOfArea", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v1alpha1UpdateRouteOfAreaPayload" + } + } + }, + "description": "Request an update of a network route.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Route" + } + } + }, + "description": "Update request for network successful." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Update a network route." + } + }, + "/v1alpha1/organizations/{organizationId}/requests/{requestId}": { + "get": { + "description": "Lookup an organization request ID from a previous request. This allows to find resource IDs of resources generated during a organization request.", + "operationId": "GetOrganizationRequest", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Request" + } + } + }, + "description": "Show organization request details." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Lookup an organization request ID." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1OrganizationID" + }, + { + "$ref": "#/components/parameters/v1RequestID" + } + ] + }, + "/v1alpha1/projects/{projectId}": { + "get": { + "description": "Get details about a STACKIT project.", + "operationId": "GetProjectDetails", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + }, + "description": "Show project details." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Get project details." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + } + ] + }, + "/v1alpha1/projects/{projectId}/affinity-groups": { + "get": { + "description": "Get the affinity groups created in a project. Affinity groups are an indication of locality of a server relative to another group of servers. They can be either running on the same host (affinity) or on different ones (anti-affinity).", + "operationId": "ListAffinityGroups", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AffinityGroupListResponse" + } + } + }, + "description": "List affinity groups." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Get the affinity groups setup for a project." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + } + ], + "post": { + "description": "Create a new server affinity group in the given project ID.", + "operationId": "CreateAffinityGroup", + "requestBody": { + "content": { + "application/json": { + "example": { + "name": "MyAffinityGroup", + "policy": "anti-affinity" + }, + "schema": { + "$ref": "#/components/schemas/CreateAffinityGroupPayload" + } + } + }, + "description": "Request a affinity group creation.", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AffinityGroup" + } + } + }, + "description": "Affinity group was created successfully." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Create a new affinity group in a project." + } + }, + "/v1alpha1/projects/{projectId}/affinity-groups/{affinityGroupId}": { + "delete": { + "description": "Delete a affinity group in the given project.", + "operationId": "DeleteAffinityGroup", + "responses": { + "204": { + "description": "Delete request for an server group was accepted." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Delete a affinity group in a project." + }, + "get": { + "description": "Get the affinity group created in a project.", + "operationId": "GetAffinityGroup", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AffinityGroup" + } + } + }, + "description": "Show affinity group details." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Get the affinity group." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + }, + { + "$ref": "#/components/parameters/v1AffinityGroupID" + } + ] + }, + "/v1alpha1/projects/{projectId}/backups": { + "get": { + "description": "Get a list of all backups inside a project.", + "operationId": "ListBackups", + "parameters": [ + { + "$ref": "#/components/parameters/v1LabelSelector" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BackupListResponse" + } + } + }, + "description": "List project backups." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "List all backups inside a project." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + } + ], + "post": { + "description": "Create a new Backup in a project. If a snapshot ID is provided create the backup from the snapshot.", + "operationId": "CreateBackup", + "requestBody": { + "content": { + "application/json": { + "examples": { + "BackupFromSnapshot": { + "value": { + "name": "abfahrtMitSnap", + "source": { + "id": "09876543-1234-4ffb-bc15-143e7d0c85ed", + "type": "snapshot" + } + } + }, + "BackupFromVolume": { + "value": { + "name": "abfahrt", + "source": { + "id": "d61a8564-c8dd-4ffb-bc15-143e7d0c85ed", + "type": "volume" + } + } + } + }, + "schema": { + "$ref": "#/components/schemas/CreateBackupPayload" + } + } + }, + "description": "Request a backup creation.", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Backup" + } + } + }, + "description": "Create request for Backup accepted." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Create new Backup." + } + }, + "/v1alpha1/projects/{projectId}/backups/{backupId}": { + "delete": { + "description": "Delete a backup that is part of the project.", + "operationId": "DeleteBackup", + "parameters": [ + { + "$ref": "#/components/parameters/v1Force" + } + ], + "responses": { + "204": { + "description": "Backup delete request has been accepted." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Delete a backup." + }, + "get": { + "description": "Get details about a block device backup.", + "operationId": "GetBackup", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Backup" + } + } + }, + "description": "Show backup details." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Get details about a backup." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + }, + { + "$ref": "#/components/parameters/v1BackupID" + } + ], + "patch": { + "description": "Update name or labels of the backup.", + "operationId": "UpdateBackup", + "requestBody": { + "content": { + "application/json": { + "examples": { + "BackupLabel": { + "value": { + "labels": { + "foo": "foobar" + } + } + }, + "BackupName": { + "value": { + "name": "abfahrt" + } + } + }, + "schema": { + "$ref": "#/components/schemas/UpdateBackupPayload" + } + } + }, + "description": "Request an update of a backup.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Backup" + } + } + }, + "description": "Backup has been updated." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Update information of a backup." + } + }, + "/v1alpha1/projects/{projectId}/backups/{backupId}/restore": { + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + }, + { + "$ref": "#/components/parameters/v1BackupID" + } + ], + "post": { + "description": "Restores a Backup to the existing Volume it references to. The use of this endpoint is disruptive as the volume needs to be detached. If a new volume is to be created use the volumes endpoint with the option to create from backup.", + "operationId": "RestoreBackup", + "responses": { + "202": { + "description": "Backup restore request has been accepted." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Restore Backup to the referenced source Volume." + } + }, + "/v1alpha1/projects/{projectId}/images": { + "get": { + "description": "Get a list of all images inside a project.", + "operationId": "ListImages", + "parameters": [ + { + "$ref": "#/components/parameters/v1LabelSelector" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageListResponse" + } + } + }, + "description": "List project images." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "List all Images inside a project." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + } + ], + "post": { + "description": "Create a new Image in a project. This call, if successful, returns a pre-signed URL for the customer to upload the image.", + "operationId": "CreateImage", + "requestBody": { + "content": { + "application/json": { + "examples": { + "allParams": { + "value": { + "active": true, + "diskFormat": "qcow2", + "labels": { + "foo": "Foo Value" + }, + "minDiskSize": 10, "minRam": 1, "name": "niceImage", "protected": false @@ -4420,11 +6323,103 @@ "$ref": "#/components/responses/InternalServerError" } }, - "summary": "Delete an Image." - }, - "get": { - "description": "Get details about a specific Image inside a project.", - "operationId": "GetImage", + "summary": "Delete an Image." + }, + "get": { + "description": "Get details about a specific Image inside a project.", + "operationId": "GetImage", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Image" + } + } + }, + "description": "Show Image details." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Get details about an image." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + }, + { + "$ref": "#/components/parameters/v1ImageID" + } + ], + "patch": { + "description": "Update the properties of an existing Image inside a project.", + "operationId": "UpdateImage", + "requestBody": { + "content": { + "application/json": { + "examples": { + "minimumParams": { + "value": { + "name": "fancyNewName" + } + } + }, + "schema": { + "$ref": "#/components/schemas/UpdateImagePayload" + } + } + }, + "description": "Request an update of an Image.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Image" + } + } + }, + "description": "Response to update call. Provide the updated image object." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Update Image Parameters." + } + }, + "/v1alpha1/projects/{projectId}/images/{imageId}/publish": { + "delete": { + "description": "Update the scope property of an existing Image inside a project to local.", + "operationId": "UpdateImageScopeLocal", "responses": { "200": { "content": { @@ -4434,7 +6429,7 @@ } } }, - "description": "Show Image details." + "description": "Response to update image-scope to local. Provide the updated image object." }, "400": { "$ref": "#/components/responses/BadRequest" @@ -4452,7 +6447,7 @@ "$ref": "#/components/responses/InternalServerError" } }, - "summary": "Get details about an image." + "summary": "Update Image Scope to Local." }, "parameters": [ { @@ -4462,27 +6457,9 @@ "$ref": "#/components/parameters/v1ImageID" } ], - "patch": { - "description": "Update the properties of an existing Image inside a project.", - "operationId": "UpdateImage", - "requestBody": { - "content": { - "application/json": { - "examples": { - "minimumParams": { - "value": { - "name": "fancyNewName" - } - } - }, - "schema": { - "$ref": "#/components/schemas/UpdateImagePayload" - } - } - }, - "description": "Request an update of an Image.", - "required": true - }, + "put": { + "description": "Update the scope property of an existing Image inside a project to public.", + "operationId": "UpdateImageScopePublic", "responses": { "200": { "content": { @@ -4492,7 +6469,7 @@ } } }, - "description": "Response to update call. Provide the updated image object." + "description": "Response to update image-scope to public. Provide the updated image object." }, "400": { "$ref": "#/components/responses/BadRequest" @@ -4510,7 +6487,7 @@ "$ref": "#/components/responses/InternalServerError" } }, - "summary": "Update Image Parameters." + "summary": "Update Image Scope to Public." } }, "/v1alpha1/projects/{projectId}/images/{imageId}/share": { @@ -4914,9 +6891,123 @@ { "$ref": "#/components/parameters/v1ProjectID" } - ] + ], + "post": { + "description": "Create a new network in a project. `nameservers` will be filled from `defaultNameservers` of the respective area if not specified. If the project has `internetAccess` enabled and this is the first network in the project this might incur cost.", + "operationId": "CreateNetwork", + "requestBody": { + "content": { + "application/json": { + "examples": { + "NetworkWithPrefix": { + "value": { + "addressFamily": { + "ipv4": { + "nameservers": [ + "10.1.2.10" + ], + "prefix": "10.0.3.0/25" + } + }, + "name": "My Network" + } + }, + "NetworkWithPrefixLength": { + "value": { + "addressFamily": { + "ipv4": { + "nameservers": [ + "10.1.2.10" + ], + "prefixLength": 24 + } + }, + "name": "My Network" + } + }, + "NetworkWithoutPrefixOrPrefixLength": { + "value": { + "addressFamily": { + "ipv4": { + "nameservers": [ + "10.1.2.10" + ] + } + }, + "name": "My Network" + } + } + }, + "schema": { + "$ref": "#/components/schemas/CreateNetworkPayload" + } + } + }, + "description": "Request a network creation.", + "required": true + }, + "responses": { + "202": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Network" + } + } + }, + "description": "Network create has been accepted." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Create new network." + } }, "/v1alpha1/projects/{projectId}/networks/{networkId}": { + "delete": { + "description": "Delete a network. If the network is still in use, the deletion will fail.", + "operationId": "DeleteNetwork", + "responses": { + "202": { + "description": "Delete request for network has been accepted." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Delete network." + }, "get": { "description": "Get details about a network of a project.", "operationId": "GetNetwork", @@ -4956,7 +7047,53 @@ { "$ref": "#/components/parameters/v1NetworkID" } - ] + ], + "patch": { + "description": "Update the settings of a network inside a project.", + "operationId": "PartialUpdateNetwork", + "requestBody": { + "content": { + "application/json": { + "example": { + "addressFamily": { + "ipv4": { + "nameservers": [ + "10.1.2.10" + ] + } + }, + "name": "My Network" + }, + "schema": { + "$ref": "#/components/schemas/PartialUpdateNetworkPayload" + } + } + }, + "description": "Request an update of a network.", + "required": true + }, + "responses": { + "202": { + "$ref": "#/components/responses/UpdateAccepted" + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Update network settings." + } }, "/v1alpha1/projects/{projectId}/networks/{networkId}/nics": { "get": { @@ -5422,45 +7559,123 @@ "$ref": "#/components/responses/InternalServerError" } }, - "summary": "Add a member to the virtual IP." - } - }, - "/v1alpha1/projects/{projectId}/networks/{networkId}/virtual-ips/{virtualIpId}/remove-member": { + "summary": "Add a member to the virtual IP." + } + }, + "/v1alpha1/projects/{projectId}/networks/{networkId}/virtual-ips/{virtualIpId}/remove-member": { + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + }, + { + "$ref": "#/components/parameters/v1NetworkID" + }, + { + "$ref": "#/components/parameters/v1VirtualIPID" + } + ], + "put": { + "description": "Atomically remove a member from the virtual IP.", + "operationId": "RemoveMemberFromVirtualIP", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemoveMemberFromVirtualIPPayload" + } + } + }, + "description": "Request to remove a member from a virtual IP.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VirtualIp" + } + } + }, + "description": "Member has been removed from the virtual IP." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Remove a member from the virtual IP." + } + }, + "/v1alpha1/projects/{projectId}/nics": { + "get": { + "description": "Get a list of all network interfaces inside a project.", + "operationId": "ListProjectNICs", + "parameters": [ + { + "$ref": "#/components/parameters/v1LabelSelector" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NICListResponse" + } + } + }, + "description": "List network interfaces of the project." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "List all network interfaces inside a project." + }, "parameters": [ { "$ref": "#/components/parameters/v1ProjectID" - }, - { - "$ref": "#/components/parameters/v1NetworkID" - }, - { - "$ref": "#/components/parameters/v1VirtualIPID" } - ], - "put": { - "description": "Atomically remove a member from the virtual IP.", - "operationId": "RemoveMemberFromVirtualIP", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RemoveMemberFromVirtualIPPayload" - } - } - }, - "description": "Request to remove a member from a virtual IP.", - "required": true - }, + ] + }, + "/v1alpha1/projects/{projectId}/nics/{nicId}": { + "get": { + "description": "Get details about a network interface inside a project.", + "operationId": "GetProjectNIC", "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/VirtualIp" + "$ref": "#/components/schemas/NIC" } } }, - "description": "Member has been removed from the virtual IP." + "description": "Show details of network interface." }, "400": { "$ref": "#/components/responses/BadRequest" @@ -5478,8 +7693,16 @@ "$ref": "#/components/responses/InternalServerError" } }, - "summary": "Remove a member from the virtual IP." - } + "summary": "Get details about a network interface of a project." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + }, + { + "$ref": "#/components/parameters/v1NICID" + } + ] }, "/v1alpha1/projects/{projectId}/public-ips": { "get": { @@ -5681,6 +7904,45 @@ "summary": "Update a public IP." } }, + "/v1alpha1/projects/{projectId}/quotas": { + "get": { + "description": "List quota limits and usage for project resources.", + "operationId": "ListQuotas", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QuotaListResponse" + } + } + }, + "description": "List quotas." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "List project quotas." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + } + ] + }, "/v1alpha1/projects/{projectId}/requests/{requestId}": { "get": { "description": "Lookup a project request ID from a previous request. This allows to find resource IDs of resources generated during a projects request.", @@ -7413,6 +9675,221 @@ "summary": "Attach a volume to a server." } }, + "/v1alpha1/projects/{projectId}/snapshots": { + "get": { + "description": "Get a list of all snapshots inside a project.", + "operationId": "ListSnapshots", + "parameters": [ + { + "$ref": "#/components/parameters/v1LabelSelector" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SnapshotListResponse" + } + } + }, + "description": "List project snapshots." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "List all snapshots inside a project." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + } + ], + "post": { + "description": "Create a new Snapshot from a Volume in a project.", + "operationId": "CreateSnapshot", + "requestBody": { + "content": { + "application/json": { + "example": { + "name": "abfahrt", + "volumeId": "d61a8564-c8dd-4ffb-bc15-143e7d0c85ed" + }, + "schema": { + "$ref": "#/components/schemas/CreateSnapshotPayload" + } + } + }, + "description": "Request a snapshot creation.", + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Snapshot" + } + } + }, + "description": "Create request for Snapshot accepted." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Create new Snapshot." + } + }, + "/v1alpha1/projects/{projectId}/snapshots/{snapshotId}": { + "delete": { + "description": "Delete a snapshot that is part of the project.", + "operationId": "DeleteSnapshot", + "responses": { + "204": { + "description": "Snapshot delete request has been accepted." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Delete a snapshot." + }, + "get": { + "description": "Get details about a block device snapshot.", + "operationId": "GetSnapshot", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Snapshot" + } + } + }, + "description": "Show snapshot details." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Get details about a snapshot." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + }, + { + "$ref": "#/components/parameters/v1SnapshotID" + } + ], + "patch": { + "description": "Update information like name or labels of the snapshot.", + "operationId": "UpdateSnapshot", + "requestBody": { + "content": { + "application/json": { + "examples": { + "SnapshotLabel": { + "value": { + "labels": { + "foo": "foobar" + } + } + }, + "SnapshotName": { + "value": { + "name": "abfahrt" + } + } + }, + "schema": { + "$ref": "#/components/schemas/UpdateSnapshotPayload" + } + } + }, + "description": "Request an update of a snapshot.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Snapshot" + } + } + }, + "description": "Snapshot has been updated." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Update information of the snapshot." + } + }, "/v1alpha1/projects/{projectId}/volume-performance-classes": { "get": { "description": "Get a list of all volume performance classes available inside a project.", diff --git a/services/iaas/v1beta1/iaas.json b/services/iaas/v1beta1/iaas.json index a290c13..65d851a 100644 --- a/services/iaas/v1beta1/iaas.json +++ b/services/iaas/v1beta1/iaas.json @@ -1795,6 +1795,7 @@ "properties": { "code": { "example": 404, + "format": "int64", "type": "integer" }, "msg": { @@ -2784,6 +2785,7 @@ "ProjectCount": { "description": "The amount of projects currently referencing a specific area.", "example": 10, + "format": "int64", "minimum": 0, "type": "integer" }, @@ -2883,6 +2885,204 @@ ], "type": "object" }, + "Quota": { + "description": "Object that represents a single resource quota.", + "properties": { + "limit": { + "example": 1338, + "format": "int64", + "type": "integer" + }, + "usage": { + "example": 17, + "format": "int64", + "type": "integer" + } + }, + "required": [ + "limit", + "usage" + ], + "type": "object" + }, + "QuotaList": { + "description": "Object that represents the quotas for a project.", + "example": { + "backupGigabytes": { + "limit": 100000000, + "usage": 0 + }, + "backups": { + "limit": 1000, + "usage": 0 + }, + "gigabytes": { + "limit": 1000000000, + "usage": 69 + }, + "networks": { + "limit": 1000, + "usage": 1 + }, + "nics": { + "limit": 1000, + "usage": 5 + }, + "publicIps": { + "limit": 1000, + "usage": 3 + }, + "ram": { + "limit": 1000000000, + "usage": 196608 + }, + "securityGroupRules": { + "limit": 100, + "usage": 10 + }, + "securityGroups": { + "limit": 10, + "usage": 5 + }, + "snapshots": { + "limit": 1000, + "usage": 0 + }, + "vcpu": { + "limit": 10000, + "usage": 48 + }, + "volumes": { + "limit": 1000, + "usage": 3 + } + }, + "properties": { + "backupGigabytes": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Total size in GiB of backups." + }, + "backups": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of backups." + }, + "gigabytes": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Total size in GiB of volumes and snapshots." + }, + "networks": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of networks." + }, + "nics": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of network interfaces." + }, + "publicIps": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of public IP addresses." + }, + "ram": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Amount of server RAM in MiB." + }, + "securityGroupRules": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of security group rules." + }, + "securityGroups": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of security groups." + }, + "snapshots": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of snapshots." + }, + "vcpu": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of server cores." + }, + "volumes": { + "allOf": [ + { + "$ref": "#/components/schemas/Quota" + } + ], + "description": "Number of volumes." + } + }, + "required": [ + "vcpu", + "ram", + "volumes", + "snapshots", + "backups", + "gigabytes", + "backupGigabytes", + "publicIps", + "networks", + "nics", + "securityGroups", + "securityGroupRules" + ], + "type": "object" + }, + "QuotaListResponse": { + "description": "Quotas list response.", + "properties": { + "quotas": { + "$ref": "#/components/schemas/QuotaList" + } + }, + "required": [ + "quotas" + ], + "type": "object" + }, "ReqId": { "description": "Identifier (ID) representing a single API request.", "example": "req-d61a8564c8dd4ffbbc15143e7d0c85ed", @@ -5885,6 +6085,80 @@ "summary": "Update Image Parameters." } }, + "/v1beta1/projects/{projectId}/images/{imageId}/publish": { + "delete": { + "description": "Update the scope property of an existing Image inside a project to local.", + "operationId": "UpdateImageScopeLocal", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Image" + } + } + }, + "description": "Response to update image-scope to local. Provide the updated image object." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Update Image Scope to Local." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + }, + { + "$ref": "#/components/parameters/v1ImageID" + } + ], + "put": { + "description": "Update the scope property of an existing Image inside a project to public.", + "operationId": "UpdateImageScopePublic", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Image" + } + } + }, + "description": "Response to update image-scope to public. Provide the updated image object." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "Update Image Scope to Public." + } + }, "/v1beta1/projects/{projectId}/images/{imageId}/share": { "delete": { "description": "Remove the image share. New scope will be local.", @@ -6988,6 +7262,45 @@ "summary": "Update a public IP." } }, + "/v1beta1/projects/{projectId}/quotas": { + "get": { + "description": "List quota limits and usage for project resources.", + "operationId": "ListQuotas", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QuotaListResponse" + } + } + }, + "description": "List quotas." + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalServerError" + } + }, + "summary": "List project quotas." + }, + "parameters": [ + { + "$ref": "#/components/parameters/v1ProjectID" + } + ] + }, "/v1beta1/projects/{projectId}/requests/{requestId}": { "get": { "description": "Lookup a project request ID from a previous request. This allows to find resource IDs of resources generated during a projects request.",