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