mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-01-10 17:38:13 +08:00
780e17ada9
Co-authored-by: Tom Limoncelli <tal@whatexit.org>
47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
package zonerecs
|
|
|
|
import (
|
|
"github.com/StackExchange/dnscontrol/v3/models"
|
|
)
|
|
|
|
// 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, error) {
|
|
existingRecords, err := driver.GetZoneRecords(dc.Name)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// downcase
|
|
models.Downcase(existingRecords)
|
|
|
|
// 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, err
|
|
}
|
|
|
|
// punycode
|
|
dc.Punycode()
|
|
// FIXME(tlim) It is a waste to PunyCode every iteration.
|
|
// This should be moved to where the JavaScript is processed.
|
|
|
|
return driver.GetZoneRecordsCorrections(dc, existingRecords)
|
|
}
|
|
|
|
// CountActionable returns the number of corrections that have
|
|
// actions. It is like `len(corrections)` but doesn't count any
|
|
// corrections that are purely informational. (i.e. `.F` is nil)
|
|
func CountActionable(corrections []*models.Correction) int {
|
|
count := 0
|
|
for i := range corrections {
|
|
if corrections[i].F != nil {
|
|
count++
|
|
}
|
|
}
|
|
return count
|
|
}
|