@@ -49,6 +49,7 @@ func resourcePDNSZone() *schema.Resource {
49
49
Type : schema .TypeSet ,
50
50
Elem : & schema.Schema {Type : schema .TypeString },
51
51
Optional : true ,
52
+ ForceNew : true ,
52
53
},
53
54
54
55
"masters" : {
@@ -140,7 +141,7 @@ func resourcePDNSZoneRead(d *schema.ResourceData, meta interface{}) error {
140
141
d .Set ("account" , zoneInfo .Account )
141
142
d .Set ("soa_edit_api" , zoneInfo .SoaEditAPI )
142
143
143
- if zoneInfo .Kind != "Slave" && len ( d . Get ( "nameservers" ).( * schema. Set ). List ()) > 0 {
144
+ if zoneInfo .Kind != "Slave" {
144
145
nameservers , err := client .ListRecordsInRRSet (zoneInfo .Name , zoneInfo .Name , "NS" )
145
146
if err != nil {
146
147
return fmt .Errorf ("couldn't fetch zone %s nameservers from PowerDNS: %v" , zoneInfo .Name , err )
@@ -167,62 +168,15 @@ func resourcePDNSZoneUpdate(d *schema.ResourceData, meta interface{}) error {
167
168
client := meta .(* Client )
168
169
169
170
zoneInfo := ZoneInfo {}
171
+ shouldUpdate := false
170
172
if d .HasChange ("kind" ) {
171
173
zoneInfo .Kind = d .Get ("kind" ).(string )
172
- c := client .UpdateZone (d .Id (), zoneInfo )
173
-
174
- if c != nil {
175
- return c
176
- }
174
+ shouldUpdate = true
177
175
}
178
176
179
- if d .HasChange ("nameservers" ) {
180
- nameservers := d .Get ("nameservers" ).(* schema.Set ).List ()
181
- zone := d .Get ("name" ).(string )
182
-
183
- if len (nameservers ) > 0 {
184
- nsTTL := 0
185
- nsRecords , _ := client .ListRecordsInRRSet (zone , zone , "NS" )
186
-
187
- if len (nsRecords ) > 0 {
188
- nsTTL = nsRecords [0 ].TTL
189
- } else {
190
- soaRecord , _ := client .ListRecordsInRRSet (zone , zone , "SOA" )
191
- nsTTL = soaRecord [0 ].TTL
192
- }
193
-
194
- rrSet := ResourceRecordSet {
195
- Name : d .Get ("name" ).(string ),
196
- Type : "NS" ,
197
- TTL : nsTTL ,
198
- }
199
-
200
- records := make ([]Record , 0 , len (nameservers ))
201
- for _ , recContent := range nameservers {
202
- records = append (records ,
203
- Record {Name : rrSet .Name ,
204
- Type : rrSet .Type ,
205
- TTL : nsTTL ,
206
- Content : recContent .(string ),
207
- SetPtr : false })
208
- }
209
-
210
- rrSet .Records = records
211
-
212
- log .Printf ("[DEBUG] Updating PowerDNS NS Record: %#v" , rrSet )
213
-
214
- _ , err := client .ReplaceRecordSet (d .Get ("name" ).(string ), rrSet )
215
- if err != nil {
216
- return fmt .Errorf ("Failed to update PowerDNS NS Record: %s" , err )
217
- }
218
- } else {
219
- err := client .DeleteRecordSet (zone , zone , "NS" )
220
- if err != nil {
221
- return fmt .Errorf ("Failed to remove PowerDNS NS Record: %s" , err )
222
- }
223
- }
177
+ if shouldUpdate {
178
+ return client .UpdateZone (d .Id (), zoneInfo )
224
179
}
225
- resourcePDNSZoneRead (d , meta )
226
180
return nil
227
181
}
228
182
0 commit comments