mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-05-11 05:55:12 +00:00
NEW: require() now supports loading JSON too (#474)
This commit is contained in:
committed by
Tom Limoncelli
parent
7ed3adb2f1
commit
608dd7af56
@@ -14,7 +14,7 @@ to split your configuration across multiple files. If the path starts with a
|
|||||||
// dnsconfig.js
|
// dnsconfig.js
|
||||||
require('kubernetes/clusters.js');
|
require('kubernetes/clusters.js');
|
||||||
|
|
||||||
D("mydomain.net", REG, PROVIDER,
|
D("mydomain.net", REG, PROVIDER,
|
||||||
IncludeKubernetes()
|
IncludeKubernetes()
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -50,3 +50,29 @@ function includeK8Sdev() {
|
|||||||
|
|
||||||
{%endhighlight%}
|
{%endhighlight%}
|
||||||
{% include endExample.html %}
|
{% include endExample.html %}
|
||||||
|
|
||||||
|
You can also use it to require json files and initialize variables with it:
|
||||||
|
For Example:
|
||||||
|
|
||||||
|
{% include startExample.html %}
|
||||||
|
{% highlight js %}
|
||||||
|
|
||||||
|
// dnsconfig.js
|
||||||
|
var domains = require('./domain-ip-map.json')
|
||||||
|
|
||||||
|
for (var domain in domains) {
|
||||||
|
D(domain, REG, PROVIDER,
|
||||||
|
A("@", domains[domain])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
{%endhighlight%}
|
||||||
|
|
||||||
|
{%highlight js %}
|
||||||
|
// domain-ip-map.json
|
||||||
|
{
|
||||||
|
"mydomain.net": "1.1.1.1",
|
||||||
|
"myotherdomain.org": "5.5.5.5"
|
||||||
|
}
|
||||||
|
{%endhighlight}
|
||||||
|
{% include endExample.html %}
|
||||||
14
pkg/js/js.go
14
pkg/js/js.go
@@ -2,6 +2,7 @@ package js
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -95,7 +96,16 @@ func require(call otto.FunctionCall) otto.Value {
|
|||||||
throw(call.Otto, err.Error())
|
throw(call.Otto, err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = call.Otto.Run(string(data))
|
var value otto.Value = otto.TrueValue()
|
||||||
|
|
||||||
|
// If its a json file return the json value, else default to true
|
||||||
|
if strings.HasSuffix(filepath.Ext(relFile), "json") {
|
||||||
|
cmd := fmt.Sprintf(`JSON.parse(JSON.stringify(%s))`, string(data))
|
||||||
|
value, err = call.Otto.Run(cmd)
|
||||||
|
} else {
|
||||||
|
_, err = call.Otto.Run(string(data))
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
throw(call.Otto, err.Error())
|
throw(call.Otto, err.Error())
|
||||||
}
|
}
|
||||||
@@ -103,7 +113,7 @@ func require(call otto.FunctionCall) otto.Value {
|
|||||||
// Pop back to the old directory.
|
// Pop back to the old directory.
|
||||||
currentDirectory = currentDirectoryOld
|
currentDirectory = currentDirectoryOld
|
||||||
|
|
||||||
return otto.TrueValue()
|
return value
|
||||||
}
|
}
|
||||||
|
|
||||||
func throw(vm *otto.Otto, str string) {
|
func throw(vm *otto.Otto, str string) {
|
||||||
|
|||||||
8
pkg/js/parse_tests/024-json-import.js
Normal file
8
pkg/js/parse_tests/024-json-import.js
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
var domains = require('./domain-ip-map.json')
|
||||||
|
|
||||||
|
var domain = "foo.com"
|
||||||
|
var ip = domains["foo.com"]
|
||||||
|
|
||||||
|
D(domain,"none",
|
||||||
|
A("@",ip)
|
||||||
|
);
|
||||||
18
pkg/js/parse_tests/024-json-import.json
Normal file
18
pkg/js/parse_tests/024-json-import.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"registrars": [],
|
||||||
|
"dns_providers": [],
|
||||||
|
"domains": [
|
||||||
|
{
|
||||||
|
"name": "foo.com",
|
||||||
|
"registrar": "none",
|
||||||
|
"dnsProviders": {},
|
||||||
|
"records": [
|
||||||
|
{
|
||||||
|
"type": "A",
|
||||||
|
"name": "@",
|
||||||
|
"target": "1.1.1.1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
4
pkg/js/parse_tests/domain-ip-map.json
Normal file
4
pkg/js/parse_tests/domain-ip-map.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"foo.com": "1.1.1.1",
|
||||||
|
"bar.com": "5.5.5.5"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user