From 6c316993ec643507de7f61dea6d65ca1e57796da Mon Sep 17 00:00:00 2001 From: Patrick Gaskin Date: Sat, 29 Feb 2020 09:04:00 -0500 Subject: [PATCH] VULTR: Implemented get-zones (#628) (#670) --- docs/_includes/matrix.html | 4 ++-- providers/vultr/convert_test.go | 2 +- providers/vultr/vultrProvider.go | 40 +++++++++++++++++--------------- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/docs/_includes/matrix.html b/docs/_includes/matrix.html index 4300186da..acf5b72c6 100644 --- a/docs/_includes/matrix.html +++ b/docs/_includes/matrix.html @@ -1002,8 +1002,8 @@ - - + + diff --git a/providers/vultr/convert_test.go b/providers/vultr/convert_test.go index 128e29513..88b933773 100644 --- a/providers/vultr/convert_test.go +++ b/providers/vultr/convert_test.go @@ -59,7 +59,7 @@ func TestConversion(t *testing.T) { } for _, record := range records { - rc, err := toRecordConfig(dc, record) + rc, err := toRecordConfig(dc.Name, record) if err != nil { t.Error("Error converting Vultr record", record) } diff --git a/providers/vultr/vultrProvider.go b/providers/vultr/vultrProvider.go index 0a7a4ab83..d80df2437 100644 --- a/providers/vultr/vultrProvider.go +++ b/providers/vultr/vultrProvider.go @@ -34,7 +34,7 @@ var features = providers.DocumentationNotes{ providers.CanUseSSHFP: providers.Can(), providers.DocCreateDomains: providers.Can(), providers.DocOfficiallySupported: providers.Cannot(), - providers.CanGetZones: providers.Unimplemented(), + providers.CanGetZones: providers.Can(), } func init() { @@ -68,31 +68,33 @@ func NewProvider(m map[string]string, metadata json.RawMessage) (providers.DNSSe } // GetZoneRecords gets the records of a zone and returns them in RecordConfig format. -func (client *Provider) GetZoneRecords(domain string) (models.Records, error) { - return nil, fmt.Errorf("not implemented") - // This enables the get-zones subcommand. - // Implement this by extracting the code from GetDomainCorrections into - // a single function. For most providers this should be relatively easy. +func (api *Provider) GetZoneRecords(domain string) (models.Records, error) { + records, err := api.client.DNSRecord.List(context.Background(), domain) + if err != nil { + return nil, err + } + + curRecords := make(models.Records, len(records)) + for i := range records { + r, err := toRecordConfig(domain, &records[i]) + if err != nil { + return nil, err + } + curRecords[i] = r + } + + return curRecords, nil } // GetDomainCorrections gets the corrections for a DomainConfig. func (api *Provider) GetDomainCorrections(dc *models.DomainConfig) ([]*models.Correction, error) { dc.Punycode() - records, err := api.client.DNSRecord.List(context.Background(), dc.Name) + curRecords, err := api.GetZoneRecords(dc.Name) if err != nil { return nil, err } - curRecords := make([]*models.RecordConfig, len(records)) - for i := range records { - r, err := toRecordConfig(dc, &records[i]) - if err != nil { - return nil, err - } - curRecords[i] = r - } - models.PostProcessRecords(curRecords) differ := diff.New(dc) @@ -164,13 +166,13 @@ func (api *Provider) isDomainInAccount(domain string) (bool, error) { } // toRecordConfig converts a Vultr DNSRecord to a RecordConfig. #rtype_variations -func toRecordConfig(dc *models.DomainConfig, r *govultr.DNSRecord) (*models.RecordConfig, error) { - origin, data := dc.Name, r.Data +func toRecordConfig(domain string, r *govultr.DNSRecord) (*models.RecordConfig, error) { + origin, data := domain, r.Data rc := &models.RecordConfig{ TTL: uint32(r.TTL), Original: r, } - rc.SetLabel(r.Name, dc.Name) + rc.SetLabel(r.Name, domain) switch rtype := r.Type; rtype { case "CNAME", "NS":