Add support for GCS StorageClass

Fixes: #7417
This commit is contained in:
Matt Morrison 2016-09-22 07:46:35 +12:00
parent 7b301d7411
commit c28c9ef459
3 changed files with 63 additions and 0 deletions

View File

@ -56,6 +56,13 @@ func resourceStorageBucket() *schema.Resource {
Computed: true, Computed: true,
}, },
"storage_class": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Default: "STANDARD",
ForceNew: true,
},
"website": &schema.Schema{ "website": &schema.Schema{
Type: schema.TypeList, Type: schema.TypeList,
Optional: true, Optional: true,
@ -91,6 +98,10 @@ func resourceStorageBucketCreate(d *schema.ResourceData, meta interface{}) error
// Create a bucket, setting the acl, location and name. // Create a bucket, setting the acl, location and name.
sb := &storage.Bucket{Name: bucket, Location: location} sb := &storage.Bucket{Name: bucket, Location: location}
if v, ok := d.GetOk("storage_class"); ok {
sb.StorageClass = v.(string)
}
if v, ok := d.GetOk("website"); ok { if v, ok := d.GetOk("website"); ok {
websites := v.([]interface{}) websites := v.([]interface{})

View File

@ -59,6 +59,45 @@ func TestAccStorageCustomAttributes(t *testing.T) {
}) })
} }
func TestAccStorageStorageClass(t *testing.T) {
bucketName := fmt.Sprintf("tf-test-acc-bucket-%d", acctest.RandInt())
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccGoogleStorageDestroy,
Steps: []resource.TestStep{
{
Config: testGoogleStorageBucketsReaderStorageClass(bucketName, "STANDARD"),
Check: resource.ComposeTestCheckFunc(
testAccCheckCloudStorageBucketExists(
"google_storage_bucket.bucket", bucketName),
resource.TestCheckResourceAttr(
"google_storage_bucket.bucket", "storage_class", "STANDARD"),
),
},
{
Config: testGoogleStorageBucketsReaderStorageClass(bucketName, "NEARLINE"),
Check: resource.ComposeTestCheckFunc(
testAccCheckCloudStorageBucketExists(
"google_storage_bucket.bucket", bucketName),
resource.TestCheckResourceAttr(
"google_storage_bucket.bucket", "storage_class", "NEARLINE"),
),
},
{
Config: testGoogleStorageBucketsReaderStorageClass(bucketName, "DURABLE_REDUCED_AVAILABILITY"),
Check: resource.ComposeTestCheckFunc(
testAccCheckCloudStorageBucketExists(
"google_storage_bucket.bucket", bucketName),
resource.TestCheckResourceAttr(
"google_storage_bucket.bucket", "storage_class", "DURABLE_REDUCED_AVAILABILITY"),
),
},
},
})
}
func TestAccStorageBucketUpdate(t *testing.T) { func TestAccStorageBucketUpdate(t *testing.T) {
bucketName := fmt.Sprintf("tf-test-acl-bucket-%d", acctest.RandInt()) bucketName := fmt.Sprintf("tf-test-acl-bucket-%d", acctest.RandInt())
@ -226,3 +265,12 @@ resource "google_storage_bucket" "bucket" {
} }
`, bucketName) `, bucketName)
} }
func testGoogleStorageBucketsReaderStorageClass(bucketName string, storageClass string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" {
name = "%s"
storage_class = "%s"
}
`, bucketName, storageClass)
}

View File

@ -48,6 +48,10 @@ to `google_storage_bucket_acl.predefined_acl`.
* `project` - (Optional) The project in which the resource belongs. If it * `project` - (Optional) The project in which the resource belongs. If it
is not provided, the provider project is used. is not provided, the provider project is used.
* `storage_class` - (Optional) The [Storage Class](https://cloud.google.com/storage/docs/storage-classes) of the new bucket. Supported values include: `STANDARD`, `NEARLINE`, `DURABLE_REDUCED_AVAILABILITY`
> See for more info.
* `website` - (Optional) Configuration if the bucket acts as a website. * `website` - (Optional) Configuration if the bucket acts as a website.
The optional `website` block supports: The optional `website` block supports: