Skip to content

Commit 61fd27d

Browse files
add iam support for gke hub membership (#6389) (#4583)
Signed-off-by: Modular Magician <[email protected]>
1 parent 5c32f8f commit 61fd27d

File tree

5 files changed

+612
-2
lines changed

5 files changed

+612
-2
lines changed

.changelog/6389.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_gke_hub_membership_iam_binding
3+
```
4+
```release-note:new-resource
5+
google_gke_hub_membership_iam_member
6+
```
7+
```release-note:new-resource
8+
google_gke_hub_membership_iam_policy
9+
```
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
// ----------------------------------------------------------------------------
2+
//
3+
// *** AUTO GENERATED CODE *** Type: MMv1 ***
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 GKEHubMembershipIamSchema = map[string]*schema.Schema{
25+
"project": {
26+
Type: schema.TypeString,
27+
Computed: true,
28+
Optional: true,
29+
ForceNew: true,
30+
},
31+
"membership_id": {
32+
Type: schema.TypeString,
33+
Required: true,
34+
ForceNew: true,
35+
DiffSuppressFunc: compareSelfLinkOrResourceName,
36+
},
37+
}
38+
39+
type GKEHubMembershipIamUpdater struct {
40+
project string
41+
membershipId string
42+
d TerraformResourceData
43+
Config *Config
44+
}
45+
46+
func GKEHubMembershipIamUpdaterProducer(d TerraformResourceData, config *Config) (ResourceIamUpdater, error) {
47+
values := make(map[string]string)
48+
49+
project, _ := getProject(d, config)
50+
if project != "" {
51+
if err := d.Set("project", project); err != nil {
52+
return nil, fmt.Errorf("Error setting project: %s", err)
53+
}
54+
}
55+
values["project"] = project
56+
if v, ok := d.GetOk("membership_id"); ok {
57+
values["membership_id"] = v.(string)
58+
}
59+
60+
// We may have gotten either a long or short name, so attempt to parse long name if possible
61+
m, err := getImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/locations/(?P<location>[^/]+)/memberships/(?P<membership_id>[^/]+)", "(?P<project>[^/]+)/(?P<location>[^/]+)/(?P<membership_id>[^/]+)", "(?P<location>[^/]+)/(?P<membership_id>[^/]+)", "(?P<membership_id>[^/]+)"}, d, config, d.Get("membership_id").(string))
62+
if err != nil {
63+
return nil, err
64+
}
65+
66+
for k, v := range m {
67+
values[k] = v
68+
}
69+
70+
u := &GKEHubMembershipIamUpdater{
71+
project: values["project"],
72+
membershipId: values["membership_id"],
73+
d: d,
74+
Config: config,
75+
}
76+
77+
if err := d.Set("project", u.project); err != nil {
78+
return nil, fmt.Errorf("Error setting project: %s", err)
79+
}
80+
if err := d.Set("membership_id", u.GetResourceId()); err != nil {
81+
return nil, fmt.Errorf("Error setting membership_id: %s", err)
82+
}
83+
84+
return u, nil
85+
}
86+
87+
func GKEHubMembershipIdParseFunc(d *schema.ResourceData, config *Config) error {
88+
values := make(map[string]string)
89+
90+
project, _ := getProject(d, config)
91+
if project != "" {
92+
values["project"] = project
93+
}
94+
95+
m, err := getImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/locations/(?P<location>[^/]+)/memberships/(?P<membership_id>[^/]+)", "(?P<project>[^/]+)/(?P<location>[^/]+)/(?P<membership_id>[^/]+)", "(?P<location>[^/]+)/(?P<membership_id>[^/]+)", "(?P<membership_id>[^/]+)"}, d, config, d.Id())
96+
if err != nil {
97+
return err
98+
}
99+
100+
for k, v := range m {
101+
values[k] = v
102+
}
103+
104+
u := &GKEHubMembershipIamUpdater{
105+
project: values["project"],
106+
membershipId: values["membership_id"],
107+
d: d,
108+
Config: config,
109+
}
110+
if err := d.Set("membership_id", u.GetResourceId()); err != nil {
111+
return fmt.Errorf("Error setting membership_id: %s", err)
112+
}
113+
d.SetId(u.GetResourceId())
114+
return nil
115+
}
116+
117+
func (u *GKEHubMembershipIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
118+
url, err := u.qualifyMembershipUrl("getIamPolicy")
119+
if err != nil {
120+
return nil, err
121+
}
122+
123+
project, err := getProject(u.d, u.Config)
124+
if err != nil {
125+
return nil, err
126+
}
127+
var obj map[string]interface{}
128+
129+
userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
130+
if err != nil {
131+
return nil, err
132+
}
133+
134+
policy, err := sendRequest(u.Config, "GET", project, url, userAgent, obj)
135+
if err != nil {
136+
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
137+
}
138+
139+
out := &cloudresourcemanager.Policy{}
140+
err = Convert(policy, out)
141+
if err != nil {
142+
return nil, errwrap.Wrapf("Cannot convert a policy to a resource manager policy: {{err}}", err)
143+
}
144+
145+
return out, nil
146+
}
147+
148+
func (u *GKEHubMembershipIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
149+
json, err := ConvertToMap(policy)
150+
if err != nil {
151+
return err
152+
}
153+
154+
obj := make(map[string]interface{})
155+
obj["policy"] = json
156+
157+
url, err := u.qualifyMembershipUrl("setIamPolicy")
158+
if err != nil {
159+
return err
160+
}
161+
project, err := getProject(u.d, u.Config)
162+
if err != nil {
163+
return err
164+
}
165+
166+
userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
167+
if err != nil {
168+
return err
169+
}
170+
171+
_, err = sendRequestWithTimeout(u.Config, "POST", project, url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
172+
if err != nil {
173+
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
174+
}
175+
176+
return nil
177+
}
178+
179+
func (u *GKEHubMembershipIamUpdater) qualifyMembershipUrl(methodIdentifier string) (string, error) {
180+
urlTemplate := fmt.Sprintf("{{GKEHubBasePath}}%s:%s", fmt.Sprintf("projects/%s/locations/global/memberships/%s", u.project, u.membershipId), methodIdentifier)
181+
url, err := replaceVars(u.d, u.Config, urlTemplate)
182+
if err != nil {
183+
return "", err
184+
}
185+
return url, nil
186+
}
187+
188+
func (u *GKEHubMembershipIamUpdater) GetResourceId() string {
189+
return fmt.Sprintf("projects/%s/locations/global/memberships/%s", u.project, u.membershipId)
190+
}
191+
192+
func (u *GKEHubMembershipIamUpdater) GetMutexKey() string {
193+
return fmt.Sprintf("iam-gkehub-membership-%s", u.GetResourceId())
194+
}
195+
196+
func (u *GKEHubMembershipIamUpdater) DescribeResource() string {
197+
return fmt.Sprintf("gkehub membership %q", u.GetResourceId())
198+
}

0 commit comments

Comments
 (0)