github.com/paulmey/terraform@v0.5.2-0.20150519145237-046e9b4c884d/builtin/providers/dnsimple/resource_dnsimple_record.go (about)

     1  package dnsimple
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/hashicorp/terraform/helper/schema"
     8  	"github.com/pearkes/dnsimple"
     9  )
    10  
    11  func resourceDNSimpleRecord() *schema.Resource {
    12  	return &schema.Resource{
    13  		Create: resourceDNSimpleRecordCreate,
    14  		Read:   resourceDNSimpleRecordRead,
    15  		Update: resourceDNSimpleRecordUpdate,
    16  		Delete: resourceDNSimpleRecordDelete,
    17  
    18  		Schema: map[string]*schema.Schema{
    19  			"domain": &schema.Schema{
    20  				Type:     schema.TypeString,
    21  				Required: true,
    22  			},
    23  
    24  			"domain_id": &schema.Schema{
    25  				Type:     schema.TypeString,
    26  				Computed: true,
    27  			},
    28  
    29  			"name": &schema.Schema{
    30  				Type:     schema.TypeString,
    31  				Required: true,
    32  			},
    33  
    34  			"hostname": &schema.Schema{
    35  				Type:     schema.TypeString,
    36  				Computed: true,
    37  			},
    38  
    39  			"type": &schema.Schema{
    40  				Type:     schema.TypeString,
    41  				Required: true,
    42  			},
    43  
    44  			"value": &schema.Schema{
    45  				Type:     schema.TypeString,
    46  				Required: true,
    47  			},
    48  
    49  			"ttl": &schema.Schema{
    50  				Type:     schema.TypeString,
    51  				Optional: true,
    52  				Default:  "3600",
    53  			},
    54  
    55  			"priority": &schema.Schema{
    56  				Type:     schema.TypeString,
    57  				Computed: true,
    58  			},
    59  		},
    60  	}
    61  }
    62  
    63  func resourceDNSimpleRecordCreate(d *schema.ResourceData, meta interface{}) error {
    64  	client := meta.(*dnsimple.Client)
    65  
    66  	// Create the new record
    67  	newRecord := &dnsimple.ChangeRecord{
    68  		Name:  d.Get("name").(string),
    69  		Type:  d.Get("type").(string),
    70  		Value: d.Get("value").(string),
    71  	}
    72  
    73  	if ttl, ok := d.GetOk("ttl"); ok {
    74  		newRecord.Ttl = ttl.(string)
    75  	}
    76  
    77  	log.Printf("[DEBUG] DNS Simple Record create configuration: %#v", newRecord)
    78  
    79  	recId, err := client.CreateRecord(d.Get("domain").(string), newRecord)
    80  
    81  	if err != nil {
    82  		return fmt.Errorf("Failed to create DNS Simple Record: %s", err)
    83  	}
    84  
    85  	d.SetId(recId)
    86  	log.Printf("[INFO] record ID: %s", d.Id())
    87  
    88  	return resourceDNSimpleRecordRead(d, meta)
    89  }
    90  
    91  func resourceDNSimpleRecordRead(d *schema.ResourceData, meta interface{}) error {
    92  	client := meta.(*dnsimple.Client)
    93  
    94  	rec, err := client.RetrieveRecord(d.Get("domain").(string), d.Id())
    95  	if err != nil {
    96  		return fmt.Errorf("Couldn't find DNS Simple Record: %s", err)
    97  	}
    98  
    99  	d.Set("domain_id", rec.StringDomainId())
   100  	d.Set("name", rec.Name)
   101  	d.Set("type", rec.RecordType)
   102  	d.Set("value", rec.Content)
   103  	d.Set("ttl", rec.StringTtl())
   104  	d.Set("priority", rec.StringPrio())
   105  
   106  	if rec.Name == "" {
   107  		d.Set("hostname", d.Get("domain").(string))
   108  	} else {
   109  		d.Set("hostname", fmt.Sprintf("%s.%s", rec.Name, d.Get("domain").(string)))
   110  	}
   111  
   112  	return nil
   113  }
   114  
   115  func resourceDNSimpleRecordUpdate(d *schema.ResourceData, meta interface{}) error {
   116  	client := meta.(*dnsimple.Client)
   117  
   118  	updateRecord := &dnsimple.ChangeRecord{}
   119  
   120  	if attr, ok := d.GetOk("name"); ok {
   121  		updateRecord.Name = attr.(string)
   122  	}
   123  
   124  	if attr, ok := d.GetOk("type"); ok {
   125  		updateRecord.Type = attr.(string)
   126  	}
   127  
   128  	if attr, ok := d.GetOk("value"); ok {
   129  		updateRecord.Value = attr.(string)
   130  	}
   131  
   132  	if attr, ok := d.GetOk("ttl"); ok {
   133  		updateRecord.Ttl = attr.(string)
   134  	}
   135  
   136  	log.Printf("[DEBUG] DNS Simple Record update configuration: %#v", updateRecord)
   137  
   138  	_, err := client.UpdateRecord(d.Get("domain").(string), d.Id(), updateRecord)
   139  	if err != nil {
   140  		return fmt.Errorf("Failed to update DNS Simple Record: %s", err)
   141  	}
   142  
   143  	return resourceDNSimpleRecordRead(d, meta)
   144  }
   145  
   146  func resourceDNSimpleRecordDelete(d *schema.ResourceData, meta interface{}) error {
   147  	client := meta.(*dnsimple.Client)
   148  
   149  	log.Printf("[INFO] Deleting DNS Simple Record: %s, %s", d.Get("domain").(string), d.Id())
   150  
   151  	err := client.DestroyRecord(d.Get("domain").(string), d.Id())
   152  
   153  	if err != nil {
   154  		return fmt.Errorf("Error deleting DNS Simple Record: %s", err)
   155  	}
   156  
   157  	return nil
   158  }