Skip to content

Commit 49f1d11

Browse files
feat(vertexai): Add IAM resources for Vertex AI FeatureStore EntityType (beta) (#6789) (#4920)
* feat: add the iam resources for featurestore entitytype * fix: fix the unit test errors Signed-off-by: Modular Magician <[email protected]> Signed-off-by: Modular Magician <[email protected]>
1 parent b8c4f9f commit 49f1d11

File tree

5 files changed

+719
-2
lines changed

5 files changed

+719
-2
lines changed

.changelog/6789.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
```release-note:new-resource
2+
google_vertex_ai_featurestore_entitytype_iam_binding (beta)
3+
google_vertex_ai_featurestore_entitytype_iam_member (beta)
4+
google_vertex_ai_featurestore_entitytype_iam_policy (beta)
5+
```
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
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+
15+
package google
16+
17+
import (
18+
"fmt"
19+
20+
"github.com/hashicorp/errwrap"
21+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
22+
"google.golang.org/api/cloudresourcemanager/v1"
23+
)
24+
25+
var VertexAIFeaturestoreEntitytypeIamSchema = map[string]*schema.Schema{
26+
"featurestore": {
27+
Type: schema.TypeString,
28+
Required: true,
29+
ForceNew: true,
30+
},
31+
"entitytype": {
32+
Type: schema.TypeString,
33+
Required: true,
34+
ForceNew: true,
35+
DiffSuppressFunc: compareSelfLinkOrResourceName,
36+
},
37+
}
38+
39+
type VertexAIFeaturestoreEntitytypeIamUpdater struct {
40+
featurestore string
41+
entitytype string
42+
d TerraformResourceData
43+
Config *Config
44+
}
45+
46+
func VertexAIFeaturestoreEntitytypeIamUpdaterProducer(d TerraformResourceData, config *Config) (ResourceIamUpdater, error) {
47+
values := make(map[string]string)
48+
49+
if v, ok := d.GetOk("featurestore"); ok {
50+
values["featurestore"] = v.(string)
51+
}
52+
53+
if v, ok := d.GetOk("entitytype"); ok {
54+
values["entitytype"] = v.(string)
55+
}
56+
57+
// We may have gotten either a long or short name, so attempt to parse long name if possible
58+
m, err := getImportIdQualifiers([]string{"(?P<featurestore>.+)/entityTypes/(?P<entitytype>[^/]+)", "(?P<entitytype>[^/]+)"}, d, config, d.Get("entitytype").(string))
59+
if err != nil {
60+
return nil, err
61+
}
62+
63+
for k, v := range m {
64+
values[k] = v
65+
}
66+
67+
u := &VertexAIFeaturestoreEntitytypeIamUpdater{
68+
featurestore: values["featurestore"],
69+
entitytype: values["entitytype"],
70+
d: d,
71+
Config: config,
72+
}
73+
74+
if err := d.Set("featurestore", u.featurestore); err != nil {
75+
return nil, fmt.Errorf("Error setting featurestore: %s", err)
76+
}
77+
if err := d.Set("entitytype", u.GetResourceId()); err != nil {
78+
return nil, fmt.Errorf("Error setting entitytype: %s", err)
79+
}
80+
81+
return u, nil
82+
}
83+
84+
func VertexAIFeaturestoreEntitytypeIdParseFunc(d *schema.ResourceData, config *Config) error {
85+
values := make(map[string]string)
86+
87+
m, err := getImportIdQualifiers([]string{"(?P<featurestore>.+)/entityTypes/(?P<entitytype>[^/]+)", "(?P<entitytype>[^/]+)"}, d, config, d.Id())
88+
if err != nil {
89+
return err
90+
}
91+
92+
for k, v := range m {
93+
values[k] = v
94+
}
95+
96+
u := &VertexAIFeaturestoreEntitytypeIamUpdater{
97+
featurestore: values["featurestore"],
98+
entitytype: values["entitytype"],
99+
d: d,
100+
Config: config,
101+
}
102+
if err := d.Set("entitytype", u.GetResourceId()); err != nil {
103+
return fmt.Errorf("Error setting entitytype: %s", err)
104+
}
105+
d.SetId(u.GetResourceId())
106+
return nil
107+
}
108+
109+
func (u *VertexAIFeaturestoreEntitytypeIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
110+
url, err := u.qualifyFeaturestoreEntitytypeUrl("getIamPolicy")
111+
if err != nil {
112+
return nil, err
113+
}
114+
115+
var obj map[string]interface{}
116+
117+
userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
118+
if err != nil {
119+
return nil, err
120+
}
121+
122+
policy, err := sendRequest(u.Config, "POST", "", url, userAgent, obj)
123+
if err != nil {
124+
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
125+
}
126+
127+
out := &cloudresourcemanager.Policy{}
128+
err = Convert(policy, out)
129+
if err != nil {
130+
return nil, errwrap.Wrapf("Cannot convert a policy to a resource manager policy: {{err}}", err)
131+
}
132+
133+
return out, nil
134+
}
135+
136+
func (u *VertexAIFeaturestoreEntitytypeIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
137+
json, err := ConvertToMap(policy)
138+
if err != nil {
139+
return err
140+
}
141+
142+
obj := make(map[string]interface{})
143+
obj["policy"] = json
144+
145+
url, err := u.qualifyFeaturestoreEntitytypeUrl("setIamPolicy")
146+
if err != nil {
147+
return err
148+
}
149+
150+
userAgent, err := generateUserAgentString(u.d, u.Config.userAgent)
151+
if err != nil {
152+
return err
153+
}
154+
155+
_, err = sendRequestWithTimeout(u.Config, "POST", "", url, userAgent, obj, u.d.Timeout(schema.TimeoutCreate))
156+
if err != nil {
157+
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
158+
}
159+
160+
return nil
161+
}
162+
163+
func (u *VertexAIFeaturestoreEntitytypeIamUpdater) qualifyFeaturestoreEntitytypeUrl(methodIdentifier string) (string, error) {
164+
urlTemplate := fmt.Sprintf("{{VertexAIBasePath}}%s:%s", fmt.Sprintf("%s/entityTypes/%s", u.featurestore, u.entitytype), methodIdentifier)
165+
url, err := replaceVars(u.d, u.Config, urlTemplate)
166+
if err != nil {
167+
return "", err
168+
}
169+
return url, nil
170+
}
171+
172+
func (u *VertexAIFeaturestoreEntitytypeIamUpdater) GetResourceId() string {
173+
return fmt.Sprintf("%s/entityTypes/%s", u.featurestore, u.entitytype)
174+
}
175+
176+
func (u *VertexAIFeaturestoreEntitytypeIamUpdater) GetMutexKey() string {
177+
return fmt.Sprintf("iam-vertexai-featurestoreentitytype-%s", u.GetResourceId())
178+
}
179+
180+
func (u *VertexAIFeaturestoreEntitytypeIamUpdater) DescribeResource() string {
181+
return fmt.Sprintf("vertexai featurestoreentitytype %q", u.GetResourceId())
182+
}

0 commit comments

Comments
 (0)