terraform/builtin/providers/dnsimple/resource_dnsimple_record.go

161 lines
3.6 KiB
Go
Raw Normal View History

2014-07-23 23:43:28 +02:00
package dnsimple
import (
"fmt"
"log"
"github.com/hashicorp/terraform/helper/schema"
2014-07-24 16:21:39 +02:00
"github.com/pearkes/dnsimple"
2014-07-23 23:43:28 +02:00
)
func resourceDNSimpleRecord() *schema.Resource {
return &schema.Resource{
Create: resourceDNSimpleRecordCreate,
Read: resourceDNSimpleRecordRead,
Update: resourceDNSimpleRecordUpdate,
Delete: resourceDNSimpleRecordDelete,
Schema: map[string]*schema.Schema{
"domain": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"domain_id": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"name": &schema.Schema{
Type: schema.TypeString,
Required: true,
},
"hostname": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
"type": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"value": &schema.Schema{
Type: schema.TypeString,
Required: true,
},
"ttl": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Default: "3600",
},
"priority": &schema.Schema{
Type: schema.TypeString,
Computed: true,
},
},
}
}
2014-07-23 23:43:28 +02:00
func resourceDNSimpleRecordCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*dnsimple.Client)
2014-07-23 23:43:28 +02:00
// Create the new record
newRecord := &dnsimple.ChangeRecord{
Name: d.Get("name").(string),
Type: d.Get("type").(string),
Value: d.Get("value").(string),
2014-07-23 23:43:28 +02:00
}
if ttl, ok := d.GetOk("ttl"); ok {
newRecord.Ttl = ttl.(string)
2014-07-23 23:43:28 +02:00
}
log.Printf("[DEBUG] DNSimple Record create configuration: %#v", newRecord)
2014-07-23 23:43:28 +02:00
recId, err := client.CreateRecord(d.Get("domain").(string), newRecord)
2014-07-23 23:43:28 +02:00
if err != nil {
return fmt.Errorf("Failed to create DNSimple Record: %s", err)
2014-07-23 23:43:28 +02:00
}
d.SetId(recId)
log.Printf("[INFO] record ID: %s", d.Id())
return resourceDNSimpleRecordRead(d, meta)
}
func resourceDNSimpleRecordRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*dnsimple.Client)
2014-07-23 23:43:28 +02:00
rec, err := client.RetrieveRecord(d.Get("domain").(string), d.Id())
2014-07-24 16:21:39 +02:00
if err != nil {
return fmt.Errorf("Couldn't find DNSimple Record: %s", err)
2014-07-24 16:21:39 +02:00
}
d.Set("domain_id", rec.StringDomainId())
d.Set("name", rec.Name)
d.Set("type", rec.RecordType)
d.Set("value", rec.Content)
d.Set("ttl", rec.StringTtl())
d.Set("priority", rec.StringPrio())
if rec.Name == "" {
d.Set("hostname", d.Get("domain").(string))
} else {
d.Set("hostname", fmt.Sprintf("%s.%s", rec.Name, d.Get("domain").(string)))
}
return nil
2014-07-23 23:43:28 +02:00
}
func resourceDNSimpleRecordUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*dnsimple.Client)
2014-07-24 16:21:39 +02:00
updateRecord := &dnsimple.ChangeRecord{}
2014-07-23 23:43:28 +02:00
if attr, ok := d.GetOk("name"); ok {
updateRecord.Name = attr.(string)
2014-07-24 16:21:39 +02:00
}
if attr, ok := d.GetOk("type"); ok {
updateRecord.Type = attr.(string)
2014-07-24 16:21:39 +02:00
}
if attr, ok := d.GetOk("value"); ok {
updateRecord.Value = attr.(string)
2014-07-24 16:21:39 +02:00
}
2014-07-23 23:43:28 +02:00
if attr, ok := d.GetOk("ttl"); ok {
updateRecord.Ttl = attr.(string)
2014-07-24 16:21:39 +02:00
}
log.Printf("[DEBUG] DNSimple Record update configuration: %#v", updateRecord)
2014-07-24 16:21:39 +02:00
_, err := client.UpdateRecord(d.Get("domain").(string), d.Id(), updateRecord)
2014-07-24 16:21:39 +02:00
if err != nil {
return fmt.Errorf("Failed to update DNSimple Record: %s", err)
2014-07-24 16:21:39 +02:00
}
return resourceDNSimpleRecordRead(d, meta)
2014-07-23 23:43:28 +02:00
}
func resourceDNSimpleRecordDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*dnsimple.Client)
2014-07-23 23:43:28 +02:00
log.Printf("[INFO] Deleting DNSimple Record: %s, %s", d.Get("domain").(string), d.Id())
2014-07-23 23:43:28 +02:00
err := client.DestroyRecord(d.Get("domain").(string), d.Id())
2014-07-23 23:43:28 +02:00
if err != nil {
return fmt.Errorf("Error deleting DNSimple Record: %s", err)
2014-07-23 23:43:28 +02:00
}
return nil
}