@@ -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