@@ -428,26 +428,14 @@ func (client *Client) DeleteZone(name string) error {
428
428
429
429
// ListRecords returns all records in Zone
430
430
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 )
444
432
if err != nil {
445
433
return nil , err
446
434
}
447
435
448
- records := zoneInfo . Records
436
+ var records [] Record
449
437
// Convert the API v1 response to v0 record structure
450
- for _ , rrs := range zoneInfo . ResourceRecordSets {
438
+ for _ , rrs := range rrsets {
451
439
for _ , record := range rrs .Records {
452
440
records = append (records , Record {
453
441
Name : rrs .Name ,
@@ -461,6 +449,26 @@ func (client *Client) ListRecords(zone string) ([]Record, error) {
461
449
return records , nil
462
450
}
463
451
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
+
464
472
// ListRecordsInRRSet returns only records of specified name and type
465
473
func (client * Client ) ListRecordsInRRSet (zone string , name string , tpe string ) ([]Record , error ) {
466
474
allRecords , err := client .ListRecords (zone )
@@ -487,6 +495,35 @@ func (client *Client) ListRecordsByID(zone string, recID string) ([]Record, erro
487
495
return client .ListRecordsInRRSet (zone , name , tpe )
488
496
}
489
497
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
+
490
527
// RecordExists checks if requested record exists in Zone
491
528
func (client * Client ) RecordExists (zone string , name string , tpe string ) (bool , error ) {
492
529
allRecords , err := client .ListRecords (zone )
0 commit comments