From e8f7886d0cb639a9af7cafc6cdf6bf4c4e44c708 Mon Sep 17 00:00:00 2001 From: Tom Limoncelli Date: Fri, 8 Sep 2017 16:46:31 -0400 Subject: [PATCH] GANDI: Now works large zones and >100 domains * update to latest github.com/prasmussen/gandi-api/domain * Fixed https://github.com/StackExchange/dnscontrol/issues/185 * GANDI: Now works with >100 domains * GANDI: Now works with zones with >100 records --- .../prasmussen/gandi-api/domain/domain.go | 27 ++++++++++------ .../gandi-api/domain/zone/record/record.go | 31 ++++++++++++------ vendor/vendor.json | 32 +++++++++---------- 3 files changed, 55 insertions(+), 35 deletions(-) diff --git a/vendor/github.com/prasmussen/gandi-api/domain/domain.go b/vendor/github.com/prasmussen/gandi-api/domain/domain.go index d4697f7c5..7c3edfa96 100644 --- a/vendor/github.com/prasmussen/gandi-api/domain/domain.go +++ b/vendor/github.com/prasmussen/gandi-api/domain/domain.go @@ -35,16 +35,25 @@ func (self *Domain) Info(name string) (*DomainInfo, error) { // List domains associated to the contact represented by apikey func (self *Domain) List() ([]*DomainInfoBase, error) { - var res []interface{} - params := []interface{}{self.Key} - if err := self.Call("domain.list", params, &res); err != nil { - return nil, err - } - + opts := &struct { + Page int `xmlrpc:"page"` + }{0} + const perPage = 100 + params := []interface{}{self.Key, opts} domains := make([]*DomainInfoBase, 0) - for _, r := range res { - domain := ToDomainInfoBase(r.(map[string]interface{})) - domains = append(domains, domain) + for { + var res []interface{} + if err := self.Call("domain.list", params, &res); err != nil { + return nil, err + } + for _, r := range res { + domain := ToDomainInfoBase(r.(map[string]interface{})) + domains = append(domains, domain) + } + if len(res) < perPage { + break + } + opts.Page++ } return domains, nil } diff --git a/vendor/github.com/prasmussen/gandi-api/domain/zone/record/record.go b/vendor/github.com/prasmussen/gandi-api/domain/zone/record/record.go index 199bc4c2a..880ba6e0e 100644 --- a/vendor/github.com/prasmussen/gandi-api/domain/zone/record/record.go +++ b/vendor/github.com/prasmussen/gandi-api/domain/zone/record/record.go @@ -1,6 +1,8 @@ package record -import "github.com/prasmussen/gandi-api/client" +import ( + "github.com/prasmussen/gandi-api/client" +) type Record struct { *client.Client @@ -22,16 +24,25 @@ func (self *Record) Count(zoneId, version int64) (int64, error) { // List records of a version of a DNS zone func (self *Record) List(zoneId, version int64) ([]*RecordInfo, error) { - var res []interface{} - params := []interface{}{self.Key, zoneId, version} - if err := self.Call("domain.zone.record.list", params, &res); err != nil { - return nil, err - } - + opts := &struct { + Page int `xmlrpc:"page"` + }{0} + const perPage = 100 + params := []interface{}{self.Key, zoneId, version, opts} records := make([]*RecordInfo, 0) - for _, r := range res { - record := ToRecordInfo(r.(map[string]interface{})) - records = append(records, record) + for { + var res []interface{} + if err := self.Call("domain.zone.record.list", params, &res); err != nil { + return nil, err + } + for _, r := range res { + record := ToRecordInfo(r.(map[string]interface{})) + records = append(records, record) + } + if len(res) < perPage { + break + } + opts.Page++ } return records, nil } diff --git a/vendor/vendor.json b/vendor/vendor.json index bd5e6bf77..72b61fdff 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -299,44 +299,44 @@ { "checksumSHA1": "nS4kKHjMlJpQg3sixqelpCg1jyk=", "path": "github.com/prasmussen/gandi-api/client", - "revision": "13205dc554f4aeb75c93e8b57ad1e3d6fa3be5d5", - "revisionTime": "2016-04-18T18:49:04Z" + "revision": "931915c3a2ca2661373f0b25bbedfee9e1958d2b", + "revisionTime": "2017-09-08T20:15:21Z" }, { - "checksumSHA1": "JZSh5mPC7r4AHhSg+IjD897n22A=", + "checksumSHA1": "tT8xSQc+QM3/JPs16WjDtTFY7j0=", "path": "github.com/prasmussen/gandi-api/domain", - "revision": "13205dc554f4aeb75c93e8b57ad1e3d6fa3be5d5", - "revisionTime": "2016-04-18T18:49:04Z" + "revision": "931915c3a2ca2661373f0b25bbedfee9e1958d2b", + "revisionTime": "2017-09-08T20:15:21Z" }, { "checksumSHA1": "/t4nBKtJF6W3PHzTBNAzgcw54GU=", "path": "github.com/prasmussen/gandi-api/domain/zone", - "revision": "13205dc554f4aeb75c93e8b57ad1e3d6fa3be5d5", - "revisionTime": "2016-04-18T18:49:04Z" + "revision": "931915c3a2ca2661373f0b25bbedfee9e1958d2b", + "revisionTime": "2017-09-08T20:15:21Z" }, { - "checksumSHA1": "QXUT2Olct3vKqg6RIgdoUqJHsFU=", + "checksumSHA1": "wers/RRtpv1SXRpnUg6ptC1nKoM=", "path": "github.com/prasmussen/gandi-api/domain/zone/record", - "revision": "13205dc554f4aeb75c93e8b57ad1e3d6fa3be5d5", - "revisionTime": "2016-04-18T18:49:04Z" + "revision": "931915c3a2ca2661373f0b25bbedfee9e1958d2b", + "revisionTime": "2017-09-08T20:15:21Z" }, { "checksumSHA1": "avzpVkEeXzDiaNLsl4agXWm9tm0=", "path": "github.com/prasmussen/gandi-api/domain/zone/version", - "revision": "13205dc554f4aeb75c93e8b57ad1e3d6fa3be5d5", - "revisionTime": "2016-04-18T18:49:04Z" + "revision": "931915c3a2ca2661373f0b25bbedfee9e1958d2b", + "revisionTime": "2017-09-08T20:15:21Z" }, { "checksumSHA1": "txVNPkzE0Jkag20VZ1hLj/Td+O4=", "path": "github.com/prasmussen/gandi-api/operation", - "revision": "13205dc554f4aeb75c93e8b57ad1e3d6fa3be5d5", - "revisionTime": "2016-04-18T18:49:04Z" + "revision": "931915c3a2ca2661373f0b25bbedfee9e1958d2b", + "revisionTime": "2017-09-08T20:15:21Z" }, { "checksumSHA1": "FwIh1Rk/XNANaxCz3Fw/vQ3Hu5E=", "path": "github.com/prasmussen/gandi-api/util", - "revision": "13205dc554f4aeb75c93e8b57ad1e3d6fa3be5d5", - "revisionTime": "2016-04-18T18:49:04Z" + "revision": "931915c3a2ca2661373f0b25bbedfee9e1958d2b", + "revisionTime": "2017-09-08T20:15:21Z" }, { "checksumSHA1": "EqyHXBcg5cWi4ERsMXN6g1opi1o=",