|
4 | 4 | "fmt"
|
5 | 5 | "os"
|
6 | 6 | "testing"
|
| 7 | + "time" |
7 | 8 |
|
8 | 9 | "github.com/hashicorp/terraform-plugin-testing/helper/resource"
|
9 | 10 | "github.com/hashicorp/terraform-plugin-testing/terraform"
|
@@ -896,6 +897,26 @@ func testAccCheckEncryptionKey(t *testing.T, n string, disk *compute.Disk) resou
|
896 | 897 | }
|
897 | 898 | }
|
898 | 899 |
|
| 900 | +func testAccCheckComputeDisk_removeBackupSnapshot(t *testing.T, parentDiskName string) resource.TestCheckFunc { |
| 901 | + return func(s *terraform.State) error { |
| 902 | + config := acctest.GoogleProviderConfig(t) |
| 903 | + snapshot, err := config.NewComputeClient(config.UserAgent).Snapshots.List(envvar.GetTestProjectFromEnv()).Filter(fmt.Sprintf("name eq %s.*", parentDiskName)).Do() |
| 904 | + if err != nil { |
| 905 | + return err |
| 906 | + } |
| 907 | + |
| 908 | + if len(snapshot.Items) == 0 { |
| 909 | + return fmt.Errorf("No snapshot found") |
| 910 | + } |
| 911 | + |
| 912 | + op, err := config.NewComputeClient(config.UserAgent).Snapshots.Delete(envvar.GetTestProjectFromEnv(), snapshot.Items[0].Name).Do() |
| 913 | + if err != nil { |
| 914 | + return err |
| 915 | + } |
| 916 | + return tpgcompute.ComputeOperationWaitTime(config, op, envvar.GetTestProjectFromEnv(), "Deleting Snapshot", config.UserAgent, 10*time.Minute) |
| 917 | + } |
| 918 | +} |
| 919 | + |
899 | 920 | func TestAccComputeDisk_cloneDisk(t *testing.T) {
|
900 | 921 | t.Parallel()
|
901 | 922 | pid := envvar.GetTestProjectFromEnv()
|
@@ -1070,6 +1091,52 @@ func TestAccComputeDisk_featuresUpdated(t *testing.T) {
|
1070 | 1091 | })
|
1071 | 1092 | }
|
1072 | 1093 |
|
| 1094 | +func TestAccComputeDisk_createSnapshotBeforeDestroy(t *testing.T) { |
| 1095 | + acctest.SkipIfVcr(t) // Disk cleanup test check |
| 1096 | + t.Parallel() |
| 1097 | + |
| 1098 | + var disk1 compute.Disk |
| 1099 | + var disk2 compute.Disk |
| 1100 | + var disk3 compute.Disk |
| 1101 | + context := map[string]interface{}{ |
| 1102 | + "disk_name1": fmt.Sprintf("tf-test-disk-%s", acctest.RandString(t, 10)), |
| 1103 | + "disk_name2": fmt.Sprintf("test-%s", acctest.RandString(t, 44)), //this is over the snapshot character creation limit of 48 |
| 1104 | + "disk_name3": fmt.Sprintf("tf-test-disk-%s", acctest.RandString(t, 10)), |
| 1105 | + "snapshot_prefix": fmt.Sprintf("tf-test-snapshot-%s", acctest.RandString(t, 10)), |
| 1106 | + "kms_key_self_link": acctest.BootstrapKMSKey(t).CryptoKey.Name, |
| 1107 | + "raw_key": "SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=", |
| 1108 | + "rsa_encrypted_key": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==", |
| 1109 | + } |
| 1110 | + |
| 1111 | + acctest.VcrTest(t, resource.TestCase{ |
| 1112 | + PreCheck: func() { acctest.AccTestPreCheck(t) }, |
| 1113 | + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), |
| 1114 | + CheckDestroy: testAccCheckComputeDiskDestroyProducer(t), |
| 1115 | + Steps: []resource.TestStep{ |
| 1116 | + { |
| 1117 | + Config: testAccComputeDisk_createSnapshotBeforeDestroy_init(context), |
| 1118 | + Check: resource.ComposeTestCheckFunc( |
| 1119 | + testAccCheckComputeDiskExists( |
| 1120 | + t, "google_compute_disk.raw-encrypted-name", envvar.GetTestProjectFromEnv(), &disk1), |
| 1121 | + testAccCheckComputeDiskExists( |
| 1122 | + t, "google_compute_disk.rsa-encrypted-prefix", envvar.GetTestProjectFromEnv(), &disk2), |
| 1123 | + testAccCheckComputeDiskExists( |
| 1124 | + t, "google_compute_disk.kms-encrypted-name", envvar.GetTestProjectFromEnv(), &disk3), |
| 1125 | + ), |
| 1126 | + }, |
| 1127 | + { |
| 1128 | + Config: testAccComputeDisk_createSnapshotBeforeDestroy_init(context), |
| 1129 | + Destroy: true, |
| 1130 | + Check: resource.ComposeTestCheckFunc( |
| 1131 | + testAccCheckComputeDisk_removeBackupSnapshot(t, context["disk_name1"].(string)), |
| 1132 | + testAccCheckComputeDisk_removeBackupSnapshot(t, context["snapshot_prefix"].(string)), |
| 1133 | + testAccCheckComputeDisk_removeBackupSnapshot(t, context["disk_name3"].(string)), |
| 1134 | + ), |
| 1135 | + }, |
| 1136 | + }, |
| 1137 | + }) |
| 1138 | +} |
| 1139 | + |
1073 | 1140 |
|
1074 | 1141 | func testAccComputeDisk_basic(diskName string, diskType string) string {
|
1075 | 1142 | return fmt.Sprintf(`
|
@@ -2017,6 +2084,49 @@ resource "google_compute_disk" "foobar" {
|
2017 | 2084 | `, diskName, accessMode)
|
2018 | 2085 | }
|
2019 | 2086 |
|
| 2087 | +func testAccComputeDisk_createSnapshotBeforeDestroy_init(context map[string]interface{}) string { |
| 2088 | + return acctest.Nprintf(` |
| 2089 | +resource "google_compute_disk" "raw-encrypted-name" { |
| 2090 | + name = "%{disk_name1}" |
| 2091 | + type = "pd-ssd" |
| 2092 | + size = 10 |
| 2093 | + zone = "us-central1-a" |
| 2094 | + |
| 2095 | + disk_encryption_key { |
| 2096 | + raw_key = "%{raw_key}" |
| 2097 | + } |
| 2098 | + |
| 2099 | + create_snapshot_before_destroy = true |
| 2100 | +} |
| 2101 | + |
| 2102 | +resource "google_compute_disk" "rsa-encrypted-prefix" { |
| 2103 | + name = "%{disk_name2}" |
| 2104 | + type = "pd-ssd" |
| 2105 | + size = 10 |
| 2106 | + zone = "us-central1-a" |
| 2107 | + |
| 2108 | + disk_encryption_key { |
| 2109 | + rsa_encrypted_key = "%{rsa_encrypted_key}" |
| 2110 | + } |
| 2111 | + |
| 2112 | + create_snapshot_before_destroy = true |
| 2113 | + create_snapshot_before_destroy_prefix = "%{snapshot_prefix}" |
| 2114 | +} |
| 2115 | + |
| 2116 | +resource "google_compute_disk" "kms-encrypted-name" { |
| 2117 | + name = "%{disk_name3}" |
| 2118 | + type = "pd-ssd" |
| 2119 | + size = 10 |
| 2120 | + zone = "us-central1-a" |
| 2121 | + |
| 2122 | + disk_encryption_key { |
| 2123 | + kms_key_self_link = "%{kms_key_self_link}" |
| 2124 | + } |
| 2125 | + |
| 2126 | + create_snapshot_before_destroy = true |
| 2127 | +}`, context) |
| 2128 | +} |
| 2129 | + |
2020 | 2130 | func testAccComputeDisk_architecture(context map[string]interface{}) string {
|
2021 | 2131 | return acctest.Nprintf(`
|
2022 | 2132 | resource "google_compute_disk" "foobar" {
|
|
0 commit comments