Skip to content

Commit 0975055

Browse files
Add iam_policy for pubsub_schema (#9228) (#16301)
* Add iam_policy for pubsub_schema * fix: pubsub schema example [upstream:d3141795e805407e262f95e2a91e160db948edc5] Signed-off-by: Modular Magician <[email protected]>
1 parent 346914e commit 0975055

8 files changed

+657
-4
lines changed

.changelog/9228.txt

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

google/provider/provider.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -977,6 +977,7 @@ func DatasourceMapWithErrors() (map[string]*schema.Resource, error) {
977977
"google_notebooks_runtime_iam_policy": tpgiamresource.DataSourceIamPolicy(notebooks.NotebooksRuntimeIamSchema, notebooks.NotebooksRuntimeIamUpdaterProducer),
978978
"google_privateca_ca_pool_iam_policy": tpgiamresource.DataSourceIamPolicy(privateca.PrivatecaCaPoolIamSchema, privateca.PrivatecaCaPoolIamUpdaterProducer),
979979
"google_privateca_certificate_template_iam_policy": tpgiamresource.DataSourceIamPolicy(privateca.PrivatecaCertificateTemplateIamSchema, privateca.PrivatecaCertificateTemplateIamUpdaterProducer),
980+
"google_pubsub_schema_iam_policy": tpgiamresource.DataSourceIamPolicy(pubsub.PubsubSchemaIamSchema, pubsub.PubsubSchemaIamUpdaterProducer),
980981
"google_pubsub_topic_iam_policy": tpgiamresource.DataSourceIamPolicy(pubsub.PubsubTopicIamSchema, pubsub.PubsubTopicIamUpdaterProducer),
981982
"google_secret_manager_secret_iam_policy": tpgiamresource.DataSourceIamPolicy(secretmanager.SecretManagerSecretIamSchema, secretmanager.SecretManagerSecretIamUpdaterProducer),
982983
"google_scc_source_iam_policy": tpgiamresource.DataSourceIamPolicy(securitycenter.SecurityCenterSourceIamSchema, securitycenter.SecurityCenterSourceIamUpdaterProducer),
@@ -1014,8 +1015,8 @@ func DatasourceMapWithErrors() (map[string]*schema.Resource, error) {
10141015
}
10151016

10161017
// Generated resources: 337
1017-
// Generated IAM resources: 207
1018-
// Total generated resources: 544
1018+
// Generated IAM resources: 210
1019+
// Total generated resources: 547
10191020
func ResourceMap() map[string]*schema.Resource {
10201021
resourceMap, _ := ResourceMapWithErrors()
10211022
return resourceMap
@@ -1485,6 +1486,9 @@ func ResourceMapWithErrors() (map[string]*schema.Resource, error) {
14851486
"google_privateca_certificate_template_iam_policy": tpgiamresource.ResourceIamPolicy(privateca.PrivatecaCertificateTemplateIamSchema, privateca.PrivatecaCertificateTemplateIamUpdaterProducer, privateca.PrivatecaCertificateTemplateIdParseFunc),
14861487
"google_public_ca_external_account_key": publicca.ResourcePublicCAExternalAccountKey(),
14871488
"google_pubsub_schema": pubsub.ResourcePubsubSchema(),
1489+
"google_pubsub_schema_iam_binding": tpgiamresource.ResourceIamBinding(pubsub.PubsubSchemaIamSchema, pubsub.PubsubSchemaIamUpdaterProducer, pubsub.PubsubSchemaIdParseFunc),
1490+
"google_pubsub_schema_iam_member": tpgiamresource.ResourceIamMember(pubsub.PubsubSchemaIamSchema, pubsub.PubsubSchemaIamUpdaterProducer, pubsub.PubsubSchemaIdParseFunc),
1491+
"google_pubsub_schema_iam_policy": tpgiamresource.ResourceIamPolicy(pubsub.PubsubSchemaIamSchema, pubsub.PubsubSchemaIamUpdaterProducer, pubsub.PubsubSchemaIdParseFunc),
14881492
"google_pubsub_subscription": pubsub.ResourcePubsubSubscription(),
14891493
"google_pubsub_topic": pubsub.ResourcePubsubTopic(),
14901494
"google_pubsub_topic_iam_binding": tpgiamresource.ResourceIamBinding(pubsub.PubsubTopicIamSchema, pubsub.PubsubTopicIamUpdaterProducer, pubsub.PubsubTopicIdParseFunc),
+221
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
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 pubsub
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 PubsubSchemaIamSchema = map[string]*schema.Schema{
33+
"project": {
34+
Type: schema.TypeString,
35+
Computed: true,
36+
Optional: true,
37+
ForceNew: true,
38+
},
39+
"schema": {
40+
Type: schema.TypeString,
41+
Required: true,
42+
ForceNew: true,
43+
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
44+
},
45+
}
46+
47+
type PubsubSchemaIamUpdater struct {
48+
project string
49+
schema string
50+
d tpgresource.TerraformResourceData
51+
Config *transport_tpg.Config
52+
}
53+
54+
func PubsubSchemaIamUpdaterProducer(d tpgresource.TerraformResourceData, config *transport_tpg.Config) (tpgiamresource.ResourceIamUpdater, error) {
55+
values := make(map[string]string)
56+
57+
project, _ := tpgresource.GetProject(d, config)
58+
if project != "" {
59+
if err := d.Set("project", project); err != nil {
60+
return nil, fmt.Errorf("Error setting project: %s", err)
61+
}
62+
}
63+
values["project"] = project
64+
if v, ok := d.GetOk("schema"); ok {
65+
values["schema"] = v.(string)
66+
}
67+
68+
// We may have gotten either a long or short name, so attempt to parse long name if possible
69+
m, err := tpgresource.GetImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/schemas/(?P<schema>[^/]+)", "(?P<project>[^/]+)/(?P<schema>[^/]+)", "(?P<schema>[^/]+)"}, d, config, d.Get("schema").(string))
70+
if err != nil {
71+
return nil, err
72+
}
73+
74+
for k, v := range m {
75+
values[k] = v
76+
}
77+
78+
u := &PubsubSchemaIamUpdater{
79+
project: values["project"],
80+
schema: values["schema"],
81+
d: d,
82+
Config: config,
83+
}
84+
85+
if err := d.Set("project", u.project); err != nil {
86+
return nil, fmt.Errorf("Error setting project: %s", err)
87+
}
88+
if err := d.Set("schema", u.GetResourceId()); err != nil {
89+
return nil, fmt.Errorf("Error setting schema: %s", err)
90+
}
91+
92+
return u, nil
93+
}
94+
95+
func PubsubSchemaIdParseFunc(d *schema.ResourceData, config *transport_tpg.Config) error {
96+
values := make(map[string]string)
97+
98+
project, _ := tpgresource.GetProject(d, config)
99+
if project != "" {
100+
values["project"] = project
101+
}
102+
103+
m, err := tpgresource.GetImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/schemas/(?P<schema>[^/]+)", "(?P<project>[^/]+)/(?P<schema>[^/]+)", "(?P<schema>[^/]+)"}, d, config, d.Id())
104+
if err != nil {
105+
return err
106+
}
107+
108+
for k, v := range m {
109+
values[k] = v
110+
}
111+
112+
u := &PubsubSchemaIamUpdater{
113+
project: values["project"],
114+
schema: values["schema"],
115+
d: d,
116+
Config: config,
117+
}
118+
if err := d.Set("schema", u.GetResourceId()); err != nil {
119+
return fmt.Errorf("Error setting schema: %s", err)
120+
}
121+
d.SetId(u.GetResourceId())
122+
return nil
123+
}
124+
125+
func (u *PubsubSchemaIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
126+
url, err := u.qualifySchemaUrl("getIamPolicy")
127+
if err != nil {
128+
return nil, err
129+
}
130+
131+
project, err := tpgresource.GetProject(u.d, u.Config)
132+
if err != nil {
133+
return nil, err
134+
}
135+
var obj map[string]interface{}
136+
137+
userAgent, err := tpgresource.GenerateUserAgentString(u.d, u.Config.UserAgent)
138+
if err != nil {
139+
return nil, err
140+
}
141+
142+
policy, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
143+
Config: u.Config,
144+
Method: "GET",
145+
Project: project,
146+
RawURL: url,
147+
UserAgent: userAgent,
148+
Body: obj,
149+
})
150+
if err != nil {
151+
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
152+
}
153+
154+
out := &cloudresourcemanager.Policy{}
155+
err = tpgresource.Convert(policy, out)
156+
if err != nil {
157+
return nil, errwrap.Wrapf("Cannot convert a policy to a resource manager policy: {{err}}", err)
158+
}
159+
160+
return out, nil
161+
}
162+
163+
func (u *PubsubSchemaIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
164+
json, err := tpgresource.ConvertToMap(policy)
165+
if err != nil {
166+
return err
167+
}
168+
169+
obj := make(map[string]interface{})
170+
obj["policy"] = json
171+
172+
url, err := u.qualifySchemaUrl("setIamPolicy")
173+
if err != nil {
174+
return err
175+
}
176+
project, err := tpgresource.GetProject(u.d, u.Config)
177+
if err != nil {
178+
return err
179+
}
180+
181+
userAgent, err := tpgresource.GenerateUserAgentString(u.d, u.Config.UserAgent)
182+
if err != nil {
183+
return err
184+
}
185+
186+
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
187+
Config: u.Config,
188+
Method: "POST",
189+
Project: project,
190+
RawURL: url,
191+
UserAgent: userAgent,
192+
Body: obj,
193+
Timeout: u.d.Timeout(schema.TimeoutCreate),
194+
})
195+
if err != nil {
196+
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
197+
}
198+
199+
return nil
200+
}
201+
202+
func (u *PubsubSchemaIamUpdater) qualifySchemaUrl(methodIdentifier string) (string, error) {
203+
urlTemplate := fmt.Sprintf("{{PubsubBasePath}}%s:%s", fmt.Sprintf("projects/%s/schemas/%s", u.project, u.schema), methodIdentifier)
204+
url, err := tpgresource.ReplaceVars(u.d, u.Config, urlTemplate)
205+
if err != nil {
206+
return "", err
207+
}
208+
return url, nil
209+
}
210+
211+
func (u *PubsubSchemaIamUpdater) GetResourceId() string {
212+
return fmt.Sprintf("projects/%s/schemas/%s", u.project, u.schema)
213+
}
214+
215+
func (u *PubsubSchemaIamUpdater) GetMutexKey() string {
216+
return fmt.Sprintf("iam-pubsub-schema-%s", u.GetResourceId())
217+
}
218+
219+
func (u *PubsubSchemaIamUpdater) DescribeResource() string {
220+
return fmt.Sprintf("pubsub schema %q", u.GetResourceId())
221+
}

0 commit comments

Comments
 (0)