From adb789f0f8d2fae8f656acb2b4238a97bf9b46e8 Mon Sep 17 00:00:00 2001 From: Kannan Goundan Date: Tue, 2 May 2017 02:31:51 -0700 Subject: [PATCH] aws_route53_record: Only unquote the record types that we quote. (#11257) Also clean up the code a little. --- .../aws/resource_aws_route53_record.go | 2 +- builtin/providers/aws/structure.go | 17 +++--- builtin/providers/aws/structure_test.go | 53 +++++++++++++++---- 3 files changed, 53 insertions(+), 19 deletions(-) diff --git a/builtin/providers/aws/resource_aws_route53_record.go b/builtin/providers/aws/resource_aws_route53_record.go index 0a80f7892f..2e0d7e4c78 100644 --- a/builtin/providers/aws/resource_aws_route53_record.go +++ b/builtin/providers/aws/resource_aws_route53_record.go @@ -484,7 +484,7 @@ func resourceAwsRoute53RecordRead(d *schema.ResourceData, meta interface{}) erro } } - err = d.Set("records", flattenResourceRecords(record.ResourceRecords)) + err = d.Set("records", flattenResourceRecords(record.ResourceRecords, *record.Type)) if err != nil { return fmt.Errorf("[DEBUG] Error setting records for: %s, error: %#v", d.Id(), err) } diff --git a/builtin/providers/aws/structure.go b/builtin/providers/aws/structure.go index 34041b90c3..b0f3fa6e19 100644 --- a/builtin/providers/aws/structure.go +++ b/builtin/providers/aws/structure.go @@ -814,11 +814,14 @@ func flattenStepAdjustments(adjustments []*autoscaling.StepAdjustment) []map[str return result } -func flattenResourceRecords(recs []*route53.ResourceRecord) []string { +func flattenResourceRecords(recs []*route53.ResourceRecord, typeStr string) []string { strs := make([]string, 0, len(recs)) for _, r := range recs { if r.Value != nil { - s := strings.Replace(*r.Value, "\"", "", 2) + s := *r.Value + if typeStr == "TXT" || typeStr == "SPF" { + s = strings.Replace(s, "\"", "", 2) + } strs = append(strs, s) } } @@ -829,13 +832,11 @@ func expandResourceRecords(recs []interface{}, typeStr string) []*route53.Resour records := make([]*route53.ResourceRecord, 0, len(recs)) for _, r := range recs { s := r.(string) - switch typeStr { - case "TXT", "SPF": - str := fmt.Sprintf("\"%s\"", s) - records = append(records, &route53.ResourceRecord{Value: aws.String(str)}) - default: - records = append(records, &route53.ResourceRecord{Value: aws.String(s)}) + if typeStr == "TXT" || typeStr == "SPF" { + // `flattenResourceRecords` removes quotes. Add them back. + s = fmt.Sprintf("\"%s\"", s) } + records = append(records, &route53.ResourceRecord{Value: aws.String(s)}) } return records } diff --git a/builtin/providers/aws/structure_test.go b/builtin/providers/aws/structure_test.go index 057058b43d..33f822bb00 100644 --- a/builtin/providers/aws/structure_test.go +++ b/builtin/providers/aws/structure_test.go @@ -819,23 +819,56 @@ func TestFlattenStepAdjustments(t *testing.T) { } func TestFlattenResourceRecords(t *testing.T) { - expanded := []*route53.ResourceRecord{ - &route53.ResourceRecord{ - Value: aws.String("127.0.0.1"), - }, - &route53.ResourceRecord{ - Value: aws.String("127.0.0.3"), - }, + original := []string{ + `127.0.0.1`, + `"abc def"`, } - result := flattenResourceRecords(expanded) + dequoted := []string{ + `127.0.0.1`, + `abc def`, + } + + var wrapped []*route53.ResourceRecord = nil + for _, original := range original { + wrapped = append(wrapped, &route53.ResourceRecord{Value: aws.String(original)}) + } + + sub := func(recordType string, expected []string) { + t.Run(recordType, func(t *testing.T) { + checkFlattenResourceRecords(t, recordType, wrapped, expected) + }) + } + + // These record types should be dequoted. + sub("TXT", dequoted) + sub("SPF", dequoted) + + // These record types should not be touched. + sub("CNAME", original) + sub("MX", original) +} + +func checkFlattenResourceRecords( + t *testing.T, + recordType string, + expanded []*route53.ResourceRecord, + expected []string) { + + result := flattenResourceRecords(expanded, recordType) if result == nil { t.Fatal("expected result to have value, but got nil") } - if len(result) != 2 { - t.Fatal("expected result to have value, but got nil") + if len(result) != len(expected) { + t.Fatalf("expected %v, got %v", expected, result) + } + + for i, e := range expected { + if result[i] != e { + t.Fatalf("expected %v, got %v", expected, result) + } } }