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
This commit is contained in:
Tom Limoncelli 2017-09-08 16:46:31 -04:00
parent 627334803e
commit e8f7886d0c
3 changed files with 55 additions and 35 deletions

View file

@ -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
}

View file

@ -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
}

32
vendor/vendor.json vendored
View file

@ -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=",