github.com/cbroglie/terraform@v0.7.0-rc3.0.20170410193827-735dfc416d46/builtin/providers/dnsimple/resource_dnsimple_record.go (about)

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