From 85d7a8e0fe3e7fb5aa6b6502737dd77062f888a0 Mon Sep 17 00:00:00 2001 From: jasonmcintosh Date: Tue, 24 Apr 2018 16:36:26 -0500 Subject: [PATCH] Changes per request --- aws/resource_aws_db_instance.go | 47 ++++++++---------- aws/resource_aws_db_instance_test.go | 38 +++++++------- ...-02.tar.gz => mysql-5-6-xtrabackup.tar.gz} | Bin website/docs/r/db_instance.html.markdown | 9 +++- 4 files changed, 47 insertions(+), 47 deletions(-) rename files/{2018-02-26_19-31-02.tar.gz => mysql-5-6-xtrabackup.tar.gz} (100%) diff --git a/aws/resource_aws_db_instance.go b/aws/resource_aws_db_instance.go index 387085a96480..8ce9c7ad06c0 100644 --- a/aws/resource_aws_db_instance.go +++ b/aws/resource_aws_db_instance.go @@ -221,7 +221,7 @@ func resourceAwsDbInstance() *schema.Resource { }, "s3_import": { - Type: schema.TypeSet, + Type: schema.TypeList, Optional: true, MaxItems: 1, ConflictsWith: []string{ @@ -233,31 +233,28 @@ func resourceAwsDbInstance() *schema.Resource { "bucket_name": { Type: schema.TypeString, Required: true, - Optional: false, ForceNew: true, }, "bucket_prefix": { Type: schema.TypeString, Required: false, Optional: true, - Default: "", + ForceNew: true, }, "ingestion_role": { Type: schema.TypeString, Required: true, - Optional: false, + ForceNew: true, }, "source_engine": { Type: schema.TypeString, - Required: false, - Optional: true, - Default: "mysql", + Required: true, + ForceNew: true, }, "source_engine_version": { Type: schema.TypeString, - Required: false, - Optional: true, - Default: "5.6", + Required: true, + ForceNew: true, }, }, }, @@ -509,7 +506,7 @@ func resourceAwsDbInstanceCreate(d *schema.ResourceData, meta interface{}) error return fmt.Errorf(`provider.aws: aws_db_instance: %s: "username": required field is not set`, d.Get("name").(string)) } - record := v.(*schema.Set).List()[0].(map[string]interface{}) + s3_bucket := v.([]interface{})[0].(map[string]interface{}) opts := rds.RestoreDBInstanceFromS3Input{ AllocatedStorage: aws.Int64(int64(d.Get("allocated_storage").(int))), AutoMinorVersionUpgrade: aws.Bool(d.Get("auto_minor_version_upgrade").(bool)), @@ -519,15 +516,15 @@ func resourceAwsDbInstanceCreate(d *schema.ResourceData, meta interface{}) error DBInstanceIdentifier: aws.String(d.Get("identifier").(string)), Engine: aws.String(d.Get("engine").(string)), EngineVersion: aws.String(d.Get("engine_version").(string)), - S3BucketName: aws.String(record["bucket_name"].(string)), - S3Prefix: aws.String(record["bucket_prefix"].(string)), - S3IngestionRoleArn: aws.String(record["ingestion_role"].(string)), + S3BucketName: aws.String(s3_bucket["bucket_name"].(string)), + S3Prefix: aws.String(s3_bucket["bucket_prefix"].(string)), + S3IngestionRoleArn: aws.String(s3_bucket["ingestion_role"].(string)), MasterUsername: aws.String(d.Get("username").(string)), MasterUserPassword: aws.String(d.Get("password").(string)), PubliclyAccessible: aws.Bool(d.Get("publicly_accessible").(bool)), StorageEncrypted: aws.Bool(d.Get("storage_encrypted").(bool)), - SourceEngine: aws.String(record["source_engine"].(string)), - SourceEngineVersion: aws.String(record["source_engine_version"].(string)), + SourceEngine: aws.String(s3_bucket["source_engine"].(string)), + SourceEngineVersion: aws.String(s3_bucket["source_engine_version"].(string)), Tags: tags, } @@ -621,16 +618,14 @@ func resourceAwsDbInstanceCreate(d *schema.ResourceData, meta interface{}) error err = resource.Retry(5*time.Minute, func() *resource.RetryError { _, err = conn.RestoreDBInstanceFromS3(&opts) if err != nil { - if awsErr, ok := err.(awserr.Error); ok { - if awsErr.Code() == "InvalidParameterValue" && strings.Contains(awsErr.Message(), "ENHANCED_MONITORING") { - return resource.RetryableError(awsErr) - } - if awsErr.Code() == "InvalidParameterValue" && strings.Contains(awsErr.Message(), "S3_SNAPSHOT_INGESTION") { - return resource.RetryableError(err) - } - if awsErr.Code() == "InvalidParameterValue" && strings.Contains(awsErr.Message(), "S3 bucket cannot be found") { - return resource.RetryableError(err) - } + if isAWSErr(err, "InvalidParameterValue", "ENHANCED_MONITORING") { + return resource.RetryableError(err) + } + if isAWSErr(err, "InvalidParameterValue", "S3_SNAPSHOT_INGESTION") { + return resource.RetryableError(err) + } + if isAWSErr(err, "InvalidParameterValue", "S3 bucket cannot be found") { + return resource.RetryableError(err) } return resource.NonRetryableError(err) } diff --git a/aws/resource_aws_db_instance_test.go b/aws/resource_aws_db_instance_test.go index df3fffd31e20..73e46704050b 100644 --- a/aws/resource_aws_db_instance_test.go +++ b/aws/resource_aws_db_instance_test.go @@ -318,20 +318,17 @@ func TestAccAWSDBInstance_snapshot(t *testing.T) { func TestAccAWSDBInstance_s3(t *testing.T) { var snap rds.DBInstance - bucket := acctest.RandString(5) - //bucket := acctest.RandString(5) - prefix := "xtrabackup" - role := acctest.RandString(5) + bucket := acctest.RandomWithPrefix("tf-acc-test") + uniqueId := acctest.RandomWithPrefix("tf-acc-s3-import-test") + bucketPrefix := acctest.RandString(5) resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - // testAccCheckAWSDBInstanceSnapshot verifies a database snapshot is - // created, and subequently deletes it + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, CheckDestroy: testAccCheckAWSDBInstanceNoSnapshot, Steps: []resource.TestStep{ { - Config: testAccSnapshotInstanceConfigWithS3Import(bucket, prefix, role), + Config: testAccSnapshotInstanceConfigWithS3Import(bucket, bucketPrefix, uniqueId), Check: resource.ComposeTestCheckFunc( testAccCheckAWSDBInstanceExists("aws_db_instance.s3", &snap), ), @@ -1070,7 +1067,7 @@ resource "aws_db_instance" "snapshot" { }`, acctest.RandInt()) } -func testAccSnapshotInstanceConfigWithS3Import(bucketName string, prefix string, role string) string { +func testAccSnapshotInstanceConfigWithS3Import(bucketName string, bucketPrefix string, uniqueId string) string { return fmt.Sprintf(` resource "aws_s3_bucket" "xtrabackup" { @@ -1079,15 +1076,15 @@ resource "aws_s3_bucket" "xtrabackup" { resource "aws_s3_bucket_object" "xtrabackup_db" { bucket = "${aws_s3_bucket.xtrabackup.id}" - key = "%s/sample.tar.gz" - source = "../files/2018-02-26_19-31-02.tar.gz" - etag = "${md5(file("../files/2018-02-26_19-31-02.tar.gz"))}" + key = "%s/mysql-5-6-xtrabackup.tar.gz" + source = "../files/mysql-5-6-xtrabackup.tar.gz" + etag = "${md5(file("../files/mysql-5-6-xtrabackup.tar.gz"))}" } resource "aws_iam_role" "rds_s3_access_role" { - name = "aws-rds-import-%s" + name = "%s-role" assume_role_policy = <