From 04fa88e790bd25f8a159280a53fe940da9b98a71 Mon Sep 17 00:00:00 2001 From: Radek Simko Date: Thu, 1 Feb 2018 09:04:10 +0000 Subject: [PATCH] resource/aws_dynamodb_table: (actually) fix disabling stream --- aws/resource_aws_dynamodb_table.go | 14 +++++++++----- aws/resource_aws_dynamodb_table_test.go | 20 +++++++++++--------- aws/structure.go | 8 ++++++-- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/aws/resource_aws_dynamodb_table.go b/aws/resource_aws_dynamodb_table.go index 827818db10fe..50cf27a08c19 100644 --- a/aws/resource_aws_dynamodb_table.go +++ b/aws/resource_aws_dynamodb_table.go @@ -305,12 +305,16 @@ func resourceAwsDynamoDbTableUpdate(d *schema.ResourceData, meta interface{}) er } if (d.HasChange("stream_enabled") || d.HasChange("stream_view_type")) && !d.IsNewResource() { + toEnable := d.Get("stream_enabled").(bool) + streamSpec := dynamodb.StreamSpecification{ + StreamEnabled: aws.Bool(toEnable), + } + if toEnable { + streamSpec.StreamViewType = aws.String(d.Get("stream_view_type").(string)) + } input := &dynamodb.UpdateTableInput{ - TableName: aws.String(d.Id()), - StreamSpecification: &dynamodb.StreamSpecification{ - StreamEnabled: aws.Bool(d.Get("stream_enabled").(bool)), - StreamViewType: aws.String(d.Get("stream_view_type").(string)), - }, + TableName: aws.String(d.Id()), + StreamSpecification: &streamSpec, } _, err := conn.UpdateTable(input) if err != nil { diff --git a/aws/resource_aws_dynamodb_table_test.go b/aws/resource_aws_dynamodb_table_test.go index 45001cf99d64..445be50893b7 100644 --- a/aws/resource_aws_dynamodb_table_test.go +++ b/aws/resource_aws_dynamodb_table_test.go @@ -311,13 +311,15 @@ func TestAccAWSDynamoDbTable_basic(t *testing.T) { func TestAccAWSDynamoDbTable_streamSpecification(t *testing.T) { var conf dynamodb.DescribeTableOutput + tableName := fmt.Sprintf("TerraformTestStreamTable-%s", acctest.RandString(8)) + resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders, CheckDestroy: testAccCheckAWSDynamoDbTableDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSDynamoDbConfigStreamSpecification(true, "KEYS_ONLY"), + Config: testAccAWSDynamoDbConfigStreamSpecification(tableName, true, "KEYS_ONLY"), Check: resource.ComposeTestCheckFunc( testAccCheckInitialAWSDynamoDbTableExists("aws_dynamodb_table.basic-dynamodb-table", &conf), resource.TestCheckResourceAttr("aws_dynamodb_table.basic-dynamodb-table", "stream_enabled", "true"), @@ -327,13 +329,13 @@ func TestAccAWSDynamoDbTable_streamSpecification(t *testing.T) { ), }, { - Config: testAccAWSDynamoDbConfigStreamSpecification(false, ""), + Config: testAccAWSDynamoDbConfigStreamSpecification(tableName, false, ""), Check: resource.ComposeTestCheckFunc( testAccCheckInitialAWSDynamoDbTableExists("aws_dynamodb_table.basic-dynamodb-table", &conf), resource.TestCheckResourceAttr("aws_dynamodb_table.basic-dynamodb-table", "stream_enabled", "false"), - resource.TestCheckNoResourceAttr("aws_dynamodb_table.basic-dynamodb-table", "stream_view_type"), - resource.TestCheckNoResourceAttr("aws_dynamodb_table.basic-dynamodb-table", "stream_arn"), - resource.TestCheckNoResourceAttr("aws_dynamodb_table.basic-dynamodb-table", "stream_label"), + resource.TestCheckResourceAttr("aws_dynamodb_table.basic-dynamodb-table", "stream_view_type", ""), + resource.TestCheckResourceAttrSet("aws_dynamodb_table.basic-dynamodb-table", "stream_arn"), + resource.TestCheckResourceAttrSet("aws_dynamodb_table.basic-dynamodb-table", "stream_label"), ), }, }, @@ -347,7 +349,7 @@ func TestAccAWSDynamoDbTable_streamSpecificationValidation(t *testing.T) { CheckDestroy: testAccCheckAWSDynamoDbTableDestroy, Steps: []resource.TestStep{ { - Config: testAccAWSDynamoDbConfigStreamSpecification(true, ""), + Config: testAccAWSDynamoDbConfigStreamSpecification("anything", true, ""), ExpectError: regexp.MustCompile(`stream_view_type is required when stream_enabled = true$`), }, }, @@ -972,10 +974,10 @@ resource "aws_dynamodb_table" "basic-dynamodb-table" { }`, rName) } -func testAccAWSDynamoDbConfigStreamSpecification(enabled bool, viewType string) string { +func testAccAWSDynamoDbConfigStreamSpecification(tableName string, enabled bool, viewType string) string { return fmt.Sprintf(` resource "aws_dynamodb_table" "basic-dynamodb-table" { - name = "TerraformTestStreamTable-%d" + name = "%s" read_capacity = 10 write_capacity = 20 hash_key = "TestTableHashKey" @@ -988,7 +990,7 @@ resource "aws_dynamodb_table" "basic-dynamodb-table" { stream_enabled = %t stream_view_type = "%s" } -`, acctest.RandInt(), enabled, viewType) +`, tableName, enabled, viewType) } func testAccAWSDynamoDbConfigTags() string { diff --git a/aws/structure.go b/aws/structure.go index 239d0bdc7689..82e78d2c8514 100644 --- a/aws/structure.go +++ b/aws/structure.go @@ -3287,10 +3287,14 @@ func flattenAwsDynamoDbTableResource(d *schema.ResourceData, table *dynamodb.Tab if table.StreamSpecification != nil { d.Set("stream_view_type", table.StreamSpecification.StreamViewType) d.Set("stream_enabled", table.StreamSpecification.StreamEnabled) - d.Set("stream_arn", table.LatestStreamArn) - d.Set("stream_label", table.LatestStreamLabel) + } else { + d.Set("stream_view_type", "") + d.Set("stream_enabled", false) } + d.Set("stream_arn", table.LatestStreamArn) + d.Set("stream_label", table.LatestStreamLabel) + err = d.Set("global_secondary_index", gsiList) if err != nil { return err