From fee6f94711c429c7289fbd85b4bb2d5f80e6aa49 Mon Sep 17 00:00:00 2001 From: Patrick Dillon Date: Wed, 28 Jan 2026 16:09:04 -0500 Subject: [PATCH] GCP: skip AI zones Filter out AI zones when discovering zones in the region. AI zones do not have quota for general compute resources, so we should not provision nodes there by default. --- pkg/asset/installconfig/gcp/client.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pkg/asset/installconfig/gcp/client.go b/pkg/asset/installconfig/gcp/client.go index c1750be85a..ee7bbe27a4 100644 --- a/pkg/asset/installconfig/gcp/client.go +++ b/pkg/asset/installconfig/gcp/client.go @@ -545,7 +545,7 @@ func GetZones(ctx context.Context, svc *compute.Service, project, region string) defer cancel() if err := req.Pages(ctx, func(page *compute.ZoneList) error { for _, zone := range page.Items { - if strings.HasSuffix(zone.Region, region) && strings.EqualFold(zone.Status, "UP") { + if strings.HasSuffix(zone.Region, region) && strings.EqualFold(zone.Status, "UP") && !aiZone(zone.Name) { zones = append(zones, zone) } } @@ -794,3 +794,12 @@ func (c *Client) GetPrivateServiceConnectEndpoint(ctx context.Context, project s } return GetPrivateServiceConnectEndpoint(svc, project, endpoint) } + +// aiZone returns true if the GCP zone follows the AI naming convention. +// Uses the regular expression pattern as documented in GCP API docs: +// "To match zones containing ai in their name, use the filter query parameter with the regular expression name eq '.*-ai.*'." +// e.g. us-south1-ai1b, us-central1-ai1a. +// See: https://docs.cloud.google.com/compute/docs/regions-zones/ai-zones +func aiZone(zone string) bool { + return strings.Contains(zone, "-ai") +}