github.com/erriapo/terraform@v0.6.12-0.20160203182612-0340ea72354f/builtin/providers/digitalocean/resource_digitalocean_domain.go (about)

     1  package digitalocean
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/digitalocean/godo"
     8  	"github.com/hashicorp/terraform/helper/schema"
     9  )
    10  
    11  func resourceDigitalOceanDomain() *schema.Resource {
    12  	return &schema.Resource{
    13  		Create: resourceDigitalOceanDomainCreate,
    14  		Read:   resourceDigitalOceanDomainRead,
    15  		Delete: resourceDigitalOceanDomainDelete,
    16  
    17  		Schema: map[string]*schema.Schema{
    18  			"name": &schema.Schema{
    19  				Type:     schema.TypeString,
    20  				Required: true,
    21  				ForceNew: true,
    22  			},
    23  
    24  			"ip_address": &schema.Schema{
    25  				Type:     schema.TypeString,
    26  				Required: true,
    27  				ForceNew: true,
    28  			},
    29  		},
    30  	}
    31  }
    32  
    33  func resourceDigitalOceanDomainCreate(d *schema.ResourceData, meta interface{}) error {
    34  	client := meta.(*godo.Client)
    35  
    36  	// Build up our creation options
    37  
    38  	opts := &godo.DomainCreateRequest{
    39  		Name:      d.Get("name").(string),
    40  		IPAddress: d.Get("ip_address").(string),
    41  	}
    42  
    43  	log.Printf("[DEBUG] Domain create configuration: %#v", opts)
    44  	domain, _, err := client.Domains.Create(opts)
    45  	if err != nil {
    46  		return fmt.Errorf("Error creating Domain: %s", err)
    47  	}
    48  
    49  	d.SetId(domain.Name)
    50  	log.Printf("[INFO] Domain Name: %s", domain.Name)
    51  
    52  	return resourceDigitalOceanDomainRead(d, meta)
    53  }
    54  
    55  func resourceDigitalOceanDomainRead(d *schema.ResourceData, meta interface{}) error {
    56  	client := meta.(*godo.Client)
    57  
    58  	domain, resp, err := client.Domains.Get(d.Id())
    59  	if err != nil {
    60  		// If the domain is somehow already destroyed, mark as
    61  		// successfully gone
    62  		if resp.StatusCode == 404 {
    63  			d.SetId("")
    64  			return nil
    65  		}
    66  
    67  		return fmt.Errorf("Error retrieving domain: %s", err)
    68  	}
    69  
    70  	d.Set("name", domain.Name)
    71  
    72  	return nil
    73  }
    74  
    75  func resourceDigitalOceanDomainDelete(d *schema.ResourceData, meta interface{}) error {
    76  	client := meta.(*godo.Client)
    77  
    78  	log.Printf("[INFO] Deleting Domain: %s", d.Id())
    79  	_, err := client.Domains.Delete(d.Id())
    80  	if err != nil {
    81  		return fmt.Errorf("Error deleting Domain: %s", err)
    82  	}
    83  
    84  	d.SetId("")
    85  	return nil
    86  }