Skip to content

Commit 42d230d

Browse files
nat-hendersonmodular-magician
authored andcommitted
add support for requester_pays to google_storage_bucket
1 parent e893533 commit 42d230d

File tree

3 files changed

+97
-0
lines changed

3 files changed

+97
-0
lines changed

google/resource_storage_bucket.go

+25
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ func resourceStorageBucket() *schema.Resource {
4848
},
4949
},
5050

51+
"requester_pays": &schema.Schema{
52+
Type: schema.TypeBool,
53+
Optional: true,
54+
Default: nil,
55+
},
56+
5157
"force_destroy": &schema.Schema{
5258
Type: schema.TypeBool,
5359
Optional: true,
@@ -313,6 +319,12 @@ func resourceStorageBucketCreate(d *schema.ResourceData, meta interface{}) error
313319
sb.Encryption = expandBucketEncryption(v.([]interface{}))
314320
}
315321

322+
if v, ok := d.GetOk("requester_pays"); ok {
323+
sb.Billing = &storage.BucketBilling{
324+
RequesterPays: v.(bool),
325+
}
326+
}
327+
316328
var res *storage.Bucket
317329

318330
err = retry(func() error {
@@ -342,6 +354,14 @@ func resourceStorageBucketUpdate(d *schema.ResourceData, meta interface{}) error
342354
}
343355
}
344356

357+
if d.HasChange("requester_pays") {
358+
v := d.Get("requester_pays")
359+
sb.Billing = &storage.BucketBilling{
360+
RequesterPays: v.(bool),
361+
ForceSendFields: []string{"RequesterPays"},
362+
}
363+
}
364+
345365
if d.HasChange("versioning") {
346366
if v, ok := d.GetOk("versioning"); ok {
347367
sb.Versioning = expandBucketVersioning(v)
@@ -471,6 +491,11 @@ func resourceStorageBucketRead(d *schema.ResourceData, meta interface{}) error {
471491
d.Set("versioning", flattenBucketVersioning(res.Versioning))
472492
d.Set("lifecycle_rule", flattenBucketLifecycle(res.Lifecycle))
473493
d.Set("labels", res.Labels)
494+
495+
if res.Billing != nil {
496+
d.Set("requester_pays", res.Billing.RequesterPays)
497+
}
498+
474499
d.SetId(res.Id)
475500
return nil
476501
}

google/resource_storage_bucket_test.go

+70
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,35 @@ func TestAccStorageBucket_basic(t *testing.T) {
4747
})
4848
}
4949

50+
func TestAccStorageBucket_requesterPays(t *testing.T) {
51+
t.Parallel()
52+
53+
var bucket storage.Bucket
54+
bucketName := fmt.Sprintf("tf-test-requester-bucket-%d", acctest.RandInt())
55+
56+
resource.Test(t, resource.TestCase{
57+
PreCheck: func() { testAccPreCheck(t) },
58+
Providers: testAccProviders,
59+
CheckDestroy: testAccStorageBucketDestroy,
60+
Steps: []resource.TestStep{
61+
resource.TestStep{
62+
Config: testAccStorageBucket_requesterPays(bucketName, true),
63+
Check: resource.ComposeTestCheckFunc(
64+
testAccCheckStorageBucketExists(
65+
"google_storage_bucket.bucket", bucketName, &bucket),
66+
resource.TestCheckResourceAttr(
67+
"google_storage_bucket.bucket", "requester_pays", "true"),
68+
),
69+
},
70+
resource.TestStep{
71+
ResourceName: "google_storage_bucket.bucket",
72+
ImportState: true,
73+
ImportStateVerify: true,
74+
},
75+
},
76+
})
77+
}
78+
5079
func TestAccStorageBucket_lowercaseLocation(t *testing.T) {
5180
t.Parallel()
5281

@@ -206,6 +235,38 @@ func TestAccStorageBucket_storageClass(t *testing.T) {
206235
},
207236
})
208237
}
238+
func TestAccStorageBucket_update_requesterPays(t *testing.T) {
239+
t.Parallel()
240+
241+
var bucket storage.Bucket
242+
bucketName := fmt.Sprintf("tf-test-requester-bucket-%d", acctest.RandInt())
243+
244+
resource.Test(t, resource.TestCase{
245+
PreCheck: func() { testAccPreCheck(t) },
246+
Providers: testAccProviders,
247+
CheckDestroy: testAccStorageBucketDestroy,
248+
Steps: []resource.TestStep{
249+
resource.TestStep{
250+
Config: testAccStorageBucket_requesterPays(bucketName, true),
251+
Check: resource.ComposeTestCheckFunc(
252+
testAccCheckStorageBucketExists(
253+
"google_storage_bucket.bucket", bucketName, &bucket),
254+
resource.TestCheckResourceAttr(
255+
"google_storage_bucket.bucket", "requester_pays", "true"),
256+
),
257+
},
258+
resource.TestStep{
259+
Config: testAccStorageBucket_requesterPays(bucketName, false),
260+
Check: resource.ComposeTestCheckFunc(
261+
testAccCheckStorageBucketExists(
262+
"google_storage_bucket.bucket", bucketName, &bucket),
263+
resource.TestCheckResourceAttr(
264+
"google_storage_bucket.bucket", "requester_pays", "false"),
265+
),
266+
},
267+
},
268+
})
269+
}
209270

210271
func TestAccStorageBucket_update(t *testing.T) {
211272
t.Parallel()
@@ -746,6 +807,15 @@ resource "google_storage_bucket" "bucket" {
746807
`, bucketName)
747808
}
748809

810+
func testAccStorageBucket_requesterPays(bucketName string, pays bool) string {
811+
return fmt.Sprintf(`
812+
resource "google_storage_bucket" "bucket" {
813+
name = "%s"
814+
requester_pays = %t
815+
}
816+
`, bucketName, pays)
817+
}
818+
749819
func testAccStorageBucket_lowercaseLocation(bucketName string) string {
750820
return fmt.Sprintf(`
751821
resource "google_storage_bucket" "bucket" {

website/docs/r/storage_bucket.html.markdown

+2
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ The following arguments are supported:
6868

6969
* `encryption` - (Optional) The bucket's encryption configuration.
7070

71+
* `requester_pays` - (Optional, Default: false) Enables [Requester Pays](https://cloud.google.com/storage/docs/requester-pays) on a storage bucket.
72+
7173
The `lifecycle_rule` block supports:
7274

7375
* `action` - (Required) The Lifecycle Rule's action configuration. A single block of this type is supported. Structure is documented below.

0 commit comments

Comments
 (0)