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 }