Skip to content

Commit 62fdb1c

Browse files
Add missing pagination for data source google_service_accounts (#12763) (#9094)
[upstream:5b7326c0b2a239b8ae35d01446c7f73c2adf5efe] Signed-off-by: Modular Magician <[email protected]>
1 parent 8a98063 commit 62fdb1c

File tree

2 files changed

+24
-15
lines changed

2 files changed

+24
-15
lines changed

.changelog/12763.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
iam: fixed missing result by adding pagination for data source `google_service_accounts`.
3+
```

google-beta/services/resourcemanager/data_source_google_service_accounts.go

+21-15
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
package resourcemanager
66

77
import (
8+
"context"
89
"fmt"
910
"strings"
1011

1112
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1213
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
1314
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
15+
"google.golang.org/api/iam/v1"
1416
)
1517

1618
func DataSourceGoogleServiceAccounts() *schema.Resource {
@@ -75,25 +77,29 @@ func datasourceGoogleServiceAccountsRead(d *schema.ResourceData, meta interface{
7577

7678
accounts := make([]map[string]interface{}, 0)
7779

78-
accountList, err := config.NewIamClient(userAgent).Projects.ServiceAccounts.List("projects/" + project).Do()
79-
if err != nil {
80-
return transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("Service accounts: %s", project))
81-
}
80+
request := config.NewIamClient(userAgent).Projects.ServiceAccounts.List("projects/" + project)
81+
82+
err = request.Pages(context.Background(), func(accountList *iam.ListServiceAccountsResponse) error {
83+
for _, account := range accountList.Accounts {
84+
accounts = append(accounts, map[string]interface{}{
85+
"account_id": strings.Split(account.Email, "@")[0],
86+
"disabled": account.Disabled,
87+
"email": account.Email,
88+
"display_name": account.DisplayName,
89+
"member": "serviceAccount:" + account.Email,
90+
"name": account.Name,
91+
"unique_id": account.UniqueId,
92+
})
93+
}
94+
return nil
95+
})
8296

83-
for _, account := range accountList.Accounts {
84-
accounts = append(accounts, map[string]interface{}{
85-
"account_id": strings.Split(account.Email, "@")[0],
86-
"disabled": account.Disabled,
87-
"email": account.Email,
88-
"display_name": account.DisplayName,
89-
"member": "serviceAccount:" + account.Email,
90-
"name": account.Name,
91-
"unique_id": account.UniqueId,
92-
})
97+
if err != nil {
98+
return fmt.Errorf("Error retrieving service accounts: %s", err)
9399
}
94100

95101
if err := d.Set("accounts", accounts); err != nil {
96-
return fmt.Errorf("Error retrieving service accounts: %s", err)
102+
return fmt.Errorf("Error setting service accounts: %s", err)
97103
}
98104

99105
d.SetId(fmt.Sprintf(

0 commit comments

Comments
 (0)