Skip to content

Commit de70a43

Browse files
author
Stanislau Petrusiou
committed
Added RRSet comments
1 parent 9ffb499 commit de70a43

File tree

3 files changed

+73
-16
lines changed

3 files changed

+73
-16
lines changed

powerdns/client.go

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -428,26 +428,14 @@ func (client *Client) DeleteZone(name string) error {
428428

429429
// ListRecords returns all records in Zone
430430
func (client *Client) ListRecords(zone string) ([]Record, error) {
431-
req, err := client.newRequest("GET", fmt.Sprintf("/servers/localhost/zones/%s", zone), nil)
432-
if err != nil {
433-
return nil, err
434-
}
435-
436-
resp, err := client.HTTP.Do(req)
437-
if err != nil {
438-
return nil, err
439-
}
440-
defer resp.Body.Close()
441-
442-
zoneInfo := new(ZoneInfo)
443-
err = json.NewDecoder(resp.Body).Decode(zoneInfo)
431+
rrsets, err := client.ListRRSets(zone)
444432
if err != nil {
445433
return nil, err
446434
}
447435

448-
records := zoneInfo.Records
436+
var records []Record
449437
// Convert the API v1 response to v0 record structure
450-
for _, rrs := range zoneInfo.ResourceRecordSets {
438+
for _, rrs := range rrsets {
451439
for _, record := range rrs.Records {
452440
records = append(records, Record{
453441
Name: rrs.Name,
@@ -461,6 +449,26 @@ func (client *Client) ListRecords(zone string) ([]Record, error) {
461449
return records, nil
462450
}
463451

452+
func (client *Client) getZoneInfo(zone string) (*ZoneInfo, error) {
453+
req, err := client.newRequest("GET", fmt.Sprintf("/servers/localhost/zones/%s", zone), nil)
454+
if err != nil {
455+
return nil, err
456+
}
457+
458+
resp, err := client.HTTP.Do(req)
459+
if err != nil {
460+
return nil, err
461+
}
462+
defer resp.Body.Close()
463+
464+
zoneInfo := new(ZoneInfo)
465+
err = json.NewDecoder(resp.Body).Decode(zoneInfo)
466+
if err != nil {
467+
return nil, err
468+
}
469+
return zoneInfo, nil
470+
}
471+
464472
// ListRecordsInRRSet returns only records of specified name and type
465473
func (client *Client) ListRecordsInRRSet(zone string, name string, tpe string) ([]Record, error) {
466474
allRecords, err := client.ListRecords(zone)
@@ -487,6 +495,35 @@ func (client *Client) ListRecordsByID(zone string, recID string) ([]Record, erro
487495
return client.ListRecordsInRRSet(zone, name, tpe)
488496
}
489497

498+
//GetResourceRecordSet by zone and id
499+
func (client *Client) GetRRSetOfRecord(zone string, recID string) (*ResourceRecordSet, error) {
500+
name, tpe, err := parseID(recID)
501+
if err != nil {
502+
return nil, err
503+
}
504+
505+
rrsets, err := client.ListRRSets(zone)
506+
if err != nil {
507+
return nil, err
508+
}
509+
510+
for _, rrset := range rrsets {
511+
if rrset.Name == name && rrset.Type == tpe {
512+
return &rrset, nil
513+
}
514+
}
515+
return nil, fmt.Errorf("Error getting rrset %s. Not found.", name)
516+
}
517+
518+
//ListRRSets by zone
519+
func (client *Client) ListRRSets(zone string) ([]ResourceRecordSet, error) {
520+
zoneInfo, err := client.getZoneInfo(zone)
521+
if err != nil {
522+
return nil, err
523+
}
524+
return zoneInfo.ResourceRecordSets, nil
525+
}
526+
490527
// RecordExists checks if requested record exists in Zone
491528
func (client *Client) RecordExists(zone string, name string, tpe string) (bool, error) {
492529
allRecords, err := client.ListRecords(zone)

powerdns/resource_powerdns_record.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ func resourcePDNSRecordImport(d *schema.ResourceData, meta interface{}) ([]*sche
231231
log.Printf("[INFO] importing PowerDNS Record %s in Zone: %s", recordID, zoneName)
232232

233233
records, err := client.ListRecordsByID(zoneName, recordID)
234+
rrset, err := client.GetRRSetOfRecord(zoneName, recordID)
235+
234236
if err != nil {
235237
return nil, fmt.Errorf("couldn't fetch PowerDNS Record: %s", err)
236238
}
@@ -244,11 +246,20 @@ func resourcePDNSRecordImport(d *schema.ResourceData, meta interface{}) ([]*sche
244246
recs = append(recs, r.Content)
245247
}
246248

249+
commentsSet := make([]map[string]interface{}, len(rrset.Comments))
250+
for i, comment := range rrset.Comments {
251+
commentsSet[i] = map[string]interface{}{
252+
"content": comment.Content,
253+
"account": comment.Account,
254+
}
255+
}
256+
247257
d.Set("zone", zoneName)
248258
d.Set("name", records[0].Name)
249259
d.Set("ttl", records[0].TTL)
250260
d.Set("type", records[0].Type)
251261
d.Set("records", recs)
262+
d.Set("comment", commentsSet)
252263
d.SetId(recordID)
253264

254265
return []*schema.ResourceData{d}, nil

powerdns/resource_powerdns_record_test.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,9 @@ func TestAccPDNSRecord_TXT(t *testing.T) {
395395
}
396396

397397
func TestAccPDNSRecord_WithComments(t *testing.T) {
398+
resourceName := "powerdns_record.test-comments"
399+
resourceID := `{"zone":"sysa.xyz.","id":"comment.sysa.xyz.:::A"}`
400+
398401
resource.Test(t, resource.TestCase{
399402
PreCheck: func() { testAccPreCheck(t) },
400403
Providers: testAccProviders,
@@ -403,9 +406,15 @@ func TestAccPDNSRecord_WithComments(t *testing.T) {
403406
{
404407
Config: testPDSNRecordWithComments,
405408
Check: resource.ComposeTestCheckFunc(
406-
testAccCheckPDNSRecordExists("powerdns_record.test-comments"),
409+
testAccCheckPDNSRecordExists(resourceName),
407410
),
408411
},
412+
{
413+
ResourceName: resourceName,
414+
ImportStateId: resourceID,
415+
ImportState: true,
416+
ImportStateVerify: true,
417+
},
409418
},
410419
})
411420
}

0 commit comments

Comments
 (0)