From 11b677a9b3b3835ed91a27b006ee5bde4e7ec891 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 070ded51364..df3c11f9b20 100644 --- a/pkg/asset/installconfig/gcp/client.go +++ b/pkg/asset/installconfig/gcp/client.go @@ -377,7 +377,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) } } @@ -562,3 +562,12 @@ func (c *Client) GetNamespacedTagValue(ctx context.Context, tagNamespacedName st return tagValue, nil } + +// 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") +}