Skip to content

Commit e314a7e

Browse files
nat-hendersonmodular-magician
authored andcommitted
add support for requester_pays to google_storage_bucket
1 parent aaea00f commit e314a7e

File tree

3 files changed

+98
-0
lines changed

3 files changed

+98
-0
lines changed

google/resource_storage_bucket.go

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

51+
"requester_pays": &schema.Schema{
52+
Type: schema.TypeBool,
53+
Optional: true,
54+
},
55+
5156
"force_destroy": &schema.Schema{
5257
Type: schema.TypeBool,
5358
Optional: true,
@@ -313,6 +318,12 @@ func resourceStorageBucketCreate(d *schema.ResourceData, meta interface{}) error
313318
sb.Encryption = expandBucketEncryption(v.([]interface{}))
314319
}
315320

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

318329
err = retry(func() error {
@@ -342,6 +353,14 @@ func resourceStorageBucketUpdate(d *schema.ResourceData, meta interface{}) error
342353
}
343354
}
344355

356+
if d.HasChange("requester_pays") {
357+
v := d.Get("requester_pays")
358+
sb.Billing = &storage.BucketBilling{
359+
RequesterPays: v.(bool),
360+
ForceSendFields: []string{"RequesterPays"},
361+
}
362+
}
363+
345364
if d.HasChange("versioning") {
346365
if v, ok := d.GetOk("versioning"); ok {
347366
sb.Versioning = expandBucketVersioning(v)
@@ -471,6 +490,13 @@ func resourceStorageBucketRead(d *schema.ResourceData, meta interface{}) error {
471490
d.Set("versioning", flattenBucketVersioning(res.Versioning))
472491
d.Set("lifecycle_rule", flattenBucketLifecycle(res.Lifecycle))
473492
d.Set("labels", res.Labels)
493+
494+
if res.Billing == nil {
495+
d.Set("requester_pays", nil)
496+
} else {
497+
d.Set("requester_pays", res.Billing.RequesterPays)
498+
}
499+
474500
d.SetId(res.Id)
475501
return nil
476502
}

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)