From 80aeabec83c7500a2fcab75bd6774f7b2b7d07f7 Mon Sep 17 00:00:00 2001 From: stack72 Date: Thu, 7 Jul 2016 16:26:35 +0100 Subject: [PATCH] provider/aws: Support Import of `aws_db_instance` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JUst needed some rejigging of the skip_final_snapshot work as that isn't returned by the API and skipping it means the destroy fails due to missing final_snapshot_identifier ``` % make testacc TEST=./builtin/providers/aws % TESTARGS='-run=TestAccAWSDBInstance_' ✹ ✭ ==> Checking that code complies with gofmt requirements... /Users/stacko/Code/go/bin/stringer go generate $(go list ./... | grep -v /vendor/) 2016/07/07 15:28:31 Generated command/internal_plugin_list.go TF_ACC=1 go test ./builtin/providers/aws -v -run=TestAccAWSDBInstance_ -timeout 120m === RUN TestAccAWSDBInstance_importBasic --- PASS: TestAccAWSDBInstance_importBasic (588.70s) === RUN TestAccAWSDBInstance_basic --- PASS: TestAccAWSDBInstance_basic (595.71s) === RUN TestAccAWSDBInstance_kmsKey --- PASS: TestAccAWSDBInstance_kmsKey (726.46s) === RUN TestAccAWSDBInstance_optionGroup --- PASS: TestAccAWSDBInstance_optionGroup (681.78s) === RUN TestAccAWSDBInstance_iops_update --- PASS: TestAccAWSDBInstance_iops_update (590.81s) ``` Please note that I cannot run the enhanced monitoring test in my environment as I have already got it attached to an IAM role. Running that test gives me this result: ``` ``` --- .../aws/import_aws_db_instance_test.go | 30 +++++++++++++++++++ .../providers/aws/resource_aws_db_instance.go | 13 ++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 builtin/providers/aws/import_aws_db_instance_test.go diff --git a/builtin/providers/aws/import_aws_db_instance_test.go b/builtin/providers/aws/import_aws_db_instance_test.go new file mode 100644 index 000000000..8079d117b --- /dev/null +++ b/builtin/providers/aws/import_aws_db_instance_test.go @@ -0,0 +1,30 @@ +package aws + +import ( + "testing" + + "github.com/hashicorp/terraform/helper/resource" +) + +func TestAccAWSDBInstance_importBasic(t *testing.T) { + resourceName := "aws_db_instance.bar" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSDBInstanceDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccAWSDBInstanceConfig, + }, + + resource.TestStep{ + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "password", "skip_final_snapshot"}, + }, + }, + }) +} diff --git a/builtin/providers/aws/resource_aws_db_instance.go b/builtin/providers/aws/resource_aws_db_instance.go index 7732689e1..4b6c3985e 100644 --- a/builtin/providers/aws/resource_aws_db_instance.go +++ b/builtin/providers/aws/resource_aws_db_instance.go @@ -22,6 +22,9 @@ func resourceAwsDbInstance() *schema.Resource { Read: resourceAwsDbInstanceRead, Update: resourceAwsDbInstanceUpdate, Delete: resourceAwsDbInstanceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, Schema: map[string]*schema.Schema{ "name": &schema.Schema{ @@ -633,6 +636,7 @@ func resourceAwsDbInstanceRead(d *schema.ResourceData, meta interface{}) error { } d.Set("name", v.DBName) + d.Set("identifier", v.DBInstanceIdentifier) d.Set("username", v.MasterUsername) d.Set("engine", v.Engine) d.Set("engine_version", v.EngineVersion) @@ -753,10 +757,13 @@ func resourceAwsDbInstanceDelete(d *schema.ResourceData, meta interface{}) error opts := rds.DeleteDBInstanceInput{DBInstanceIdentifier: aws.String(d.Id())} - skipFinalSnapshot := d.Get("skip_final_snapshot").(bool) - opts.SkipFinalSnapshot = aws.Bool(skipFinalSnapshot) + skipFinalSnapshot, exists := d.GetOk("skip_final_snapshot") + if !exists { + skipFinalSnapshot = true + } + opts.SkipFinalSnapshot = aws.Bool(skipFinalSnapshot.(bool)) - if !skipFinalSnapshot { + if skipFinalSnapshot == false { if name, present := d.GetOk("final_snapshot_identifier"); present { opts.FinalDBSnapshotIdentifier = aws.String(name.(string)) } else {