dnscontrol/pkg/zonerecs/zonerecords.go

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

58 lines
1.8 KiB
Go
Raw Normal View History

package zonerecs
import (
2023-05-21 01:21:45 +08:00
"github.com/StackExchange/dnscontrol/v4/models"
2025-01-10 23:43:16 +08:00
"github.com/go-acme/lego/v4/log"
)
// CorrectZoneRecords calls both GetZoneRecords, does any
// post-processing, and then calls GetZoneRecordsCorrections. The
// name sucks because all the good names were taken.
func CorrectZoneRecords(driver models.DNSProvider, dc *models.DomainConfig) ([]*models.Correction, []*models.Correction, int, error) {
existingRecords, err := driver.GetZoneRecords(dc.Name, dc.Metadata)
if err != nil {
return nil, nil, 0, err
}
2025-01-10 23:43:16 +08:00
if models.CheckAndFixImport(existingRecords, dc.Name) {
log.Warnf("Domain %+v sent records not yet converted to new-style Fields storage. Adjusting.", dc.DNSProviderNames)
}
// downcase
models.Downcase(existingRecords)
models.Downcase(dc.Records)
models.CanonicalizeTargets(existingRecords, dc.Name)
models.CanonicalizeTargets(dc.Records, dc.Name)
// Copy dc so that any corrections code that wants to
// modify the records may. For example, if the provider only
// supports certain TTL values, it will adjust the ones in
// dc.Records.
dc, err = dc.Copy()
if err != nil {
return nil, nil, 0, err
}
// punycode
2025-01-10 23:43:16 +08:00
if err := dc.Punycode(); err != nil {
return nil, nil, 0, err
}
// FIXME(tlim) It is a waste to PunyCode every iteration.
// This should be moved to where the JavaScript is processed.
everything, actualChangeCount, err := driver.GetZoneRecordsCorrections(dc, existingRecords)
reports, corrections := splitReportsAndCorrections(everything)
return reports, corrections, actualChangeCount, err
}
func splitReportsAndCorrections(everything []*models.Correction) (reports, corrections []*models.Correction) {
for i := range everything {
if everything[i].F == nil {
reports = append(reports, everything[i])
} else {
corrections = append(corrections, everything[i])
}
}
return reports, corrections
}