fix: include object versions when deleting all objects in GCS bucket (#1285)

* fix: include object versions when deleting all objects in GCS bucket

* test: acceptance test for force destroy with versioning
This commit is contained in:
Matthew Jones 2018-04-04 08:21:29 +12:00 committed by Vincent Roseberry
parent 3460ddcaa7
commit b80aad4bc6
2 changed files with 48 additions and 2 deletions

View File

@ -446,7 +446,7 @@ func resourceStorageBucketDelete(d *schema.ResourceData, meta interface{}) error
bucket := d.Get("name").(string)
for {
res, err := config.clientStorage.Objects.List(bucket).Do()
res, err := config.clientStorage.Objects.List(bucket).Versions(true).Do()
if err != nil {
fmt.Printf("Error Objects.List failed: %v", err)
return err
@ -459,7 +459,7 @@ func resourceStorageBucketDelete(d *schema.ResourceData, meta interface{}) error
for _, object := range res.Items {
log.Printf("[DEBUG] Found %s", object.Name)
if err := config.clientStorage.Objects.Delete(bucket, object.Name).Do(); err != nil {
if err := config.clientStorage.Objects.Delete(bucket, object.Name).Generation(object.Generation).Do(); err != nil {
log.Fatalf("Error trying to delete object: %s %s\n\n", object.Name, err)
} else {
log.Printf("Object deleted: %s \n\n", object.Name)

View File

@ -360,6 +360,40 @@ func TestAccStorageBucket_forceDestroy(t *testing.T) {
})
}
func TestAccStorageBucket_forceDestroyWithVersioning(t *testing.T) {
t.Parallel()
var bucket storage.Bucket
bucketName := fmt.Sprintf("tf-test-acc-bucket-%d", acctest.RandInt())
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccStorageBucketDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccStorageBucket_forceDestroyWithVersioning(bucketName),
Check: resource.ComposeTestCheckFunc(
testAccCheckStorageBucketExists(
"google_storage_bucket.bucket", bucketName, &bucket),
),
},
resource.TestStep{
Config: testAccStorageBucket_forceDestroyWithVersioning(bucketName),
Check: resource.ComposeTestCheckFunc(
testAccCheckStorageBucketPutItem(bucketName),
),
},
resource.TestStep{
Config: testAccStorageBucket_forceDestroyWithVersioning(bucketName),
Check: resource.ComposeTestCheckFunc(
testAccCheckStorageBucketPutItem(bucketName),
),
},
},
})
}
func TestAccStorageBucket_versioning(t *testing.T) {
t.Parallel()
@ -768,6 +802,18 @@ resource "google_storage_bucket" "bucket" {
`, bucketName)
}
func testAccStorageBucket_forceDestroyWithVersioning(bucketName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" {
name = "%s"
force_destroy = "true"
versioning = {
enabled = "true"
}
}
`, bucketName)
}
func testAccStorageBucket_versioning(bucketName string) string {
return fmt.Sprintf(`
resource "google_storage_bucket" "bucket" {