From fddec1db68dea114a0030eaef826ea3d7f4eb9cc Mon Sep 17 00:00:00 2001 From: Ricky Grassmuck Date: Thu, 15 Jun 2023 08:23:50 -0500 Subject: [PATCH] DIGITALOCEAN: Enable get-zones "all" feature (implement ListZones()) (#2437) Co-authored-by: Tom Limoncelli --- .../digitalocean/digitaloceanProvider.go | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/providers/digitalocean/digitaloceanProvider.go b/providers/digitalocean/digitaloceanProvider.go index 1eb6ff5d5..6bcf8b106 100644 --- a/providers/digitalocean/digitaloceanProvider.go +++ b/providers/digitalocean/digitaloceanProvider.go @@ -109,6 +109,40 @@ retry: return err } +// ListZones returns the list of zones (domains) in this account. +func (api *digitaloceanProvider) ListZones() ([]string, error) { + ctx := context.Background() + zones := []string{} + opt := &godo.ListOptions{PerPage: perPageSize} +retry: + for { + result, resp, err := api.client.Domains.List(ctx, opt) + if err != nil { + if pauseAndRetry(resp) { + goto retry + } + return nil, err + } + + for _, d := range result { + zones = append(zones, d.Name) + } + + if resp.Links == nil || resp.Links.IsLastPage() { + break + } + + page, err := resp.Links.CurrentPage() + if err != nil { + return nil, err + } + + opt.Page = page + 1 + } + + return zones, nil +} + // GetNameservers returns the nameservers for domain. func (api *digitaloceanProvider) GetNameservers(domain string) ([]*models.Nameserver, error) { return models.ToNameservers(defaultNameServerNames)