Skip to content

Commit f9a643e

Browse files
Add cloud run service to iap iam policy (#13688) (#22399)
[upstream:0f3fb02ecf9610f33c87da4ab180284b1b029ffe] Signed-off-by: Modular Magician <[email protected]>
1 parent f216647 commit f9a643e

File tree

6 files changed

+1246
-2
lines changed

6 files changed

+1246
-2
lines changed

.changelog/13688.txt

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

google/provider/provider_mmv1_resources.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,7 @@ var generatedIAMDatasources = map[string]*schema.Resource{
456456
"google_healthcare_consent_store_iam_policy": tpgiamresource.DataSourceIamPolicy(healthcare.HealthcareConsentStoreIamSchema, healthcare.HealthcareConsentStoreIamUpdaterProducer),
457457
"google_iap_app_engine_service_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapAppEngineServiceIamSchema, iap.IapAppEngineServiceIamUpdaterProducer),
458458
"google_iap_app_engine_version_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapAppEngineVersionIamSchema, iap.IapAppEngineVersionIamUpdaterProducer),
459+
"google_iap_web_cloud_run_service_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapWebCloudRunServiceIamSchema, iap.IapWebCloudRunServiceIamUpdaterProducer),
459460
"google_iap_tunnel_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapTunnelIamSchema, iap.IapTunnelIamUpdaterProducer),
460461
"google_iap_tunnel_dest_group_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapTunnelDestGroupIamSchema, iap.IapTunnelDestGroupIamUpdaterProducer),
461462
"google_iap_tunnel_instance_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapTunnelInstanceIamSchema, iap.IapTunnelInstanceIamUpdaterProducer),
@@ -516,8 +517,8 @@ var handwrittenIAMDatasources = map[string]*schema.Resource{
516517

517518
// Resources
518519
// Generated resources: 586
519-
// Generated IAM resources: 294
520-
// Total generated resources: 880
520+
// Generated IAM resources: 297
521+
// Total generated resources: 883
521522
var generatedResources = map[string]*schema.Resource{
522523
"google_folder_access_approval_settings": accessapproval.ResourceAccessApprovalFolderSettings(),
523524
"google_organization_access_approval_settings": accessapproval.ResourceAccessApprovalOrganizationSettings(),
@@ -1066,6 +1067,9 @@ var generatedResources = map[string]*schema.Resource{
10661067
"google_iap_app_engine_version_iam_policy": tpgiamresource.ResourceIamPolicy(iap.IapAppEngineVersionIamSchema, iap.IapAppEngineVersionIamUpdaterProducer, iap.IapAppEngineVersionIdParseFunc),
10671068
"google_iap_brand": iap.ResourceIapBrand(),
10681069
"google_iap_client": iap.ResourceIapClient(),
1070+
"google_iap_web_cloud_run_service_iam_binding": tpgiamresource.ResourceIamBinding(iap.IapWebCloudRunServiceIamSchema, iap.IapWebCloudRunServiceIamUpdaterProducer, iap.IapWebCloudRunServiceIdParseFunc),
1071+
"google_iap_web_cloud_run_service_iam_member": tpgiamresource.ResourceIamMember(iap.IapWebCloudRunServiceIamSchema, iap.IapWebCloudRunServiceIamUpdaterProducer, iap.IapWebCloudRunServiceIdParseFunc),
1072+
"google_iap_web_cloud_run_service_iam_policy": tpgiamresource.ResourceIamPolicy(iap.IapWebCloudRunServiceIamSchema, iap.IapWebCloudRunServiceIamUpdaterProducer, iap.IapWebCloudRunServiceIdParseFunc),
10691073
"google_iap_settings": iap.ResourceIapSettings(),
10701074
"google_iap_tunnel_iam_binding": tpgiamresource.ResourceIamBinding(iap.IapTunnelIamSchema, iap.IapTunnelIamUpdaterProducer, iap.IapTunnelIdParseFunc),
10711075
"google_iap_tunnel_iam_member": tpgiamresource.ResourceIamMember(iap.IapTunnelIamSchema, iap.IapTunnelIamUpdaterProducer, iap.IapTunnelIdParseFunc),
Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
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/iap/CloudRunService.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 iap
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 IapWebCloudRunServiceIamSchema = map[string]*schema.Schema{
35+
"project": {
36+
Type: schema.TypeString,
37+
Computed: true,
38+
Optional: true,
39+
ForceNew: true,
40+
},
41+
"location": {
42+
Type: schema.TypeString,
43+
Computed: true,
44+
Optional: true,
45+
ForceNew: true,
46+
},
47+
"cloud_run_service_name": {
48+
Type: schema.TypeString,
49+
Required: true,
50+
ForceNew: true,
51+
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
52+
},
53+
}
54+
55+
type IapWebCloudRunServiceIamUpdater struct {
56+
project string
57+
location string
58+
cloudRunServiceName string
59+
d tpgresource.TerraformResourceData
60+
Config *transport_tpg.Config
61+
}
62+
63+
func IapWebCloudRunServiceIamUpdaterProducer(d tpgresource.TerraformResourceData, config *transport_tpg.Config) (tpgiamresource.ResourceIamUpdater, error) {
64+
values := make(map[string]string)
65+
66+
project, _ := tpgresource.GetProject(d, config)
67+
if project != "" {
68+
if err := d.Set("project", project); err != nil {
69+
return nil, fmt.Errorf("Error setting project: %s", err)
70+
}
71+
}
72+
values["project"] = project
73+
location, _ := tpgresource.GetLocation(d, config)
74+
if location != "" {
75+
if err := d.Set("location", location); err != nil {
76+
return nil, fmt.Errorf("Error setting location: %s", err)
77+
}
78+
}
79+
values["location"] = location
80+
if v, ok := d.GetOk("cloud_run_service_name"); ok {
81+
values["cloud_run_service_name"] = v.(string)
82+
}
83+
84+
// We may have gotten either a long or short name, so attempt to parse long name if possible
85+
m, err := tpgresource.GetImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/iap_web/cloud_run-(?P<location>[^/]+)/services/(?P<cloud_run_service_name>[^/]+)", "(?P<project>[^/]+)/(?P<location>[^/]+)/(?P<cloud_run_service_name>[^/]+)", "(?P<location>[^/]+)/(?P<cloud_run_service_name>[^/]+)", "(?P<cloud_run_service_name>[^/]+)"}, d, config, d.Get("cloud_run_service_name").(string))
86+
if err != nil {
87+
return nil, err
88+
}
89+
90+
for k, v := range m {
91+
values[k] = v
92+
}
93+
94+
u := &IapWebCloudRunServiceIamUpdater{
95+
project: values["project"],
96+
location: values["location"],
97+
cloudRunServiceName: values["cloud_run_service_name"],
98+
d: d,
99+
Config: config,
100+
}
101+
102+
if err := d.Set("project", u.project); err != nil {
103+
return nil, fmt.Errorf("Error setting project: %s", err)
104+
}
105+
if err := d.Set("location", u.location); err != nil {
106+
return nil, fmt.Errorf("Error setting location: %s", err)
107+
}
108+
if err := d.Set("cloud_run_service_name", u.GetResourceId()); err != nil {
109+
return nil, fmt.Errorf("Error setting cloud_run_service_name: %s", err)
110+
}
111+
112+
return u, nil
113+
}
114+
115+
func IapWebCloudRunServiceIdParseFunc(d *schema.ResourceData, config *transport_tpg.Config) error {
116+
values := make(map[string]string)
117+
118+
project, _ := tpgresource.GetProject(d, config)
119+
if project != "" {
120+
values["project"] = project
121+
}
122+
123+
location, _ := tpgresource.GetLocation(d, config)
124+
if location != "" {
125+
values["location"] = location
126+
}
127+
128+
m, err := tpgresource.GetImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/iap_web/cloud_run-(?P<location>[^/]+)/services/(?P<cloud_run_service_name>[^/]+)", "(?P<project>[^/]+)/(?P<location>[^/]+)/(?P<cloud_run_service_name>[^/]+)", "(?P<location>[^/]+)/(?P<cloud_run_service_name>[^/]+)", "(?P<cloud_run_service_name>[^/]+)"}, d, config, d.Id())
129+
if err != nil {
130+
return err
131+
}
132+
133+
for k, v := range m {
134+
values[k] = v
135+
}
136+
137+
u := &IapWebCloudRunServiceIamUpdater{
138+
project: values["project"],
139+
location: values["location"],
140+
cloudRunServiceName: values["cloud_run_service_name"],
141+
d: d,
142+
Config: config,
143+
}
144+
if err := d.Set("cloud_run_service_name", u.GetResourceId()); err != nil {
145+
return fmt.Errorf("Error setting cloud_run_service_name: %s", err)
146+
}
147+
d.SetId(u.GetResourceId())
148+
return nil
149+
}
150+
151+
func (u *IapWebCloudRunServiceIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
152+
url, err := u.qualifyWebCloudRunServiceUrl("getIamPolicy")
153+
if err != nil {
154+
return nil, err
155+
}
156+
157+
project, err := tpgresource.GetProject(u.d, u.Config)
158+
if err != nil {
159+
return nil, err
160+
}
161+
var obj map[string]interface{}
162+
obj = map[string]interface{}{
163+
"options": map[string]interface{}{
164+
"requestedPolicyVersion": tpgiamresource.IamPolicyVersion,
165+
},
166+
}
167+
168+
userAgent, err := tpgresource.GenerateUserAgentString(u.d, u.Config.UserAgent)
169+
if err != nil {
170+
return nil, err
171+
}
172+
173+
policy, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
174+
Config: u.Config,
175+
Method: "POST",
176+
Project: project,
177+
RawURL: url,
178+
UserAgent: userAgent,
179+
Body: obj,
180+
})
181+
if err != nil {
182+
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
183+
}
184+
185+
out := &cloudresourcemanager.Policy{}
186+
err = tpgresource.Convert(policy, out)
187+
if err != nil {
188+
return nil, errwrap.Wrapf("Cannot convert a policy to a resource manager policy: {{err}}", err)
189+
}
190+
191+
return out, nil
192+
}
193+
194+
func (u *IapWebCloudRunServiceIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
195+
json, err := tpgresource.ConvertToMap(policy)
196+
if err != nil {
197+
return err
198+
}
199+
200+
obj := make(map[string]interface{})
201+
obj["policy"] = json
202+
203+
url, err := u.qualifyWebCloudRunServiceUrl("setIamPolicy")
204+
if err != nil {
205+
return err
206+
}
207+
project, err := tpgresource.GetProject(u.d, u.Config)
208+
if err != nil {
209+
return err
210+
}
211+
212+
userAgent, err := tpgresource.GenerateUserAgentString(u.d, u.Config.UserAgent)
213+
if err != nil {
214+
return err
215+
}
216+
217+
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
218+
Config: u.Config,
219+
Method: "POST",
220+
Project: project,
221+
RawURL: url,
222+
UserAgent: userAgent,
223+
Body: obj,
224+
Timeout: u.d.Timeout(schema.TimeoutCreate),
225+
})
226+
if err != nil {
227+
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
228+
}
229+
230+
return nil
231+
}
232+
233+
func (u *IapWebCloudRunServiceIamUpdater) qualifyWebCloudRunServiceUrl(methodIdentifier string) (string, error) {
234+
urlTemplate := fmt.Sprintf("{{IapBasePath}}%s:%s", fmt.Sprintf("projects/%s/iap_web/cloud_run-%s/services/%s", u.project, u.location, u.cloudRunServiceName), methodIdentifier)
235+
url, err := tpgresource.ReplaceVars(u.d, u.Config, urlTemplate)
236+
if err != nil {
237+
return "", err
238+
}
239+
return url, nil
240+
}
241+
242+
func (u *IapWebCloudRunServiceIamUpdater) GetResourceId() string {
243+
return fmt.Sprintf("projects/%s/iap_web/cloud_run-%s/services/%s", u.project, u.location, u.cloudRunServiceName)
244+
}
245+
246+
func (u *IapWebCloudRunServiceIamUpdater) GetMutexKey() string {
247+
return fmt.Sprintf("iam-iap-webcloudrunservice-%s", u.GetResourceId())
248+
}
249+
250+
func (u *IapWebCloudRunServiceIamUpdater) DescribeResource() string {
251+
return fmt.Sprintf("iap webcloudrunservice %q", u.GetResourceId())
252+
}

0 commit comments

Comments
 (0)