Skip to content

Commit 0d67e28

Browse files
authored
fixed provider crash in google_compute_network_endpoints (#15707)
1 parent 5784acb commit 0d67e28

File tree

3 files changed

+31
-20
lines changed

3 files changed

+31
-20
lines changed

mmv1/templates/terraform/constants/network_endpoints.go.tmpl

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,31 @@ func NetworkEndpointsNetworkEndpointConvertToAny(endpoint NetworkEndpointsNetwor
3838
return m
3939
}
4040

41-
// Continues to read network endpoints as long as there are unread pages remaining
42-
func networkEndpointsPaginatedRead(d *schema.ResourceData, config *transport_tpg.Config, userAgent, url, project, billingProject, pt string) ([]interface{}, error) {
41+
// Read network endpoints as long as there are unread pages remaining
42+
func networkEndpointsPaginatedRead(d *schema.ResourceData, config *transport_tpg.Config, userAgent, url, project, billingProject string, res map[string]interface{}) ([]interface{}, error) {
4343
var allEndpoints []interface{}
44-
for len(pt) > 0 {
45-
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
46-
Config: config,
47-
Method: "POST",
44+
var err error
45+
46+
for {
47+
if items, ok := res["items"].([]interface{}); ok {
48+
allEndpoints = append(allEndpoints, items...)
49+
}
50+
51+
pt, ok := res["nextPageToken"].(string)
52+
if !ok || pt == "" {
53+
break
54+
}
55+
56+
res, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
57+
Config: config,
58+
Method: "POST",
4859
Project: billingProject,
49-
RawURL: fmt.Sprintf("%s?pageToken=%s", url, pt),
60+
RawURL: fmt.Sprintf("%s?pageToken=%s", url, pt),
5061
UserAgent: userAgent,
5162
})
5263
if err != nil {
5364
return nil, transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("ComputeNetworkEndpoints %q", d.Id()))
5465
}
55-
resEndpoints := res["items"].([]interface{})
56-
allEndpoints = append(allEndpoints, resEndpoints...)
57-
pt, _ = res["nextPageToken"].(string)
5866
}
5967
return allEndpoints, nil
6068
}

mmv1/templates/terraform/decoders/network_endpoints.go.tmpl

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,21 @@ billingProject = project
3333
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
3434
billingProject = bp
3535
}
36-
// Read past the first page to get all endpoints.
37-
pt, _ := res["nextPageToken"].(string)
38-
allEndpoints, err := networkEndpointsPaginatedRead(d, config, userAgent, url, project, billingProject, pt)
36+
37+
allEndpoints, err := networkEndpointsPaginatedRead(d, config, userAgent, url, project, billingProject, res)
3938
if err != nil {
40-
// networkEndpointsPaginatedRead already adds error description
41-
return nil, err
39+
return nil, err
4240
}
43-
firstPage := res["items"].([]interface{})
44-
allEndpoints = append(firstPage, allEndpoints...)
4541

4642
// listNetworkEndpoints returns data in a different structure, so we need to
4743
// convert to the Terraform schema.
4844
var transformed []interface{}
4945
for _, e := range allEndpoints {
50-
t := e.(map[string]interface{})["networkEndpoint"]
51-
transformed = append(transformed, t)
46+
if item, ok := e.(map[string]interface{}); ok {
47+
if t, ok := item["networkEndpoint"]; ok {
48+
transformed = append(transformed, t)
49+
}
50+
}
5251
}
5352

5453
return map[string]interface{}{"networkEndpoints": transformed}, nil

mmv1/templates/terraform/pre_create/network_endpoints.go.tmpl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
chunkSize := 500 // API only accepts 500 endpoints at a time
2-
lastPage, err := networkEndpointsPaginatedMutate(d, obj["networkEndpoints"].([]interface{}), config, userAgent, url, project, billingProject, chunkSize, true)
2+
var endpoints []interface{}
3+
if v, ok := obj["networkEndpoints"].([]interface{}); ok {
4+
endpoints = v
5+
}
6+
lastPage, err := networkEndpointsPaginatedMutate(d, endpoints, config, userAgent, url, project, billingProject, chunkSize, true)
37
if err != nil {
48
// networkEndpointsPaginatedMutate already adds error description
59
return err

0 commit comments

Comments
 (0)