Skip to content

Commit 62101a8

Browse files
feat: (storage) added timeouts for bucket_iam resources (#15062) (#10726)
[upstream:ad70e38c215b03f7082f98235988119a8b39040d] Signed-off-by: Modular Magician <magic-modules@google.com>
1 parent 2cff006 commit 62101a8

File tree

8 files changed

+77
-8
lines changed

8 files changed

+77
-8
lines changed

.changelog/15062.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
storage: added support for `timeouts` to `google_storage_bucket_iam_binding`, `google_storage_bucket_iam_member`, `google_storage_bucket_iam_policy` resources
3+
```

google-beta/provider/provider_mmv1_resources.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1813,9 +1813,9 @@ var handwrittenIAMResources = map[string]*schema.Resource{
18131813
"google_storage_managed_folder_iam_binding": tpgiamresource.ResourceIamBinding(storage.StorageManagedFolderIamSchema, storage.StorageManagedFolderIamUpdaterProducer, storage.StorageManagedFolderIdParseFunc),
18141814
"google_storage_managed_folder_iam_member": tpgiamresource.ResourceIamMember(storage.StorageManagedFolderIamSchema, storage.StorageManagedFolderIamUpdaterProducer, storage.StorageManagedFolderIdParseFunc),
18151815
"google_storage_managed_folder_iam_policy": tpgiamresource.ResourceIamPolicy(storage.StorageManagedFolderIamSchema, storage.StorageManagedFolderIamUpdaterProducer, storage.StorageManagedFolderIdParseFunc),
1816-
"google_storage_bucket_iam_binding": tpgiamresource.ResourceIamBinding(storage.StorageBucketIamSchema, storage.StorageBucketIamUpdaterProducer, storage.StorageBucketIdParseFunc),
1817-
"google_storage_bucket_iam_member": tpgiamresource.ResourceIamMember(storage.StorageBucketIamSchema, storage.StorageBucketIamUpdaterProducer, storage.StorageBucketIdParseFunc),
1818-
"google_storage_bucket_iam_policy": tpgiamresource.ResourceIamPolicy(storage.StorageBucketIamSchema, storage.StorageBucketIamUpdaterProducer, storage.StorageBucketIdParseFunc),
1816+
"google_storage_bucket_iam_binding": tpgiamresource.ResourceIamBinding(storage.StorageBucketIamSchema, storage.StorageBucketIamUpdaterProducer, storage.StorageBucketIdParseFunc, tpgiamresource.IamCreateTimeOut(20)),
1817+
"google_storage_bucket_iam_member": tpgiamresource.ResourceIamMember(storage.StorageBucketIamSchema, storage.StorageBucketIamUpdaterProducer, storage.StorageBucketIdParseFunc, tpgiamresource.IamCreateTimeOut(20)),
1818+
"google_storage_bucket_iam_policy": tpgiamresource.ResourceIamPolicy(storage.StorageBucketIamSchema, storage.StorageBucketIamUpdaterProducer, storage.StorageBucketIdParseFunc, tpgiamresource.IamCreateTimeOut(20)),
18191819
"google_organization_iam_binding": tpgiamresource.ResourceIamBinding(resourcemanager.IamOrganizationSchema, resourcemanager.NewOrganizationIamUpdater, resourcemanager.OrgIdParseFunc),
18201820
"google_organization_iam_member": tpgiamresource.ResourceIamMember(resourcemanager.IamOrganizationSchema, resourcemanager.NewOrganizationIamUpdater, resourcemanager.OrgIdParseFunc),
18211821
"google_organization_iam_policy": tpgiamresource.ResourceIamPolicy(resourcemanager.IamOrganizationSchema, resourcemanager.NewOrganizationIamUpdater, resourcemanager.OrgIdParseFunc),

google-beta/services/storage/iam_storage_bucket_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,9 @@ resource "google_storage_bucket_iam_member" "foo" {
373373
bucket = google_storage_bucket.default.name
374374
role = "%{role}"
375375
member = "user:admin@hashicorptest.com"
376+
timeouts {
377+
create = "5m"
378+
}
376379
}
377380
`, context)
378381
}
@@ -399,6 +402,9 @@ data "google_iam_policy" "foo" {
399402
resource "google_storage_bucket_iam_policy" "foo" {
400403
bucket = google_storage_bucket.default.name
401404
policy_data = data.google_iam_policy.foo.policy_data
405+
timeouts {
406+
create = "5m"
407+
}
402408
}
403409
404410
data "google_storage_bucket_iam_policy" "foo" {
@@ -440,6 +446,9 @@ resource "google_storage_bucket_iam_binding" "foo" {
440446
bucket = google_storage_bucket.default.name
441447
role = "%{role}"
442448
members = ["user:admin@hashicorptest.com"]
449+
timeouts {
450+
create = "5m"
451+
}
443452
}
444453
`, context)
445454
}

google-beta/tpgiamresource/iam.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,7 @@ type IamSettings struct {
485485
EnableBatching bool
486486
StateUpgraders []schema.StateUpgrader
487487
SchemaVersion int
488+
CreateTimeOut int64
488489
}
489490

490491
func NewIamSettings(options ...func(*IamSettings)) *IamSettings {
@@ -521,6 +522,12 @@ func IamWithSchemaVersion(version int) func(*IamSettings) {
521522
}
522523
}
523524

525+
func IamCreateTimeOut(createTimeout int64) func(s *IamSettings) {
526+
return func(s *IamSettings) {
527+
s.CreateTimeOut = createTimeout
528+
}
529+
}
530+
524531
// Util to deref and print auditConfigs
525532
func DebugPrintAuditConfigs(bs []*cloudresourcemanager.AuditConfig) string {
526533
v, _ := json.MarshalIndent(bs, "", "\t")

google-beta/tpgiamresource/resource_iam_binding.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"fmt"
2222
"log"
2323
"strings"
24+
"time"
2425

2526
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
2627
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
@@ -81,8 +82,9 @@ var iamBindingSchema = map[string]*schema.Schema{
8182

8283
func ResourceIamBinding(parentSpecificSchema map[string]*schema.Schema, newUpdaterFunc NewResourceIamUpdaterFunc, resourceIdParser ResourceIdParserFunc, options ...func(*IamSettings)) *schema.Resource {
8384
settings := NewIamSettings(options...)
85+
createTimeOut := time.Duration(settings.CreateTimeOut) * time.Minute
8486

85-
return &schema.Resource{
87+
resource := &schema.Resource{
8688
Create: resourceIamBindingCreateUpdate(newUpdaterFunc, settings.EnableBatching),
8789
Read: resourceIamBindingRead(newUpdaterFunc),
8890
Update: resourceIamBindingCreateUpdate(newUpdaterFunc, settings.EnableBatching),
@@ -99,6 +101,12 @@ func ResourceIamBinding(parentSpecificSchema map[string]*schema.Schema, newUpdat
99101
},
100102
UseJSONNumber: true,
101103
}
104+
if createTimeOut > 0 {
105+
resource.Timeouts = &schema.ResourceTimeout{
106+
Create: schema.DefaultTimeout(createTimeOut),
107+
}
108+
}
109+
return resource
102110
}
103111

104112
func resourceIamBindingCreateUpdate(newUpdaterFunc NewResourceIamUpdaterFunc, enableBatching bool) func(*schema.ResourceData, interface{}) error {

google-beta/tpgiamresource/resource_iam_member.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"log"
2323
"regexp"
2424
"strings"
25+
"time"
2526

2627
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
2728
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
@@ -188,7 +189,9 @@ func iamMemberImport(newUpdaterFunc NewResourceIamUpdaterFunc, resourceIdParser
188189
func ResourceIamMember(parentSpecificSchema map[string]*schema.Schema, newUpdaterFunc NewResourceIamUpdaterFunc, resourceIdParser ResourceIdParserFunc, options ...func(*IamSettings)) *schema.Resource {
189190
settings := NewIamSettings(options...)
190191

191-
return &schema.Resource{
192+
createTimeOut := time.Duration(settings.CreateTimeOut) * time.Minute
193+
194+
resourceSchema := &schema.Resource{
192195
Create: resourceIamMemberCreate(newUpdaterFunc, settings.EnableBatching),
193196
Read: resourceIamMemberRead(newUpdaterFunc),
194197
Delete: resourceIamMemberDelete(newUpdaterFunc, settings.EnableBatching),
@@ -205,6 +208,13 @@ func ResourceIamMember(parentSpecificSchema map[string]*schema.Schema, newUpdate
205208
},
206209
UseJSONNumber: true,
207210
}
211+
212+
if createTimeOut > 0 {
213+
resourceSchema.Timeouts = &schema.ResourceTimeout{
214+
Create: schema.DefaultTimeout(createTimeOut),
215+
}
216+
}
217+
return resourceSchema
208218
}
209219

210220
func getResourceIamMember(d *schema.ResourceData) *cloudresourcemanager.Binding {

google-beta/tpgiamresource/resource_iam_policy.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
package tpgiamresource
1818

1919
import (
20-
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
21-
2220
"encoding/json"
2321
"errors"
2422
"fmt"
23+
"time"
2524

25+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
2626
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
2727
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
2828

@@ -58,8 +58,9 @@ func iamPolicyImport(resourceIdParser ResourceIdParserFunc) schema.StateFunc {
5858

5959
func ResourceIamPolicy(parentSpecificSchema map[string]*schema.Schema, newUpdaterFunc NewResourceIamUpdaterFunc, resourceIdParser ResourceIdParserFunc, options ...func(*IamSettings)) *schema.Resource {
6060
settings := NewIamSettings(options...)
61+
createTimeOut := time.Duration(settings.CreateTimeOut) * time.Minute
6162

62-
return &schema.Resource{
63+
resourceSchema := &schema.Resource{
6364
Create: ResourceIamPolicyCreate(newUpdaterFunc),
6465
Read: ResourceIamPolicyRead(newUpdaterFunc),
6566
Update: ResourceIamPolicyUpdate(newUpdaterFunc),
@@ -77,6 +78,12 @@ func ResourceIamPolicy(parentSpecificSchema map[string]*schema.Schema, newUpdate
7778
},
7879
UseJSONNumber: true,
7980
}
81+
if createTimeOut > 0 {
82+
resourceSchema.Timeouts = &schema.ResourceTimeout{
83+
Create: schema.DefaultTimeout(createTimeOut),
84+
}
85+
}
86+
return resourceSchema
8087
}
8188

8289
func ResourceIamPolicyCreate(newUpdaterFunc NewResourceIamUpdaterFunc) schema.CreateFunc {

website/docs/r/storage_bucket_iam.html.markdown

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ data "google_iam_policy" "admin" {
5151
resource "google_storage_bucket_iam_policy" "policy" {
5252
bucket = google_storage_bucket.default.name
5353
policy_data = data.google_iam_policy.admin.policy_data
54+
timeouts {
55+
create = "5m"
56+
}
5457
}
5558
```
5659

@@ -75,6 +78,9 @@ data "google_iam_policy" "admin" {
7578
resource "google_storage_bucket_iam_policy" "policy" {
7679
bucket = google_storage_bucket.default.name
7780
policy_data = data.google_iam_policy.admin.policy_data
81+
timeouts {
82+
create = "5m"
83+
}
7884
}
7985
```
8086
## google_storage_bucket_iam_binding
@@ -86,6 +92,9 @@ resource "google_storage_bucket_iam_binding" "binding" {
8692
members = [
8793
"user:jane@example.com",
8894
]
95+
timeouts {
96+
create = "5m"
97+
}
8998
}
9099
```
91100

@@ -104,6 +113,9 @@ resource "google_storage_bucket_iam_binding" "binding" {
104113
description = "Expiring at midnight of 2019-12-31"
105114
expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")"
106115
}
116+
timeouts {
117+
create = "5m"
118+
}
107119
}
108120
```
109121
## google_storage_bucket_iam_member
@@ -113,6 +125,9 @@ resource "google_storage_bucket_iam_member" "member" {
113125
bucket = google_storage_bucket.default.name
114126
role = "roles/storage.admin"
115127
member = "user:jane@example.com"
128+
timeouts {
129+
create = "5m"
130+
}
116131
}
117132
```
118133

@@ -129,6 +144,9 @@ resource "google_storage_bucket_iam_member" "member" {
129144
description = "Expiring at midnight of 2019-12-31"
130145
expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")"
131146
}
147+
timeouts {
148+
create = "5m"
149+
}
132150
}
133151
```
134152

@@ -180,6 +198,13 @@ exported:
180198

181199
* `etag` - (Computed) The etag of the IAM policy.
182200

201+
## Timeouts
202+
203+
This resource provides the following
204+
[Timeouts](https://developer.hashicorp.com/terraform/plugin/sdkv2/resources/retries-and-customizable-timeouts) configuration options:
205+
206+
- `create` - Default is 20 minutes.
207+
183208
## Import
184209

185210
For all import syntaxes, the "resource in question" can take any of the following forms:

0 commit comments

Comments
 (0)