From b8778b8a3ae7ebcda41920565a2236459ffcd419 Mon Sep 17 00:00:00 2001 From: stack72 Date: Sat, 27 Feb 2016 00:43:06 +0000 Subject: [PATCH] provider/cloudflare: Change `cloudflare_record` type to ForceNew. The CloudFlare API does not allow types to be changed (i.e. A to CNAME) after creation --- .../cloudflare/resource_cloudflare_record.go | 1 + .../resource_cloudflare_record_test.go | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/builtin/providers/cloudflare/resource_cloudflare_record.go b/builtin/providers/cloudflare/resource_cloudflare_record.go index f49b169eaa..d27cdf6c25 100644 --- a/builtin/providers/cloudflare/resource_cloudflare_record.go +++ b/builtin/providers/cloudflare/resource_cloudflare_record.go @@ -35,6 +35,7 @@ func resourceCloudFlareRecord() *schema.Resource { "type": &schema.Schema{ Type: schema.TypeString, Required: true, + ForceNew: true, }, "value": &schema.Schema{ diff --git a/builtin/providers/cloudflare/resource_cloudflare_record_test.go b/builtin/providers/cloudflare/resource_cloudflare_record_test.go index 8a15fdca12..6c3a13c639 100644 --- a/builtin/providers/cloudflare/resource_cloudflare_record_test.go +++ b/builtin/providers/cloudflare/resource_cloudflare_record_test.go @@ -75,6 +75,42 @@ func TestAccCLOudflareRecord_Updated(t *testing.T) { }) } +func TestAccCLOudflareRecord_forceNewRecord(t *testing.T) { + var afterCreate, afterUpdate cloudflare.Record + domain := os.Getenv("CLOUDFLARE_DOMAIN") + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckCLOudflareRecordDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: fmt.Sprintf(testAccCheckCLoudFlareRecordConfig_basic, domain), + Check: resource.ComposeTestCheckFunc( + testAccCheckCLOudflareRecordExists("cloudflare_record.foobar", &afterCreate), + ), + }, + resource.TestStep{ + Config: fmt.Sprintf(testAccCheckCloudFlareRecordConfig_forceNew, domain, domain), + Check: resource.ComposeTestCheckFunc( + testAccCheckCLOudflareRecordExists("cloudflare_record.foobar", &afterUpdate), + testAccCheckCloudFlareRecordRecreated(t, &afterCreate, &afterUpdate), + ), + }, + }, + }) +} + +func testAccCheckCloudFlareRecordRecreated(t *testing.T, + before, after *cloudflare.Record) resource.TestCheckFunc { + return func(s *terraform.State) error { + if before.Id == after.Id { + t.Fatalf("Expected change of Record Ids, but both were %v", before.Id) + } + return nil + } +} + func testAccCheckCLOudflareRecordDestroy(s *terraform.State) error { client := testAccProvider.Meta().(*cloudflare.Client) @@ -164,3 +200,13 @@ resource "cloudflare_record" "foobar" { type = "A" ttl = 3600 }` + +const testAccCheckCloudFlareRecordConfig_forceNew = ` +resource "cloudflare_record" "foobar" { + domain = "%s" + + name = "terraform" + value = "%s" + type = "CNAME" + ttl = 3600 +}`