GANDI_V5: better error handling (#1639)

* GANDI_V5: better error handling

* use newer parsers

* fixup!
This commit is contained in:
Tom Limoncelli 2022-07-21 14:30:26 -04:00 committed by GitHub
parent 9f5c350825
commit b2bef175e0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 8 deletions

View file

@ -4,6 +4,7 @@ package gandiv5
import (
"fmt"
"github.com/go-gandi/go-gandi/livedns"
"github.com/StackExchange/dnscontrol/v3/models"
@ -11,7 +12,7 @@ import (
)
// nativeToRecord takes a DNS record from Gandi and returns a native RecordConfig struct.
func nativeToRecords(n livedns.DomainRecord, origin string) (rcs []*models.RecordConfig) {
func nativeToRecords(n livedns.DomainRecord, origin string) (rcs []*models.RecordConfig, err error) {
// Gandi returns all the values for a given label/rtype pair in each
// livedns.DomainRecord. In other words, if there are multiple A
@ -24,19 +25,24 @@ func nativeToRecords(n livedns.DomainRecord, origin string) (rcs []*models.Recor
Original: n,
}
rc.SetLabel(n.RrsetName, origin)
switch rtype := n.RrsetType; rtype {
case "ALIAS":
rc.Type = "ALIAS"
rc.SetTarget(value)
default: // "A", "AAAA", "CAA", "DS", "NS", "CNAME", "MX", "PTR", "SRV", "TXT"
if err := rc.PopulateFromString(rtype, value, origin); err != nil {
panic(fmt.Errorf("unparsable record received from gandi: %w", err))
}
err = rc.SetTarget(value)
case "TXT":
err = rc.SetTargetTXTfromRFC1035Quoted(value)
default:
err = rc.PopulateFromString(rtype, value, origin)
}
if err != nil {
return nil, fmt.Errorf("unparsable record received from gandi: %w", err)
}
rcs = append(rcs, rc)
}
return rcs
return rcs, nil
}
func recordsToNative(rcs []*models.RecordConfig, origin string) []livedns.DomainRecord {

View file

@ -163,7 +163,11 @@ func (client *gandiv5Provider) GetZoneRecords(domain string) (models.Records, er
// Convert them to DNScontrol's native format:
existingRecords := []*models.RecordConfig{}
for _, rr := range records {
existingRecords = append(existingRecords, nativeToRecords(rr, domain)...)
rrs, err := nativeToRecords(rr, domain)
if err != nil {
return nil, err
}
existingRecords = append(existingRecords, rrs...)
}
return existingRecords, nil