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

NEW FEATURE: Moving provider TYPE from dnsconfig.js to creds.json (#1500)

Fixes https://github.com/StackExchange/dnscontrol/issues/1457

* New-style creds.json implememented backwards compatible

* Update tests

* Update docs

* Assume new-style TYPE
This commit is contained in:
Tom Limoncelli
2022-05-08 14:23:45 -04:00
committed by GitHub
parent bbecce74bd
commit 9e6d642e35
23 changed files with 949 additions and 108 deletions

View File

@@ -1,8 +1,5 @@
'use strict';
// If you edit this file, you must run `go generate` to embed this
// file in the source code.
// If you are heavily debugging this code, the "-dev" flag will
// read this file directly instead of using the output of
// `go generate`. You'll still need to run `go generate` before
@@ -36,7 +33,27 @@ function getConfiguredDomains() {
return conf.domain_names;
}
function NewRegistrar(name, type, meta) {
// NewRegistrar returns an registrar object.
// For backwards compatibility, it accepts (name), (name, meta),
// (name, type), (name, type, meta).
function NewRegistrar() {
// For backwards compatibility, this is a wrapper around the legacy
// version of this function.
switch (arguments.length) {
case 1:
return oldNewRegistrar(arguments[0], "-")
case 2:
// x = NewRegistrar("myThing", "THING")
// x = NewRegistrar("myThing", { metakey: metavalue } )
if (typeof arguments[1] === 'object') {
return oldNewRegistrar(arguments[0], "-", arguments[1])
}
break;
default: // do nothing
}
return oldNewRegistrar.apply(null, arguments)
}
function oldNewRegistrar(name, type, meta) {
if (type) {
type == 'MANUAL';
}
@@ -46,6 +63,23 @@ function NewRegistrar(name, type, meta) {
}
function NewDnsProvider(name, type, meta) {
// For backwards compatibility, this is a wrapper around the legacy
// version of this function.
switch (arguments.length) {
case 1:
return oldNewDnsProvider(arguments[0], "-")
case 2:
// x = NewDnsProvider("myThing", "THING")
// x = NewDnsProvider("myThing", { metakey: metavalue } )
if (typeof arguments[1] === 'object') {
return oldNewDnsProvider(arguments[0], "-", arguments[1])
}
break;
default: // do nothing
}
return oldNewDnsProvider.apply(null, arguments)
}
function oldNewDnsProvider(name, type, meta) {
if (typeof meta === 'object' && 'ip_conversions' in meta) {
meta.ip_conversions = format_tt(meta.ip_conversions);
}

View File

@@ -54,6 +54,13 @@ func TestParsedFiles(t *testing.T) {
// Initialize any DNS providers mentioned.
for _, dProv := range conf.DNSProviders {
var pcfg = map[string]string{}
if dProv.Type == "-" {
// Pretend any "look up provider type in creds.json" results
// in a provider type that actually exists.
dProv.Type = "CLOUDFLAREAPI"
}
// Fake out any provider's validation tests.
switch dProv.Type {
case "CLOUDFLAREAPI":

View File

@@ -0,0 +1,31 @@
// Test old-style and new-style New*() functions.
var REG1 = NewRegistrar("foo1");
var CF1 = NewDnsProvider("dns1");
var REG2a = NewRegistrar("foo2a", "NONE");
var CF2a = NewDnsProvider("dns2a", "CLOUDFLAREAPI");
var REG2b = NewRegistrar("foo2b", {
regmetakey: "reg2b"
});
var CF2b = NewDnsProvider("dns2b", {
dnsmetakey: "dns2b"
});
var REG3 = NewRegistrar("foo3", "MANUAL", {
regmetakey: "reg3"
});
var CF3 = NewDnsProvider("dns3", "CLOUDFLAREAPI", {
dnsmetakey: "dns3"
});
var REG1h = NewRegistrar("foo1h", "-");
var CF1h = NewDnsProvider("dns1h", "-");
var REG2bh = NewRegistrar("foo2bh", "-", {
regmetakey: "reg2bh"
});
var CF2bh = NewDnsProvider("dns2bh", "-", {
dnsmetakey: "dns2bh"
});

View File

@@ -0,0 +1,19 @@
{
"dns_providers": [
{ "name": "dns1", "type": "CLOUDFLAREAPI" },
{ "name": "dns2a", "type": "CLOUDFLAREAPI" },
{ "name": "dns2b", "type": "CLOUDFLAREAPI", "meta": { "dnsmetakey": "dns2b" } },
{ "name": "dns3", "type": "CLOUDFLAREAPI", "meta": { "dnsmetakey": "dns3" } },
{ "name": "dns1h", "type": "CLOUDFLAREAPI" },
{ "name": "dns2bh", "type": "CLOUDFLAREAPI", "meta": { "dnsmetakey": "dns2bh" } }
],
"domains": [],
"registrars": [
{ "name": "foo1", "type": "-" },
{ "name": "foo2a", "type": "NONE" },
{ "name": "foo2b", "type": "-", "meta": { "regmetakey": "reg2b" } },
{ "name": "foo3", "type": "MANUAL", "meta": { "regmetakey": "reg3" } },
{ "name": "foo1h", "type": "-" },
{ "name": "foo2bh", "type": "-", "meta": { "regmetakey": "reg2bh" } }
]
}