@@ -428,26 +428,14 @@ func (client *Client) DeleteZone(name string) error {
428428
429429// ListRecords returns all records in Zone
430430func (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
465473func (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
491528func (client * Client ) RecordExists (zone string , name string , tpe string ) (bool , error ) {
492529 allRecords , err := client .ListRecords (zone )
0 commit comments