From ccc846589804149c91562b90ccc3392f0951fb35 Mon Sep 17 00:00:00 2001 From: njucz Date: Thu, 21 May 2020 15:53:15 +0800 Subject: [PATCH 1/4] fix issue: could not return all matched resources sometimes --- .../resource/data_source_resources.go | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/azurerm/internal/services/resource/data_source_resources.go b/azurerm/internal/services/resource/data_source_resources.go index 5601f48217f2..105329f8057b 100644 --- a/azurerm/internal/services/resource/data_source_resources.go +++ b/azurerm/internal/services/resource/data_source_resources.go @@ -6,6 +6,7 @@ import ( "strings" "time" + "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2018-05-01/resources" "github.com/google/uuid" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/helpers/azure" @@ -104,13 +105,29 @@ func dataSourceArmResourcesRead(d *schema.ResourceData, meta interface{}) error } resources := make([]map[string]interface{}, 0) - resourcesResp, err := client.ListComplete(ctx, filter, "", nil) + resourcesResp, err := client.List(ctx, filter, "", nil) if err != nil { return fmt.Errorf("Error getting resources: %+v", err) } - for resourcesResp.NotDone() { - res := resourcesResp.Value() + resources = append(resources, filterResource(resourcesResp.Values(), requiredTags)...) + for resourcesResp.Response().NextLink != nil && *resourcesResp.Response().NextLink != "" { + if err := resourcesResp.NextWithContext(ctx); err != nil { + return fmt.Errorf("loading Resource List: %s: %+v", err) + } + resources = append(resources, filterResource(resourcesResp.Values(), requiredTags)...) + } + + d.SetId("resource-" + uuid.New().String()) + if err := d.Set("resources", resources); err != nil { + return fmt.Errorf("Error setting `resources`: %+v", err) + } + + return nil +} + +func filterResource(inputs []resources.GenericResourceExpanded, requiredTags map[string]interface{}) (result []map[string]interface{}) { + for _, res := range inputs { if res.ID == nil { continue } @@ -159,7 +176,7 @@ func dataSourceArmResourcesRead(d *schema.ResourceData, meta interface{}) error } } - resources = append(resources, map[string]interface{}{ + result = append(result, map[string]interface{}{ "name": resName, "id": resID, "type": resType, @@ -169,17 +186,6 @@ func dataSourceArmResourcesRead(d *schema.ResourceData, meta interface{}) error } else { log.Printf("[DEBUG] azurerm_resources - resources %q (id: %q) skipped as a required tag is not set or has the wrong value.", *res.Name, *res.ID) } - - err = resourcesResp.NextWithContext(ctx) - if err != nil { - return fmt.Errorf("Error loading Resource List: %s", err) - } - } - - d.SetId("resource-" + uuid.New().String()) - if err := d.Set("resources", resources); err != nil { - return fmt.Errorf("Error setting `resources`: %+v", err) } - - return nil + return } From 5914873ccaec37463dd24775e4e9456e88fab22c Mon Sep 17 00:00:00 2001 From: njucz Date: Thu, 21 May 2020 16:19:19 +0800 Subject: [PATCH 2/4] update --- azurerm/internal/services/resource/data_source_resources.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azurerm/internal/services/resource/data_source_resources.go b/azurerm/internal/services/resource/data_source_resources.go index 105329f8057b..d619afb7bf32 100644 --- a/azurerm/internal/services/resource/data_source_resources.go +++ b/azurerm/internal/services/resource/data_source_resources.go @@ -113,7 +113,7 @@ func dataSourceArmResourcesRead(d *schema.ResourceData, meta interface{}) error resources = append(resources, filterResource(resourcesResp.Values(), requiredTags)...) for resourcesResp.Response().NextLink != nil && *resourcesResp.Response().NextLink != "" { if err := resourcesResp.NextWithContext(ctx); err != nil { - return fmt.Errorf("loading Resource List: %s: %+v", err) + return fmt.Errorf("loading Resource List: %+v", err) } resources = append(resources, filterResource(resourcesResp.Values(), requiredTags)...) } From 197ec169bbac7b136f2696601cca9cd6ddd8f332 Mon Sep 17 00:00:00 2001 From: njucz Date: Thu, 21 May 2020 16:59:59 +0800 Subject: [PATCH 3/4] fix ci --- azurerm/internal/services/resource/data_source_resources.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/azurerm/internal/services/resource/data_source_resources.go b/azurerm/internal/services/resource/data_source_resources.go index d619afb7bf32..a3a9c46440d3 100644 --- a/azurerm/internal/services/resource/data_source_resources.go +++ b/azurerm/internal/services/resource/data_source_resources.go @@ -126,7 +126,8 @@ func dataSourceArmResourcesRead(d *schema.ResourceData, meta interface{}) error return nil } -func filterResource(inputs []resources.GenericResourceExpanded, requiredTags map[string]interface{}) (result []map[string]interface{}) { +func filterResource(inputs []resources.GenericResourceExpanded, requiredTags map[string]interface{}) []map[string]interface{} { + var result []map[string]interface{} for _, res := range inputs { if res.ID == nil { continue @@ -187,5 +188,5 @@ func filterResource(inputs []resources.GenericResourceExpanded, requiredTags map log.Printf("[DEBUG] azurerm_resources - resources %q (id: %q) skipped as a required tag is not set or has the wrong value.", *res.Name, *res.ID) } } - return + return result } From 4924b9de3ea3168d69d8edda3881370a1d7630ef Mon Sep 17 00:00:00 2001 From: WS <20408400+WodansSon@users.noreply.github.com> Date: Thu, 21 May 2020 12:33:55 -0700 Subject: [PATCH 4/4] Add link to bug in code --- azurerm/internal/services/resource/data_source_resources.go | 1 + 1 file changed, 1 insertion(+) diff --git a/azurerm/internal/services/resource/data_source_resources.go b/azurerm/internal/services/resource/data_source_resources.go index a3a9c46440d3..2330fc1a04ac 100644 --- a/azurerm/internal/services/resource/data_source_resources.go +++ b/azurerm/internal/services/resource/data_source_resources.go @@ -104,6 +104,7 @@ func dataSourceArmResourcesRead(d *schema.ResourceData, meta interface{}) error filter += v } + // Use List instead of listComplete because of bug in SDK: https://github.com/Azure/azure-sdk-for-go/issues/9510 resources := make([]map[string]interface{}, 0) resourcesResp, err := client.List(ctx, filter, "", nil) if err != nil {