Skip to content

Launch an instance.

POST
/v1/projects/{projectId}/compute/instances
Code sample: Shell / cURL
curl --request POST \
--url https://stratum.example.com/v1/projects/example/compute/instances \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "name": "example", "displayName": "example", "description": "example", "instanceType": "example", "vcpus": 1, "memoryBytes": 1, "imageId": "example", "availabilityZone": "example", "rootVolumeId": "example", "rootVolumeSizeBytes": 1, "rootVolumeName": "example", "rootStorageClass": "example", "rootPoolId": "example", "subnetIds": [ "example" ], "noNetwork": false, "securityGroupIds": [ "example" ], "floatingIPPool": "example", "keyPairName": "example", "placementGroupName": "example", "iamInstanceProfileId": "example", "userData": "example", "tags": { "additionalProperty": "example" }, "stopProtection": true, "terminationProtection": true, "autostart": true, "desiredState": "running", "agentEnabled": true, "metadataOptions": { "httpEndpoint": "enabled", "httpTokens": "optional", "httpPutResponseHopLimit": 1, "instanceMetadataTags": "enabled" }, "blockDeviceMappings": [ { "deviceIndex": 1, "sizeBytes": 1, "deleteOnTermination": true } ] }'

Async — returns 202 with the new instance in state=creating. Poll GET /v1/projects/{projectId}/compute/instances/{id} until state=running. The hypervisor-driver dispatch is owned by the lifecycle worker; this endpoint never blocks on the driver.

projectId
required
string
/^p-[a-z0-9-]+$/
Media typeapplication/json

Launch a VM. The launch shape is XOR’d: pass either instanceType (a catalog entry name) OR both vcpus + memoryBytes for an custom-shape launch. Passing both or neither is rejected with INVALID_INPUT.

object
name
required

Per-project unique customer name.

string
displayName
string
description
string
instanceType

Catalog name (e.g. m1.large); must be in state=active. Optional when vcpus + memoryBytes are both set ( custom-shape launch). Either this OR the custom pair must be provided.

string
/^[a-z][a-z0-9]*\.[a-z0-9]+$/
vcpus

custom-shape vCPU count. Required when instanceType is empty; ignored when instanceType is set. At v1 custom shapes default to amd64 + the install’s configured hypervisor driver; expands this surface at 2.x.

integer
>= 1
memoryBytes

custom-shape memory in bytes (minimum 1 MiB). Required when instanceType is empty; ignored when set.

integer format: int64
>= 1048576
imageId
required
string
/^img-[a-z0-9-]+$/
availabilityZone

Defaults to the install’s single AZ at v1 per master-plan D10.

string
rootVolumeId

Pre-provisioned root volume ID. Optional — when omitted + the VolumeProvisioner SPI is wired (production default), the compute service auto-provisions the root volume from the image catalog.

string
/^vol-[a-z0-9-]+$/
rootVolumeSizeBytes

Size override for the auto-provisioned root volume. Ignored when rootVolumeId is set. Defaults to the image’s size when omitted.

integer format: int64
rootVolumeName

Display name for the auto-provisioned root volume, so a launch can name its disk instead of accepting the generated default (“ — root volume”,). Ignored when rootVolumeId is set: a reused volume keeps its own name, exactly as rootVolumeSizeBytes, rootStorageClass and rootPoolId are ignored in that case.

Sets the volume’s displayName only. Its name slug stays root-<instanceId> and is NOT configurable: keyed that slug to the instance id precisely because instance names are unique only among LIVE instances, so a terraform apply that forces replacement raced its predecessor’s volume and failed intermittently with “name already taken”. A caller-supplied slug would reintroduce that.

string
<= 100 characters
rootStorageClass

Storage class (by name) for the auto-provisioned root volume. Ignored when rootVolumeId is set. Defaults to the image’s own class. Another class must be one of the image’s launchableStorageClasses, or the launch is refused with 409 IMAGE_POOL_MISMATCH.

string
rootPoolId

operator placement OVERRIDE (advanced): an explicit storage pool (pool-…) to provision the root volume from. Pins the instance to the pool’s owner node, bypassing storage-tier scheduling. Operator-facing; omit for the normal tier/class-based automatic placement. Ignored when rootVolumeId is set; fail-closed (an unknown or full pool fails the launch).

string
/^pool-[a-z0-9-]+$/
subnetIds

Subnet(s) to attach NICs to. v1 only uses the first entry (primary NIC); 2.x multi-NIC launches consume the rest. When supplied + the NICProvisioner SPI is wired, the compute service auto-creates the NIC + attaches it.

Omitted, the instance lands in the project’s default subnet (default-<az> of its default VPC). A project with none refuses the launch with 400 NO_DEFAULT_SUBNET (AWS VPCIdNotSpecified); one whose default VPC is still being built answers 503 DEFAULT_VPC_CREATING with Retry-After. Neither launches an instance without a network — that takes noNetwork: true.

Array<string>
noNetwork

Launch the instance with no network interface at all. The only way to get one: without it, a launch that names no subnet uses the project’s default subnet or is refused. Cannot be combined with subnetIds, securityGroupIds or floatingIPPool (400 INVALID_INPUT).

boolean
securityGroupIds

Security groups bound to the auto-provisioned primary NIC. Ignored when subnetIds is empty.

Array<string>
floatingIPPool

When set, the compute service auto-allocates a floating IP from this region’s pool + associates it with the primary NIC. Ignored when the instance has no NIC. Released on terminate.

It is a REGION selector, not a pool name: "default" for the instance’s own region, an explicit region name for a multi-region install, or omit it for no public IP. Anything else is 422 REGION_UNKNOWN naming what is accepted — it used to reach the store and come back 500 INTERNAL_ERROR, which reads as the platform breaking rather than a typo. 422 rather than 400 because the body is well formed and references something that does not exist, which is ’s own example for the code, and it is what the meta FIP pool create answers for the same condition.

string
keyPairName

Optional key pair (must belong to the same project).

string
placementGroupName

Launch into a placement group. The group must belong to this project.

Membership is declared HERE and is immutable for the instance’s life — there is no operation that moves an instance between groups, because joining one after placement either violates the rule immediately or triggers a migration nobody asked for.

A strict spread that cannot be satisfied fails the launch with 409 PLACEMENT_GROUP_AT_CAPACITY, naming the group, the level and how many hosts were available. That ceiling is the cluster’s current size at the level, not a fixed quota: adding a node raises it.

string
iamInstanceProfileId

Attach an instance profile at launch. The profile must exist, be active, and belong to this project, and the caller needs compute:AttachInstanceProfile. Apps in the VM then mint short-lived credentials for the profile’s service account via IMDS.

string
/^iprof-[a-z0-9]+$/
userData

Raw cloud-init user-data bytes. Cap is 64 KiB. The field is JSON-string-encoded, not base64 — pass the bytes verbatim. cloud-init is first-class per the project design decision (unlike Proxmox snippets).

string
tags
object
key
additional properties
string
stopProtection
boolean
terminationProtection
boolean
autostart

See Instance.autostart. Default false.

boolean
desiredState

The power state to converge to after create. Defaults to running.

stopped still boots the instance first and then stops it: the hypervisor has no way to define a domain without starting it. What it buys is expressibility — a volume attachment needs a stopped instance (hot-plug is 2.0), and before this there was no way to write that in Terraform at all.

string
default: running
Allowed values: running stopped
agentEnabled

Whether to install the in-VM Stratum agent. Defaults to true.

Set false for an appliance or hardened image that must not run platform software, or where the operator simply does not want it. The agent is then omitted from the cloud-init vendor-data entirely, and the instance reports health: agent_disabled rather than unhealthy — its absence is the configured intent, so it must not raise instances-unhealthy for the life of the instance.

Declining the agent gives up what the agent carries: guest posture, the Session Manager, software inventory and in-guest exec. Everything outside the guest — power state, networking, volumes, load-balancer health checks — is unaffected.

To change it later use the enable-agent and disable-agent actions, not an update: they carry the guest side (an install command to run in the guest, an uninstall sent to the agent) that a flag on its own could not.

boolean
default: true
metadataOptions

Per-instance AWS-shape IMDS options. Returned on the Instance and settable at launch (CreateInstanceRequest) or via the modify-metadata-options action. httpEndpoint is enforced: when disabled the whole IMDS surface (including the Stratum SSH-CA agent plane) is off for the instance. httpTokens + httpPutResponseHopLimit are recorded for AWS parity only — Stratum’s IMDS always requires a session token (effectively IMDSv2-only), so optional does not relax that in v1. Omitted fields default to enabled / required / 1.

object
httpEndpoint

Whether IMDS is reachable for the instance. Default enabled.

string
Allowed values: enabled disabled
httpTokens

IMDSv2 token requirement (recorded; Stratum is always v2). Default required.

string
Allowed values: optional required
httpPutResponseHopLimit

Recorded for AWS parity. Default 1.

integer
>= 1 <= 64
instanceMetadataTags

When enabled the guest can read its own tags at /latest/meta-data/tags/instance/. Default disabled; the image builder enables it on a build instance.

string
Allowed values: enabled disabled
blockDeviceMappings

Per-device overrides for a multi-volume image; every data device the image carries is launched (cloned from its snapshot and attached before first boot) whether or not it is named here. 400 for a device the image does not have or a size below the snapshot’s.

Array<object>

A per-device override for one of the data devices a multi-volume image carries. deviceIndex must be one the image has (>= 1; device 0 is the root, sized by rootVolumeSizeBytes); sizeBytes must be at or above the snapshot’s; absent fields keep the image’s values. Devices not named are launched as the image mapped them.

object
deviceIndex
required
integer
>= 1
sizeBytes
integer format: int64
deleteOnTermination
boolean

Accepted; reconciliation in progress.

Media typeapplication/json
object
id
required
string
/^i-[a-z0-9-]+$/
projectId
required
string
/^p-[a-z0-9-]+$/
name
required
string
displayName
string
description
string
instanceType

Catalog name (e.g. m1.large); references the instance-type catalog. Empty for custom-shape launches — read vcpus + memoryBytes for the effective shape in that case.

string
vcpus
required

Effective vCPU count. Populated for every instance mirrors the catalog entry for catalog launches; carries the operator’s override for custom-shape launches.

integer
>= 1
memoryBytes
required

Effective memory in bytes. Populated for every instance (catalog or custom).

integer format: int64
>= 1048576
imageId
required
string
/^img-[a-z0-9-]+$/
region
required
string
availabilityZone
required
string
hypervisorNodeId

Empty until the scheduler stamps it.

string
/^n-[a-z0-9-]+$/
state
required

customer-visible state.

string
Allowed values: creating starting running stopping stopped rebooting migrating terminating terminated error
stateReason

Human-readable detail set when state=error.

string
health

aggregated, read-time instance-health roll-up, derived from durable signals (lifecycle state + agent heartbeat recency). healthy: running, agent heartbeating. degraded: running and heartbeating but the host can’t read a fresh domain sample (or vice-versa). unhealthy: running with no agent heartbeat, or state=error. migrating: a cold migration is in flight. unknown: transitional or deliberately-down states where the lifecycle state itself is the signal, and an agent enabled after launch whose install command has not been run yet. agent_disabled: agentEnabled: false, at launch or since, so the agent’s absence is the configured intent, not a fault — distinct from unhealthy precisely so an appliance image or an operator who declined the agent does not read as broken forever. Stable across a control-plane restart (the in-memory session channel is not an input).

string
Allowed values: healthy degraded unhealthy migrating unknown agent_disabled
healthReason

Why health reads the way it does. Present only on the describe path (GET-by-id), and only when health needs explaining; omitted for a healthy instance.

Read this before acting on health: unhealthy: it is what separates an agent that never arrived (permanent — rebuild) from one that has merely gone quiet (often self-resolving), and it carries the first-heartbeat deadline so a normal launch is not mistaken for a broken one.

object
code
required

Machine-readable cause.

agent_pending: running, no heartbeat yet, still inside the first-heartbeat grace window. health already reads unhealthy (it flips within ~3 minutes), so this is what distinguishes a perfectly normal launch from a broken one — see deadline.

agent_never_reported: past the grace window having never reported. Permanent without intervention; run enable-agent for a new install command, or disable-agent if the instance is not meant to have an agent.

agent_gone_quiet: reported at least once and then stopped. The agent was installed correctly, so this is not a delivery bug; frequently self-resolving.

agent_disabled: agentEnabled: false, declined at launch or disabled since. Not a fault — reported rather than omitted so a reader who expected an agent learns why there is none instead of hunting a failure that never happened.

agent_enrollment_pending: enable-agent ran and its install command has not been run in the guest yet. health reads unknown; nothing has failed.

string
Allowed values: agent_pending agent_never_reported agent_gone_quiet agent_disabled agent_enrollment_pending
message
required

Human-readable explanation, including what to do about it. Not a stable contract — switch on code.

string
since

When the reported condition began — launch (or enrollment, for an agent added later) for an agent that never reported, the last heartbeat for one that has gone quiet.

string format: date-time
deadline

When a pending agent stops being given the benefit of the doubt. Set only for agent_pending; after this the code becomes agent_never_reported.

string format: date-time
agentEnabled

Whether the instance is meant to run the in-VM Stratum agent. Set at create (CreateInstanceRequest.agentEnabled); changed later only by the enable-agent and disable-agent actions.

False means the agent is not wanted, so health reports agent_disabled rather than unhealthy and the instance is excluded from agent-presence reconciliation. Read this before concluding an instance is broken because it never reported.

boolean
agentEnrollmentPending

enable-agent ran and its install command has not been run in the guest yet. health reads unknown (reason agent_enrollment_pending) until it is.

boolean
agentEnrolledAt

When an enable-agent install command last enrolled the agent, or, with agentActivation: automatic, when enable-agent turned it on. Absent for an agent installed at launch. The first-heartbeat grace window runs from here rather than from launchedAt.

string format: date-time
agentActivation

How the agent is turned on in the guest after launch, fixed at launch from the image the instance launched from. It changes once at most: enable-agent with force: true turns automatic into install-command for good, for a guest whose dormant package was removed.

automatic: the image ships the agent installed but dormant, with a timer that follows the agent flag. enable-agent and disable-agent take effect in the guest within a minute, with nothing to run there, and disabling keeps the package installed.

install-command: any other image. enable-agent returns a one-time install command to run in the guest, and disable-agent removes the agent.

Images created from the instance (create-image, image builder output) carry the stratum.dev/agent-activation: automatic tag only while it reads automatic.

string
Allowed values: automatic install-command
agentStatus

In-VM agent liveness, embedded on the instance describe (GET-by-id) response so a detail view has agent health without a second round-trip to .../agent-status. Present only on the describe path; omitted on list and the action responses. An instance whose agent has never reported carries health: unknown.

object
instanceId
required
string
health
required

Derived agent liveness. agent_disabled: the instance’s agentEnabled is false, so no agent is wanted and its silence is not a fault. enrollment_pending: enable-agent ran and its install command has not been run in the guest yet. Exactly the instance fields, so the two never disagree.

string
Allowed values: healthy unhealthy unknown agent_disabled enrollment_pending
lastSeen

When the control plane last received a heartbeat.

string format: date-time
agentVersion

The agent’s reported build version.

string
lastReconcileResult

Result of the agent’s most recent reconcile (“ok” or “error”).

string
lastReconcileAt

When the agent last completed a reconcile.

string format: date-time
rootVolumeId
required
string
/^vol-[a-z0-9-]+$/
rootVolumeAutoProvisioned

True when the root volume was auto-provisioned by CreateInstance and is cleaned up on terminate.

boolean
additionalVolumes
Array<object>
object
volumeId
required
string
/^vol-[a-z0-9-]+$/
deviceName
required

Guest device path (e.g. /dev/vdb).

string
deleteOnTermination
required
boolean
deviceIndex

Set when the launch cloned this volume from a multi-volume image’s data device.

integer
snapshotId

The image snapshot this volume was cloned from at launch.

string
primaryNicId

Primary network interface ID. Set by the launch path when SubnetIDs are supplied or the project’s default subnet is resolved.

string
/^nic-[a-z0-9-]+$/
primaryNicAutoProvisioned

True when the primary NIC was auto-provisioned by CreateInstance and is cleaned up on terminate.

boolean
primaryFipId

Floating IP attached to the primary NIC, when one was allocated at launch via floatingIPPool / –public-ip.

string
/^fip-[a-z0-9-]+$/
primaryFipAutoProvisioned

True when the primary FIP was auto-allocated by CreateInstance and is released on terminate.

boolean
networkInterfaces
Array<object>
object
nicId
required
string
/^nic-[a-z0-9-]+$/
deviceIndex
required
integer
primary
required
boolean
privateIp

The NIC’s primary private IPv4 address within its subnet. Empty until the NIC is scheduled onto a subnet and an address is assigned (e.g. while the instance is still creating).

string
subnetId

The subnet this NIC actually landed in, enriched at read time from the network NIC row. Nothing on the instance reported placement before. A create request naming subnetId instead of the real subnetIds had the field silently dropped, returned 201, and attached the NIC to the default platform network — with no response field distinguishing that from a correctly placed instance.

string
vpcId

The VPC the NIC’s subnet belongs to.

string
primaryPrivateIP
string
privateIp

AWS-parity alias of primaryPrivateIP.

string
primaryPublicIP
string
publicDnsName

The instance’s public DNS name, <instance-id>.compute.<parent> (the AWS PublicDnsName). The install’s authoritative DNS answers it with primaryPublicIP, and with the private IP when asked from inside the instance’s own VPC.

Set while that record is published: the instance has a floating IP on its primary NIC, its VPC has dnsHostnames on, and the install has a DNS parent domain. Omitted otherwise. The record follows within one reconciler pass (30 s) of the floating IP being associated or the VPC setting changing. The same name IMDS serves at meta-data/public-hostname.

For a name of your own, create an alias record in a hosted zone. An aliasTarget of type: fip answers the floating IP’s address; one of type: instance answers the instance’s private IP and publishes a public.<name> companion for its floating IP. Both follow the address as it changes.

string
keyPairName
string
placementGroupId

The placement group this instance was placed by. Absent when it joined none.

It can become absent without the instance changing: deleting a group leaves its members running and drops the reference. That is losing the guarantee, not moving between groups.

string
/^pg-[a-z0-9-]+$/
placementGroupName

Name of the placement group this instance was placed by — what the tenant declared at launch. Absent when it joined none, and absent alongside placementGroupId once the group is deleted.

string
userDataHash

SHA-256 over the user-data bytes, sha256:<hex>.

string
iamRoleArn

Reserved for instance profiles (/ 2.x).

string
iamInstanceProfileId

Attached instance profile. Apps inside the VM that hit IMDS get short-lived credentials for the profile’s service account. Empty when no profile is attached.

string
/^iprof-[a-z0-9]+$/
tags
object
key
additional properties
string
stopProtection
required
boolean
terminationProtection
required
boolean
autostart

When true the controlplane queues a start lifecycle action against this instance on boot if libvirt currently has the domain shut off. Default false.

boolean
desiredState

The power state the operator has ASKED for, as distinct from state, which is what the instance actually is. A leader-gated reconciler converges the two, so setting this returns immediately rather than blocking for a guest shutdown.

They are separate fields deliberately: collapsing them would make “someone stopped this by hand” indistinguishable from “this is meant to be stopped”. An instance manually stopped while desiredState=running is started again on the next pass.

Only running and stopped are accepted. starting/stopping are transitions the worker owns and are never a destination.

string
default: running
Allowed values: running stopped
stopForce

True while a stop asked with force: true (a hard stop, the Multi-AZ fence) is in flight; cleared when the instance leaves stopping.

boolean
metadataOptions

Per-instance AWS-shape IMDS options. Returned on the Instance and settable at launch (CreateInstanceRequest) or via the modify-metadata-options action. httpEndpoint is enforced: when disabled the whole IMDS surface (including the Stratum SSH-CA agent plane) is off for the instance. httpTokens + httpPutResponseHopLimit are recorded for AWS parity only — Stratum’s IMDS always requires a session token (effectively IMDSv2-only), so optional does not relax that in v1. Omitted fields default to enabled / required / 1.

object
httpEndpoint

Whether IMDS is reachable for the instance. Default enabled.

string
Allowed values: enabled disabled
httpTokens

IMDSv2 token requirement (recorded; Stratum is always v2). Default required.

string
Allowed values: optional required
httpPutResponseHopLimit

Recorded for AWS parity. Default 1.

integer
>= 1 <= 64
instanceMetadataTags

When enabled the guest can read its own tags at /latest/meta-data/tags/instance/. Default disabled; the image builder enables it on a build instance.

string
Allowed values: enabled disabled
createdAt
required
string format: date-time
launchedAt
string format: date-time
updatedAt
required
string format: date-time
terminatedAt
string format: date-time
createdBy
required
string

Example

{
"state": "creating",
"health": "healthy",
"healthReason": {
"code": "agent_pending",
"message": "the agent has NEVER checked in, 4 days after it was installed — it was not installed, or it cannot reach IMDS. This will NOT resolve on its own and no retry is scheduled: run enable-agent for a new install command and run it in the guest, or disable the agent if the instance is not meant to have one."
},
"agentActivation": "automatic",
"agentStatus": {
"instanceId": "i-A8c2D4e6F",
"health": "healthy"
},
"networkInterfaces": [
{
"privateIp": "172.31.0.42",
"subnetId": "subnet-6arpymeu32",
"vpcId": "vpc-puhtjesijq"
}
],
"desiredState": "running",
"metadataOptions": {
"httpEndpoint": "enabled",
"httpTokens": "optional",
"instanceMetadataTags": "enabled"
}
}

INVALID_INPUT — a malformed or contradictory request (e.g. noNetwork together with subnetIds).

NO_DEFAULT_SUBNET — no subnetIds and the project has no default subnet: it declined its default VPC, deleted it, or predates it. Pass subnetIds, ask for one with create-default-vpc, or pass noNetwork: true for an instance with no network. Before, this launch was accepted and ran with no NIC.

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
>= 400 <= 599
detail
string
instance
string format: uri-reference
requestId
required
string
code
required
string
issues

The findings of a rejected IAM policy document (custom and resource policies).

Array<object>

One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.

object
code
required

The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.

string
statement
required

Index of the statement at fault; -1 for the document as a whole.

integer
>= -1
detail
required
string
action

The offending action, where one is at fault (ACTION_NOT_APPLICABLE).

string
errors

Field errors, for codes that carry them: each problem at its field (see FieldError). Documented on the responses that set it, e.g. approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED. Absent otherwise.

Array<object>

One field’s problem, the stage-2 installer API’s shape. field is the field’s path, message what is wrong with it.

object
field
required

The field’s path, e.g. links[0].interface, disks[1].confirm, mgmt.address or role; empty for the whole request.

string
message
required
string
details

Structured facts about the refusal, for codes that carry them. The shape is fixed per code and documented on the response that answers it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and IMAGE_IN_USE. Absent for codes that carry none.

object
key
additional properties
any

Example

{
"issues": [
{
"code": "ACTION_NOT_APPLICABLE",
"action": "compute:CreateVpc"
}
]
}

NAME_TAKEN — another instance in this project already has this name. The request is refused before anything is created. An instance stops holding its name as soon as its termination is accepted, so a name can be reused straight away: the resources created with an instance (its volumes and primary network interface) are named after its ID, not its name, and a predecessor still being torn down does not hold the name.

IMAGE_POOL_MISMATCH — rootStorageClass cannot hold a clone of the image: it is on another storage driver, or (lvm-thin) on a pool the image is not staged in. Nothing is created. details (ImagePoolMismatchDetails) names the image’s pools, the class asked for and storageClasses, the classes that can launch it, equal to the image’s launchableStorageClasses. Omitting rootStorageClass always can.

NO_STORAGE_CLASS — the launch needs a root volume made for it (no rootVolumeId, rootPoolId or rootStorageClass) and the cluster has no active storage class at all. A cluster whose only data disks were reserved for Ceph has Ceph as its compute storage and none until Ceph is set up on day 2 and given a default class; readiness reports it as StorageAwaitsCeph. Nothing is created.

Other conflicts on this route: IMAGE_DISABLED, INSTANCE_TYPE_NOT_ACTIVE, INVALID_STATE, NO_ELIGIBLE_NODE, PLACEMENT_GROUP_AT_CAPACITY and CONFLICT.

Media typeapplication/problem+json

A 409 on a route that can answer IMAGE_POOL_MISMATCH: a Problem whose details, for that code, is an ImagePoolMismatchDetails. The route’s other conflict codes carry no details.

object
type
required
string format: uri
title
required
string
status
required
integer
>= 400 <= 599
detail
string
instance
string format: uri-reference
requestId
required
string
code
required
string
issues

The findings of a rejected IAM policy document (custom and resource policies).

Array<object>

One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.

object
code
required

The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.

string
statement
required

Index of the statement at fault; -1 for the document as a whole.

integer
>= -1
detail
required
string
action

The offending action, where one is at fault (ACTION_NOT_APPLICABLE).

string
errors

Field errors, for codes that carry them: each problem at its field (see FieldError). Documented on the responses that set it, e.g. approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED. Absent otherwise.

Array<object>

One field’s problem, the stage-2 installer API’s shape. field is the field’s path, message what is wrong with it.

object
field
required

The field’s path, e.g. links[0].interface, disks[1].confirm, mgmt.address or role; empty for the whole request.

string
message
required
string
details

Structured facts about the refusal, for codes that carry them. The shape is fixed per code and documented on the response that answers it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and IMAGE_IN_USE. Absent for codes that carry none.

object
key
additional properties
any
details

details of a 409 IMAGE_POOL_MISMATCH problem, the same on POST /v1/projects/{projectId}/compute/instances and the image create-volume action: the storage class asked for cannot hold a clone of the image.

object
imageId
string
imageDriver

The storage driver the image is stored on.

string
imagePools

The pools the image’s base lives in.

Array<string>
storageClass

The storage class asked for, by name.

string
storageClassDriver

The driver that class puts volumes on.

string
storageClassPool

The pool that class puts volumes in.

string
storageClasses

The classes, by name, that can launch the image (equal to the image’s launchableStorageClasses). Omitting the class always can.

Array<string>

Example

{
"issues": [
{
"code": "ACTION_NOT_APPLICABLE",
"action": "compute:CreateVpc"
}
]
}

REGION_UNKNOWN — a field references something this install does not have, e.g. a floatingIPPool that is not a region.

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
>= 400 <= 599
detail
string
instance
string format: uri-reference
requestId
required
string
code
required
string
issues

The findings of a rejected IAM policy document (custom and resource policies).

Array<object>

One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.

object
code
required

The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.

string
statement
required

Index of the statement at fault; -1 for the document as a whole.

integer
>= -1
detail
required
string
action

The offending action, where one is at fault (ACTION_NOT_APPLICABLE).

string
errors

Field errors, for codes that carry them: each problem at its field (see FieldError). Documented on the responses that set it, e.g. approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED. Absent otherwise.

Array<object>

One field’s problem, the stage-2 installer API’s shape. field is the field’s path, message what is wrong with it.

object
field
required

The field’s path, e.g. links[0].interface, disks[1].confirm, mgmt.address or role; empty for the whole request.

string
message
required
string
details

Structured facts about the refusal, for codes that carry them. The shape is fixed per code and documented on the response that answers it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and IMAGE_IN_USE. Absent for codes that carry none.

object
key
additional properties
any

Example

{
"issues": [
{
"code": "ACTION_NOT_APPLICABLE",
"action": "compute:CreateVpc"
}
]
}

QUOTA_EXCEEDED: the project’s compute.instances.count, compute.vcpus or compute.memory.bytes would pass its limit.

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
>= 400 <= 599
detail
string
instance
string format: uri-reference
requestId
required
string
code
required
string
issues

The findings of a rejected IAM policy document (custom and resource policies).

Array<object>

One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.

object
code
required

The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.

string
statement
required

Index of the statement at fault; -1 for the document as a whole.

integer
>= -1
detail
required
string
action

The offending action, where one is at fault (ACTION_NOT_APPLICABLE).

string
errors

Field errors, for codes that carry them: each problem at its field (see FieldError). Documented on the responses that set it, e.g. approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED. Absent otherwise.

Array<object>

One field’s problem, the stage-2 installer API’s shape. field is the field’s path, message what is wrong with it.

object
field
required

The field’s path, e.g. links[0].interface, disks[1].confirm, mgmt.address or role; empty for the whole request.

string
message
required
string
details

Structured facts about the refusal, for codes that carry them. The shape is fixed per code and documented on the response that answers it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and IMAGE_IN_USE. Absent for codes that carry none.

object
key
additional properties
any

Example

{
"issues": [
{
"code": "ACTION_NOT_APPLICABLE",
"action": "compute:CreateVpc"
}
]
}

Retryable, with Retry-After.

DEFAULT_VPC_CREATING — no subnetIds, and the project’s default VPC is still being built (a new project’s takes a few reconciler passes). The same request succeeds once it is available.

INSUFFICIENT_CAPACITY — no node has room for the shape right now.

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
>= 400 <= 599
detail
string
instance
string format: uri-reference
requestId
required
string
code
required
string
issues

The findings of a rejected IAM policy document (custom and resource policies).

Array<object>

One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.

object
code
required

The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.

string
statement
required

Index of the statement at fault; -1 for the document as a whole.

integer
>= -1
detail
required
string
action

The offending action, where one is at fault (ACTION_NOT_APPLICABLE).

string
errors

Field errors, for codes that carry them: each problem at its field (see FieldError). Documented on the responses that set it, e.g. approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED. Absent otherwise.

Array<object>

One field’s problem, the stage-2 installer API’s shape. field is the field’s path, message what is wrong with it.

object
field
required

The field’s path, e.g. links[0].interface, disks[1].confirm, mgmt.address or role; empty for the whole request.

string
message
required
string
details

Structured facts about the refusal, for codes that carry them. The shape is fixed per code and documented on the response that answers it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and IMAGE_IN_USE. Absent for codes that carry none.

object
key
additional properties
any

Example

{
"issues": [
{
"code": "ACTION_NOT_APPLICABLE",
"action": "compute:CreateVpc"
}
]
}