diff --git a/pkg/normalize/validate.go b/pkg/normalize/validate.go index be6989875..fc27d4203 100644 --- a/pkg/normalize/validate.go +++ b/pkg/normalize/validate.go @@ -249,6 +249,11 @@ func NormalizeAndValidateConfig(config *models.DNSConfig) (errs []error) { } else { pTypes = append(pTypes, pType) } + + //If NO_PURGE is in use, make sure this *isn't* a provider that *doesn't* support NO_PURGE. + if domain.KeepUnknown && providers.ProviderHasCabability(pType, providers.CantUseNOPURGE) { + errs = append(errs, fmt.Errorf("%s uses NO_PURGE which is not supported by %s(%s)", domain.Name, p, pType)) + } } // Normalize Nameservers. diff --git a/providers/bind/bindProvider.go b/providers/bind/bindProvider.go index 4600128d1..d15b1e071 100644 --- a/providers/bind/bindProvider.go +++ b/providers/bind/bindProvider.go @@ -47,7 +47,7 @@ func initBind(config map[string]string, providermeta json.RawMessage) (providers } func init() { - providers.RegisterDomainServiceProviderType("BIND", initBind, providers.CanUsePTR, providers.CanUseSRV, providers.CanUseCAA) + providers.RegisterDomainServiceProviderType("BIND", initBind, providers.CanUsePTR, providers.CanUseSRV, providers.CanUseCAA, providers.CantUseNOPURGE) } type SoaInfo struct { diff --git a/providers/namecheap/namecheap.go b/providers/namecheap/namecheap.go index 1cecf594b..863ec4075 100644 --- a/providers/namecheap/namecheap.go +++ b/providers/namecheap/namecheap.go @@ -18,6 +18,8 @@ type Namecheap struct { func init() { providers.RegisterRegistrarType("NAMECHEAP", newReg) + // NOTE(tlim): If in the future the DNS Service Provider is implemented, + // most likely it will require providers.CantUseNOPURGE. } func newReg(m map[string]string) (providers.Registrar, error) { diff --git a/providers/providers.go b/providers/providers.go index 617b6a4ab..d4b9b91c7 100644 --- a/providers/providers.go +++ b/providers/providers.go @@ -49,6 +49,11 @@ const ( CanUseSRV // CanUseCAA indicates the provider can handle CAA records CanUseCAA + // CantUseNOPURGE indicates NO_PURGE is broken for this provider. To make it + // work would require complex emulation of an incremental update mechanism, + // so it is easier to simply mark this feature as not working for this + // provider. + CantUseNOPURGE ) func ProviderHasCabability(pType string, cap Capability) bool {