|
5 | 5 | package resourcemanager |
6 | 6 |
|
7 | 7 | import ( |
| 8 | + "context" |
8 | 9 | "fmt" |
9 | 10 | "strings" |
10 | 11 |
|
11 | 12 | "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" |
12 | 13 | "github.com/hashicorp/terraform-provider-google/google/tpgresource" |
13 | 14 | transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport" |
| 15 | + "google.golang.org/api/iam/v1" |
14 | 16 | ) |
15 | 17 |
|
16 | 18 | func DataSourceGoogleServiceAccounts() *schema.Resource { |
@@ -75,25 +77,29 @@ func datasourceGoogleServiceAccountsRead(d *schema.ResourceData, meta interface{ |
75 | 77 |
|
76 | 78 | accounts := make([]map[string]interface{}, 0) |
77 | 79 |
|
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 | + }) |
82 | 96 |
|
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) |
93 | 99 | } |
94 | 100 |
|
95 | 101 | 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) |
97 | 103 | } |
98 | 104 |
|
99 | 105 | d.SetId(fmt.Sprintf( |
|
0 commit comments