Skip to main content
PATCH
Update an instance pool's description, size, tags or launch template
Requires the IAM action compute:UpdateInstancePool. See COMPUTE permissions for the full list, what each one covers, and an example policy.

Authorizations

Authorization
string
header
required

An OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. This is the recommended way to authenticate.

Get one by exchanging a service account's access key pair at POST /v1/oauth/token with grant_type=client_credentials. It is the standard client-credentials grant, so any OAuth-aware library will obtain and refresh it for you.

Tokens last an hour by default. The same access key pair is separately your AWS SigV4 credential for the S3-compatible object endpoint, which speaks nothing else.

Path Parameters

pool_id
string<uuid>
required
Example:

"8f2a1c3d-4e5b-4a6f-9c0d-1e2f3a4b5c6d"

Body

application/json

Every field is optional; sending none of them is a 400. Omitted bounds retain their current values. The resulting bounds must satisfy 0 <= min_count <= max_count <= 100, or the entire request returns 400. If desired_count is omitted, it is clamped into the resulting bounds. If supplied, desired_count must lie within those bounds or the entire request returns 400 with no changes applied. A changed target is reconciled normally. Managed pools are read-only through the customer API.

A refresh waits when max_count leaves no surge headroom; increasing max_count allows it to resume.

The two tag sets move independently. tags relabels the pool itself and takes effect immediately, touching no instance. template.tags — like the rest of template — does NOT touch the instances already running: a live VM cannot change flavor, tier, subnet or its tags in place. It changes what the pool launches NEXT, so until you roll the pool it holds members carrying two different tag sets, and stale_instance_count is how many are on the older one. Bring them onto the current template with POST /v1/instance-pools/{pool_id}/refresh.

description
string

Customer note on the pool. Omit to preserve it; send an empty string to clear it. Changes no instances, sizing or launch configuration.

Example:

"Nightly background workers"

tags
object

REPLACES the pool's labels: the map you send becomes the whole set, an empty object clears them, and omitting the field leaves them alone. Replacement rather than a merge because a merge leaves no way to say a key should be removed. These label the pool, not its instances. To change what future replicas are tagged with, send template.tags.

Example:
desired_count
integer

New target size, bounded by the resulting min_count/max_count and the hard platform cap of 100.

Required range: 0 <= x <= 100
Example:

3

min_count
integer

New lower bound; omitted desired_count rises to this bound if needed.

Required range: 0 <= x <= 100
Example:

2

max_count
integer

New upper bound; omitted desired_count falls to this bound if needed. A value of 0 means the pool holds no members until max_count is raised.

Required range: 0 <= x <= 100
Example:

6

template
object

Replaces the launch config WHOLESALE — the object you send is what the pool launches next, and anything you leave out is cleared rather than kept. Replacement rather than a deep merge so a shorter networks or volumes cannot be read as a truncation and silently drop an interface or a disk.

Response

The updated instance pool.

instance_pool
object

A launch template plus a desired count. Creating a pool spawns desired_count instances; a reconciler converges member_count toward desired_count as it changes. member_count is how many members the pool holds; live_count is how many of them are running. A pool carries two tag sets and they answer different questions. tags labels the pool resource — that is what an IAM condition reads as basalt:ResourceTag/<key> and what a cost report groups by, and it reaches no instance. template.tags is the set stamped on every replica the pool launches.