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)
|
||||
}
|
||||
|
||||
// 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
|
||||
zones := args.ZoneNames
|
||||
if len(args.ZoneNames) == 1 && args.ZoneNames[0] == "all" {
|
||||
|
|
@ -253,6 +259,13 @@ func GetZone(args GetZoneArgs) error {
|
|||
if defaultTTL == 0 {
|
||||
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 {
|
||||
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.
|
||||
providers.RegisterCustomRecordType("IMPLICIT_URL_FORWARDING", providerName, "")
|
||||
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))
|
||||
|
||||
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 {
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ func nativeToRecord(r *alidns.Record, domain string) (*models.RecordConfig, erro
|
|||
TTL: uint32(r.TTL),
|
||||
Original: r,
|
||||
}
|
||||
|
||||
label, err := idna.ToASCII(r.RR)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to convert label to ASCII: %w", err)
|
||||
|
|
|
|||
|
|
@ -83,6 +83,20 @@ func RegisterMaintainer(
|
|||
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.
|
||||
func CreateRegistrar(rType string, config map[string]string) (Registrar, error) {
|
||||
var err error
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue