Skip to content

Commit 3fa044d

Browse files
fixed provider crash in google_compute_network_endpoints (#15707) (#11085)
[upstream:0d67e284b3b71de540fde9646db5579483776e88] Signed-off-by: Modular Magician <magic-modules@google.com>
1 parent aae10f0 commit 3fa044d

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

.changelog/15707.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
compute: fixed crashes when no `network_endpoints` block specified in `google_compute_network_endpoints` resource or no network endpoints exist
3+
```

google-beta/services/compute/resource_compute_network_endpoints.go

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,22 @@ func NetworkEndpointsNetworkEndpointConvertToAny(endpoint NetworkEndpointsNetwor
8080
return m
8181
}
8282

83-
// Continues to read network endpoints as long as there are unread pages remaining
84-
func networkEndpointsPaginatedRead(d *schema.ResourceData, config *transport_tpg.Config, userAgent, url, project, billingProject, pt string) ([]interface{}, error) {
83+
// Read network endpoints as long as there are unread pages remaining
84+
func networkEndpointsPaginatedRead(d *schema.ResourceData, config *transport_tpg.Config, userAgent, url, project, billingProject string, res map[string]interface{}) ([]interface{}, error) {
8585
var allEndpoints []interface{}
86-
for len(pt) > 0 {
87-
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
86+
var err error
87+
88+
for {
89+
if items, ok := res["items"].([]interface{}); ok {
90+
allEndpoints = append(allEndpoints, items...)
91+
}
92+
93+
pt, ok := res["nextPageToken"].(string)
94+
if !ok || pt == "" {
95+
break
96+
}
97+
98+
res, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
8899
Config: config,
89100
Method: "POST",
90101
Project: billingProject,
@@ -94,9 +105,6 @@ func networkEndpointsPaginatedRead(d *schema.ResourceData, config *transport_tpg
94105
if err != nil {
95106
return nil, transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("ComputeNetworkEndpoints %q", d.Id()))
96107
}
97-
resEndpoints := res["items"].([]interface{})
98-
allEndpoints = append(allEndpoints, resEndpoints...)
99-
pt, _ = res["nextPageToken"].(string)
100108
}
101109
return allEndpoints, nil
102110
}
@@ -319,7 +327,11 @@ func resourceComputeNetworkEndpointsCreate(d *schema.ResourceData, meta interfac
319327

320328
headers := make(http.Header)
321329
chunkSize := 500 // API only accepts 500 endpoints at a time
322-
lastPage, err := networkEndpointsPaginatedMutate(d, obj["networkEndpoints"].([]interface{}), config, userAgent, url, project, billingProject, chunkSize, true)
330+
var endpoints []interface{}
331+
if v, ok := obj["networkEndpoints"].([]interface{}); ok {
332+
endpoints = v
333+
}
334+
lastPage, err := networkEndpointsPaginatedMutate(d, endpoints, config, userAgent, url, project, billingProject, chunkSize, true)
323335
if err != nil {
324336
// networkEndpointsPaginatedMutate already adds error description
325337
return err
@@ -816,22 +828,21 @@ func resourceComputeNetworkEndpointsDecoder(d *schema.ResourceData, meta interfa
816828
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
817829
billingProject = bp
818830
}
819-
// Read past the first page to get all endpoints.
820-
pt, _ := res["nextPageToken"].(string)
821-
allEndpoints, err := networkEndpointsPaginatedRead(d, config, userAgent, url, project, billingProject, pt)
831+
832+
allEndpoints, err := networkEndpointsPaginatedRead(d, config, userAgent, url, project, billingProject, res)
822833
if err != nil {
823-
// networkEndpointsPaginatedRead already adds error description
824834
return nil, err
825835
}
826-
firstPage := res["items"].([]interface{})
827-
allEndpoints = append(firstPage, allEndpoints...)
828836

829837
// listNetworkEndpoints returns data in a different structure, so we need to
830838
// convert to the Terraform schema.
831839
var transformed []interface{}
832840
for _, e := range allEndpoints {
833-
t := e.(map[string]interface{})["networkEndpoint"]
834-
transformed = append(transformed, t)
841+
if item, ok := e.(map[string]interface{}); ok {
842+
if t, ok := item["networkEndpoint"]; ok {
843+
transformed = append(transformed, t)
844+
}
845+
}
835846
}
836847

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

0 commit comments

Comments
 (0)