From 081ef9f4321d6dbef44784056191e14fa83c9055 Mon Sep 17 00:00:00 2001 From: nsamartsev Date: Thu, 30 Jul 2026 15:20:29 +0200 Subject: [PATCH] resourcemanager: migrate google_project's compute calls from Apiary to REST --- .../resource_google_project.go | 62 ++++++++++++++++--- 1 file changed, 53 insertions(+), 9 deletions(-) diff --git a/mmv1/third_party/terraform/services/resourcemanager/resource_google_project.go b/mmv1/third_party/terraform/services/resourcemanager/resource_google_project.go index 2f049dc944f3..cce9541b96f7 100644 --- a/mmv1/third_party/terraform/services/resourcemanager/resource_google_project.go +++ b/mmv1/third_party/terraform/services/resourcemanager/resource_google_project.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "net/http" + "net/url" "regexp" "strconv" "strings" @@ -632,23 +633,60 @@ func forceDeleteComputeNetwork(d *schema.ResourceData, config *transport_tpg.Con // Read the network from the API so we can get the correct self link format. We can't construct it from the // base path because it might not line up exactly (compute.googleapis.com vs www.googleapis.com) - net, err := tpgcompute.NewClient(config, userAgent).Networks.Get(projectId, networkName).Do() + networkUrl := fmt.Sprintf("%sprojects/%s/global/networks/%s", transport_tpg.BaseUrl(tpgcompute.Product, config), projectId, networkName) + net, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ + Config: config, + Method: "GET", + Project: projectId, + RawURL: networkUrl, + UserAgent: userAgent, + }) if err != nil { return err } + netSelfLink, _ := net["selfLink"].(string) token := "" for paginate := true; paginate; { - filter := fmt.Sprintf("network eq %s", net.SelfLink) - resp, err := tpgcompute.NewClient(config, userAgent).Firewalls.List(projectId).Filter(filter).Do() + filter := fmt.Sprintf("network eq %s", netSelfLink) + + firewallsUrl, err := url.Parse(fmt.Sprintf("%sprojects/%s/global/firewalls", transport_tpg.BaseUrl(tpgcompute.Product, config), projectId)) + if err != nil { + return fmt.Errorf("Error parsing URL: %s", err) + } + q := firewallsUrl.Query() + q.Set("filter", filter) + if token != "" { + q.Set("pageToken", token) + } + firewallsUrl.RawQuery = q.Encode() + + resp, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ + Config: config, + Method: "GET", + Project: projectId, + RawURL: firewallsUrl.String(), + UserAgent: userAgent, + }) if err != nil { return errwrap.Wrapf("Error listing firewall rules in proj: {{err}}", err) } - log.Printf("[DEBUG] Found %d firewall rules in %q network", len(resp.Items), networkName) + items, _ := resp["items"].([]interface{}) + log.Printf("[DEBUG] Found %d firewall rules in %q network", len(items), networkName) + + for _, item := range items { + firewall := item.(map[string]interface{}) + firewallName, _ := firewall["name"].(string) - for _, firewall := range resp.Items { - op, err := tpgcompute.NewClient(config, userAgent).Firewalls.Delete(projectId, firewall.Name).Do() + deleteUrl := fmt.Sprintf("%sprojects/%s/global/firewalls/%s", transport_tpg.BaseUrl(tpgcompute.Product, config), projectId, firewallName) + op, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ + Config: config, + Method: "DELETE", + Project: projectId, + RawURL: deleteUrl, + UserAgent: userAgent, + }) if err != nil { return errwrap.Wrapf("Error deleting firewall: {{err}}", err) } @@ -658,7 +696,7 @@ func forceDeleteComputeNetwork(d *schema.ResourceData, config *transport_tpg.Con } } - token = resp.NextPageToken + token, _ = resp["nextPageToken"].(string) paginate = token != "" } @@ -714,8 +752,14 @@ func updateProjectBillingAccount(d *schema.ResourceData, config *transport_tpg.C } func deleteComputeNetwork(project, network, userAgent string, config *transport_tpg.Config) error { - op, err := tpgcompute.NewClient(config, userAgent).Networks.Delete( - project, network).Do() + networkUrl := fmt.Sprintf("%sprojects/%s/global/networks/%s", transport_tpg.BaseUrl(tpgcompute.Product, config), project, network) + op, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ + Config: config, + Method: "DELETE", + Project: project, + RawURL: networkUrl, + UserAgent: userAgent, + }) if err != nil { return errwrap.Wrapf("Error deleting network: {{err}}", err) }