mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-05-11 05:55:12 +00:00
Support ALIAS records with Cloudflare (#89)
* simple facility for registering provider capabilities * support for cloudflare. tests. * js and docs * docs * generate
This commit is contained in:
@ -81,7 +81,6 @@ func (c *CloudflareApi) GetDomainCorrections(dc *models.DomainConfig) ([]*models
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
//for _, rec := range records {
|
||||
for i := len(records) - 1; i >= 0; i-- {
|
||||
rec := records[i]
|
||||
// Delete ignore labels
|
||||
@ -91,9 +90,11 @@ func (c *CloudflareApi) GetDomainCorrections(dc *models.DomainConfig) ([]*models
|
||||
}
|
||||
}
|
||||
for _, rec := range dc.Records {
|
||||
if rec.Type == "ALIAS" {
|
||||
rec.Type = "CNAME"
|
||||
}
|
||||
if labelMatches(rec.Name, c.ignoredLabels) {
|
||||
log.Fatalf("FATAL: dnsconfig contains label that matches ignored_labels: %#v is in %v)\n", rec.Name, c.ignoredLabels)
|
||||
// Since we log.Fatalf, we don't need to be clean here.
|
||||
}
|
||||
}
|
||||
checkNSModifications(dc)
|
||||
@ -166,9 +167,15 @@ func (c *CloudflareApi) preprocessConfig(dc *models.DomainConfig) error {
|
||||
// A and CNAMEs: Validate. If null, set to default.
|
||||
// else: Make sure it wasn't set. Set to default.
|
||||
for _, rec := range dc.Records {
|
||||
if rec.Metadata == nil {
|
||||
rec.Metadata = map[string]string{}
|
||||
}
|
||||
if rec.TTL == 0 || rec.TTL == 300 {
|
||||
rec.TTL = 1
|
||||
}
|
||||
if rec.TTL != 1 && rec.TTL < 120 {
|
||||
rec.TTL = 120
|
||||
}
|
||||
if rec.Type != "A" && rec.Type != "CNAME" && rec.Type != "AAAA" {
|
||||
if rec.Metadata[metaProxy] != "" {
|
||||
return fmt.Errorf("cloudflare_proxy set on %v record: %#v cloudflare_proxy=%#v", rec.Type, rec.Name, rec.Metadata[metaProxy])
|
||||
@ -243,7 +250,7 @@ func newCloudflare(m map[string]string, metadata json.RawMessage) (providers.DNS
|
||||
}
|
||||
|
||||
func init() {
|
||||
providers.RegisterDomainServiceProviderType("CLOUDFLAREAPI", newCloudflare)
|
||||
providers.RegisterDomainServiceProviderType("CLOUDFLAREAPI", newCloudflare, providers.CanUseAlias)
|
||||
}
|
||||
|
||||
// Used on the "existing" records.
|
||||
|
@ -34,6 +34,21 @@ var registrarTypes = map[string]RegistrarInitializer{}
|
||||
type DspInitializer func(map[string]string, json.RawMessage) (DNSServiceProvider, error)
|
||||
|
||||
var dspTypes = map[string]DspInitializer{}
|
||||
var dspCapabilities = map[string]Capability{}
|
||||
|
||||
//Capability is a bitmasked set of "features" that a provider supports. Only use constants from this package.
|
||||
type Capability uint32
|
||||
|
||||
const (
|
||||
// CanUseAlias indicates the provider support ALIAS records (or flattened CNAMES). Up to the provider to translate them to the appropriate record type.
|
||||
CanUseAlias Capability = 1 << iota
|
||||
// CanUsePTR indicates the provider can handle PTR records
|
||||
CanUsePTR
|
||||
)
|
||||
|
||||
func ProviderHasCabability(pType string, cap Capability) bool {
|
||||
return dspCapabilities[pType]&cap != 0
|
||||
}
|
||||
|
||||
//RegisterRegistrarType adds a registrar type to the registry by providing a suitable initialization function.
|
||||
func RegisterRegistrarType(name string, init RegistrarInitializer) {
|
||||
@ -44,11 +59,16 @@ func RegisterRegistrarType(name string, init RegistrarInitializer) {
|
||||
}
|
||||
|
||||
//RegisterDomainServiceProviderType adds a dsp to the registry with the given initialization function.
|
||||
func RegisterDomainServiceProviderType(name string, init DspInitializer) {
|
||||
func RegisterDomainServiceProviderType(name string, init DspInitializer, caps ...Capability) {
|
||||
if _, ok := dspTypes[name]; ok {
|
||||
log.Fatalf("Cannot register registrar type %s multiple times", name)
|
||||
}
|
||||
var abilities Capability
|
||||
for _, c := range caps {
|
||||
abilities |= c
|
||||
}
|
||||
dspTypes[name] = init
|
||||
dspCapabilities[name] = abilities
|
||||
}
|
||||
|
||||
func createRegistrar(rType string, config map[string]string) (Registrar, error) {
|
||||
|
Reference in New Issue
Block a user