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
|
||||
require('kubernetes/clusters.js');
|
||||
|
||||
D("mydomain.net", REG, PROVIDER,
|
||||
D("mydomain.net", REG, PROVIDER,
|
||||
IncludeKubernetes()
|
||||
);
|
||||
|
||||
@ -50,3 +50,29 @@ function includeK8Sdev() {
|
||||
|
||||
{%endhighlight%}
|
||||
{% 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 (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
@ -95,7 +96,16 @@ func require(call otto.FunctionCall) otto.Value {
|
||||
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 {
|
||||
throw(call.Otto, err.Error())
|
||||
}
|
||||
@ -103,7 +113,7 @@ func require(call otto.FunctionCall) otto.Value {
|
||||
// Pop back to the old directory.
|
||||
currentDirectory = currentDirectoryOld
|
||||
|
||||
return otto.TrueValue()
|
||||
return value
|
||||
}
|
||||
|
||||
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