diff --git a/mmv1/templates/terraform/custom_import/kms_crypto_key_version.go.tmpl b/mmv1/templates/terraform/custom_import/kms_crypto_key_version.go.tmpl index f29594e126b2..a56b4d2633c9 100644 --- a/mmv1/templates/terraform/custom_import/kms_crypto_key_version.go.tmpl +++ b/mmv1/templates/terraform/custom_import/kms_crypto_key_version.go.tmpl @@ -1,7 +1,24 @@ config := meta.(*transport_tpg.Config) + importId := d.Id() + importByIdentity := importId == "" + var identityErr error + var identity *schema.IdentityData + if importId == "" { + identity, identityErr = d.Identity() + if identityErr != nil || identity == nil { + return nil, fmt.Errorf("Error reading import identity: %s", identityErr) + } - cryptoKeyVersionId, err := parseKmsCryptoKeyVersionId(d.Id(), config) + identityName, ok := identity.Get("name").(string) + if !ok || identityName == "" { + return nil, fmt.Errorf("Error reading import identity: missing required identity field \"name\"") + } + + importId = identityName + } + + cryptoKeyVersionId, err := parseKmsCryptoKeyVersionId(importId, config) if err != nil { return nil, err } @@ -11,6 +28,17 @@ if err := d.Set("name", cryptoKeyVersionId.Name); err != nil { return nil, fmt.Errorf("Error setting name: %s", err) } + + if importByIdentity { + if identityErr == nil && identity != nil { + if err := identity.Set("name", cryptoKeyVersionId.Name); err != nil { + return nil, fmt.Errorf("Error setting identity name: %s", err) + } + } else { + log.Printf("[DEBUG] (Import) identity not set: %s", identityErr) + } + } + id, err := tpgresource.ReplaceVars(d, config, "{{$.GetIdFormat}}") if err != nil { return nil, fmt.Errorf("Error constructing id: %s", err) diff --git a/mmv1/third_party/terraform/services/kms/resource_kms_crypto_key_version_test.go b/mmv1/third_party/terraform/services/kms/resource_kms_crypto_key_version_test.go index 6445075c8fea..7350e001a54f 100644 --- a/mmv1/third_party/terraform/services/kms/resource_kms_crypto_key_version_test.go +++ b/mmv1/third_party/terraform/services/kms/resource_kms_crypto_key_version_test.go @@ -10,6 +10,7 @@ import ( _ "github.com/hashicorp/terraform-provider-google/google/services/resourcemanager" "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/tfversion" ) func TestAccKmsCryptoKeyVersion_basic(t *testing.T) { @@ -41,6 +42,34 @@ func TestAccKmsCryptoKeyVersion_basic(t *testing.T) { }) } +func TestAccKmsCryptoKeyVersion_importBlockWithResourceIdentity(t *testing.T) { + t.Parallel() + + projectId := fmt.Sprintf("tf-test-%d", acctest.RandInt(t)) + projectOrg := envvar.GetTestOrgFromEnv(t) + projectBillingAccount := envvar.GetTestBillingAccountFromEnv(t) + keyRingName := fmt.Sprintf("tf-test-%s", acctest.RandString(t, 10)) + cryptoKeyName := fmt.Sprintf("tf-test-%s", acctest.RandString(t, 10)) + + acctest.VcrTest(t, resource.TestCase{ + TerraformVersionChecks: []tfversion.TerraformVersionCheck{ + tfversion.SkipBelow(tfversion.Version1_12_0), + }, + PreCheck: func() { acctest.AccTestPreCheck(t) }, + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), + Steps: []resource.TestStep{ + { + Config: testGoogleKmsCryptoKeyVersion_basic(projectId, projectOrg, projectBillingAccount, keyRingName, cryptoKeyName), + }, + { + ResourceName: "google_kms_crypto_key_version.crypto_key_version", + ImportState: true, + ImportStateKind: resource.ImportBlockWithResourceIdentity, + }, + }, + }) +} + func TestAccKmsCryptoKeyVersionWithSymmetricHSM(t *testing.T) { t.Parallel()