Skip to content

Commit 43e1076

Browse files
feat: implementation for iam resources on google_iam_workforce_pool (#13861) (#23784)
[upstream:a7baf6faa04c109b5c08e0d61d062a155425cf22] Signed-off-by: Modular Magician <magic-modules@google.com>
1 parent 6dc7c85 commit 43e1076

File tree

7 files changed

+674
-6
lines changed

7 files changed

+674
-6
lines changed

.changelog/13861.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
```release-note:new-resource
2+
`google_iam_workforce_pool_iam_member`
3+
```
4+
5+
```release-note:new-resource
6+
`google_iam_workforce_pool_iam_policy`
7+
```
8+
9+
```release-note:new-resource
10+
`google_iam_workforce_pool_iam_binding`
11+
```

google/provider/provider_mmv1_resources.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,7 @@ var generatedIAMDatasources = map[string]*schema.Resource{
491491
"google_gke_hub_feature_iam_policy": tpgiamresource.DataSourceIamPolicy(gkehub2.GKEHub2FeatureIamSchema, gkehub2.GKEHub2FeatureIamUpdaterProducer),
492492
"google_gke_hub_scope_iam_policy": tpgiamresource.DataSourceIamPolicy(gkehub2.GKEHub2ScopeIamSchema, gkehub2.GKEHub2ScopeIamUpdaterProducer),
493493
"google_healthcare_consent_store_iam_policy": tpgiamresource.DataSourceIamPolicy(healthcare.HealthcareConsentStoreIamSchema, healthcare.HealthcareConsentStoreIamUpdaterProducer),
494+
"google_iam_workforce_pool_iam_policy": tpgiamresource.DataSourceIamPolicy(iamworkforcepool.IAMWorkforcePoolWorkforcePoolIamSchema, iamworkforcepool.IAMWorkforcePoolWorkforcePoolIamUpdaterProducer),
494495
"google_iap_app_engine_service_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapAppEngineServiceIamSchema, iap.IapAppEngineServiceIamUpdaterProducer),
495496
"google_iap_app_engine_version_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapAppEngineVersionIamSchema, iap.IapAppEngineVersionIamUpdaterProducer),
496497
"google_iap_web_cloud_run_service_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapWebCloudRunServiceIamSchema, iap.IapWebCloudRunServiceIamUpdaterProducer),
@@ -554,8 +555,8 @@ var handwrittenIAMDatasources = map[string]*schema.Resource{
554555

555556
// Resources
556557
// Generated resources: 642
557-
// Generated IAM resources: 309
558-
// Total generated resources: 951
558+
// Generated IAM resources: 312
559+
// Total generated resources: 954
559560
var generatedResources = map[string]*schema.Resource{
560561
"google_folder_access_approval_settings": accessapproval.ResourceAccessApprovalFolderSettings(),
561562
"google_organization_access_approval_settings": accessapproval.ResourceAccessApprovalOrganizationSettings(),
@@ -1144,6 +1145,9 @@ var generatedResources = map[string]*schema.Resource{
11441145
"google_iam_oauth_client": iamworkforcepool.ResourceIAMWorkforcePoolOauthClient(),
11451146
"google_iam_oauth_client_credential": iamworkforcepool.ResourceIAMWorkforcePoolOauthClientCredential(),
11461147
"google_iam_workforce_pool": iamworkforcepool.ResourceIAMWorkforcePoolWorkforcePool(),
1148+
"google_iam_workforce_pool_iam_binding": tpgiamresource.ResourceIamBinding(iamworkforcepool.IAMWorkforcePoolWorkforcePoolIamSchema, iamworkforcepool.IAMWorkforcePoolWorkforcePoolIamUpdaterProducer, iamworkforcepool.IAMWorkforcePoolWorkforcePoolIdParseFunc),
1149+
"google_iam_workforce_pool_iam_member": tpgiamresource.ResourceIamMember(iamworkforcepool.IAMWorkforcePoolWorkforcePoolIamSchema, iamworkforcepool.IAMWorkforcePoolWorkforcePoolIamUpdaterProducer, iamworkforcepool.IAMWorkforcePoolWorkforcePoolIdParseFunc),
1150+
"google_iam_workforce_pool_iam_policy": tpgiamresource.ResourceIamPolicy(iamworkforcepool.IAMWorkforcePoolWorkforcePoolIamSchema, iamworkforcepool.IAMWorkforcePoolWorkforcePoolIamUpdaterProducer, iamworkforcepool.IAMWorkforcePoolWorkforcePoolIdParseFunc),
11471151
"google_iam_workforce_pool_provider": iamworkforcepool.ResourceIAMWorkforcePoolWorkforcePoolProvider(),
11481152
"google_iam_workforce_pool_provider_key": iamworkforcepool.ResourceIAMWorkforcePoolWorkforcePoolProviderKey(),
11491153
"google_iap_app_engine_service_iam_binding": tpgiamresource.ResourceIamBinding(iap.IapAppEngineServiceIamSchema, iap.IapAppEngineServiceIamUpdaterProducer, iap.IapAppEngineServiceIdParseFunc),
Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
4+
// ----------------------------------------------------------------------------
5+
//
6+
// *** AUTO GENERATED CODE *** Type: MMv1 ***
7+
//
8+
// ----------------------------------------------------------------------------
9+
//
10+
// This code is generated by Magic Modules using the following:
11+
//
12+
// Configuration: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/products/iamworkforcepool/WorkforcePool.yaml
13+
// Template: https://github.com/GoogleCloudPlatform/magic-modules/tree/main/mmv1/templates/terraform/iam_policy.go.tmpl
14+
//
15+
// DO NOT EDIT this file directly. Any changes made to this file will be
16+
// overwritten during the next generation cycle.
17+
//
18+
// ----------------------------------------------------------------------------
19+
20+
package iamworkforcepool
21+
22+
import (
23+
"fmt"
24+
25+
"github.com/hashicorp/errwrap"
26+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
27+
"google.golang.org/api/cloudresourcemanager/v1"
28+
29+
"github.com/hashicorp/terraform-provider-google/google/tpgiamresource"
30+
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
31+
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
32+
)
33+
34+
var IAMWorkforcePoolWorkforcePoolIamSchema = map[string]*schema.Schema{
35+
"location": {
36+
Type: schema.TypeString,
37+
Computed: true,
38+
Optional: true,
39+
ForceNew: true,
40+
},
41+
"workforce_pool_id": {
42+
Type: schema.TypeString,
43+
Required: true,
44+
ForceNew: true,
45+
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
46+
},
47+
}
48+
49+
type IAMWorkforcePoolWorkforcePoolIamUpdater struct {
50+
location string
51+
workforcePoolId string
52+
d tpgresource.TerraformResourceData
53+
Config *transport_tpg.Config
54+
}
55+
56+
func IAMWorkforcePoolWorkforcePoolIamUpdaterProducer(d tpgresource.TerraformResourceData, config *transport_tpg.Config) (tpgiamresource.ResourceIamUpdater, error) {
57+
values := make(map[string]string)
58+
59+
location, _ := tpgresource.GetLocation(d, config)
60+
if location != "" {
61+
if err := d.Set("location", location); err != nil {
62+
return nil, fmt.Errorf("Error setting location: %s", err)
63+
}
64+
}
65+
values["location"] = location
66+
if v, ok := d.GetOk("workforce_pool_id"); ok {
67+
values["workforce_pool_id"] = v.(string)
68+
}
69+
70+
// We may have gotten either a long or short name, so attempt to parse long name if possible
71+
m, err := tpgresource.GetImportIdQualifiers([]string{"locations/(?P<location>[^/]+)/workforcePools/(?P<workforce_pool_id>[^/]+)", "(?P<location>[^/]+)/(?P<workforce_pool_id>[^/]+)", "(?P<workforce_pool_id>[^/]+)"}, d, config, d.Get("workforce_pool_id").(string))
72+
if err != nil {
73+
return nil, err
74+
}
75+
76+
for k, v := range m {
77+
values[k] = v
78+
}
79+
80+
u := &IAMWorkforcePoolWorkforcePoolIamUpdater{
81+
location: values["location"],
82+
workforcePoolId: values["workforce_pool_id"],
83+
d: d,
84+
Config: config,
85+
}
86+
87+
if err := d.Set("location", u.location); err != nil {
88+
return nil, fmt.Errorf("Error setting location: %s", err)
89+
}
90+
if err := d.Set("workforce_pool_id", u.GetResourceId()); err != nil {
91+
return nil, fmt.Errorf("Error setting workforce_pool_id: %s", err)
92+
}
93+
94+
return u, nil
95+
}
96+
97+
func IAMWorkforcePoolWorkforcePoolIdParseFunc(d *schema.ResourceData, config *transport_tpg.Config) error {
98+
values := make(map[string]string)
99+
100+
location, _ := tpgresource.GetLocation(d, config)
101+
if location != "" {
102+
values["location"] = location
103+
}
104+
105+
m, err := tpgresource.GetImportIdQualifiers([]string{"locations/(?P<location>[^/]+)/workforcePools/(?P<workforce_pool_id>[^/]+)", "(?P<location>[^/]+)/(?P<workforce_pool_id>[^/]+)", "(?P<workforce_pool_id>[^/]+)"}, d, config, d.Id())
106+
if err != nil {
107+
return err
108+
}
109+
110+
for k, v := range m {
111+
values[k] = v
112+
}
113+
114+
u := &IAMWorkforcePoolWorkforcePoolIamUpdater{
115+
location: values["location"],
116+
workforcePoolId: values["workforce_pool_id"],
117+
d: d,
118+
Config: config,
119+
}
120+
if err := d.Set("workforce_pool_id", u.GetResourceId()); err != nil {
121+
return fmt.Errorf("Error setting workforce_pool_id: %s", err)
122+
}
123+
d.SetId(u.GetResourceId())
124+
return nil
125+
}
126+
127+
func (u *IAMWorkforcePoolWorkforcePoolIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
128+
url, err := u.qualifyWorkforcePoolUrl("getIamPolicy")
129+
if err != nil {
130+
return nil, err
131+
}
132+
133+
var obj map[string]interface{}
134+
135+
userAgent, err := tpgresource.GenerateUserAgentString(u.d, u.Config.UserAgent)
136+
if err != nil {
137+
return nil, err
138+
}
139+
140+
policy, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
141+
Config: u.Config,
142+
Method: "POST",
143+
RawURL: url,
144+
UserAgent: userAgent,
145+
Body: obj,
146+
})
147+
if err != nil {
148+
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
149+
}
150+
151+
out := &cloudresourcemanager.Policy{}
152+
err = tpgresource.Convert(policy, out)
153+
if err != nil {
154+
return nil, errwrap.Wrapf("Cannot convert a policy to a resource manager policy: {{err}}", err)
155+
}
156+
157+
return out, nil
158+
}
159+
160+
func (u *IAMWorkforcePoolWorkforcePoolIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
161+
json, err := tpgresource.ConvertToMap(policy)
162+
if err != nil {
163+
return err
164+
}
165+
166+
obj := make(map[string]interface{})
167+
obj["policy"] = json
168+
169+
url, err := u.qualifyWorkforcePoolUrl("setIamPolicy")
170+
if err != nil {
171+
return err
172+
}
173+
174+
userAgent, err := tpgresource.GenerateUserAgentString(u.d, u.Config.UserAgent)
175+
if err != nil {
176+
return err
177+
}
178+
179+
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
180+
Config: u.Config,
181+
Method: "POST",
182+
RawURL: url,
183+
UserAgent: userAgent,
184+
Body: obj,
185+
Timeout: u.d.Timeout(schema.TimeoutCreate),
186+
})
187+
if err != nil {
188+
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
189+
}
190+
191+
return nil
192+
}
193+
194+
func (u *IAMWorkforcePoolWorkforcePoolIamUpdater) qualifyWorkforcePoolUrl(methodIdentifier string) (string, error) {
195+
urlTemplate := fmt.Sprintf("{{IAMWorkforcePoolBasePath}}%s:%s", fmt.Sprintf("locations/%s/workforcePools/%s", u.location, u.workforcePoolId), methodIdentifier)
196+
url, err := tpgresource.ReplaceVars(u.d, u.Config, urlTemplate)
197+
if err != nil {
198+
return "", err
199+
}
200+
return url, nil
201+
}
202+
203+
func (u *IAMWorkforcePoolWorkforcePoolIamUpdater) GetResourceId() string {
204+
return fmt.Sprintf("locations/%s/workforcePools/%s", u.location, u.workforcePoolId)
205+
}
206+
207+
func (u *IAMWorkforcePoolWorkforcePoolIamUpdater) GetMutexKey() string {
208+
return fmt.Sprintf("iam-iamworkforcepool-workforcepool-%s", u.GetResourceId())
209+
}
210+
211+
func (u *IAMWorkforcePoolWorkforcePoolIamUpdater) DescribeResource() string {
212+
return fmt.Sprintf("iamworkforcepool workforcepool %q", u.GetResourceId())
213+
}

0 commit comments

Comments
 (0)