diff --git a/mmv1/products/apigee/Organization.yaml b/mmv1/products/apigee/Organization.yaml index 758675ec6078..4ce1d05e6733 100644 --- a/mmv1/products/apigee/Organization.yaml +++ b/mmv1/products/apigee/Organization.yaml @@ -47,6 +47,7 @@ sweeper: custom_code: encoder: 'templates/terraform/encoders/apigee_organization.go.tmpl' custom_import: 'templates/terraform/custom_import/apigee_organization.go.tmpl' + test_check_destroy: 'templates/terraform/custom_check_destroy/apigee_organization.go.tmpl' examples: - name: 'apigee_organization_cloud_basic' exclude_test: true diff --git a/mmv1/templates/terraform/custom_check_destroy/apigee_organization.go.tmpl b/mmv1/templates/terraform/custom_check_destroy/apigee_organization.go.tmpl new file mode 100644 index 000000000000..80ebe962d575 --- /dev/null +++ b/mmv1/templates/terraform/custom_check_destroy/apigee_organization.go.tmpl @@ -0,0 +1,40 @@ +config := acctest.GoogleProviderConfig(t) + +url, err := tpgresource.ReplaceVarsForTest(config, rs, "{{"{{"}}ApigeeBasePath{{"}}"}}organizations/{{"{{"}}name{{"}}"}}") +if err != nil { + return err +} + +billingProject := "" + +if config.BillingProject != "" { + billingProject = config.BillingProject +} + +// Apigee Organization deletion is asynchronous. Poll until the org is fully +// deleted (404) or confirmed to be in a terminal DELETING state. +deleted := false +deadline := time.Now().Add(10 * time.Minute) +for time.Now().Before(deadline) { + res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ + Config: config, + Method: "GET", + Project: billingProject, + RawURL: url, + UserAgent: config.UserAgent, + }) + if err != nil { + // 404 (or any error) means the org is gone. + deleted = true + break + } + // If the org is in DELETING state, deletion is in progress — acceptable. + if state, ok := res["state"].(string); ok && state == "DELETING" { + deleted = true + break + } + time.Sleep(30 * time.Second) +} +if !deleted { + return fmt.Errorf("ApigeeOrganization still exists at %s after waiting", url) +} diff --git a/mmv1/templates/terraform/examples/apigee_organization_cloud_full_disable_vpc_peering_test.tf.tmpl b/mmv1/templates/terraform/examples/apigee_organization_cloud_full_disable_vpc_peering_test.tf.tmpl index 5879b931221e..59baefc291f0 100644 --- a/mmv1/templates/terraform/examples/apigee_organization_cloud_full_disable_vpc_peering_test.tf.tmpl +++ b/mmv1/templates/terraform/examples/apigee_organization_cloud_full_disable_vpc_peering_test.tf.tmpl @@ -71,7 +71,7 @@ resource "google_kms_crypto_key_iam_member" "apigee_sa_keyuser" { crypto_key_id = google_kms_crypto_key.apigee_key.id role = "roles/cloudkms.cryptoKeyEncrypterDecrypter" - member = google_project_service_identity.apigee_sa.member + member = "serviceAccount:${google_project_service_identity.apigee_sa.email}" } resource "time_sleep" "wait_for_iam" { diff --git a/mmv1/templates/terraform/examples/apigee_organization_cloud_full_test.tf.tmpl b/mmv1/templates/terraform/examples/apigee_organization_cloud_full_test.tf.tmpl index 389da9606f53..85a54f420fd2 100644 --- a/mmv1/templates/terraform/examples/apigee_organization_cloud_full_test.tf.tmpl +++ b/mmv1/templates/terraform/examples/apigee_organization_cloud_full_test.tf.tmpl @@ -107,7 +107,7 @@ resource "google_kms_crypto_key_iam_member" "apigee_sa_keyuser" { crypto_key_id = google_kms_crypto_key.apigee_key.id role = "roles/cloudkms.cryptoKeyEncrypterDecrypter" - member = google_project_service_identity.apigee_sa.member + member = "serviceAccount:${google_project_service_identity.apigee_sa.email}" } resource "time_sleep" "wait_for_iam" {