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