diff --git a/pkg/transport/transport.go b/pkg/transport/transport.go index 7c2bb1d2d1..11defd51a3 100644 --- a/pkg/transport/transport.go +++ b/pkg/transport/transport.go @@ -309,6 +309,7 @@ func IsApiNotEnabledError(err error) bool { type ListPagesOptions struct { Config *Config TempData *schema.ResourceData + Resource *schema.Resource ListURL string BillingProject string UserAgent string @@ -357,18 +358,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 } }