mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-12-09 05:36:27 +08:00
ALIDNS: Refactor TTL validation into PrepDesiredRecords function
This commit is contained in:
parent
53fce265d0
commit
ff6b15aa82
1 changed files with 14 additions and 11 deletions
|
|
@ -7,6 +7,7 @@ import (
|
||||||
|
|
||||||
"github.com/StackExchange/dnscontrol/v4/models"
|
"github.com/StackExchange/dnscontrol/v4/models"
|
||||||
"github.com/StackExchange/dnscontrol/v4/pkg/diff2"
|
"github.com/StackExchange/dnscontrol/v4/pkg/diff2"
|
||||||
|
"github.com/StackExchange/dnscontrol/v4/pkg/printer"
|
||||||
"github.com/StackExchange/dnscontrol/v4/providers"
|
"github.com/StackExchange/dnscontrol/v4/providers"
|
||||||
"github.com/aliyun/alibaba-cloud-sdk-go/services/alidns"
|
"github.com/aliyun/alibaba-cloud-sdk-go/services/alidns"
|
||||||
)
|
)
|
||||||
|
|
@ -134,32 +135,34 @@ func deduplicateNameServerTargets(newRecs models.Records) models.Records {
|
||||||
return deduped
|
return deduped
|
||||||
}
|
}
|
||||||
|
|
||||||
// validateRecordTTLs checks that all records in the domain config have valid TTL values
|
// PrepDesiredRecords munges any records to best suit this provider.
|
||||||
// according to the Alibaba Cloud DNS version constraints.
|
func (a *aliDnsDsp) PrepDesiredRecords(dc *models.DomainConfig) {
|
||||||
func (a *aliDnsDsp) validateRecordTTLs(dc *models.DomainConfig) error {
|
|
||||||
versionInfo, err := a.getDomainVersionInfo(dc.Name)
|
versionInfo, err := a.getDomainVersionInfo(dc.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to get domain version info: %w", err)
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
recordsToKeep := make([]*models.RecordConfig, 0, len(dc.Records))
|
||||||
|
|
||||||
for _, rec := range dc.Records {
|
for _, rec := range dc.Records {
|
||||||
if rec.TTL < versionInfo.minTTL {
|
if rec.TTL < versionInfo.minTTL {
|
||||||
return fmt.Errorf("record %s has TTL %d which is below the minimum %d for this domain version (%s)",
|
printer.Warnf("record %s has TTL %d which is below the minimum %d for this domain version (%s)\n",
|
||||||
rec.GetLabelFQDN(), rec.TTL, versionInfo.minTTL, versionInfo.versionCode)
|
rec.GetLabelFQDN(), rec.TTL, versionInfo.minTTL, versionInfo.versionCode)
|
||||||
|
rec.TTL = versionInfo.minTTL
|
||||||
}
|
}
|
||||||
if rec.TTL > versionInfo.maxTTL {
|
if rec.TTL > versionInfo.maxTTL {
|
||||||
return fmt.Errorf("record %s has TTL %d which exceeds the maximum %d (24 hours)",
|
printer.Warnf("record %s has TTL %d which exceeds the maximum %d\n",
|
||||||
rec.GetLabelFQDN(), rec.TTL, versionInfo.maxTTL)
|
rec.GetLabelFQDN(), rec.TTL, versionInfo.maxTTL)
|
||||||
|
rec.TTL = versionInfo.maxTTL
|
||||||
}
|
}
|
||||||
|
recordsToKeep = append(recordsToKeep, rec)
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
|
dc.Records = recordsToKeep
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *aliDnsDsp) GetZoneRecordsCorrections(dc *models.DomainConfig, existingRecords models.Records) ([]*models.Correction, int, error) {
|
func (a *aliDnsDsp) GetZoneRecordsCorrections(dc *models.DomainConfig, existingRecords models.Records) ([]*models.Correction, int, error) {
|
||||||
// Validate TTL constraints for all records
|
a.PrepDesiredRecords(dc)
|
||||||
if err := a.validateRecordTTLs(dc); err != nil {
|
|
||||||
return nil, 0, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var corrections []*models.Correction
|
var corrections []*models.Correction
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue