Skip to content

Commit d5be932

Browse files
Create resource definition for IAP Tunnel DestGroup (#10064) (#17533)
[upstream:030e79065affbdfc31f63b405ee004dedf253133] Signed-off-by: Modular Magician <[email protected]>
1 parent 83e6998 commit d5be932

11 files changed

+1987
-3
lines changed

.changelog/10064.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
`google_iap_tunnel_dest_group`
3+
```

google/provider/provider_mmv1_resources.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ var generatedIAMDatasources = map[string]*schema.Resource{
338338
"google_iap_app_engine_service_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapAppEngineServiceIamSchema, iap.IapAppEngineServiceIamUpdaterProducer),
339339
"google_iap_app_engine_version_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapAppEngineVersionIamSchema, iap.IapAppEngineVersionIamUpdaterProducer),
340340
"google_iap_tunnel_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapTunnelIamSchema, iap.IapTunnelIamUpdaterProducer),
341+
"google_iap_tunnel_dest_group_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapTunnelDestGroupIamSchema, iap.IapTunnelDestGroupIamUpdaterProducer),
341342
"google_iap_tunnel_instance_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapTunnelInstanceIamSchema, iap.IapTunnelInstanceIamUpdaterProducer),
342343
"google_iap_web_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapWebIamSchema, iap.IapWebIamUpdaterProducer),
343344
"google_iap_web_backend_service_iam_policy": tpgiamresource.DataSourceIamPolicy(iap.IapWebBackendServiceIamSchema, iap.IapWebBackendServiceIamUpdaterProducer),
@@ -389,9 +390,9 @@ var handwrittenIAMDatasources = map[string]*schema.Resource{
389390
}
390391

391392
// Resources
392-
// Generated resources: 390
393-
// Generated IAM resources: 231
394-
// Total generated resources: 621
393+
// Generated resources: 391
394+
// Generated IAM resources: 234
395+
// Total generated resources: 625
395396
var generatedResources = map[string]*schema.Resource{
396397
"google_folder_access_approval_settings": accessapproval.ResourceAccessApprovalFolderSettings(),
397398
"google_organization_access_approval_settings": accessapproval.ResourceAccessApprovalOrganizationSettings(),
@@ -802,6 +803,10 @@ var generatedResources = map[string]*schema.Resource{
802803
"google_iap_tunnel_iam_binding": tpgiamresource.ResourceIamBinding(iap.IapTunnelIamSchema, iap.IapTunnelIamUpdaterProducer, iap.IapTunnelIdParseFunc),
803804
"google_iap_tunnel_iam_member": tpgiamresource.ResourceIamMember(iap.IapTunnelIamSchema, iap.IapTunnelIamUpdaterProducer, iap.IapTunnelIdParseFunc),
804805
"google_iap_tunnel_iam_policy": tpgiamresource.ResourceIamPolicy(iap.IapTunnelIamSchema, iap.IapTunnelIamUpdaterProducer, iap.IapTunnelIdParseFunc),
806+
"google_iap_tunnel_dest_group": iap.ResourceIapTunnelDestGroup(),
807+
"google_iap_tunnel_dest_group_iam_binding": tpgiamresource.ResourceIamBinding(iap.IapTunnelDestGroupIamSchema, iap.IapTunnelDestGroupIamUpdaterProducer, iap.IapTunnelDestGroupIdParseFunc),
808+
"google_iap_tunnel_dest_group_iam_member": tpgiamresource.ResourceIamMember(iap.IapTunnelDestGroupIamSchema, iap.IapTunnelDestGroupIamUpdaterProducer, iap.IapTunnelDestGroupIdParseFunc),
809+
"google_iap_tunnel_dest_group_iam_policy": tpgiamresource.ResourceIamPolicy(iap.IapTunnelDestGroupIamSchema, iap.IapTunnelDestGroupIamUpdaterProducer, iap.IapTunnelDestGroupIdParseFunc),
805810
"google_iap_tunnel_instance_iam_binding": tpgiamresource.ResourceIamBinding(iap.IapTunnelInstanceIamSchema, iap.IapTunnelInstanceIamUpdaterProducer, iap.IapTunnelInstanceIdParseFunc),
806811
"google_iap_tunnel_instance_iam_member": tpgiamresource.ResourceIamMember(iap.IapTunnelInstanceIamSchema, iap.IapTunnelInstanceIamUpdaterProducer, iap.IapTunnelInstanceIdParseFunc),
807812
"google_iap_tunnel_instance_iam_policy": tpgiamresource.ResourceIamPolicy(iap.IapTunnelInstanceIamSchema, iap.IapTunnelInstanceIamUpdaterProducer, iap.IapTunnelInstanceIdParseFunc),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
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 file is automatically generated by Magic Modules and manual
11+
// changes will be clobbered when the file is regenerated.
12+
//
13+
// Please read more about how to change this file in
14+
// .github/CONTRIBUTING.md.
15+
//
16+
// ----------------------------------------------------------------------------
17+
18+
package iap
19+
20+
import (
21+
"fmt"
22+
23+
"github.com/hashicorp/errwrap"
24+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
25+
"google.golang.org/api/cloudresourcemanager/v1"
26+
27+
"github.com/hashicorp/terraform-provider-google/google/tpgiamresource"
28+
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
29+
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
30+
)
31+
32+
var IapTunnelDestGroupIamSchema = map[string]*schema.Schema{
33+
"project": {
34+
Type: schema.TypeString,
35+
Computed: true,
36+
Optional: true,
37+
ForceNew: true,
38+
},
39+
"region": {
40+
Type: schema.TypeString,
41+
Computed: true,
42+
Optional: true,
43+
ForceNew: true,
44+
},
45+
"dest_group": {
46+
Type: schema.TypeString,
47+
Required: true,
48+
ForceNew: true,
49+
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
50+
},
51+
}
52+
53+
type IapTunnelDestGroupIamUpdater struct {
54+
project string
55+
region string
56+
destGroup string
57+
d tpgresource.TerraformResourceData
58+
Config *transport_tpg.Config
59+
}
60+
61+
func IapTunnelDestGroupIamUpdaterProducer(d tpgresource.TerraformResourceData, config *transport_tpg.Config) (tpgiamresource.ResourceIamUpdater, error) {
62+
values := make(map[string]string)
63+
64+
project, _ := tpgresource.GetProject(d, config)
65+
if project != "" {
66+
if err := d.Set("project", project); err != nil {
67+
return nil, fmt.Errorf("Error setting project: %s", err)
68+
}
69+
}
70+
values["project"] = project
71+
region, _ := tpgresource.GetRegion(d, config)
72+
if region != "" {
73+
if err := d.Set("region", region); err != nil {
74+
return nil, fmt.Errorf("Error setting region: %s", err)
75+
}
76+
}
77+
values["region"] = region
78+
if v, ok := d.GetOk("dest_group"); ok {
79+
values["dest_group"] = v.(string)
80+
}
81+
82+
// We may have gotten either a long or short name, so attempt to parse long name if possible
83+
m, err := tpgresource.GetImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/iap_tunnel/locations/(?P<region>[^/]+)/destGroups/(?P<dest_group>[^/]+)", "(?P<project>[^/]+)/iap_tunnel/locations/(?P<region>[^/]+)/destGroups/(?P<dest_group>[^/]+)", "(?P<project>[^/]+)/(?P<region>[^/]+)/(?P<dest_group>[^/]+)", "(?P<region>[^/]+)/(?P<dest_group>[^/]+)", "(?P<dest_group>[^/]+)"}, d, config, d.Get("dest_group").(string))
84+
if err != nil {
85+
return nil, err
86+
}
87+
88+
for k, v := range m {
89+
values[k] = v
90+
}
91+
92+
u := &IapTunnelDestGroupIamUpdater{
93+
project: values["project"],
94+
region: values["region"],
95+
destGroup: values["dest_group"],
96+
d: d,
97+
Config: config,
98+
}
99+
100+
if err := d.Set("project", u.project); err != nil {
101+
return nil, fmt.Errorf("Error setting project: %s", err)
102+
}
103+
if err := d.Set("region", u.region); err != nil {
104+
return nil, fmt.Errorf("Error setting region: %s", err)
105+
}
106+
if err := d.Set("dest_group", u.GetResourceId()); err != nil {
107+
return nil, fmt.Errorf("Error setting dest_group: %s", err)
108+
}
109+
110+
return u, nil
111+
}
112+
113+
func IapTunnelDestGroupIdParseFunc(d *schema.ResourceData, config *transport_tpg.Config) error {
114+
values := make(map[string]string)
115+
116+
project, _ := tpgresource.GetProject(d, config)
117+
if project != "" {
118+
values["project"] = project
119+
}
120+
121+
region, _ := tpgresource.GetRegion(d, config)
122+
if region != "" {
123+
values["region"] = region
124+
}
125+
126+
m, err := tpgresource.GetImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/iap_tunnel/locations/(?P<region>[^/]+)/destGroups/(?P<dest_group>[^/]+)", "(?P<project>[^/]+)/iap_tunnel/locations/(?P<region>[^/]+)/destGroups/(?P<dest_group>[^/]+)", "(?P<project>[^/]+)/(?P<region>[^/]+)/(?P<dest_group>[^/]+)", "(?P<region>[^/]+)/(?P<dest_group>[^/]+)", "(?P<dest_group>[^/]+)"}, d, config, d.Id())
127+
if err != nil {
128+
return err
129+
}
130+
131+
for k, v := range m {
132+
values[k] = v
133+
}
134+
135+
u := &IapTunnelDestGroupIamUpdater{
136+
project: values["project"],
137+
region: values["region"],
138+
destGroup: values["dest_group"],
139+
d: d,
140+
Config: config,
141+
}
142+
if err := d.Set("dest_group", u.GetResourceId()); err != nil {
143+
return fmt.Errorf("Error setting dest_group: %s", err)
144+
}
145+
d.SetId(u.GetResourceId())
146+
return nil
147+
}
148+
149+
func (u *IapTunnelDestGroupIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
150+
url, err := u.qualifyTunnelDestGroupUrl("getIamPolicy")
151+
if err != nil {
152+
return nil, err
153+
}
154+
155+
project, err := tpgresource.GetProject(u.d, u.Config)
156+
if err != nil {
157+
return nil, err
158+
}
159+
var obj map[string]interface{}
160+
obj = map[string]interface{}{
161+
"options": map[string]interface{}{
162+
"requestedPolicyVersion": tpgiamresource.IamPolicyVersion,
163+
},
164+
}
165+
166+
userAgent, err := tpgresource.GenerateUserAgentString(u.d, u.Config.UserAgent)
167+
if err != nil {
168+
return nil, err
169+
}
170+
171+
policy, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
172+
Config: u.Config,
173+
Method: "POST",
174+
Project: project,
175+
RawURL: url,
176+
UserAgent: userAgent,
177+
Body: obj,
178+
})
179+
if err != nil {
180+
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
181+
}
182+
183+
out := &cloudresourcemanager.Policy{}
184+
err = tpgresource.Convert(policy, out)
185+
if err != nil {
186+
return nil, errwrap.Wrapf("Cannot convert a policy to a resource manager policy: {{err}}", err)
187+
}
188+
189+
return out, nil
190+
}
191+
192+
func (u *IapTunnelDestGroupIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
193+
json, err := tpgresource.ConvertToMap(policy)
194+
if err != nil {
195+
return err
196+
}
197+
198+
obj := make(map[string]interface{})
199+
obj["policy"] = json
200+
201+
url, err := u.qualifyTunnelDestGroupUrl("setIamPolicy")
202+
if err != nil {
203+
return err
204+
}
205+
project, err := tpgresource.GetProject(u.d, u.Config)
206+
if err != nil {
207+
return err
208+
}
209+
210+
userAgent, err := tpgresource.GenerateUserAgentString(u.d, u.Config.UserAgent)
211+
if err != nil {
212+
return err
213+
}
214+
215+
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
216+
Config: u.Config,
217+
Method: "POST",
218+
Project: project,
219+
RawURL: url,
220+
UserAgent: userAgent,
221+
Body: obj,
222+
Timeout: u.d.Timeout(schema.TimeoutCreate),
223+
})
224+
if err != nil {
225+
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
226+
}
227+
228+
return nil
229+
}
230+
231+
func (u *IapTunnelDestGroupIamUpdater) qualifyTunnelDestGroupUrl(methodIdentifier string) (string, error) {
232+
urlTemplate := fmt.Sprintf("{{IapBasePath}}%s:%s", fmt.Sprintf("projects/%s/iap_tunnel/locations/%s/destGroups/%s", u.project, u.region, u.destGroup), methodIdentifier)
233+
url, err := tpgresource.ReplaceVars(u.d, u.Config, urlTemplate)
234+
if err != nil {
235+
return "", err
236+
}
237+
return url, nil
238+
}
239+
240+
func (u *IapTunnelDestGroupIamUpdater) GetResourceId() string {
241+
return fmt.Sprintf("projects/%s/iap_tunnel/locations/%s/destGroups/%s", u.project, u.region, u.destGroup)
242+
}
243+
244+
func (u *IapTunnelDestGroupIamUpdater) GetMutexKey() string {
245+
return fmt.Sprintf("iam-iap-tunneldestgroup-%s", u.GetResourceId())
246+
}
247+
248+
func (u *IapTunnelDestGroupIamUpdater) DescribeResource() string {
249+
return fmt.Sprintf("iap tunneldestgroup %q", u.GetResourceId())
250+
}

0 commit comments

Comments
 (0)