@@ -3,12 +3,11 @@ package dnsimple
33import (
44 "fmt"
55 "log"
6- "strconv"
76
87 "github.com/hashicorp/terraform/helper/config"
98 "github.com/hashicorp/terraform/helper/diff"
109 "github.com/hashicorp/terraform/terraform"
11- "github.com/rubyist/go- dnsimple"
10+ "github.com/pearkes/ dnsimple"
1211)
1312
1413func resource_dnsimple_record_create (
@@ -24,42 +23,79 @@ func resource_dnsimple_record_create(
2423
2524 var err error
2625
27- newRecord := dnsimple.Record {
28- Name : rs .Attributes ["name" ],
29- Content : rs .Attributes ["value" ],
30- RecordType : rs .Attributes ["type" ],
26+ newRecord := dnsimple.ChangeRecord {
27+ Name : rs .Attributes ["name" ],
28+ Value : rs .Attributes ["value" ],
29+ Type : rs .Attributes ["type" ],
3130 }
3231
3332 if attr , ok := rs .Attributes ["ttl" ]; ok {
34- newRecord .TTL , err = strconv .Atoi (attr )
35- if err != nil {
36- return nil , err
37- }
33+ newRecord .Ttl = attr
3834 }
3935
4036 log .Printf ("[DEBUG] record create configuration: %#v" , newRecord )
4137
42- rec , err := client .CreateRecord (rs .Attributes ["domain" ], newRecord )
38+ recId , err := client .CreateRecord (rs .Attributes ["domain" ], & newRecord )
4339
4440 if err != nil {
4541 return nil , fmt .Errorf ("Failed to create record: %s" , err )
4642 }
4743
48- rs .ID = strconv .Itoa (rec .Id )
49-
44+ rs .ID = recId
5045 log .Printf ("[INFO] record ID: %s" , rs .ID )
5146
52- return resource_dnsimple_record_update_state (rs , & rec )
47+ record , err := resource_dnsimple_record_retrieve (s .Attributes ["domain" ], s .ID , client )
48+ if err != nil {
49+ return nil , fmt .Errorf ("Couldn't find record: %s" , err )
50+ }
51+
52+ return resource_dnsimple_record_update_state (rs , record )
5353}
5454
5555func resource_dnsimple_record_update (
5656 s * terraform.ResourceState ,
5757 d * terraform.ResourceDiff ,
5858 meta interface {}) (* terraform.ResourceState , error ) {
59+ p := meta .(* ResourceProvider )
60+ client := p .client
61+ rs := s .MergeDiff (d )
62+
63+ updateRecord := dnsimple.ChangeRecord {}
5964
60- panic ("Cannot update record" )
65+ record , err := resource_dnsimple_record_retrieve (s .Attributes ["domain" ], s .ID , client )
66+ if err != nil {
67+ return nil , fmt .Errorf ("Couldn't find record: %s" , err )
68+ }
69+
70+ if attr , ok := d .Attributes ["name" ]; ok {
71+ updateRecord .Name = attr .New
72+ }
73+
74+ if attr , ok := d .Attributes ["value" ]; ok {
75+ updateRecord .Value = attr .New
76+ }
77+
78+ if attr , ok := d .Attributes ["type" ]; ok {
79+ updateRecord .Type = attr .New
80+ }
6181
62- return nil , nil
82+ if attr , ok := d .Attributes ["ttl" ]; ok {
83+ updateRecord .Ttl = attr .New
84+ }
85+
86+ log .Printf ("[DEBUG] record update configuration: %#v" , updateRecord )
87+
88+ _ , err = client .UpdateRecord (rs .Attributes ["domain" ], rs .ID , & updateRecord )
89+ if err != nil {
90+ return nil , fmt .Errorf ("Failed to update record: %s" , err )
91+ }
92+
93+ record , err = resource_dnsimple_record_retrieve (s .Attributes ["domain" ], s .ID , client )
94+ if err != nil {
95+ return nil , fmt .Errorf ("Couldn't find record: %s" , err )
96+ }
97+
98+ return resource_dnsimple_record_update_state (rs , record )
6399}
64100
65101func resource_dnsimple_record_destroy (
@@ -70,12 +106,8 @@ func resource_dnsimple_record_destroy(
70106
71107 log .Printf ("[INFO] Deleting record: %s" , s .ID )
72108
73- rec , err := resource_dnsimple_record_retrieve (s .Attributes ["domain" ], s .ID , client )
74- if err != nil {
75- return err
76- }
109+ err := client .DestroyRecord (s .ID )
77110
78- err = rec .Delete (client )
79111 if err != nil {
80112 return fmt .Errorf ("Error deleting record: %s" , err )
81113 }
@@ -105,9 +137,9 @@ func resource_dnsimple_record_diff(
105137 b := & diff.ResourceBuilder {
106138 Attrs : map [string ]diff.AttrType {
107139 "domain" : diff .AttrTypeCreate ,
108- "name" : diff .AttrTypeCreate ,
140+ "name" : diff .AttrTypeUpdate ,
109141 "value" : diff .AttrTypeUpdate ,
110- "ttl" : diff .AttrTypeCreate ,
142+ "ttl" : diff .AttrTypeUpdate ,
111143 "type" : diff .AttrTypeUpdate ,
112144 },
113145
@@ -127,20 +159,15 @@ func resource_dnsimple_record_update_state(
127159 s .Attributes ["name" ] = rec .Name
128160 s .Attributes ["value" ] = rec .Content
129161 s .Attributes ["type" ] = rec .RecordType
130- s .Attributes ["ttl" ] = strconv . Itoa ( rec .TTL )
131- s .Attributes ["priority" ] = strconv . Itoa ( rec .Priority )
132- s .Attributes ["domain_id" ] = strconv . Itoa ( rec .DomainId )
162+ s .Attributes ["ttl" ] = rec .StringTtl ( )
163+ s .Attributes ["priority" ] = rec .StringPrio ( )
164+ s .Attributes ["domain_id" ] = rec .StringDomainId ( )
133165
134166 return s , nil
135167}
136168
137- func resource_dnsimple_record_retrieve (domain string , id string , client * dnsimple.DNSimpleClient ) (* dnsimple.Record , error ) {
138- intId , err := strconv .Atoi (id )
139- if err != nil {
140- return nil , err
141- }
142-
143- record , err := client .RetrieveRecord (domain , intId )
169+ func resource_dnsimple_record_retrieve (domain string , id string , client * dnsimple.Client ) (* dnsimple.Record , error ) {
170+ record , err := client .RetrieveRecord (domain , id )
144171 if err != nil {
145172 return nil , fmt .Errorf ("Error retrieving record: %s" , err )
146173 }
0 commit comments