Skip to content

Commit 3eec232

Browse files
committed
Refactor freeipa_dns_record to use TypeSet
1 parent 059ec60 commit 3eec232

File tree

1 file changed

+60
-145
lines changed

1 file changed

+60
-145
lines changed

freeipa/resource_freeipa_dns_record.go

Lines changed: 60 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -30,39 +30,22 @@ func resourceFreeIPADNSRecord() *schema.Resource {
3030
Required: true,
3131
ForceNew: true,
3232
},
33-
"dnsttl": {
34-
Type: schema.TypeInt,
35-
Optional: true,
36-
},
37-
"dnsclass": {
38-
Type: schema.TypeString,
39-
Optional: true,
40-
},
41-
"arecord": {
42-
Type: schema.TypeString,
43-
Optional: true,
44-
},
45-
"a_part_ip_address": {
33+
"type": {
4634
Type: schema.TypeString,
47-
Optional: true,
48-
},
49-
"srvrecord": {
50-
Type: schema.TypeString,
51-
Optional: true,
52-
},
53-
"srv_part_priority": {
54-
Type: schema.TypeInt,
55-
Optional: true,
35+
Required: true,
36+
ForceNew: true,
5637
},
57-
"srv_part_weight": {
58-
Type: schema.TypeInt,
59-
Optional: true,
38+
"records": {
39+
Type: schema.TypeSet,
40+
Elem: &schema.Schema{Type: schema.TypeString},
41+
Required: true,
42+
// Set: schema.HashString,
6043
},
61-
"srv_part_port": {
44+
"dnsttl": {
6245
Type: schema.TypeInt,
6346
Optional: true,
6447
},
65-
"srv_part_target": {
48+
"dnsclass": {
6649
Type: schema.TypeString,
6750
Optional: true,
6851
},
@@ -89,6 +72,19 @@ func resourceFreeIPADNSRecordCreate(d *schema.ResourceData, meta interface{}) er
8972
Dnszoneidnsname: &dnszoneidnsname,
9073
}
9174

75+
_type := d.Get("type")
76+
_records := d.Get("records").(*schema.Set).List()
77+
records := make([]string, len(_records))
78+
for i, d := range _records {
79+
records[i] = d.(string)
80+
}
81+
switch _type {
82+
case "A":
83+
optArgs.Arecord = &records
84+
case "SRV":
85+
optArgs.Srvrecord = &records
86+
}
87+
9288
if _dnsttl, ok := d.GetOkExists("dnsttl"); ok {
9389
dnsttl := _dnsttl.(int)
9490
optArgs.Dnsttl = &dnsttl
@@ -99,46 +95,12 @@ func resourceFreeIPADNSRecordCreate(d *schema.ResourceData, meta interface{}) er
9995
optArgs.Dnsclass = &dnsclass
10096
}
10197

102-
if _arecord, ok := d.GetOkExists("arecord"); ok {
103-
arecord := []string{_arecord.(string)}
104-
optArgs.Arecord = &arecord
105-
}
106-
107-
if _aPartIPAddress, ok := d.GetOkExists("a_part_ip_address"); ok {
108-
aPartIPAddress := _aPartIPAddress.(string)
109-
optArgs.APartIPAddress = &aPartIPAddress
110-
}
111-
112-
if _srvrecord, ok := d.GetOkExists("srvrecord"); ok {
113-
srvrecord := []string{_srvrecord.(string)}
114-
optArgs.Srvrecord = &srvrecord
115-
}
116-
117-
if _aSrvPartPriority, ok := d.GetOkExists("srv_part_priority"); ok {
118-
aSrvPartPriority := _aSrvPartPriority.(int)
119-
optArgs.SrvPartPriority = &aSrvPartPriority
120-
}
121-
122-
if _aSrvPartWeight, ok := d.GetOkExists("srv_part_weight"); ok {
123-
aSrvPartWeight := _aSrvPartWeight.(int)
124-
optArgs.SrvPartWeight = &aSrvPartWeight
125-
}
126-
127-
if _aSrvPartPort, ok := d.GetOkExists("srv_part_port"); ok {
128-
aSrvPartPort := _aSrvPartPort.(int)
129-
optArgs.SrvPartPort = &aSrvPartPort
130-
}
131-
132-
if _aSrvPartTarget, ok := d.GetOkExists("srv_part_target"); ok {
133-
aSrvPartTarget := _aSrvPartTarget
134-
optArgs.SrvPartTarget = &aSrvPartTarget
135-
}
136-
13798
_, err = client.DnsrecordAdd(&args, &optArgs)
13899
if err != nil {
139100
return err
140101
}
141102

103+
// TODO: use aws_route53_records' way to generate ID
142104
d.SetId(fmt.Sprintf("%s.%s", idnsname, dnszoneidnsname))
143105

144106
return resourceFreeIPADNSRecordRead(d, meta)
@@ -156,11 +118,22 @@ func resourceFreeIPADNSRecordUpdate(d *schema.ResourceData, meta interface{}) er
156118
Idnsname: d.Get("idnsname").(string),
157119
}
158120

159-
optArgs := ipa.DnsrecordModOptionalArgs{}
121+
dnszoneidnsname := d.Get("dnszoneidnsname")
122+
optArgs := ipa.DnsrecordModOptionalArgs{
123+
Dnszoneidnsname: &dnszoneidnsname,
124+
}
160125

161-
if _dnszoneidnsname, ok := d.GetOkExists("dnszoneidnsname"); ok {
162-
dnszoneidnsname := _dnszoneidnsname
163-
optArgs.Dnszoneidnsname = &dnszoneidnsname
126+
_type := d.Get("type")
127+
_records := d.Get("records").(*schema.Set).List()
128+
records := make([]string, len(_records))
129+
for i, d := range _records {
130+
records[i] = d.(string)
131+
}
132+
switch _type {
133+
case "A":
134+
optArgs.Arecord = &records
135+
case "SRV":
136+
optArgs.Srvrecord = &records
164137
}
165138

166139
if _dnsttl, ok := d.GetOkExists("dnsttl"); ok {
@@ -173,41 +146,6 @@ func resourceFreeIPADNSRecordUpdate(d *schema.ResourceData, meta interface{}) er
173146
optArgs.Dnsclass = &dnsclass
174147
}
175148

176-
if _arecord, ok := d.GetOkExists("arecord"); ok {
177-
arecord := []string{_arecord.(string)}
178-
optArgs.Arecord = &arecord
179-
}
180-
181-
if _aPartIPAddress, ok := d.GetOkExists("a_part_ip_address"); ok {
182-
aPartIPAddress := _aPartIPAddress.(string)
183-
optArgs.APartIPAddress = &aPartIPAddress
184-
}
185-
186-
if _srvrecord, ok := d.GetOkExists("srvrecord"); ok {
187-
srvrecord := []string{_srvrecord.(string)}
188-
optArgs.Srvrecord = &srvrecord
189-
}
190-
191-
if _aSrvPartPriority, ok := d.GetOkExists("srv_part_priority"); ok {
192-
aSrvPartPriority := _aSrvPartPriority.(int)
193-
optArgs.SrvPartPriority = &aSrvPartPriority
194-
}
195-
196-
if _aSrvPartWeight, ok := d.GetOkExists("srv_part_weight"); ok {
197-
aSrvPartWeight := _aSrvPartWeight.(int)
198-
optArgs.SrvPartWeight = &aSrvPartWeight
199-
}
200-
201-
if _aSrvPartPort, ok := d.GetOkExists("srv_part_port"); ok {
202-
aSrvPartPort := _aSrvPartPort.(int)
203-
optArgs.SrvPartPort = &aSrvPartPort
204-
}
205-
206-
if _aSrvPartTarget, ok := d.GetOkExists("srv_part_target"); ok {
207-
aSrvPartTarget := _aSrvPartTarget
208-
optArgs.SrvPartTarget = &aSrvPartTarget
209-
}
210-
211149
_, err = client.DnsrecordMod(&args, &optArgs)
212150
if err != nil {
213151
return err
@@ -228,52 +166,32 @@ func resourceFreeIPADNSRecordRead(d *schema.ResourceData, meta interface{}) erro
228166
Idnsname: d.Get("idnsname").(string),
229167
}
230168

231-
optArgs := ipa.DnsrecordShowOptionalArgs{}
232-
233-
if _dnszoneidnsname, ok := d.GetOkExists("dnszoneidnsname"); ok {
234-
dnszoneidnsname := _dnszoneidnsname
235-
optArgs.Dnszoneidnsname = &dnszoneidnsname
169+
dnszoneidnsname := d.Get("dnszoneidnsname")
170+
all := true
171+
optArgs := ipa.DnsrecordShowOptionalArgs{
172+
Dnszoneidnsname: &dnszoneidnsname,
173+
All: &all,
236174
}
237175

238176
res, err := client.DnsrecordShow(&args, &optArgs)
239177
if err != nil {
240178
return err
241179
}
242180

243-
if res.Result.Dnsttl != nil {
244-
d.Set("dnsttl", *res.Result.Dnsttl)
245-
}
246-
247-
if res.Result.Dnsclass != nil {
248-
d.Set("dnsclass", *res.Result.Dnsclass)
249-
}
250-
251181
if res.Result.Arecord != nil {
252-
d.Set("arecord", *res.Result.Arecord)
253-
}
254-
255-
if res.Result.APartIPAddress != nil {
256-
d.Set("a_part_ip_address", *res.Result.APartIPAddress)
182+
d.Set("records", *res.Result.Arecord)
257183
}
258184

259185
if res.Result.Srvrecord != nil {
260-
d.Set("srvrecord", *res.Result.Srvrecord)
186+
d.Set("records", *res.Result.Srvrecord)
261187
}
262188

263-
if res.Result.SrvPartPriority != nil {
264-
d.Set("srv_part_priority", *res.Result.SrvPartPriority)
265-
}
266-
267-
if res.Result.SrvPartWeight != nil {
268-
d.Set("srv_part_weight", *res.Result.SrvPartWeight)
269-
}
270-
271-
if res.Result.SrvPartPort != nil {
272-
d.Set("srv_part_port", *res.Result.SrvPartPort)
189+
if res.Result.Dnsttl != nil {
190+
d.Set("dnsttl", *res.Result.Dnsttl)
273191
}
274192

275-
if res.Result.SrvPartTarget != nil {
276-
d.Set("srv_part_target", *res.Result.SrvPartTarget)
193+
if res.Result.Dnsclass != nil {
194+
d.Set("dnsclass", *res.Result.Dnsclass)
277195
}
278196

279197
return nil
@@ -292,26 +210,23 @@ func resourceFreeIPADNSRecordDelete(d *schema.ResourceData, meta interface{}) er
292210
}
293211

294212
dnszoneidnsname := d.Get("dnszoneidnsname")
295-
delAll := true
296-
297213
optArgs := ipa.DnsrecordDelOptionalArgs{
298214
Dnszoneidnsname: &dnszoneidnsname,
299215
}
300216

301-
if _arecord, ok := d.GetOkExists("arecord"); ok {
302-
arecord := []string{_arecord.(string)}
303-
optArgs.Arecord = &arecord
304-
delAll = false
217+
_type := d.Get("type")
218+
_records := d.Get("records").(*schema.Set).List()
219+
records := make([]string, len(_records))
220+
for i, d := range _records {
221+
records[i] = d.(string)
305222
}
306-
307-
if _srvrecord, ok := d.GetOkExists("srvrecord"); ok {
308-
srvrecord := []string{_srvrecord.(string)}
309-
optArgs.Srvrecord = &srvrecord
310-
delAll = false
223+
switch _type {
224+
case "A":
225+
optArgs.Arecord = &records
226+
case "SRV":
227+
optArgs.Srvrecord = &records
311228
}
312229

313-
optArgs.DelAll = &delAll
314-
315230
_, err = client.DnsrecordDel(&args, &optArgs)
316231
if err != nil {
317232
return err

0 commit comments

Comments
 (0)