diff --git a/builtin/providers/cloudflare/resource_cloudflare_record.go b/builtin/providers/cloudflare/resource_cloudflare_record.go index 628e40df5..1ab5bc6fa 100644 --- a/builtin/providers/cloudflare/resource_cloudflare_record.go +++ b/builtin/providers/cloudflare/resource_cloudflare_record.go @@ -3,7 +3,6 @@ package cloudflare import ( "fmt" "log" - "strings" "time" "golang.org/x/net/context" @@ -115,11 +114,12 @@ func resourceCloudFlareRecordCreate(d *schema.ResourceData, meta interface{}) er } func resourceCloudFlareRecordRead(d *schema.ResourceData, meta interface{}) error { - var ( - client = meta.(*cloudflare.Client) - domain = d.Get("domain").(string) - rName = strings.Join([]string{d.Get("name").(string), domain}, ".") - ) + client := meta.(*cloudflare.Client) + domain := d.Get("domain").(string) + rName := domain + if v := d.Get("name").(string); v != "@" { + rName = v + "." + rName + } zone, err := retrieveZone(client, domain) if err != nil { @@ -187,11 +187,12 @@ func resourceCloudFlareRecordUpdate(d *schema.ResourceData, meta interface{}) er } func resourceCloudFlareRecordDelete(d *schema.ResourceData, meta interface{}) error { - var ( - client = meta.(*cloudflare.Client) - domain = d.Get("domain").(string) - rName = strings.Join([]string{d.Get("name").(string), domain}, ".") - ) + client := meta.(*cloudflare.Client) + domain := d.Get("domain").(string) + rName := domain + if v := d.Get("name").(string); v != "@" { + rName = v + "." + rName + } zone, err := retrieveZone(client, domain) if err != nil { @@ -218,8 +219,7 @@ func resourceCloudFlareRecordDelete(d *schema.ResourceData, meta interface{}) er func retrieveRecord( client *cloudflare.Client, zone *cloudflare.Zone, - name string, -) (*cloudflare.Record, error) { + name string) (*cloudflare.Record, error) { ctx, _ := context.WithDeadline(context.Background(), time.Now().Add(time.Second*30)) rs, err := client.Records.List(ctx, zone.ID) diff --git a/builtin/providers/cloudflare/resource_cloudflare_record_test.go b/builtin/providers/cloudflare/resource_cloudflare_record_test.go index 82b9ccfa3..64e46fdea 100644 --- a/builtin/providers/cloudflare/resource_cloudflare_record_test.go +++ b/builtin/providers/cloudflare/resource_cloudflare_record_test.go @@ -39,6 +39,32 @@ func TestAccCloudFlareRecord_Basic(t *testing.T) { }) } +func TestAccCloudFlareRecord_Apex(t *testing.T) { + var record 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(testAccCheckCloudFlareRecordConfigApex, domain), + Check: resource.ComposeTestCheckFunc( + testAccCheckCloudFlareRecordExists("cloudflare_record.foobar", &record), + testAccCheckCloudFlareRecordAttributes(&record), + resource.TestCheckResourceAttr( + "cloudflare_record.foobar", "name", "@"), + resource.TestCheckResourceAttr( + "cloudflare_record.foobar", "domain", domain), + resource.TestCheckResourceAttr( + "cloudflare_record.foobar", "value", "192.168.0.10"), + ), + }, + }, + }) +} + func TestAccCloudFlareRecord_Proxied(t *testing.T) { var record cloudflare.Record domain := os.Getenv("CLOUDFLARE_DOMAIN") @@ -226,6 +252,15 @@ resource "cloudflare_record" "foobar" { ttl = 3600 }` +const testAccCheckCloudFlareRecordConfigApex = ` +resource "cloudflare_record" "foobar" { + domain = "%s" + name = "@" + value = "192.168.0.10" + type = "A" + ttl = 3600 +}` + const testAccCheckCloudFlareRecordConfigProxied = ` resource "cloudflare_record" "foobar" { domain = "%s"