From a2c5b31490eac3cb72621298f1e3ee48d0312ce1 Mon Sep 17 00:00:00 2001 From: Paul Stack Date: Wed, 20 Jul 2016 23:52:34 +0100 Subject: [PATCH] provider/aws: Support kms_key_id for `aws_rds_cluster` (#7662) * provider/aws: Support kms_key_id for `aws_rds_cluster` ``` % make testacc TEST=./builtin/providers/aws TESTARGS='-run=TestAccAWSRDSCluster_' ==> Checking that code complies with gofmt requirements... go generate $(go list ./... | grep -v /terraform/vendor/) TF_ACC=1 go test ./builtin/providers/aws -v -run=TestAccAWSRDSCluster_ -timeout 120m === RUN TestAccAWSRDSCluster_basic --- PASS: TestAccAWSRDSCluster_basic (127.57s) === RUN TestAccAWSRDSCluster_kmsKey --- PASS: TestAccAWSRDSCluster_kmsKey (323.72s) === RUN TestAccAWSRDSCluster_encrypted --- PASS: TestAccAWSRDSCluster_encrypted (173.25s) === RUN TestAccAWSRDSCluster_backupsUpdate --- PASS: TestAccAWSRDSCluster_backupsUpdate (264.07s) PASS ok github.com/hashicorp/terraform/builtin/providers/aws 888.638s ``` * provider/aws: Add KMS Key ID to `aws_rds_cluster_instance` ``` ``` --- .../providers/aws/resource_aws_rds_cluster.go | 12 +++ .../aws/resource_aws_rds_cluster_instance.go | 14 ++++ .../resource_aws_rds_cluster_instance_test.go | 82 +++++++++++++++++++ .../aws/resource_aws_rds_cluster_test.go | 58 +++++++++++++ .../providers/aws/r/rds_cluster.html.markdown | 1 + .../aws/r/rds_cluster_instance.html.markdown | 2 + 6 files changed, 169 insertions(+) diff --git a/builtin/providers/aws/resource_aws_rds_cluster.go b/builtin/providers/aws/resource_aws_rds_cluster.go index 60981c1ae1..348018000f 100644 --- a/builtin/providers/aws/resource_aws_rds_cluster.go +++ b/builtin/providers/aws/resource_aws_rds_cluster.go @@ -196,6 +196,13 @@ func resourceAwsRDSCluster() *schema.Resource { }, }, + "kms_key_id": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, + "tags": tagsSchema(), }, } @@ -341,6 +348,10 @@ func resourceAwsRDSClusterCreate(d *schema.ResourceData, meta interface{}) error createOpts.PreferredMaintenanceWindow = aws.String(v.(string)) } + if attr, ok := d.GetOk("kms_key_id"); ok { + createOpts.KmsKeyId = aws.String(attr.(string)) + } + log.Printf("[DEBUG] RDS Cluster create options: %s", createOpts) resp, err := conn.CreateDBCluster(createOpts) if err != nil { @@ -431,6 +442,7 @@ func resourceAwsRDSClusterRead(d *schema.ResourceData, meta interface{}) error { d.Set("backup_retention_period", dbc.BackupRetentionPeriod) d.Set("preferred_backup_window", dbc.PreferredBackupWindow) d.Set("preferred_maintenance_window", dbc.PreferredMaintenanceWindow) + d.Set("kms_key_id", dbc.KmsKeyId) var vpcg []string for _, g := range dbc.VpcSecurityGroups { diff --git a/builtin/providers/aws/resource_aws_rds_cluster_instance.go b/builtin/providers/aws/resource_aws_rds_cluster_instance.go index 5289e47822..7956656850 100644 --- a/builtin/providers/aws/resource_aws_rds_cluster_instance.go +++ b/builtin/providers/aws/resource_aws_rds_cluster_instance.go @@ -83,6 +83,20 @@ func resourceAwsRDSClusterInstance() *schema.Resource { Computed: true, }, + "kms_key_id": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, + + "storage_encrypted": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Default: false, + ForceNew: true, + }, + "tags": tagsSchema(), }, } diff --git a/builtin/providers/aws/resource_aws_rds_cluster_instance_test.go b/builtin/providers/aws/resource_aws_rds_cluster_instance_test.go index da4e1f9fea..81e79f4886 100644 --- a/builtin/providers/aws/resource_aws_rds_cluster_instance_test.go +++ b/builtin/providers/aws/resource_aws_rds_cluster_instance_test.go @@ -2,6 +2,7 @@ package aws import ( "fmt" + "regexp" "strings" "testing" "time" @@ -34,6 +35,27 @@ func TestAccAWSRDSClusterInstance_basic(t *testing.T) { }) } +func TestAccAWSRDSClusterInstance_kmsKey(t *testing.T) { + var v rds.DBInstance + keyRegex := regexp.MustCompile("^arn:aws:kms:") + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSClusterDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccAWSClusterInstanceConfigKmsKey(acctest.RandInt()), + Check: resource.ComposeTestCheckFunc( + testAccCheckAWSClusterInstanceExists("aws_rds_cluster_instance.cluster_instances", &v), + resource.TestMatchResourceAttr( + "aws_rds_cluster_instance.cluster_instances", "kms_key_id", keyRegex), + ), + }, + }, + }) +} + // https://github.com/hashicorp/terraform/issues/5350 func TestAccAWSRDSClusterInstance_disappears(t *testing.T) { var v rds.DBInstance @@ -199,3 +221,63 @@ resource "aws_db_parameter_group" "bar" { } `, n, n, n) } + +func testAccAWSClusterInstanceConfigKmsKey(n int) string { + return fmt.Sprintf(` + +resource "aws_kms_key" "foo" { + description = "Terraform acc test %d" + policy = <