mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-12-09 05:36:27 +08:00
ALIDNS: Implement default TTL handling and provider registration
This commit is contained in:
parent
90650e4d8b
commit
0a1834c865
4 changed files with 36 additions and 0 deletions
|
|
@ -167,6 +167,12 @@ func GetZone(args GetZoneArgs) error {
|
||||||
return fmt.Errorf("failed GetZone CDP: %w", err)
|
return fmt.Errorf("failed GetZone CDP: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the actual provider type name from creds.json or args
|
||||||
|
providerType := args.ProviderName
|
||||||
|
if providerType == "" || providerType == "-" {
|
||||||
|
providerType = providerConfigs[args.CredName][pproviderTypeFieldName]
|
||||||
|
}
|
||||||
|
|
||||||
// decide which zones we need to convert
|
// decide which zones we need to convert
|
||||||
zones := args.ZoneNames
|
zones := args.ZoneNames
|
||||||
if len(args.ZoneNames) == 1 && args.ZoneNames[0] == "all" {
|
if len(args.ZoneNames) == 1 && args.ZoneNames[0] == "all" {
|
||||||
|
|
@ -253,6 +259,13 @@ func GetZone(args GetZoneArgs) error {
|
||||||
if defaultTTL == 0 {
|
if defaultTTL == 0 {
|
||||||
defaultTTL = prettyzone.MostCommonTTL(recs)
|
defaultTTL = prettyzone.MostCommonTTL(recs)
|
||||||
}
|
}
|
||||||
|
// If provider has a registered default TTL and no records exist or MostCommonTTL returns 0,
|
||||||
|
// use the provider's default TTL
|
||||||
|
if defaultTTL == 0 || defaultTTL == models.DefaultTTL {
|
||||||
|
if providerDefaultTTL := providers.GetDefaultTTL(providerType); providerDefaultTTL > 0 {
|
||||||
|
defaultTTL = providerDefaultTTL
|
||||||
|
}
|
||||||
|
}
|
||||||
if defaultTTL != models.DefaultTTL && defaultTTL != 0 {
|
if defaultTTL != models.DefaultTTL && defaultTTL != 0 {
|
||||||
o = append(o, fmt.Sprintf("DefaultTTL(%d)", defaultTTL))
|
o = append(o, fmt.Sprintf("DefaultTTL(%d)", defaultTTL))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,9 @@ func init() {
|
||||||
// The domain name in the browser's address bar does not change, but the content displayed is from the target website.
|
// The domain name in the browser's address bar does not change, but the content displayed is from the target website.
|
||||||
providers.RegisterCustomRecordType("IMPLICIT_URL_FORWARDING", providerName, "")
|
providers.RegisterCustomRecordType("IMPLICIT_URL_FORWARDING", providerName, "")
|
||||||
providers.RegisterMaintainer(providerName, providerMaintainer)
|
providers.RegisterMaintainer(providerName, providerMaintainer)
|
||||||
|
// Register default TTL of 600 seconds (10 minutes) for Alibaba Cloud DNS
|
||||||
|
// This is the minimum TTL for free/personal edition domains
|
||||||
|
providers.RegisterDefaultTTL(providerName, 600)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -150,6 +153,11 @@ func (a *aliDnsDsp) PrepDesiredRecords(dc *models.DomainConfig) {
|
||||||
recordsToKeep := make([]*models.RecordConfig, 0, len(dc.Records))
|
recordsToKeep := make([]*models.RecordConfig, 0, len(dc.Records))
|
||||||
|
|
||||||
for _, rec := range dc.Records {
|
for _, rec := range dc.Records {
|
||||||
|
// If TTL is 0 (not set), use the minimum TTL as default
|
||||||
|
if rec.TTL == 0 {
|
||||||
|
rec.TTL = versionInfo.minTTL
|
||||||
|
}
|
||||||
|
|
||||||
if rec.TTL < versionInfo.minTTL {
|
if rec.TTL < versionInfo.minTTL {
|
||||||
printer.Warnf("record %s has TTL %d which is below the minimum %d for this domain version (%s)\n",
|
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)
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ func nativeToRecord(r *alidns.Record, domain string) (*models.RecordConfig, erro
|
||||||
TTL: uint32(r.TTL),
|
TTL: uint32(r.TTL),
|
||||||
Original: r,
|
Original: r,
|
||||||
}
|
}
|
||||||
|
|
||||||
label, err := idna.ToASCII(r.RR)
|
label, err := idna.ToASCII(r.RR)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to convert label to ASCII: %w", err)
|
return nil, fmt.Errorf("failed to convert label to ASCII: %w", err)
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,20 @@ func RegisterMaintainer(
|
||||||
ProviderMaintainers[providerName] = gitHubUsername
|
ProviderMaintainers[providerName] = gitHubUsername
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ProviderDefaultTTLs stores the default TTL for each provider.
|
||||||
|
var ProviderDefaultTTLs = map[string]uint32{}
|
||||||
|
|
||||||
|
// RegisterDefaultTTL registers a default TTL for a provider.
|
||||||
|
// This is used by get-zones to determine the DefaultTTL when generating output.
|
||||||
|
func RegisterDefaultTTL(providerName string, defaultTTL uint32) {
|
||||||
|
ProviderDefaultTTLs[providerName] = defaultTTL
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDefaultTTL returns the default TTL for a provider, or 0 if not registered.
|
||||||
|
func GetDefaultTTL(providerName string) uint32 {
|
||||||
|
return ProviderDefaultTTLs[providerName]
|
||||||
|
}
|
||||||
|
|
||||||
// CreateRegistrar initializes a registrar instance from given credentials.
|
// CreateRegistrar initializes a registrar instance from given credentials.
|
||||||
func CreateRegistrar(rType string, config map[string]string) (Registrar, error) {
|
func CreateRegistrar(rType string, config map[string]string) (Registrar, error) {
|
||||||
var err error
|
var err error
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue