diff --git a/mmv1/third_party/terraform/services/resourcemanager/list_google_service_account.go b/mmv1/third_party/terraform/services/resourcemanager/list_google_service_account.go index 573e547eba15..99807c720bd4 100644 --- a/mmv1/third_party/terraform/services/resourcemanager/list_google_service_account.go +++ b/mmv1/third_party/terraform/services/resourcemanager/list_google_service_account.go @@ -125,6 +125,7 @@ func ListServiceAccounts(config *transport_tpg.Config, project string, callback return transport_tpg.ListPages(transport_tpg.ListPagesOptions{ Config: config, TempData: d, + Resource: ResourceGoogleServiceAccount(), ListURL: url, BillingProject: billingProject, UserAgent: userAgent, diff --git a/mmv1/third_party/terraform/transport/transport.go b/mmv1/third_party/terraform/transport/transport.go index d6dae5f69c6c..32a2128b3cca 100644 --- a/mmv1/third_party/terraform/transport/transport.go +++ b/mmv1/third_party/terraform/transport/transport.go @@ -202,6 +202,7 @@ func IsApiNotEnabledError(err error) bool { type ListPagesOptions struct { Config *Config TempData *schema.ResourceData + Resource *schema.Resource ListURL string BillingProject string UserAgent string @@ -250,18 +251,20 @@ func ListPages(opt ListPagesOptions) error { items, ok = res["items"].([]interface{}) } if ok { + // Capture the seed state once per page. State() returns a snapshot, so reads + // here are unaffected by anything the flattener writes on prior iterations. + seedState := opt.TempData.State() for _, item := range items { itemMap, ok := item.(map[string]interface{}) if !ok { return fmt.Errorf("expected item to be map[string]interface{}, got %T", item) } - err = opt.Flattener(itemMap, opt.TempData, opt.Config) - if err != nil { + itemResourceData := opt.Resource.Data(seedState) + if err := opt.Flattener(itemMap, itemResourceData, opt.Config); err != nil { return fmt.Errorf("Error flattening instance: %s", err) } - err = opt.Callback(opt.TempData) - if err != nil { + if err := opt.Callback(itemResourceData); err != nil { return err } }