Skip to content

Commit 59fad20

Browse files
add iap tunnel iam (#4137) (#2642)
Signed-off-by: Modular Magician <[email protected]>
1 parent 56eaf42 commit 59fad20

File tree

6 files changed

+968
-2
lines changed

6 files changed

+968
-2
lines changed

.changelog/4137.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
```release-note:new-resource
2+
`google_iap_tunnel_iam_binding`
3+
```
4+
```release-note:new-resource
5+
`google_iap_tunnel_iam_member`
6+
```
7+
```release-note:new-resource
8+
`google_iap_tunnel_iam_policy`
9+
```

google-beta/iam_iap_tunnel.go

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
// ----------------------------------------------------------------------------
2+
//
3+
// *** AUTO GENERATED CODE *** AUTO GENERATED CODE ***
4+
//
5+
// ----------------------------------------------------------------------------
6+
//
7+
// This file is automatically generated by Magic Modules and manual
8+
// changes will be clobbered when the file is regenerated.
9+
//
10+
// Please read more about how to change this file in
11+
// .github/CONTRIBUTING.md.
12+
//
13+
// ----------------------------------------------------------------------------
14+
package google
15+
16+
import (
17+
"fmt"
18+
19+
"github.com/hashicorp/errwrap"
20+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
21+
"google.golang.org/api/cloudresourcemanager/v1"
22+
)
23+
24+
var IapTunnelIamSchema = map[string]*schema.Schema{
25+
"project": {
26+
Type: schema.TypeString,
27+
Computed: true,
28+
Optional: true,
29+
ForceNew: true,
30+
DiffSuppressFunc: compareSelfLinkOrResourceName,
31+
},
32+
}
33+
34+
type IapTunnelIamUpdater struct {
35+
project string
36+
d *schema.ResourceData
37+
Config *Config
38+
}
39+
40+
func IapTunnelIamUpdaterProducer(d *schema.ResourceData, config *Config) (ResourceIamUpdater, error) {
41+
values := make(map[string]string)
42+
43+
project, _ := getProject(d, config)
44+
if project != "" {
45+
if err := d.Set("project", project); err != nil {
46+
return nil, fmt.Errorf("Error setting project: %s", err)
47+
}
48+
}
49+
values["project"] = project
50+
51+
// We may have gotten either a long or short name, so attempt to parse long name if possible
52+
m, err := getImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/iap_tunnel", "(?P<project>[^/]+)"}, d, config, d.Get("project").(string))
53+
if err != nil {
54+
return nil, err
55+
}
56+
57+
for k, v := range m {
58+
values[k] = v
59+
}
60+
61+
u := &IapTunnelIamUpdater{
62+
project: values["project"],
63+
d: d,
64+
Config: config,
65+
}
66+
67+
if err := d.Set("project", u.project); err != nil {
68+
return nil, fmt.Errorf("Error setting project: %s", err)
69+
}
70+
71+
return u, nil
72+
}
73+
74+
func IapTunnelIdParseFunc(d *schema.ResourceData, config *Config) error {
75+
values := make(map[string]string)
76+
77+
project, _ := getProject(d, config)
78+
if project != "" {
79+
values["project"] = project
80+
}
81+
82+
m, err := getImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/iap_tunnel", "(?P<project>[^/]+)"}, d, config, d.Id())
83+
if err != nil {
84+
return err
85+
}
86+
87+
for k, v := range m {
88+
values[k] = v
89+
}
90+
91+
u := &IapTunnelIamUpdater{
92+
project: values["project"],
93+
d: d,
94+
Config: config,
95+
}
96+
if err := d.Set("project", u.project); err != nil {
97+
return fmt.Errorf("Error setting project: %s", err)
98+
}
99+
d.SetId(u.GetResourceId())
100+
return nil
101+
}
102+
103+
func (u *IapTunnelIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
104+
url, err := u.qualifyTunnelUrl("getIamPolicy")
105+
if err != nil {
106+
return nil, err
107+
}
108+
109+
project, err := getProject(u.d, u.Config)
110+
if err != nil {
111+
return nil, err
112+
}
113+
var obj map[string]interface{}
114+
obj = map[string]interface{}{
115+
"options": map[string]interface{}{
116+
"requestedPolicyVersion": iamPolicyVersion,
117+
},
118+
}
119+
120+
userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
121+
if err != nil {
122+
return nil, err
123+
}
124+
125+
policy, err := sendRequest(u.Config, "POST", project, url, userAgent, obj)
126+
if err != nil {
127+
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
128+
}
129+
130+
out := &cloudresourcemanager.Policy{}
131+
err = Convert(policy, out)
132+
if err != nil {
133+
return nil, errwrap.Wrapf("Cannot convert a policy to a resource manager policy: {{err}}", err)
134+
}
135+
136+
return out, nil
137+
}
138+
139+
func (u *IapTunnelIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
140+
json, err := ConvertToMap(policy)
141+
if err != nil {
142+
return err
143+
}
144+
145+
obj := make(map[string]interface{})
146+
obj["policy"] = json
147+
148+
url, err := u.qualifyTunnelUrl("setIamPolicy")
149+
if err != nil {
150+
return err
151+
}
152+
project, err := getProject(u.d, u.Config)
153+
if err != nil {
154+
return err
155+
}
156+
157+
userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
158+
if err != nil {
159+
return err
160+
}
161+
162+
_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
163+
if err != nil {
164+
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
165+
}
166+
167+
return nil
168+
}
169+
170+
func (u *IapTunnelIamUpdater) qualifyTunnelUrl(methodIdentifier string) (string, error) {
171+
urlTemplate := fmt.Sprintf("{{IapBasePath}}%s:%s", fmt.Sprintf("projects/%s/iap_tunnel", u.project), methodIdentifier)
172+
url, err := replaceVars(u.d, u.Config, urlTemplate)
173+
if err != nil {
174+
return "", err
175+
}
176+
return url, nil
177+
}
178+
179+
func (u *IapTunnelIamUpdater) GetResourceId() string {
180+
return fmt.Sprintf("projects/%s/iap_tunnel", u.project)
181+
}
182+
183+
func (u *IapTunnelIamUpdater) GetMutexKey() string {
184+
return fmt.Sprintf("iam-iap-tunnel-%s", u.GetResourceId())
185+
}
186+
187+
func (u *IapTunnelIamUpdater) DescribeResource() string {
188+
return fmt.Sprintf("iap tunnel %q", u.GetResourceId())
189+
}

0 commit comments

Comments
 (0)