providers/cloudflare: record can manage apex records

Apex records must be created by specifying "@" as the name, but this
caused Refresh and Delete errors.
This commit is contained in:
Mitchell Hashimoto 2016-05-02 22:23:21 -07:00
parent cf0b2644a3
commit a7311fa68f
No known key found for this signature in database
GPG Key ID: 744E147AA52F5B0A
2 changed files with 48 additions and 13 deletions

View File

@ -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)

View File

@ -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"