From ee7b33acf4b53426754aa26a0875f3e4338361d7 Mon Sep 17 00:00:00 2001 From: Sander van Harmelen Date: Tue, 16 Dec 2014 00:40:43 +0100 Subject: [PATCH 1/3] Fixing the flipflop problem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Actually meant as a PoC, but it works perfectly so let’s just merge this… --- .../aws/resource_aws_route53_record.go | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/builtin/providers/aws/resource_aws_route53_record.go b/builtin/providers/aws/resource_aws_route53_record.go index 167405e9d..7c9b62f5e 100644 --- a/builtin/providers/aws/resource_aws_route53_record.go +++ b/builtin/providers/aws/resource_aws_route53_record.go @@ -6,6 +6,7 @@ import ( "strings" "time" + "github.com/hashicorp/terraform/helper/hashcode" "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" "github.com/mitchellh/goamz/route53" @@ -43,10 +44,13 @@ func resourceAwsRoute53Record() *schema.Resource { }, "records": &schema.Schema{ - Type: schema.TypeList, + Type: schema.TypeSet, Elem: &schema.Schema{Type: schema.TypeString}, Required: true, ForceNew: true, + Set: func(v interface{}) int { + return hashcode.String(v.(string)) + }, }, }, } @@ -151,10 +155,18 @@ func resourceAwsRoute53RecordRead(d *schema.ResourceData, meta interface{}) erro found = true - for i, rec := range record.Records { - key := fmt.Sprintf("records.%d", i) - d.Set(key, rec) + // Create an empty schema.Set to hold all found records + records := &schema.Set{ + F: func(v interface{}) int { + return hashcode.String(v.(string)) + }, } + + for _, rec := range record.Records { + records.Add(rec) + } + + d.Set("records", records) d.Set("ttl", record.TTL) break From 43a30e7d1390d5a4c16dc773286050155f9c8907 Mon Sep 17 00:00:00 2001 From: Sander van Harmelen Date: Tue, 16 Dec 2014 00:59:47 +0100 Subject: [PATCH 2/3] Finishing up the needed changes Also executed the acceptance tests successfully now. --- builtin/providers/aws/resource_aws_route53_record.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/builtin/providers/aws/resource_aws_route53_record.go b/builtin/providers/aws/resource_aws_route53_record.go index 7c9b62f5e..e70a66427 100644 --- a/builtin/providers/aws/resource_aws_route53_record.go +++ b/builtin/providers/aws/resource_aws_route53_record.go @@ -236,11 +236,11 @@ func resourceAwsRoute53RecordDelete(d *schema.ResourceData, meta interface{}) er } func resourceAwsRoute53RecordBuildSet(d *schema.ResourceData) (*route53.ResourceRecordSet, error) { - recs := d.Get("records.#").(int) - records := make([]string, 0, recs) - for i := 0; i < recs; i++ { - key := fmt.Sprintf("records.%d", i) - records = append(records, d.Get(key).(string)) + recs := d.Get("records").(*schema.Set).List() + records := make([]string, 0, len(recs)) + + for _, r := range recs { + records = append(records, r.(string)) } rec := &route53.ResourceRecordSet{ From a7667986f96141dbc8603cda9ac5fb60a7d184f3 Mon Sep 17 00:00:00 2001 From: Sander van Harmelen Date: Tue, 16 Dec 2014 11:14:33 +0100 Subject: [PATCH 3/3] Updated the code so it makes use of the available functionality MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `helper/schema` package already knows how to create a set from a slice with set items. So let’s use that functionality… --- .../providers/aws/resource_aws_route53_record.go | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/builtin/providers/aws/resource_aws_route53_record.go b/builtin/providers/aws/resource_aws_route53_record.go index e70a66427..1145db374 100644 --- a/builtin/providers/aws/resource_aws_route53_record.go +++ b/builtin/providers/aws/resource_aws_route53_record.go @@ -155,18 +155,7 @@ func resourceAwsRoute53RecordRead(d *schema.ResourceData, meta interface{}) erro found = true - // Create an empty schema.Set to hold all found records - records := &schema.Set{ - F: func(v interface{}) int { - return hashcode.String(v.(string)) - }, - } - - for _, rec := range record.Records { - records.Add(rec) - } - - d.Set("records", records) + d.Set("records", record.Records) d.Set("ttl", record.TTL) break