Skip to content

Commit e9efc46

Browse files
Add support for regional secret resource google_secret_manager_regional_secret (#11678) (#8170)
[upstream:3084e72fbb69daba66bf7164f10a7b6af3a82d4a] Signed-off-by: Modular Magician <[email protected]>
1 parent 32966f9 commit e9efc46

18 files changed

+4566
-3
lines changed

.changelog/11678.txt

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

google-beta/fwmodels/provider_model.go

+1
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ type ProviderModel struct {
139139
ResourceManagerCustomEndpoint types.String `tfsdk:"resource_manager_custom_endpoint"`
140140
RuntimeConfigCustomEndpoint types.String `tfsdk:"runtime_config_custom_endpoint"`
141141
SecretManagerCustomEndpoint types.String `tfsdk:"secret_manager_custom_endpoint"`
142+
SecretManagerRegionalCustomEndpoint types.String `tfsdk:"secret_manager_regional_custom_endpoint"`
142143
SecureSourceManagerCustomEndpoint types.String `tfsdk:"secure_source_manager_custom_endpoint"`
143144
SecurityCenterCustomEndpoint types.String `tfsdk:"security_center_custom_endpoint"`
144145
SecurityCenterManagementCustomEndpoint types.String `tfsdk:"security_center_management_custom_endpoint"`

google-beta/fwprovider/framework_provider.go

+6
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,12 @@ func (p *FrameworkProvider) Schema(_ context.Context, _ provider.SchemaRequest,
812812
transport_tpg.CustomEndpointValidator(),
813813
},
814814
},
815+
"secret_manager_regional_custom_endpoint": &schema.StringAttribute{
816+
Optional: true,
817+
Validators: []validator.String{
818+
transport_tpg.CustomEndpointValidator(),
819+
},
820+
},
815821
"secure_source_manager_custom_endpoint": &schema.StringAttribute{
816822
Optional: true,
817823
Validators: []validator.String{

google-beta/fwtransport/framework_config.go

+10
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ type FrameworkProviderConfig struct {
169169
ResourceManagerBasePath string
170170
RuntimeConfigBasePath string
171171
SecretManagerBasePath string
172+
SecretManagerRegionalBasePath string
172173
SecureSourceManagerBasePath string
173174
SecurityCenterBasePath string
174175
SecurityCenterManagementBasePath string
@@ -345,6 +346,7 @@ func (p *FrameworkProviderConfig) LoadAndValidateFramework(ctx context.Context,
345346
p.ResourceManagerBasePath = data.ResourceManagerCustomEndpoint.ValueString()
346347
p.RuntimeConfigBasePath = data.RuntimeConfigCustomEndpoint.ValueString()
347348
p.SecretManagerBasePath = data.SecretManagerCustomEndpoint.ValueString()
349+
p.SecretManagerRegionalBasePath = data.SecretManagerRegionalCustomEndpoint.ValueString()
348350
p.SecureSourceManagerBasePath = data.SecureSourceManagerCustomEndpoint.ValueString()
349351
p.SecurityCenterBasePath = data.SecurityCenterCustomEndpoint.ValueString()
350352
p.SecurityCenterManagementBasePath = data.SecurityCenterManagementCustomEndpoint.ValueString()
@@ -1393,6 +1395,14 @@ func (p *FrameworkProviderConfig) HandleDefaults(ctx context.Context, data *fwmo
13931395
data.SecretManagerCustomEndpoint = types.StringValue(customEndpoint.(string))
13941396
}
13951397
}
1398+
if data.SecretManagerRegionalCustomEndpoint.IsNull() {
1399+
customEndpoint := transport_tpg.MultiEnvDefault([]string{
1400+
"GOOGLE_SECRET_MANAGER_REGIONAL_CUSTOM_ENDPOINT",
1401+
}, transport_tpg.DefaultBasePaths[transport_tpg.SecretManagerRegionalBasePathKey])
1402+
if customEndpoint != nil {
1403+
data.SecretManagerRegionalCustomEndpoint = types.StringValue(customEndpoint.(string))
1404+
}
1405+
}
13961406
if data.SecureSourceManagerCustomEndpoint.IsNull() {
13971407
customEndpoint := transport_tpg.MultiEnvDefault([]string{
13981408
"GOOGLE_SECURE_SOURCE_MANAGER_CUSTOM_ENDPOINT",

google-beta/provider/provider.go

+6
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,11 @@ func Provider() *schema.Provider {
700700
Optional: true,
701701
ValidateFunc: transport_tpg.ValidateCustomEndpoint,
702702
},
703+
"secret_manager_regional_custom_endpoint": {
704+
Type: schema.TypeString,
705+
Optional: true,
706+
ValidateFunc: transport_tpg.ValidateCustomEndpoint,
707+
},
703708
"secure_source_manager_custom_endpoint": {
704709
Type: schema.TypeString,
705710
Optional: true,
@@ -1133,6 +1138,7 @@ func ProviderConfigure(ctx context.Context, d *schema.ResourceData, p *schema.Pr
11331138
config.ResourceManagerBasePath = d.Get("resource_manager_custom_endpoint").(string)
11341139
config.RuntimeConfigBasePath = d.Get("runtime_config_custom_endpoint").(string)
11351140
config.SecretManagerBasePath = d.Get("secret_manager_custom_endpoint").(string)
1141+
config.SecretManagerRegionalBasePath = d.Get("secret_manager_regional_custom_endpoint").(string)
11361142
config.SecureSourceManagerBasePath = d.Get("secure_source_manager_custom_endpoint").(string)
11371143
config.SecurityCenterBasePath = d.Get("security_center_custom_endpoint").(string)
11381144
config.SecurityCenterManagementBasePath = d.Get("security_center_management_custom_endpoint").(string)

google-beta/provider/provider_mmv1_resources.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ import (
116116
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/resourcemanager"
117117
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/runtimeconfig"
118118
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/secretmanager"
119+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/secretmanagerregional"
119120
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/securesourcemanager"
120121
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/securitycenter"
121122
"github.com/hashicorp/terraform-provider-google-beta/google-beta/services/securitycentermanagement"
@@ -432,6 +433,7 @@ var generatedIAMDatasources = map[string]*schema.Resource{
432433
"google_pubsub_topic_iam_policy": tpgiamresource.DataSourceIamPolicy(pubsub.PubsubTopicIamSchema, pubsub.PubsubTopicIamUpdaterProducer),
433434
"google_runtimeconfig_config_iam_policy": tpgiamresource.DataSourceIamPolicy(runtimeconfig.RuntimeConfigConfigIamSchema, runtimeconfig.RuntimeConfigConfigIamUpdaterProducer),
434435
"google_secret_manager_secret_iam_policy": tpgiamresource.DataSourceIamPolicy(secretmanager.SecretManagerSecretIamSchema, secretmanager.SecretManagerSecretIamUpdaterProducer),
436+
"google_secret_manager_regional_secret_iam_policy": tpgiamresource.DataSourceIamPolicy(secretmanagerregional.SecretManagerRegionalRegionalSecretIamSchema, secretmanagerregional.SecretManagerRegionalRegionalSecretIamUpdaterProducer),
435437
"google_secure_source_manager_instance_iam_policy": tpgiamresource.DataSourceIamPolicy(securesourcemanager.SecureSourceManagerInstanceIamSchema, securesourcemanager.SecureSourceManagerInstanceIamUpdaterProducer),
436438
"google_secure_source_manager_repository_iam_policy": tpgiamresource.DataSourceIamPolicy(securesourcemanager.SecureSourceManagerRepositoryIamSchema, securesourcemanager.SecureSourceManagerRepositoryIamUpdaterProducer),
437439
"google_scc_source_iam_policy": tpgiamresource.DataSourceIamPolicy(securitycenter.SecurityCenterSourceIamSchema, securitycenter.SecurityCenterSourceIamUpdaterProducer),
@@ -479,9 +481,9 @@ var handwrittenIAMDatasources = map[string]*schema.Resource{
479481
}
480482

481483
// Resources
482-
// Generated resources: 516
483-
// Generated IAM resources: 288
484-
// Total generated resources: 804
484+
// Generated resources: 517
485+
// Generated IAM resources: 291
486+
// Total generated resources: 808
485487
var generatedResources = map[string]*schema.Resource{
486488
"google_folder_access_approval_settings": accessapproval.ResourceAccessApprovalFolderSettings(),
487489
"google_organization_access_approval_settings": accessapproval.ResourceAccessApprovalOrganizationSettings(),
@@ -1151,6 +1153,10 @@ var generatedResources = map[string]*schema.Resource{
11511153
"google_secret_manager_secret_iam_member": tpgiamresource.ResourceIamMember(secretmanager.SecretManagerSecretIamSchema, secretmanager.SecretManagerSecretIamUpdaterProducer, secretmanager.SecretManagerSecretIdParseFunc),
11521154
"google_secret_manager_secret_iam_policy": tpgiamresource.ResourceIamPolicy(secretmanager.SecretManagerSecretIamSchema, secretmanager.SecretManagerSecretIamUpdaterProducer, secretmanager.SecretManagerSecretIdParseFunc),
11531155
"google_secret_manager_secret_version": secretmanager.ResourceSecretManagerSecretVersion(),
1156+
"google_secret_manager_regional_secret": secretmanagerregional.ResourceSecretManagerRegionalRegionalSecret(),
1157+
"google_secret_manager_regional_secret_iam_binding": tpgiamresource.ResourceIamBinding(secretmanagerregional.SecretManagerRegionalRegionalSecretIamSchema, secretmanagerregional.SecretManagerRegionalRegionalSecretIamUpdaterProducer, secretmanagerregional.SecretManagerRegionalRegionalSecretIdParseFunc),
1158+
"google_secret_manager_regional_secret_iam_member": tpgiamresource.ResourceIamMember(secretmanagerregional.SecretManagerRegionalRegionalSecretIamSchema, secretmanagerregional.SecretManagerRegionalRegionalSecretIamUpdaterProducer, secretmanagerregional.SecretManagerRegionalRegionalSecretIdParseFunc),
1159+
"google_secret_manager_regional_secret_iam_policy": tpgiamresource.ResourceIamPolicy(secretmanagerregional.SecretManagerRegionalRegionalSecretIamSchema, secretmanagerregional.SecretManagerRegionalRegionalSecretIamUpdaterProducer, secretmanagerregional.SecretManagerRegionalRegionalSecretIdParseFunc),
11541160
"google_secure_source_manager_instance": securesourcemanager.ResourceSecureSourceManagerInstance(),
11551161
"google_secure_source_manager_instance_iam_binding": tpgiamresource.ResourceIamBinding(securesourcemanager.SecureSourceManagerInstanceIamSchema, securesourcemanager.SecureSourceManagerInstanceIamUpdaterProducer, securesourcemanager.SecureSourceManagerInstanceIdParseFunc),
11561162
"google_secure_source_manager_instance_iam_member": tpgiamresource.ResourceIamMember(securesourcemanager.SecureSourceManagerInstanceIamSchema, securesourcemanager.SecureSourceManagerInstanceIamUpdaterProducer, securesourcemanager.SecureSourceManagerInstanceIdParseFunc),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
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 secretmanagerregional
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-beta/google-beta/tpgiamresource"
28+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
29+
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
30+
)
31+
32+
var SecretManagerRegionalRegionalSecretIamSchema = map[string]*schema.Schema{
33+
"project": {
34+
Type: schema.TypeString,
35+
Computed: true,
36+
Optional: true,
37+
ForceNew: true,
38+
},
39+
"location": {
40+
Type: schema.TypeString,
41+
Computed: true,
42+
Optional: true,
43+
ForceNew: true,
44+
},
45+
"secret_id": {
46+
Type: schema.TypeString,
47+
Required: true,
48+
ForceNew: true,
49+
DiffSuppressFunc: tpgresource.CompareSelfLinkOrResourceName,
50+
},
51+
}
52+
53+
type SecretManagerRegionalRegionalSecretIamUpdater struct {
54+
project string
55+
location string
56+
secretId string
57+
d tpgresource.TerraformResourceData
58+
Config *transport_tpg.Config
59+
}
60+
61+
func SecretManagerRegionalRegionalSecretIamUpdaterProducer(d tpgresource.TerraformResourceData, config *transport_tpg.Config) (tpgiamresource.ResourceIamUpdater, error) {
62+
values := make(map[string]string)
63+
64+
project, _ := tpgresource.GetProject(d, config)
65+
if project != "" {
66+
if err := d.Set("project", project); err != nil {
67+
return nil, fmt.Errorf("Error setting project: %s", err)
68+
}
69+
}
70+
values["project"] = project
71+
location, _ := tpgresource.GetLocation(d, config)
72+
if location != "" {
73+
if err := d.Set("location", location); err != nil {
74+
return nil, fmt.Errorf("Error setting location: %s", err)
75+
}
76+
}
77+
values["location"] = location
78+
if v, ok := d.GetOk("secret_id"); ok {
79+
values["secret_id"] = v.(string)
80+
}
81+
82+
// We may have gotten either a long or short name, so attempt to parse long name if possible
83+
m, err := tpgresource.GetImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/locations/(?P<location>[^/]+)/secrets/(?P<secret_id>[^/]+)", "(?P<project>[^/]+)/(?P<location>[^/]+)/(?P<secret_id>[^/]+)", "(?P<location>[^/]+)/(?P<secret_id>[^/]+)", "(?P<secret_id>[^/]+)"}, d, config, d.Get("secret_id").(string))
84+
if err != nil {
85+
return nil, err
86+
}
87+
88+
for k, v := range m {
89+
values[k] = v
90+
}
91+
92+
u := &SecretManagerRegionalRegionalSecretIamUpdater{
93+
project: values["project"],
94+
location: values["location"],
95+
secretId: values["secret_id"],
96+
d: d,
97+
Config: config,
98+
}
99+
100+
if err := d.Set("project", u.project); err != nil {
101+
return nil, fmt.Errorf("Error setting project: %s", err)
102+
}
103+
if err := d.Set("location", u.location); err != nil {
104+
return nil, fmt.Errorf("Error setting location: %s", err)
105+
}
106+
if err := d.Set("secret_id", u.GetResourceId()); err != nil {
107+
return nil, fmt.Errorf("Error setting secret_id: %s", err)
108+
}
109+
110+
return u, nil
111+
}
112+
113+
func SecretManagerRegionalRegionalSecretIdParseFunc(d *schema.ResourceData, config *transport_tpg.Config) error {
114+
values := make(map[string]string)
115+
116+
project, _ := tpgresource.GetProject(d, config)
117+
if project != "" {
118+
values["project"] = project
119+
}
120+
121+
location, _ := tpgresource.GetLocation(d, config)
122+
if location != "" {
123+
values["location"] = location
124+
}
125+
126+
m, err := tpgresource.GetImportIdQualifiers([]string{"projects/(?P<project>[^/]+)/locations/(?P<location>[^/]+)/secrets/(?P<secret_id>[^/]+)", "(?P<project>[^/]+)/(?P<location>[^/]+)/(?P<secret_id>[^/]+)", "(?P<location>[^/]+)/(?P<secret_id>[^/]+)", "(?P<secret_id>[^/]+)"}, d, config, d.Id())
127+
if err != nil {
128+
return err
129+
}
130+
131+
for k, v := range m {
132+
values[k] = v
133+
}
134+
135+
u := &SecretManagerRegionalRegionalSecretIamUpdater{
136+
project: values["project"],
137+
location: values["location"],
138+
secretId: values["secret_id"],
139+
d: d,
140+
Config: config,
141+
}
142+
if err := d.Set("secret_id", u.GetResourceId()); err != nil {
143+
return fmt.Errorf("Error setting secret_id: %s", err)
144+
}
145+
d.SetId(u.GetResourceId())
146+
return nil
147+
}
148+
149+
func (u *SecretManagerRegionalRegionalSecretIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.Policy, error) {
150+
url, err := u.qualifyRegionalSecretUrl("getIamPolicy")
151+
if err != nil {
152+
return nil, err
153+
}
154+
155+
project, err := tpgresource.GetProject(u.d, u.Config)
156+
if err != nil {
157+
return nil, err
158+
}
159+
var obj map[string]interface{}
160+
url, err = transport_tpg.AddQueryParams(url, map[string]string{"options.requestedPolicyVersion": fmt.Sprintf("%d", tpgiamresource.IamPolicyVersion)})
161+
if err != nil {
162+
return nil, err
163+
}
164+
165+
userAgent, err := tpgresource.GenerateUserAgentString(u.d, u.Config.UserAgent)
166+
if err != nil {
167+
return nil, err
168+
}
169+
170+
policy, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
171+
Config: u.Config,
172+
Method: "GET",
173+
Project: project,
174+
RawURL: url,
175+
UserAgent: userAgent,
176+
Body: obj,
177+
})
178+
if err != nil {
179+
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
180+
}
181+
182+
out := &cloudresourcemanager.Policy{}
183+
err = tpgresource.Convert(policy, out)
184+
if err != nil {
185+
return nil, errwrap.Wrapf("Cannot convert a policy to a resource manager policy: {{err}}", err)
186+
}
187+
188+
return out, nil
189+
}
190+
191+
func (u *SecretManagerRegionalRegionalSecretIamUpdater) SetResourceIamPolicy(policy *cloudresourcemanager.Policy) error {
192+
json, err := tpgresource.ConvertToMap(policy)
193+
if err != nil {
194+
return err
195+
}
196+
197+
obj := make(map[string]interface{})
198+
obj["policy"] = json
199+
200+
url, err := u.qualifyRegionalSecretUrl("setIamPolicy")
201+
if err != nil {
202+
return err
203+
}
204+
project, err := tpgresource.GetProject(u.d, u.Config)
205+
if err != nil {
206+
return err
207+
}
208+
209+
userAgent, err := tpgresource.GenerateUserAgentString(u.d, u.Config.UserAgent)
210+
if err != nil {
211+
return err
212+
}
213+
214+
_, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
215+
Config: u.Config,
216+
Method: "POST",
217+
Project: project,
218+
RawURL: url,
219+
UserAgent: userAgent,
220+
Body: obj,
221+
Timeout: u.d.Timeout(schema.TimeoutCreate),
222+
})
223+
if err != nil {
224+
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
225+
}
226+
227+
return nil
228+
}
229+
230+
func (u *SecretManagerRegionalRegionalSecretIamUpdater) qualifyRegionalSecretUrl(methodIdentifier string) (string, error) {
231+
urlTemplate := fmt.Sprintf("{{SecretManagerRegionalBasePath}}%s:%s", fmt.Sprintf("projects/%s/locations/%s/secrets/%s", u.project, u.location, u.secretId), methodIdentifier)
232+
url, err := tpgresource.ReplaceVars(u.d, u.Config, urlTemplate)
233+
if err != nil {
234+
return "", err
235+
}
236+
return url, nil
237+
}
238+
239+
func (u *SecretManagerRegionalRegionalSecretIamUpdater) GetResourceId() string {
240+
return fmt.Sprintf("projects/%s/locations/%s/secrets/%s", u.project, u.location, u.secretId)
241+
}
242+
243+
func (u *SecretManagerRegionalRegionalSecretIamUpdater) GetMutexKey() string {
244+
return fmt.Sprintf("iam-secretmanagerregional-regionalsecret-%s", u.GetResourceId())
245+
}
246+
247+
func (u *SecretManagerRegionalRegionalSecretIamUpdater) DescribeResource() string {
248+
return fmt.Sprintf("secretmanagerregional regionalsecret %q", u.GetResourceId())
249+
}

0 commit comments

Comments
 (0)