From db3a571a1f6c99fb180409c69ef324844fccea15 Mon Sep 17 00:00:00 2001 From: The Magician Date: Fri, 17 Jan 2025 20:27:39 -0800 Subject: [PATCH] Add missing pagination for data source google_service_accounts (#12763) (#20966) [upstream:5b7326c0b2a239b8ae35d01446c7f73c2adf5efe] Signed-off-by: Modular Magician --- .changelog/12763.txt | 3 ++ .../data_source_google_service_accounts.go | 36 +++++++++++-------- 2 files changed, 24 insertions(+), 15 deletions(-) create mode 100644 .changelog/12763.txt diff --git a/.changelog/12763.txt b/.changelog/12763.txt new file mode 100644 index 00000000000..818feef48d5 --- /dev/null +++ b/.changelog/12763.txt @@ -0,0 +1,3 @@ +```release-note:bug +iam: fixed missing result by adding pagination for data source `google_service_accounts`. +``` \ No newline at end of file diff --git a/google/services/resourcemanager/data_source_google_service_accounts.go b/google/services/resourcemanager/data_source_google_service_accounts.go index 38e19612822..917e000a24a 100644 --- a/google/services/resourcemanager/data_source_google_service_accounts.go +++ b/google/services/resourcemanager/data_source_google_service_accounts.go @@ -5,12 +5,14 @@ package resourcemanager import ( + "context" "fmt" "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-google/google/tpgresource" transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport" + "google.golang.org/api/iam/v1" ) func DataSourceGoogleServiceAccounts() *schema.Resource { @@ -75,25 +77,29 @@ func datasourceGoogleServiceAccountsRead(d *schema.ResourceData, meta interface{ accounts := make([]map[string]interface{}, 0) - accountList, err := config.NewIamClient(userAgent).Projects.ServiceAccounts.List("projects/" + project).Do() - if err != nil { - return transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("Service accounts: %s", project)) - } + request := config.NewIamClient(userAgent).Projects.ServiceAccounts.List("projects/" + project) + + err = request.Pages(context.Background(), func(accountList *iam.ListServiceAccountsResponse) error { + for _, account := range accountList.Accounts { + accounts = append(accounts, map[string]interface{}{ + "account_id": strings.Split(account.Email, "@")[0], + "disabled": account.Disabled, + "email": account.Email, + "display_name": account.DisplayName, + "member": "serviceAccount:" + account.Email, + "name": account.Name, + "unique_id": account.UniqueId, + }) + } + return nil + }) - for _, account := range accountList.Accounts { - accounts = append(accounts, map[string]interface{}{ - "account_id": strings.Split(account.Email, "@")[0], - "disabled": account.Disabled, - "email": account.Email, - "display_name": account.DisplayName, - "member": "serviceAccount:" + account.Email, - "name": account.Name, - "unique_id": account.UniqueId, - }) + if err != nil { + return fmt.Errorf("Error retrieving service accounts: %s", err) } if err := d.Set("accounts", accounts); err != nil { - return fmt.Errorf("Error retrieving service accounts: %s", err) + return fmt.Errorf("Error setting service accounts: %s", err) } d.SetId(fmt.Sprintf(