Skip to content

Commit a4f4dc6

Browse files
modular-magicianEdward Sun
andauthored
add IAM resources for disk & regionDisk (#3888) (#2424)
Co-authored-by: Edward Sun <[email protected]> Signed-off-by: Modular Magician <[email protected]> Co-authored-by: Edward Sun <[email protected]>
1 parent 3e8f551 commit a4f4dc6

File tree

9 files changed

+1279
-2
lines changed

9 files changed

+1279
-2
lines changed

.changelog/3888.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
```release-note:new-resource
2+
google_compute_region_disk_iam_binding
3+
```
4+
```release-note:new-resource
5+
google_compute_region_disk_iam_policy
6+
```
7+
```release-note:new-resource
8+
google_compute_region_disk_iam_member
9+
```
10+
```release-note:new-resource
11+
google_compute_disk_iam_binding
12+
```
13+
```release-note:new-resource
14+
google_compute_disk_iam_policy
15+
```
16+
```release-note:new-resource
17+
google_compute_disk_iam_member
18+
```

google-beta/iam_compute_disk.go

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
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/helper/schema"
21+
"google.golang.org/api/cloudresourcemanager/v1"
22+
)
23+
24+
var ComputeDiskIamSchema = map[string]*schema.Schema{
25+
"project": {
26+
Type: schema.TypeString,
27+
Computed: true,
28+
Optional: true,
29+
ForceNew: true,
30+
},
31+
"zone": {
32+
Type: schema.TypeString,
33+
Computed: true,
34+
Optional: true,
35+
ForceNew: true,
36+
},
37+
"name": {
38+
Type: schema.TypeString,
39+
Required: true,
40+
ForceNew: true,
41+
DiffSuppressFunc: compareSelfLinkOrResourceName,
42+
},
43+
}
44+
45+
type ComputeDiskIamUpdater struct {
46+
project string
47+
zone string
48+
name string
49+
d *schema.ResourceData
50+
Config *Config
51+
}
52+
53+
func ComputeDiskIamUpdaterProducer(d *schema.ResourceData, config *Config) (ResourceIamUpdater, error) {
54+
values := make(map[string]string)
55+
56+
project, _ := getProject(d, config)
57+
if project != "" {
58+
d.Set("project", project)
59+
}
60+
values["project"] = project
61+
zone, _ := getZone(d, config)
62+
if zone != "" {
63+
d.Set("zone", zone)
64+
}
65+
values["zone"] = zone
66+
if v, ok := d.GetOk("name"); ok {
67+
values["name"] = 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 := getImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/zones/(?P<zone>[^/]+)/disks/(?P<name>[^/]+)", "(?P<project>[^/]+)/(?P<zone>[^/]+)/(?P<name>[^/]+)", "(?P<zone>[^/]+)/(?P<name>[^/]+)", "(?P<name>[^/]+)"}, d, config, d.Get("name").(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 := &ComputeDiskIamUpdater{
81+
project: values["project"],
82+
zone: values["zone"],
83+
name: values["name"],
84+
d: d,
85+
Config: config,
86+
}
87+
88+
d.Set("project", u.project)
89+
d.Set("zone", u.zone)
90+
d.Set("name", u.GetResourceId())
91+
92+
return u, nil
93+
}
94+
95+
func ComputeDiskIdParseFunc(d *schema.ResourceData, config *Config) error {
96+
values := make(map[string]string)
97+
98+
project, _ := getProject(d, config)
99+
if project != "" {
100+
values["project"] = project
101+
}
102+
103+
zone, _ := getZone(d, config)
104+
if zone != "" {
105+
values["zone"] = zone
106+
}
107+
108+
m, err := getImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/zones/(?P<zone>[^/]+)/disks/(?P<name>[^/]+)", "(?P<project>[^/]+)/(?P<zone>[^/]+)/(?P<name>[^/]+)", "(?P<zone>[^/]+)/(?P<name>[^/]+)", "(?P<name>[^/]+)"}, d, config, d.Id())
109+
if err != nil {
110+
return err
111+
}
112+
113+
for k, v := range m {
114+
values[k] = v
115+
}
116+
117+
u := &ComputeDiskIamUpdater{
118+
project: values["project"],
119+
zone: values["zone"],
120+
name: values["name"],
121+
d: d,
122+
Config: config,
123+
}
124+
d.Set("name", u.GetResourceId())
125+
d.SetId(u.GetResourceId())
126+
return nil
127+
}
128+
129+
func (u *ComputeDiskIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
130+
url, err := u.qualifyDiskUrl("getIamPolicy")
131+
if err != nil {
132+
return nil, err
133+
}
134+
135+
project, err := getProject(u.d, u.Config)
136+
if err != nil {
137+
return nil, err
138+
}
139+
var obj map[string]interface{}
140+
141+
policy, err := sendRequest(u.Config, "GET", project, url, obj)
142+
if err != nil {
143+
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
144+
}
145+
146+
out := &cloudresourcemanager.Policy{}
147+
err = Convert(policy, out)
148+
if err != nil {
149+
return nil, errwrap.Wrapf("Cannot convert a policy to a resource manager policy: {{err}}", err)
150+
}
151+
152+
return out, nil
153+
}
154+
155+
func (u *ComputeDiskIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
156+
json, err := ConvertToMap(policy)
157+
if err != nil {
158+
return err
159+
}
160+
161+
obj := make(map[string]interface{})
162+
obj["policy"] = json
163+
164+
url, err := u.qualifyDiskUrl("setIamPolicy")
165+
if err != nil {
166+
return err
167+
}
168+
project, err := getProject(u.d, u.Config)
169+
if err != nil {
170+
return err
171+
}
172+
173+
_, err = sendRequestWithTimeout(u.Config, "POST", project, url, obj, u.d.Timeout(schema.TimeoutCreate))
174+
if err != nil {
175+
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
176+
}
177+
178+
return nil
179+
}
180+
181+
func (u *ComputeDiskIamUpdater) qualifyDiskUrl(methodIdentifier string) (string, error) {
182+
urlTemplate := fmt.Sprintf("{{ComputeBasePath}}%s/%s", fmt.Sprintf("projects/%s/zones/%s/disks/%s", u.project, u.zone, u.name), methodIdentifier)
183+
url, err := replaceVars(u.d, u.Config, urlTemplate)
184+
if err != nil {
185+
return "", err
186+
}
187+
return url, nil
188+
}
189+
190+
func (u *ComputeDiskIamUpdater) GetResourceId() string {
191+
return fmt.Sprintf("projects/%s/zones/%s/disks/%s", u.project, u.zone, u.name)
192+
}
193+
194+
func (u *ComputeDiskIamUpdater) GetMutexKey() string {
195+
return fmt.Sprintf("iam-compute-disk-%s", u.GetResourceId())
196+
}
197+
198+
func (u *ComputeDiskIamUpdater) DescribeResource() string {
199+
return fmt.Sprintf("compute disk %q", u.GetResourceId())
200+
}

0 commit comments

Comments
 (0)