BUG: With TYPE in creds.json, CAA compatibility check breaks (#1514)

This commit is contained in:
Tom Limoncelli 2022-05-29 12:14:17 -04:00 committed by GitHub
parent 39b9dfe3d1
commit 58b2704fde
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -301,6 +301,15 @@ func ValidateAndNormalizeConfig(config *models.DNSConfig) (errs []error) {
pTypes := []string{} pTypes := []string{}
for _, provider := range domain.DNSProviderInstances { for _, provider := range domain.DNSProviderInstances {
pType := provider.ProviderType pType := provider.ProviderType
if pType == "-" {
// "-" indicates that we don't yet know who the provider type
// is. This is probably due to the fact that `dnscontrol
// check` doesn't read creds.json, which is where the TYPE is
// set. We will skip this test in this instance. Later if
// `dnscontrol preview` or `push` is used, the full check will
// be performed.
continue
}
// If NO_PURGE is in use, make sure this *isn't* a provider that *doesn't* support NO_PURGE. // If NO_PURGE is in use, make sure this *isn't* a provider that *doesn't* support NO_PURGE.
if domain.KeepUnknown && providers.ProviderHasCapability(pType, providers.CantUseNOPURGE) { if domain.KeepUnknown && providers.ProviderHasCapability(pType, providers.CantUseNOPURGE) {
errs = append(errs, fmt.Errorf("%s uses NO_PURGE which is not supported by %s(%s)", domain.Name, provider.Name, pType)) errs = append(errs, fmt.Errorf("%s uses NO_PURGE which is not supported by %s(%s)", domain.Name, provider.Name, pType))
@ -468,9 +477,12 @@ func ValidateAndNormalizeConfig(config *models.DNSConfig) (errs []error) {
for _, domain := range config.Domains { // For each domain.. for _, domain := range config.Domains { // For each domain..
for _, provider := range domain.DNSProviderInstances { // For each provider... for _, provider := range domain.DNSProviderInstances { // For each provider...
if provider.ProviderBase.ProviderType == "-" { if provider.ProviderBase.ProviderType == "-" {
// The point of "dnscontrol check" is that it doesn't require // "-" indicates that we don't yet know who the provider type
// creds.json. Since the ProviderType is in creds.json, these // is. This is probably due to the fact that `dnscontrol
// pre-providerType checks must be skipped. // check` doesn't read creds.json, which is where the TYPE is
// set. We will skip this test in this instance. Later if
// `dnscontrol preview` or `push` is used, the full check will
// be performed.
continue continue
} }
if err := providers.AuditRecords(provider.ProviderBase.ProviderType, domain.Records); err != nil { if err := providers.AuditRecords(provider.ProviderBase.ProviderType, domain.Records); err != nil {
@ -693,6 +705,15 @@ func checkProviderCapabilities(dc *models.DomainConfig) error {
continue continue
} }
for _, provider := range dc.DNSProviderInstances { for _, provider := range dc.DNSProviderInstances {
if provider.ProviderType == "-" {
// "-" indicates that we don't yet know who the provider type
// is. This is probably due to the fact that `dnscontrol
// check` doesn't read creds.json, which is where the TYPE is
// set. We will skip this test in this instance. Later if
// `dnscontrol preview` or `push` is used, the full check will
// be performed.
continue
}
// fmt.Printf(" (checking if %q can %q for domain %q)\n", provider.ProviderType, ty.rType, dc.Name) // fmt.Printf(" (checking if %q can %q for domain %q)\n", provider.ProviderType, ty.rType, dc.Name)
if !providerHasAtLeastOneCapability(provider.ProviderType, ty.caps...) { if !providerHasAtLeastOneCapability(provider.ProviderType, ty.caps...) {
return fmt.Errorf("domain %s uses %s records, but DNS provider type %s does not support them", dc.Name, ty.rType, provider.ProviderType) return fmt.Errorf("domain %s uses %s records, but DNS provider type %s does not support them", dc.Name, ty.rType, provider.ProviderType)