mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-10-04 17:51:11 +00:00
Add versioning for google storage buckets (#381)
This commit is contained in:
parent
b1879b2459
commit
43e749c213
@ -141,6 +141,21 @@ func resourceStorageBucket() *schema.Resource {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"versioning": &schema.Schema{
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Optional: true,
|
||||||
|
MaxItems: 1,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
"enabled": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Default: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
"website": &schema.Schema{
|
"website": &schema.Schema{
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
@ -218,6 +233,10 @@ func resourceStorageBucketCreate(d *schema.ResourceData, meta interface{}) error
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if v, ok := d.GetOk("versioning"); ok {
|
||||||
|
sb.Versioning = expandBucketVersioning(v)
|
||||||
|
}
|
||||||
|
|
||||||
if v, ok := d.GetOk("website"); ok {
|
if v, ok := d.GetOk("website"); ok {
|
||||||
websites := v.([]interface{})
|
websites := v.([]interface{})
|
||||||
|
|
||||||
@ -282,6 +301,12 @@ func resourceStorageBucketUpdate(d *schema.ResourceData, meta interface{}) error
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if d.HasChange("versioning") {
|
||||||
|
if v, ok := d.GetOk("versioning"); ok {
|
||||||
|
sb.Versioning = expandBucketVersioning(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if d.HasChange("website") {
|
if d.HasChange("website") {
|
||||||
if v, ok := d.GetOk("website"); ok {
|
if v, ok := d.GetOk("website"); ok {
|
||||||
websites := v.([]interface{})
|
websites := v.([]interface{})
|
||||||
@ -351,6 +376,7 @@ func resourceStorageBucketRead(d *schema.ResourceData, meta interface{}) error {
|
|||||||
d.Set("storage_class", res.StorageClass)
|
d.Set("storage_class", res.StorageClass)
|
||||||
d.Set("location", res.Location)
|
d.Set("location", res.Location)
|
||||||
d.Set("cors", flattenCors(res.Cors))
|
d.Set("cors", flattenCors(res.Cors))
|
||||||
|
d.Set("versioning", flattenBucketVersioning(res.Versioning))
|
||||||
d.SetId(res.Id)
|
d.SetId(res.Id)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -448,6 +474,32 @@ func flattenCors(corsRules []*storage.BucketCors) []map[string]interface{} {
|
|||||||
return corsRulesSchema
|
return corsRulesSchema
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func expandBucketVersioning(configured interface{}) *storage.BucketVersioning {
|
||||||
|
versionings := configured.([]interface{})
|
||||||
|
versioning := versionings[0].(map[string]interface{})
|
||||||
|
|
||||||
|
bucketVersioning := &storage.BucketVersioning{}
|
||||||
|
|
||||||
|
bucketVersioning.Enabled = versioning["enabled"].(bool)
|
||||||
|
bucketVersioning.ForceSendFields = append(bucketVersioning.ForceSendFields, "Enabled")
|
||||||
|
|
||||||
|
return bucketVersioning
|
||||||
|
}
|
||||||
|
|
||||||
|
func flattenBucketVersioning(bucketVersioning *storage.BucketVersioning) []map[string]interface{} {
|
||||||
|
versionings := make([]map[string]interface{}, 0, 1)
|
||||||
|
|
||||||
|
if bucketVersioning == nil {
|
||||||
|
return versionings
|
||||||
|
}
|
||||||
|
|
||||||
|
versioning := map[string]interface{}{
|
||||||
|
"enabled": bucketVersioning.Enabled,
|
||||||
|
}
|
||||||
|
versionings = append(versionings, versioning)
|
||||||
|
return versionings
|
||||||
|
}
|
||||||
|
|
||||||
func resourceGCSBucketLifecycleCreateOrUpdate(d *schema.ResourceData, sb *storage.Bucket) error {
|
func resourceGCSBucketLifecycleCreateOrUpdate(d *schema.ResourceData, sb *storage.Bucket) error {
|
||||||
if v, ok := d.GetOk("lifecycle_rule"); ok {
|
if v, ok := d.GetOk("lifecycle_rule"); ok {
|
||||||
lifecycle_rules := v.([]interface{})
|
lifecycle_rules := v.([]interface{})
|
||||||
|
@ -325,6 +325,30 @@ func TestAccStorageBucket_forceDestroy(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccStorageBucket_versioning(t *testing.T) {
|
||||||
|
var bucket storage.Bucket
|
||||||
|
bucketName := fmt.Sprintf("tf-test-acl-bucket-%d", acctest.RandInt())
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testAccStorageBucketDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
Config: testAccStorageBucket_versioning(bucketName),
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testAccCheckStorageBucketExists(
|
||||||
|
"google_storage_bucket.bucket", bucketName, &bucket),
|
||||||
|
resource.TestCheckResourceAttr(
|
||||||
|
"google_storage_bucket.bucket", "versioning.#", "1"),
|
||||||
|
resource.TestCheckResourceAttr(
|
||||||
|
"google_storage_bucket.bucket", "versioning.0.enabled", "true"),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestAccStorageBucket_cors(t *testing.T) {
|
func TestAccStorageBucket_cors(t *testing.T) {
|
||||||
var bucket storage.Bucket
|
var bucket storage.Bucket
|
||||||
bucketName := fmt.Sprintf("tf-test-acl-bucket-%d", acctest.RandInt())
|
bucketName := fmt.Sprintf("tf-test-acl-bucket-%d", acctest.RandInt())
|
||||||
@ -590,6 +614,17 @@ resource "google_storage_bucket" "bucket" {
|
|||||||
`, bucketName)
|
`, bucketName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testAccStorageBucket_versioning(bucketName string) string {
|
||||||
|
return fmt.Sprintf(`
|
||||||
|
resource "google_storage_bucket" "bucket" {
|
||||||
|
name = "%s"
|
||||||
|
versioning = {
|
||||||
|
enabled = "true"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`, bucketName)
|
||||||
|
}
|
||||||
|
|
||||||
func testAccStorageBucket_lifecycleRules(bucketName string) string {
|
func testAccStorageBucket_lifecycleRules(bucketName string) string {
|
||||||
return fmt.Sprintf(`
|
return fmt.Sprintf(`
|
||||||
resource "google_storage_bucket" "bucket" {
|
resource "google_storage_bucket" "bucket" {
|
||||||
|
@ -58,6 +58,8 @@ to `google_storage_bucket_acl.predefined_acl`.
|
|||||||
|
|
||||||
* `lifecycle_rule` - (Optional) The bucket's [Lifecycle Rules](https://cloud.google.com/storage/docs/lifecycle#configuration) configuration. Multiple blocks of this type are permitted. Structure is documented below.
|
* `lifecycle_rule` - (Optional) The bucket's [Lifecycle Rules](https://cloud.google.com/storage/docs/lifecycle#configuration) configuration. Multiple blocks of this type are permitted. Structure is documented below.
|
||||||
|
|
||||||
|
* `versioning` - (Optional) The bucket's [Versioning](https://cloud.google.com/storage/docs/object-versioning) configuration.
|
||||||
|
|
||||||
* `website` - (Optional) Configuration if the bucket acts as a website. Structure is documented below.
|
* `website` - (Optional) Configuration if the bucket acts as a website. Structure is documented below.
|
||||||
|
|
||||||
* `cors` - (Optional) The bucket's [Cross-Origin Resource Sharing (CORS)](https://www.w3.org/TR/cors/) configuration. Multiple blocks of this type are permitted. Structure is documented below.
|
* `cors` - (Optional) The bucket's [Cross-Origin Resource Sharing (CORS)](https://www.w3.org/TR/cors/) configuration. Multiple blocks of this type are permitted. Structure is documented below.
|
||||||
@ -86,6 +88,10 @@ The `condition` block supports the following elements, and requires at least one
|
|||||||
|
|
||||||
* `num_newer_versions` - (Optional) Relevant only for versioned objects. The number of newer versions of an object to satisfy this condition.
|
* `num_newer_versions` - (Optional) Relevant only for versioned objects. The number of newer versions of an object to satisfy this condition.
|
||||||
|
|
||||||
|
The `versioning` block supports:
|
||||||
|
|
||||||
|
* `enabled` - (Optional) While set to `true`, versioning is fully enabled for this bucket.
|
||||||
|
|
||||||
The `website` block supports:
|
The `website` block supports:
|
||||||
|
|
||||||
* `main_page_suffix` - (Optional) Behaves as the bucket's directory index where
|
* `main_page_suffix` - (Optional) Behaves as the bucket's directory index where
|
||||||
|
Loading…
Reference in New Issue
Block a user