github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/digitalocean/resource_digitalocean_domain.go (about)

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