1
0
mirror of https://github.com/StackExchange/dnscontrol.git synced 2024-05-11 05:55:12 +00:00

generalize capability validation

This commit is contained in:
Craig Peterson
2017-07-06 10:24:21 -04:00
parent aa92817116
commit 152892f62a
2 changed files with 46 additions and 37 deletions

View File

@ -312,9 +312,9 @@ func NormalizeAndValidateConfig(config *models.DNSConfig) (errs []error) {
errs = append(errs, checkCNAMEs(d)...)
}
//Check that if any aliases are used in a domain, every provider for that domain supports them
//Check that if any aliases / ptr / etc.. are used in a domain, every provider for that domain supports them
for _, d := range config.Domains {
err := checkALIASes(d, config.DNSProviders)
err := checkProviderCapabilities(d, config.DNSProviders)
if err != nil {
errs = append(errs, err)
}
@ -341,26 +341,35 @@ func checkCNAMEs(dc *models.DomainConfig) (errs []error) {
return
}
func checkALIASes(dc *models.DomainConfig, pList []*models.DNSProviderConfig) error {
hasAlias := false
for _, r := range dc.Records {
if r.Type == "ALIAS" {
hasAlias = true
break
}
func checkProviderCapabilities(dc *models.DomainConfig, pList []*models.DNSProviderConfig) error {
types := []struct {
rType string
cap providers.Capability
}{
{"ALIAS", providers.CanUseAlias},
{"PTR", providers.CanUsePTR},
}
if !hasAlias {
return nil
}
for pName := range dc.DNSProviders {
for _, p := range pList {
if p.Name == pName {
if !providers.ProviderHasCabability(p.Type, providers.CanUseAlias) {
return fmt.Errorf("Domain %s uses ALIAS records, but DNS provider type %s does not support them", dc.Name, p.Type)
}
for _, ty := range types {
hasAny := false
for _, r := range dc.Records {
if r.Type == ty.rType {
hasAny = true
break
}
}
if !hasAny {
continue
}
for pName := range dc.DNSProviders {
for _, p := range pList {
if p.Name == pName {
if !providers.ProviderHasCabability(p.Type, ty.cap) {
return fmt.Errorf("Domain %s uses %s records, but DNS provider type %s does not support them", dc.Name, ty.rType, p.Type)
}
break
}
}
}
}
return nil
}