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