DOCS: Migrated documentation website to Gitbook (#1809)

This commit is contained in:
Jeffrey Cafferata 2023-01-20 13:56:20 +01:00 committed by GitHub
parent f4388dd6ad
commit f912b15adc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
188 changed files with 145405 additions and 4728 deletions

1
.gitbook.yaml Normal file
View file

@ -0,0 +1 @@
root: ./documentation/

View file

@ -104,7 +104,7 @@ Running `dnscontrol preview` will talk to the providers (here name.com as regist
Running `dnscontrol push` will make those changes with the provider and my dns records will be correctly updated.
See [Getting Started](https://stackexchange.github.io/dnscontrol/getting-started) page on documentation site.
See [Getting Started](https://docs.dnscontrol.org/getting-started/getting-started) page on documentation site.
## Benefits
@ -141,7 +141,7 @@ See [Getting Started](https://stackexchange.github.io/dnscontrol/getting-started
## Installation
DNSControl can be installed via packages for macOS, Linux and Windows, or from source code. See the [official instructions](https://stackexchange.github.io/dnscontrol/getting-started#1-install-the-software).
DNSControl can be installed via packages for macOS, Linux and Windows, or from source code. See the [official instructions](https://docs.dnscontrol.org/getting-started/getting-started#1-install-the-software).
## Via GitHub Actions (GHA)
@ -151,10 +151,10 @@ See [dnscontrol-action](https://github.com/koenrh/dnscontrol-action) or [gacts/i
- **Call for new volunteer maintainers for NAMECHEAP, NAMEDOTCOM, and SOFTLAYER.** These providers have no maintainer. Maintainers respond to PRs and fix bugs in a timely manner, and try to stay on top of protocol changes.
- **ACME/Let's Encrypt support is frozen and will be removed after December 31, 2022.** The `get-certs` command (renews certs via Let's Encrypt) has no maintainer. There are other projects that do a better job. If you don't use this feature, please do not start. If you do use this feature, please plan on migrating to something else. See discussion in [issues/1400](https://github.com/StackExchange/dnscontrol/issues/1400)
- **get-zones syntax changes in v3.16** Starting in v3.16, the command line arguments for `dnscontrol get-zones` changes. For backwards compatibility change `provider` to `-`. See documentation for details.
- **get-zones syntax changes in v3.16** Starting in [v3.16](v316.md), the command line arguments for `dnscontrol get-zones` changes. For backwards compatibility change `provider` to `-`. See documentation for details.
## More info at our website
The website: [https://stackexchange.github.io/dnscontrol/](https://stackexchange.github.io/dnscontrol/)
The getting started guide: [https://stackexchange.github.io/dnscontrol/getting-started](https://stackexchange.github.io/dnscontrol/getting-started)
The getting started guide: [https://docs.dnscontrol.org/getting-started/getting-started](https://docs.dnscontrol.org/getting-started/getting-started)

View file

@ -1,167 +1,281 @@
package main
import (
"bytes"
"html/template"
"os"
"sort"
"fmt"
"github.com/StackExchange/dnscontrol/v3/providers"
_ "github.com/StackExchange/dnscontrol/v3/providers/_all"
"github.com/fbiville/markdown-table-formatter/pkg/markdown"
"sort"
)
func generateFeatureMatrix() error {
allNames := map[string]bool{}
for n := range providers.RegistrarTypes {
allNames[n] = true
matrix := matrixData()
markdownTable, err := markdownTable(matrix)
if err != nil {
return err
}
for n := range providers.DNSProviderTypes {
allNames[n] = true
fmt.Print(markdownTable)
return nil
}
func markdownTable(matrix *FeatureMatrix) (string, error) {
var tableHeaders []string
tableHeaders = append(tableHeaders, "Provider name")
for _, featureName := range matrix.Features {
tableHeaders = append(tableHeaders, featureName)
}
providerTypes := []string{}
for n := range allNames {
providerTypes = append(providerTypes, n)
var tableData [][]string
for _, providerName := range allProviderNames() {
featureMap := matrix.Providers[providerName]
var tableDataRow []string
tableDataRow = append(tableDataRow, "`"+providerName+"`")
for _, featureName := range matrix.Features {
tableDataRow = append(tableDataRow, featureEmoji(featureMap, featureName))
}
tableData = append(tableData, tableDataRow)
}
sort.Strings(providerTypes)
var markdownTable, err = markdown.NewTableFormatterBuilder().
Build(tableHeaders...).
Format(tableData)
if err != nil {
return "", err
}
return markdownTable, nil
}
func featureEmoji(
featureMap FeatureMap,
featureName string,
) string {
if featureMap[featureName] == nil {
return "❔"
}
if featureMap[featureName].HasFeature == true {
return "✅"
} else if featureMap[featureName].Unimplemented == true {
return "❔"
}
return "❌"
}
func matrixData() *FeatureMatrix {
const (
OfficialSupport = "Official Support"
ProviderDnsProvider = "DNS Provider"
ProviderRegistrar = "Registrar"
DomainModifierAlias = "ALIAS"
DomainModifierDnssec = "AUTODNSSEC"
DomainModifierCaa = "CAA"
DomainModifierPtr = "PTR"
DomainModifierNaptr = "NAPTR"
DomainModifierSoa = "SOA"
DomainModifierSrv = "SRV"
DomainModifierSshfp = "SSHFP"
DomainModifierTlsa = "TLSA"
DomainModifierDs = "DS"
DualHost = "dual host"
CreateDomains = "create-domains"
NoPurge = "NO_PURGE"
GetZones = "get-zones"
)
matrix := &FeatureMatrix{
Providers: map[string]FeatureMap{},
Features: []FeatureDef{
{"Official Support", "This means the provider is actively used at Stack Exchange, bugs are more likely to be fixed, and failing integration tests will block a release. See below for details"},
{"DNS Provider", "Can manage and serve DNS zones"},
{"Registrar", "The provider has registrar capabilities to set nameservers for zones"},
{"ALIAS", "Provider supports some kind of ALIAS, ANAME or flattened CNAME record type"},
{"AUTODNSSEC", "Provider can automatically manage DNSSEC"},
{"CAA", "Provider can manage CAA records"},
{"PTR", "Provider supports adding PTR records for reverse lookup zones"},
{"NAPTR", "Provider can manage NAPTR records"},
{"SOA", "Provider can manage SOA records"},
{"SRV", "Driver has explicitly implemented SRV record management"},
{"SSHFP", "Provider can manage SSHFP records"},
{"TLSA", "Provider can manage TLSA records"},
{"R53_ALIAS", "Provider supports Route 53 limited ALIAS"},
{"AZURE_ALIAS", "Provider supports Azure DNS limited ALIAS"},
{"DS", "Provider supports adding DS records"},
{"AKAMAICDN", "Provider supports adding AKAMAICDN records"},
{"dual host", "This provider is recommended for use in 'dual hosting' scenarios. Usually this means the provider allows full control over the apex NS records"},
{"create-domains", "This means the provider can automatically create domains that do not currently exist on your account. The 'dnscontrol create-domains' command will initialize any missing domains"},
{"no_purge", "indicates you can use NO_PURGE macro to prevent deleting records not managed by dnscontrol. A few providers that generate the entire zone from scratch have a problem implementing this."},
{"get-zones", "indicates the dnscontrol get-zones subcommand is implemented."},
Features: []string{
OfficialSupport,
ProviderDnsProvider,
ProviderRegistrar,
DomainModifierAlias,
DomainModifierDnssec,
DomainModifierCaa,
DomainModifierPtr,
DomainModifierNaptr,
DomainModifierSoa,
DomainModifierSrv,
DomainModifierSshfp,
DomainModifierTlsa,
DomainModifierDs,
DualHost,
CreateDomains,
NoPurge,
GetZones,
},
}
for _, p := range providerTypes {
if p == "NONE" {
continue
for _, providerName := range allProviderNames() {
featureMap := FeatureMap{}
providerNotes := providers.Notes[providerName]
if providerNotes == nil {
providerNotes = providers.DocumentationNotes{}
}
fm := FeatureMap{}
notes := providers.Notes[p]
if notes == nil {
notes = providers.DocumentationNotes{}
}
setCap := func(name string, cap providers.Capability) {
if notes[cap] != nil {
fm[name] = notes[cap]
setCapability := func(
featureName string,
capability providers.Capability,
) {
if providerNotes[capability] != nil {
featureMap[featureName] = providerNotes[capability]
return
}
fm.SetSimple(name, true, func() bool { return providers.ProviderHasCapability(p, cap) })
featureMap.SetSimple(
featureName,
true,
func() bool { return providers.ProviderHasCapability(providerName, capability) },
)
}
setDoc := func(name string, cap providers.Capability, defaultNo bool) {
if notes[cap] != nil {
fm[name] = notes[cap]
setDocumentation := func(
featureName string,
capability providers.Capability,
defaultNo bool,
) {
if providerNotes[capability] != nil {
featureMap[featureName] = providerNotes[capability]
} else if defaultNo {
fm[name] = &providers.DocumentationNote{
featureMap[featureName] = &providers.DocumentationNote{
HasFeature: false,
}
}
}
setDoc("Official Support", providers.DocOfficiallySupported, true)
fm.SetSimple("DNS Provider", false, func() bool { return providers.DNSProviderTypes[p].Initializer != nil })
fm.SetSimple("Registrar", false, func() bool { return providers.RegistrarTypes[p] != nil })
setCap("AKAMAICDN", providers.CanUseAKAMAICDN)
setCap("ALIAS", providers.CanUseAlias)
setCap("AUTODNSSEC", providers.CanAutoDNSSEC)
setCap("AZURE_ALIAS", providers.CanUseAzureAlias)
setCap("CAA", providers.CanUseCAA)
setCap("DS", providers.CanUseDS)
setCap("NAPTR", providers.CanUseNAPTR)
setCap("PTR", providers.CanUsePTR)
setCap("R53_ALIAS", providers.CanUseRoute53Alias)
setCap("SOA", providers.CanUseSOA)
setCap("SRV", providers.CanUseSRV)
setCap("SSHFP", providers.CanUseSSHFP)
setCap("TLSA", providers.CanUseTLSA)
setCap("get-zones", providers.CanGetZones)
setDoc("create-domains", providers.DocCreateDomains, true)
setDoc("dual host", providers.DocDualHost, false)
setDocumentation(
OfficialSupport,
providers.DocOfficiallySupported,
true,
)
featureMap.SetSimple(
ProviderDnsProvider,
false,
func() bool { return providers.DNSProviderTypes[providerName].Initializer != nil },
)
featureMap.SetSimple(
ProviderRegistrar,
false,
func() bool { return providers.RegistrarTypes[providerName] != nil },
)
setCapability(
DomainModifierAlias,
providers.CanUseAlias,
)
setCapability(
DomainModifierDnssec,
providers.CanAutoDNSSEC,
)
setCapability(
DomainModifierCaa,
providers.CanUseCAA,
)
setCapability(
DomainModifierDs,
providers.CanUseDS,
)
setCapability(
DomainModifierNaptr,
providers.CanUseNAPTR,
)
setCapability(
DomainModifierPtr,
providers.CanUsePTR,
)
setCapability(
DomainModifierSoa,
providers.CanUseSOA,
)
setCapability(
DomainModifierSrv,
providers.CanUseSRV,
)
setCapability(
DomainModifierSshfp,
providers.CanUseSSHFP,
)
setCapability(
DomainModifierTlsa,
providers.CanUseTLSA,
)
setCapability(
GetZones,
providers.CanGetZones,
)
setDocumentation(
CreateDomains,
providers.DocCreateDomains,
true,
)
setDocumentation(
DualHost,
providers.DocDualHost,
false,
)
// no purge is a freaky double negative
cap := providers.CantUseNOPURGE
if notes[cap] != nil {
fm["no_purge"] = notes[cap]
cantUseNOPURGE := providers.CantUseNOPURGE
if providerNotes[cantUseNOPURGE] != nil {
featureMap[NoPurge] = providerNotes[cantUseNOPURGE]
} else {
fm.SetSimple("no_purge", false, func() bool { return !providers.ProviderHasCapability(p, cap) })
featureMap.SetSimple(
NoPurge,
false,
func() bool { return !providers.ProviderHasCapability(providerName, cantUseNOPURGE) },
)
}
matrix.Providers[p] = fm
matrix.Providers[providerName] = featureMap
}
buf := &bytes.Buffer{}
err := tmpl.Execute(buf, matrix)
if err != nil {
return err
}
return os.WriteFile("docs/_includes/matrix.html", buf.Bytes(), 0644)
return matrix
}
// FeatureDef describes features.
type FeatureDef struct {
Name, Desc string
func allProviderNames() []string {
const ProviderNameNone = "NONE"
allProviderNames := map[string]bool{}
for providerName := range providers.RegistrarTypes {
if providerName == ProviderNameNone {
continue
}
allProviderNames[providerName] = true
}
for providerName := range providers.DNSProviderTypes {
if providerName == ProviderNameNone {
continue
}
allProviderNames[providerName] = true
}
var allProviderNamesAsString []string
for providerName := range allProviderNames {
allProviderNamesAsString = append(allProviderNamesAsString, providerName)
}
sort.Strings(allProviderNamesAsString)
return allProviderNamesAsString
}
// FeatureMap maps provider names to compliance documentation.
type FeatureMap map[string]*providers.DocumentationNote
// SetSimple configures a provider's setting in fm.
func (fm FeatureMap) SetSimple(name string, unknownsAllowed bool, f func() bool) {
// SetSimple configures a provider's setting in featureMap.
func (featureMap FeatureMap) SetSimple(
name string,
unknownsAllowed bool,
f func() bool,
) {
if f() {
fm[name] = &providers.DocumentationNote{HasFeature: true}
featureMap[name] = &providers.DocumentationNote{HasFeature: true}
} else if !unknownsAllowed {
fm[name] = &providers.DocumentationNote{HasFeature: false}
featureMap[name] = &providers.DocumentationNote{HasFeature: false}
}
}
// FeatureMatrix describes features and which providers support it.
type FeatureMatrix struct {
Features []FeatureDef
Features []string
Providers map[string]FeatureMap
}
var tmpl = template.Must(template.New("").Funcs(template.FuncMap{
"safe": func(s string) template.HTML { return template.HTML(s) },
}).Parse(`{% comment %}
Matrix generated by build/generate/featureMatrix.go. DO NOT HAND EDIT!
{% endcomment %}{{$providers := .Providers}}
<figure class="full-width">
<table class="table-header-rotated">
<thead>
<tr>
<th class="row-header rotate"><div><span>&nbsp;</span></div></th>
{{range $key,$val := $providers}}<th class="rotate"><div><span>{{$key}}</span></div></th>
{{end -}}
</tr>
</thead>
<tbody>
{{range .Features}}{{$name := .Name}}<tr>
<th class="row-header" style="text-decoration: underline;" data-toggle="tooltip" data-container="body" data-placement="top" title="{{.Desc}}">{{$name}}</th>
{{range $pname, $features := $providers}}{{$f := index $features $name}}{{if $f -}}
<td class="{{if $f.HasFeature}}success{{else if $f.Unimplemented}}info{{else}}danger{{end}}"
{{- if $f.Comment}} data-toggle="tooltip" data-container="body" data-placement="top" title="{{$f.Comment}}"{{end}}>
{{if $f.Link}}<a href="{{$f.Link}}">{{end}}<i class="fa {{if and $f.Comment (not $f.Unimplemented)}}has-tooltip {{end}}
{{- if $f.HasFeature}}fa-check text-success{{else if $f.Unimplemented}}fa-circle-o text-info{{else}}fa-times text-danger{{end}}" aria-hidden="true"></i>{{if $f.Link}}</a>{{end}}
</td>
{{- else}}<td><i class="fa fa-minus dim"></i></td>{{end}}
{{end -}}
</tr>
{{end -}}
</tbody>
</table>
</figure>
`))

View file

@ -54,7 +54,7 @@ var returnTypes = map[string]string{
func generateFunctionTypes() (string, error) {
funcs := []Function{}
srcRoot := join("docs", "_functions")
srcRoot := join("docs", "functions")
types, err := os.ReadDir(srcRoot)
if err != nil {
return "", err
@ -89,13 +89,13 @@ func generateFunctionTypes() (string, error) {
}
body = body + "\n"
body = strings.ReplaceAll(body, "{{site.github.url}}", "https://dnscontrol.org/")
body = strings.ReplaceAll(body, "{% capture example %}", "")
body = strings.ReplaceAll(body, "{% capture example2 %}", "")
body = strings.ReplaceAll(body, "{% endcapture %}", "")
body = strings.ReplaceAll(body, "{% include example.html content=example %}", "")
body = strings.ReplaceAll(body, "{% include example.html content=example2 %}", "")
body = strings.ReplaceAll(body, "](#", "](https://dnscontrol.org/js#")
body = strings.ReplaceAll(body, "{% hint style=\"danger\" %}", "")
body = strings.ReplaceAll(body, "{% hint style=\"info\" %}", "")
body = strings.ReplaceAll(body, "{% hint style=\"success\" %}", "")
body = strings.ReplaceAll(body, "{% hint style=\"warning\" %}", "")
body = strings.ReplaceAll(body, "{% endhint %}", "")
body = strings.ReplaceAll(body, "**NOTE**", "NOTE")
body = strings.ReplaceAll(body, "**WARNING**", "WARNING")
body = fixRuns(body)
paramNames := []string{}

View file

@ -1,4 +0,0 @@
collections:
providers:
output: true
functions:

View file

@ -1,6 +0,0 @@
---
name: IGNORE
ts_ignore: true
---
IGNORE has been renamed to `IGNORE_NAME`. IGNORE will continue to function, but its use is deprecated. Please update your configuration files to use `IGNORE_NAME`.

View file

@ -1 +0,0 @@
<div class="alert alert-warning" role="alert"><i class="fa fa-exclamation-circle" aria-hidden="true"></i> {{include.text}}</div>

View file

@ -1,6 +0,0 @@
<span style='font-weight: bold' class='example-collapse'> Example{% if include.name %} ({{ include.name }}){%endif%}:
<span class='expand-arrow'><i class="fa fa-caret-right" aria-hidden="true"></i></span>
<span class='collapse-arrow'><i class="fa fa-caret-down" aria-hidden="true"></i></span></span>
<div class='collapse'>
{{ include.content | markdownify }}
</div>

View file

@ -5,4 +5,4 @@
<div class="col-md-10">
<p class="smaller">{{include.text}}</p>
</div>
</div>
</div>

View file

@ -1,11 +0,0 @@
{% assign f = include.f %}
<div class="panel panel-default" id="{{f.name}}">
<div class="panel-heading"><h4><code>
{{f.name}}( {% for p in f.parameters %}{% unless forloop.first == true %}, {%endunless%}<i>{{p}}</i>{%endfor%} )
{% if f.return %} -> {{f.return}}{%endif%}
</code></h4></div>
<div class="panel-body">
{{f.content}}
</div>
</div>

View file

@ -1,12 +0,0 @@
## {{include.title}}
{% assign fs = site.functions %}
{% if include.dir == "global" %}
{% assign fs = fs | reverse %}
{% endif %}
{% for f in fs %}
{% if f.path contains include.dir %}
{% include func.html f=f %}
{% endif %}
{% endfor %}

File diff suppressed because it is too large Load diff

View file

@ -1,28 +0,0 @@
<a href="#{{include.html-anchor}}">
<strong>{{include.title}}</strong>
</a>
{% if include.provider-jsId != nill %}
for
<a href="{{ site.github.url }}/providers/{{include.provider-jsId | downcase}}">
<strong>
{{include.provider-name}}
</strong>
</a>
{% endif %}
<ul>
{% for function in site.functions %}
{% if function.path contains include.docs-functions-dir %}
{% if include.docs-functions-dir == "domain" %}
{% if include.provider-jsId == nill and function.provider == nill %}
<li><a href="#{{function.name}}">{{function.name}}</a></li>
{% endif %}
{% if include.provider-jsId != nill and function.provider == include.provider-jsId %}
<li><a href="#{{function.name}}">{{function.name}}</a></li>
{% endif %}
{% else %}
<li><a href="#{{function.name}}">{{function.name}}</a></li>
{% endif %}
{% endif %}
{% endfor %}
</ul>

View file

@ -35,10 +35,10 @@
</div>
<div class="collapse navbar-collapse" id="nav-collapse">
<ul class="nav navbar-nav navbar-right">
<li><a class="hidden-xs" href="{{site.github.url}}/getting-started">Getting Started</a></li>
<li><a class="hidden-xs" href="{{site.github.url}}/js">Language Reference</a></li>
<li><a class="hidden-xs" href="{{site.github.url}}/provider-list">Providers</a></li>
<li><a class="visible-xs" href="{{site.github.url}}/#getting-started">Getting Started</a></li>
<li><a class="hidden-xs" href="https://docs.dnscontrol.org/getting-started/getting-started">Getting Started</a></li>
<li><a class="hidden-xs" href="https://docs.dnscontrol.org/language-reference/js">Language Reference</a></li>
<li><a class="hidden-xs" href="https://docs.dnscontrol.org/service-providers/providers">Providers</a></li>
<li><a class="visible-xs" href="https://docs.dnscontrol.org/getting-started/getting-started">Getting Started</a></li>
<li><a class="visible-xs" href="{{site.github.url}}/#reference">Reference</a></li>
<li><a class="visible-xs" href="{{site.github.url}}/#advanced-features">Advanced features</a></li>
<li><a class="visible-xs" href="{{site.github.url}}/#commands">Commands</a></li>
@ -53,19 +53,5 @@
<div class='container'>
{{ content }}
</div>
{% comment %} This script makes the examples collapse appropriately {% endcomment %}
<script>
$('.example-collapse').click(function (e) {
e.preventDefault();
$(this).parent().next().collapse('toggle');
$(this).toggleClass('expanded')
});
$(function () {
$('[data-toggle="tooltip"]').tooltip()
})
</script>
</body>
</html>

View file

@ -1,132 +1,7 @@
.expanded>.expand-arrow {
display: none;
}
.expanded>.collapse-arrow {
display: inherit;
}
.collapse-arrow {
display: none;
}
body {
padding-bottom: 50px;
}
.table-header-rotated {
border-collapse: collapse;
margin: 0 auto;
}
.table-header-rotated td {
width: 30px;
}
.table-header-rotated th {
padding: 5px 10px;
}
.table-header-rotated th:first-child {
max-width: 120px;
}
.table-header-rotated td {
text-align: center;
padding: 10px 5px;
border: 1px solid #ccc;
}
.table-header-rotated th.rotate {
height: 140px;
white-space: nowrap;
}
.table-header-rotated th.rotate>div {
-webkit-transform: translate(26px, 51px) rotate(315deg);
-ms-transform: translate(26px, 51px) rotate(315deg);
transform: translate(26px, 51px) rotate(315deg);
width: 30px;
position: relative;
bottom: 1px;
}
.table-header-rotated th.rotate>div>span {
border-bottom: 1px solid #ccc;
padding: 5px 10px;
}
.table-header-rotated th.row-header {
padding: 0 10px;
border-bottom: 1px solid #ccc;
/* box-shadow since border-right doesnt work */
box-shadow: 0.5px 0 0 #ccc;
background-color: white;
position: sticky;
left: 0;
z-index: 1;
}
.table-header-rotated thead tr:first-child th.row-header {
box-shadow: none;
}
.table-header-rotated th.row-header.rotate>div {
position: relative;
left: 43px;
bottom: 27px;
}
.table-header-rotated th.row-header.rotate>div>span {
display: inline-block;
width: 190px;
background-color: white;
line-height: 90px;
}
.full-width {
width: 100vw;
max-width: 100vw;
margin-left: -50vw;
margin-right: -50vw;
left: 50%;
right: 50%;
position: relative;
overflow-x: auto;
}
.success {
background-color: #dff0d8;
}
.warning {
background-color: #faf2cc;
}
.danger {
background-color: #f2dede;
}
.info {
background-color: #d9edf7;
}
.fa {
font-size: 150%;
}
.has-tooltip:before {
text-decoration: underline;
}
.dim {
color: #eeeeee
}
.table-of-contents {
width: 100%;
}
.table-of-contents td {
vertical-align: top;
width: 50%;
}

View file

@ -1,60 +0,0 @@
.highlight { background: #ffffff; }
.highlight .c { color: #999988; font-style: italic } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { font-weight: bold } /* Keyword */
.highlight .o { font-weight: bold } /* Operator */
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #999999 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { font-weight: bold } /* Keyword.Constant */
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #009999 } /* Literal.Number */
.highlight .s { color: #d14 } /* Literal.String */
.highlight .na { color: #008080 } /* Name.Attribute */
.highlight .nb { color: #0086B3 } /* Name.Builtin */
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
.highlight .no { color: #008080 } /* Name.Constant */
.highlight .ni { color: #800080 } /* Name.Entity */
.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
.highlight .nn { color: #555555 } /* Name.Namespace */
.highlight .nt { color: #000080 } /* Name.Tag */
.highlight .nv { color: #008080 } /* Name.Variable */
.highlight .ow { font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #009999 } /* Literal.Number.Float */
.highlight .mh { color: #009999 } /* Literal.Number.Hex */
.highlight .mi { color: #009999 } /* Literal.Number.Integer */
.highlight .mo { color: #009999 } /* Literal.Number.Oct */
.highlight .sb { color: #d14 } /* Literal.String.Backtick */
.highlight .sc { color: #d14 } /* Literal.String.Char */
.highlight .sd { color: #d14 } /* Literal.String.Doc */
.highlight .s2 { color: #d14 } /* Literal.String.Double */
.highlight .se { color: #d14 } /* Literal.String.Escape */
.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
.highlight .si { color: #d14 } /* Literal.String.Interpol */
.highlight .sx { color: #d14 } /* Literal.String.Other */
.highlight .sr { color: #009926 } /* Literal.String.Regex */
.highlight .s1 { color: #d14 } /* Literal.String.Single */
.highlight .ss { color: #990073 } /* Literal.String.Symbol */
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #008080 } /* Name.Variable.Class */
.highlight .vg { color: #008080 } /* Name.Variable.Global */
.highlight .vi { color: #008080 } /* Name.Variable.Instance */
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */

View file

@ -1,43 +0,0 @@
---
layout: default
title: How to edit the documentation
---
# Working with the docs
The website is a static website generated by [Jekyll](https://jekyllrb.com/docs/).
The website is generated from the files in `$GIT/dnscontrol/docs`. If a file
has a `.md` extension, it will be turned into an HTML file. Otherwise it is
copied verbatim.
# Directory Hierarchy
* `docs`: The root directory. index.md is the homepage.
* `docs/_includes`: Functions and templates.
* `docs/css`: CSS
* `docs/_functions/record`: Things that augment a record.
* `docs/_functions/domain`: Things inside a `D()`
* `docs/_functions/global`: Features at the global (file) level.
* `docs/_layouts`: Main layout
* `docs/public`: Static content
* `docs/_site`: The generated site (not in Git)
* `docs/assets`: Static files
* `docs/flattener`: The SPF flatter
# How to preview
The documentation can be viewed via Docker:
```bash
cd docs
./runDocker.sh
```
FYI: Alternative Docker command:
```bash
docker run --rm -it --volume="$PWD:/srv/jekyll" --volume="$PWD/vendor/bundle:/ usr/local/bundle" --env JEKYLL_ENV=production jekyll/jekyll:3.8 jekyll build -V
# Open docs/_site/index.html in your web browser to see the results.
# (Note: The preview isn't perfect. Links that use the site.github.url variable won't work.
```

View file

@ -5,58 +5,57 @@
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="flattener.js"></script>
<style>
ul {
margin: 0px 0px 0px 20px;
list-style: none;
line-height: 2em;
font-family: Arial;
}
ul li {
font-size: 16px;
position: relative;
}
ul li:before {
position: absolute;
left: -15px;
top: 0px;
content: '';
display: block;
border-left: 1px solid #ddd;
height: 1em;
border-bottom: 1px solid #ddd;
width: 10px;
}
ul li:after {
position: absolute;
left: -15px;
bottom: -7px;
content: '';
display: block;
border-left: 1px solid #ddd;
height: 100%;
}
ul li.root {
margin: 0px 0px 0px -20px;
}
ul li.root:before {
display: none;
}
ul li.root:after {
display: none;
}
ul li:last-child:after {
display: none;
}
</style>
ul {
margin: 0px 0px 0px 20px;
list-style: none;
line-height: 2em;
font-family: Arial;
}
ul li {
font-size: 16px;
position: relative;
}
ul li:before {
position: absolute;
left: -15px;
top: 0px;
content: '';
display: block;
border-left: 1px solid #ddd;
height: 1em;
border-bottom: 1px solid #ddd;
width: 10px;
}
ul li:after {
position: absolute;
left: -15px;
bottom: -7px;
content: '';
display: block;
border-left: 1px solid #ddd;
height: 100%;
}
ul li.root {
margin: 0px 0px 0px -20px;
}
ul li.root:before {
display: none;
}
ul li.root:after {
display: none;
}
ul li:last-child:after {
display: none;
}
</style>
</head>
<body>
<div class='container' style='padding-bottom:50px'>
<input type="text" id="domain" value="stackoverflow.com"></input>
<button id="lookup_btn">Lookup</button>
<div id="results"></div>
<div id="flattened"></div>
<input type="text" id="domain" value="stackoverflow.com"></input>
<button id="lookup_btn">Lookup</button>
<div id="results"></div>
<div id="flattened"></div>
</div>
</body>
</body>
</html>

View file

@ -7,7 +7,7 @@ title: DNSControl
<div class="col-md-12">
<div>
<h1 class="hometitle">DNSControl</h1>
<p class="lead">DNSControl is an <strong><a href="opinions">opinionated</a></strong> platform for seamlessly managing your DNS configuration across any number of DNS hosts, both in the cloud or in your own infrastructure. It manages all of the domains for the Stack Overflow network, and can do the same for you!</p>
<p class="lead">DNSControl is an <strong><a href="https://docs.dnscontrol.org/developer-info/opinions">opinionated</a></strong> platform for seamlessly managing your DNS configuration across any number of DNS hosts, both in the cloud or in your own infrastructure. It manages all of the domains for the Stack Overflow network, and can do the same for you!</p>
</div>
</div>
</div>
@ -16,11 +16,11 @@ title: DNSControl
<div class="col-md-4">
<h3>Try It</h3>
<p>Want to jump right in? Follow our
<strong><a href="getting-started">quick start tutorial</a></strong>
<strong><a href="https://docs.dnscontrol.org/getting-started/getting-started">quick start tutorial</a></strong>
on a new domain or
<strong><a href="migrating">migrate</a></strong>
<strong><a href="https://docs.dnscontrol.org/getting-started/migrating">migrate</a></strong>
an existing one. Read the
<strong><a href="js">language spec</a></strong>
<strong><a href="https://docs.dnscontrol.org/language-reference/js">language spec</a></strong>
for more info. You can also <strong><a href="#getting-started">view a list of all topics</a></strong>.
</p>
</div>
@ -32,7 +32,7 @@ title: DNSControl
Use macros and variables for easier updates.
<!-- Optimize your SPF records. -->
Upload your zones to
<strong><a href="provider-list">multiple DNS providers</a></strong>.
<strong><a href="https://docs.dnscontrol.org/service-providers/providers">multiple DNS providers</a></strong>.
</p>
</div>
@ -82,19 +82,19 @@ title: DNSControl
<ul>
<li>
<a href="{{site.github.url}}/getting-started">Getting Started</a>: A walk-through of the basics
<a href="https://docs.dnscontrol.org/getting-started/getting-started">Getting Started</a>: A walk-through of the basics
</li>
<li>
<a href="{{site.github.url}}/provider-list">Providers</a>: Which DNS providers are supported
<a href="https://docs.dnscontrol.org/service-providers/providers">Providers</a>: Which DNS providers are supported
</li>
<li>
<a href="{{site.github.url}}/examples">Examples</a>: The DNSControl language by example
<a href="https://docs.dnscontrol.org/getting-started/examples">Examples</a>: The DNSControl language by example
</li>
<li>
<a href="{{site.github.url}}/migrating">Migrating</a>: Migrating zones to DNSControl
<a href="https://docs.dnscontrol.org/getting-started/migrating">Migrating</a>: Migrating zones to DNSControl
</li>
<li>
<a href="{{site.github.url}}/typescript">TypeScript</a> (optional): Improve autocomplete and add type checking
<a href="https://docs.dnscontrol.org/getting-started/typescript">TypeScript</a> (optional): Improve autocomplete and add type checking
</li>
</ul>
@ -107,16 +107,16 @@ title: DNSControl
<ul>
<li>
<a href="creds-json.html">creds.json</a>: creds.json file format
<a href="https://docs.dnscontrol.org/commands/creds-json">creds.json</a>: creds.json file format
</li>
<li>
<a href="check-creds.html">check-creds</a>: Verify credentials
<a href="https://docs.dnscontrol.org/commands/check-creds">check-creds</a>: Verify credentials
</li>
<li>
<a href="get-zones.html">get-zones</a>: Query a provider for zone info
<a href="https://docs.dnscontrol.org/commands/get-zones">get-zones</a>: Query a provider for zone info
</li>
<li>
<a href="get-certs.html">get-certs</a>: Renew SSL/TLS certs (DEPRECATED)
<a href="https://docs.dnscontrol.org/commands/get-certs">get-certs</a>: Renew SSL/TLS certs (DEPRECATED)
</li>
</ul>
@ -131,16 +131,16 @@ title: DNSControl
<ul>
<li>
<a href="{{site.github.url}}/js">Language Reference</a>: Description of the DNSControl language (DSL)
<a href="https://docs.dnscontrol.org/language-reference/js">Language Reference</a>: Description of the DNSControl language (DSL)
</li>
<li>
<a href="{{site.github.url}}/alias">Aliases</a>: ALIAS/ANAME records
<a href="https://docs.dnscontrol.org/developer-info/alias">Aliases</a>: ALIAS/ANAME records
</li>
<li>
<a href="{{site.github.url}}/js#SPF_BUILDER">SPF Optimizer</a>: Optimize your SPF records
<a href="https://docs.dnscontrol.org/language-reference/record-modifiers/spf_builder">SPF Optimizer</a>: Optimize your SPF records
</li>
<li>
<a href="{{site.github.url}}/js#CAA_BUILDER">CAA Builder</a>: Build CAA records the easy way
<a href="https://docs.dnscontrol.org/language-reference/record-modifiers/caa_builder">CAA Builder</a>: Build CAA records the easy way
</li>
</ul>
</div>
@ -153,25 +153,25 @@ title: DNSControl
</p>
<ul>
<li>
<a href="{{site.github.url}}/why-the-dot">Why CNAME/MX/NS targets require a trailing "dot"</a>
<a href="https://docs.dnscontrol.org/language-reference/why-the-dot">Why CNAME/MX/NS targets require a trailing "dot"</a>
</li>
<li>
<a href="{{site.github.url}}/unittests">Testing</a>: Unit Testing for you DNS Data
<a href="https://docs.dnscontrol.org/developer-info/unittests">Testing</a>: Unit Testing for you DNS Data
</li>
<li>
<a href="{{site.github.url}}/notifications">Notifications</a>: Web-hook for changes
<a href="https://docs.dnscontrol.org/advanced-features/notifications">Notifications</a>: Web-hook for changes
</li>
<li>
<a href="{{site.github.url}}/code-tricks">Code Tricks</a>: Safely use macros and loops.
<a href="https://docs.dnscontrol.org/advanced-features/code-tricks">Code Tricks</a>: Safely use macros and loops.
</li>
<li>
<a href="{{site.github.url}}/cli-variables">CLI variables</a>: Passing variables from CLI to JS
<a href="https://docs.dnscontrol.org/advanced-features/cli-variables">CLI variables</a>: Passing variables from CLI to JS
</li>
<li>
<a href="{{site.github.url}}/nameservers">Nameservers &amp; Delegation</a>: Many examples.
<a href="https://docs.dnscontrol.org/advanced-features/nameservers">Nameservers &amp; Delegation</a>: Many examples.
</li>
<li>
<a href="{{site.github.url}}/ci-cd-gitlab">Gitlab CI/CD example</a>.
<a href="https://docs.dnscontrol.org/advanced-features/ci-cd-gitlab">Gitlab CI/CD example</a>.
</li>
</ul>
</div>
@ -192,22 +192,19 @@ title: DNSControl
Mailing list: <a href="https://groups.google.com/forum/#!forum/dnscontrol-discuss">dnscontrol-discuss</a>: The friendly best place to ask questions and propose new features
</li>
<li>
<a href="{{site.github.url}}/bug-triage">Bug Triage</a>: How bugs are triaged
<a href="https://docs.dnscontrol.org/developer-info/bug-triage">Bug Triage</a>: How bugs are triaged
</li>
<li>
<a href="{{site.github.url}}/release-engineering">Release Engineering</a>: How to build and ship a release
<a href="https://docs.dnscontrol.org/release/release-engineering">Release Engineering</a>: How to build and ship a release
</li>
<li>
<a href="{{site.github.url}}/documentation">Edit Documentation</a>: How to edit these docs
<a href="https://docs.dnscontrol.org/developer-info/byo-secrets">Bring-Your-Own-Secrets</a>: Automate tests
</li>
<li>
<a href="{{site.github.url}}/byo-secrets">Bring-Your-Own-Secrets</a>: Automate tests
<a href="https://docs.dnscontrol.org/developer-info/writing-providers">Step-by-Step Guide: Writing Providers</a>: How to write a DNS or Registrar Provider
</li>
<li>
<a href="{{site.github.url}}/writing-providers">Step-by-Step Guide: Writing Providers</a>: How to write a DNS or Registrar Provider
</li>
<li>
<a href="{{site.github.url}}/adding-new-rtypes">Step-by-Step Guide: Adding new DNS rtypes</a>: How to add a new DNS record type
<a href="https://docs.dnscontrol.org/developer-info/adding-new-rtypes">Step-by-Step Guide: Adding new DNS rtypes</a>: How to add a new DNS record type
</li>
</ul>
</div>

View file

@ -1,65 +0,0 @@
---
layout: default
title: JavaScript DSL
---
# JavaScript DSL
DNSControl uses JavaScript as its primary input language to provide power and flexibility to configure your domains. The ultimate purpose of the JavaScript is to construct a
[DNSConfig](https://godoc.org/github.com/StackExchange/dnscontrol/models#DNSConfig) object that will be passed to the go backend and operated on.
<table class="table-of-contents">
<tr>
<td>
{% include table-of-contents.md
docs-functions-dir="domain"
html-anchor="domain-modifiers"
title="Domain Modifiers"
%}
{% assign showProviders = 'AKAMAIEDGEDNS, AZURE_DNS, CLOUDFLAREAPI, ROUTE53' %}
{% for provider in site.providers %}
{% if showProviders contains provider.jsId %}
{% include table-of-contents.md
docs-functions-dir="domain"
html-anchor="domain-modifiers"
title="Domain Modifiers"
provider-name=provider.name
provider-jsId=provider.jsId
%}
{% endif %}
{% endfor %}
</td>
<td>
{% include table-of-contents.md
docs-functions-dir="global"
html-anchor="top-level-functions"
title="Top Level Functions"
%}
{% include table-of-contents.md
docs-functions-dir="record"
html-anchor="record-modifiers"
title="Record Modifiers"
%}
</td>
</tr>
</table>
{% include funcList.md title="Top Level Functions" dir="global" %}
{% include funcList.md title="Domain Modifiers" dir="domain" %}
{% include funcList.md title="Record Modifiers" dir="record" %}
<script>
$(function(){
var f = function(){
$("div.panel").removeClass("panel-success")
var jmp = window.location.hash;
if(jmp){
$("div"+jmp).addClass("panel-success")
}
}
f();
$(window).on('hashchange',f);
})
</script>

View file

@ -1,153 +0,0 @@
---
layout: default
title: Service Providers
---
# Service Providers
<table class='table table-bordered'>
<thead>
<th>Name</th>
<th>Identifier</th>
</thead>
{% for p in site.providers %}
<tr>
<td><a href=".{{p.id}}">{{p.name}}</a></td>
<td>{{p.jsId}}</td>
</tr>
{% endfor %}
</table>
## Provider Features {#features}
The table below shows various features supported, or not supported by DNSControl providers.
Underlined items have tooltips for more detailed explanation. This table is automatically generated
from metadata supplied by the provider when they register themselves inside dnscontrol.
An empty space may indicate the feature is not supported by a provider, or it may simply mean
the feature has not been investigated and implemented yet. If a feature you need is missing from
a provider that supports it, we'd love your contribution to ensure it works correctly and add it to this matrix.
If a feature is definitively not supported for whatever reason, we would also like a PR to clarify why it is not supported, and fill in this entire matrix.
<br/>
<br/>
{% include matrix.html %}
### Providers with "official support"
Official support means:
* New releases will block if any of these providers do not pass integration tests.
* The DNSControl maintainers prioritize fixing bugs in these providers (though we gladly accept PRs).
* New features will work on these providers (unless the provider does not support it).
* StackOverflow maintains test accounts with those providers for running integration tests.
Providers in this category and their maintainers are:
* `AZURE_DNS` @vatsalyagoel
* `BIND` @tlimoncelli
* `GCLOUD` @riyadhalnur
* `NAMEDOTCOM` @tlimoncelli
### Providers with "contributor support"
The other providers are supported by community members, usually the
original contributor.
Due to the large number of DNS providers in the world, the DNSControl
team can not support and test all providers. Test frameworks are
provided to help community members support their code independently.
Expectations of maintainers:
* Maintainers are expected to support their provider and/or find a new maintainer.
* Maintainers should set up test accounts and periodically verify that all tests pass (`pkg/js/parse_tests` and `integrationTest`).
* Contributors are encouraged to add new tests and refine old ones. (Test-driven development is encouraged.)
* Bugs will be referred to the maintainer or their designate.
* Maintainers must be responsible to bug reports and PRs. If a maintainer is unresponsive for more than 2 months, we will consider disabling the provider. First we will put out a call for new maintainer. If noboby volunteers, the provider will be disabled.
Providers in this category and their maintainers are:
* `AXFRDDNS` @hnrgrgr
* `AKAMAIEDGEDNS` @svernick
* `CLOUDNS` @pragmaton
* `CLOUDFLAREAPI` @tresni
* `CSCGLOBAL` @Air-New-Zealand
* `DESEC` @D3luxee
* `DIGITALOCEAN` @Deraen
* `DNSOVERHTTPS` @mikenz
* `DNSIMPLE` @onlyhavecans
* `DNSMADEEASY` @vojtad
* `DOMAINNAMESHOP` @SimenBai
* `EASYNAME` @tresni
* `EXOSCALE` @pierre-emmanuelJ
* `GANDI_V5` @TomOnTime
* `GCORE` @xddxdd
* `HEDNS` @rblenkinsopp
* `HETZNER` @das7pad
* `HEXONET` @papakai
* `HOSTINGDE` @membero
* `INTERNETBS` @pragmaton
* `INWX` @svenpeter42
* `LINODE` @koesie10
* `NAMECHEAP` VOLUNTEER NEEDED
* `NETCUP` @kordianbruck
* `NETLIFY` @SphericalKat
* `NS1` @costasd
* `OPENSRS` @pierre-emmanuelJ
* `ORACLE` @kallsyms
* `OVH` @masterzen
* `PACKETFRAME` @hamptonmoore
* `POWERDNS` @jpbede
* `RWTH` @MisterErwin
* `ROUTE53` @tresni
* `SOFTLAYER`@jamielennox
* `TRANSIP` @blackshadev
* `VULTR` @pgaskin
### Requested providers
We have received requests for the following providers. If you would like to contribute
code to support this provider, please re-open the issue. We'd be glad to help in any way.
<ul id='requests'>
</ul>
### In progress providers
These requests have an *open* issue, which indicates somebody is actively working on it. Feel free to follow the issue, or pitch in if you think you can help.
<ul id='inprog'>
</ul>
### Providers with open PRs
These providers have an open PR with (potentially) working code. They may be ready to merge, or may have blockers. See issue and PR for details.
<ul id='haspr'>
</ul>
<script>
$(function() {
$.get("https://api.github.com/repos/StackExchange/dnscontrol/issues?state=all&labels=provider-request&direction=asc")
.done(function(data) {
for(var i of data) {
var el = $(`<li><a href='${i.html_url}'>${i.title}</a> (#${i.number})</li>`);
var target = $("#requests");
if (i.state == "open") {
target = $("#inprog");
for(var l of i.labels) {
if (l.name == "has-pr")
target = $("#haspr");
}
}
target.append(el);
}
})
.fail(function(err){
console.log("???", err)
});
});
</script>

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="App_Store" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.5640259,13.8623047
c-0.4133301,0.9155273-0.6115723,1.3251343-1.1437988,2.1346436c-0.7424927,1.1303711-1.7894897,2.5380249-3.086853,2.5500488
c-1.1524048,0.0109253-1.4483032-0.749939-3.0129395-0.741333c-1.5640259,0.008606-1.8909302,0.755127-3.0438843,0.7442017
c-1.296814-0.0120239-2.2891235-1.2833252-3.0321655-2.4136963c-2.0770874-3.1607666-2.2941895-6.8709106-1.0131836-8.8428955
c0.9106445-1.4013062,2.3466187-2.2217407,3.6970215-2.2217407c1.375,0,2.239502,0.7539673,3.3761597,0.7539673
c1.1028442,0,1.7749023-0.755127,3.3641357-0.755127c1.201416,0,2.4744263,0.6542969,3.3816528,1.7846069
C14.0778809,8.4837646,14.5608521,12.7279663,17.5640259,13.8623047z M12.4625244,3.8076782
c0.5775146-0.741333,1.0163574-1.7880859,0.8571167-2.857666c-0.9436035,0.0653076-2.0470581,0.6651611-2.6912842,1.4477539
C10.0437012,3.107605,9.56073,4.1605835,9.7486572,5.1849365C10.7787476,5.2164917,11.8443604,4.6011963,12.4625244,3.8076782z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -1,50 +1,50 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
S232.835,0,149.996,0z M221.999,133.598L123.43,232.16l0.005,0.005c-0.034,0.034-0.067,0.057-0.101,0.091l-0.604,0.604
l-0.031-0.034c-5.561,5.179-12.766,7.763-20.225,7.763c-8.896,0-18.124-3.628-25.264-10.769
c-6.349-6.344-10.156-14.54-10.719-23.078c-0.558-8.445,2.116-16.236,7.485-22.134l-0.054-0.054l97.41-97.41
c8.227-8.229,22.209-7.623,31.177,1.343c4.204,4.204,6.733,9.656,7.109,15.346c0.399,5.996-1.707,11.765-5.776,15.829
l-79.296,79.304l-11.005-11.002l79.301-79.307c1.162-1.162,1.32-2.703,1.248-3.787c-0.127-1.898-1.071-3.859-2.588-5.377
c-2.85-2.85-7.049-3.462-9.168-1.341l-96.455,96.453l0.003,0.003c-2.783,2.78-4.155,6.725-3.864,11.108
c0.316,4.77,2.516,9.423,6.196,13.103c7.306,7.304,18.14,8.364,24.18,2.376l98.608-98.6c4.593-4.596,6.865-11.056,6.393-18.186
c-0.498-7.519-3.942-14.825-9.692-20.575c-11.599-11.596-28.983-13.077-38.761-3.304l-81.579,81.576l-11.005-11.002l81.579-81.579
c15.842-15.839,43.103-14.361,60.768,3.302c8.421,8.416,13.468,19.265,14.218,30.55
C233.694,115.049,229.816,125.781,221.999,133.598z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
S232.835,0,149.996,0z M221.999,133.598L123.43,232.16l0.005,0.005c-0.034,0.034-0.067,0.057-0.101,0.091l-0.604,0.604
l-0.031-0.034c-5.561,5.179-12.766,7.763-20.225,7.763c-8.896,0-18.124-3.628-25.264-10.769
c-6.349-6.344-10.156-14.54-10.719-23.078c-0.558-8.445,2.116-16.236,7.485-22.134l-0.054-0.054l97.41-97.41
c8.227-8.229,22.209-7.623,31.177,1.343c4.204,4.204,6.733,9.656,7.109,15.346c0.399,5.996-1.707,11.765-5.776,15.829
l-79.296,79.304l-11.005-11.002l79.301-79.307c1.162-1.162,1.32-2.703,1.248-3.787c-0.127-1.898-1.071-3.859-2.588-5.377
c-2.85-2.85-7.049-3.462-9.168-1.341l-96.455,96.453l0.003,0.003c-2.783,2.78-4.155,6.725-3.864,11.108
c0.316,4.77,2.516,9.423,6.196,13.103c7.306,7.304,18.14,8.364,24.18,2.376l98.608-98.6c4.593-4.596,6.865-11.056,6.393-18.186
c-0.498-7.519-3.942-14.825-9.692-20.575c-11.599-11.596-28.983-13.077-38.761-3.304l-81.579,81.576l-11.005-11.002l81.579-81.579
c15.842-15.839,43.103-14.361,60.768,3.302c8.421,8.416,13.468,19.265,14.218,30.55
C233.694,115.049,229.816,125.781,221.999,133.598z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -1,74 +1,74 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<g>
<g>
<path d="M255,302c-8.276,0-15,6.724-15,15v30c0,8.276,6.724,15,15,15s15-6.724,15-15v-30C270,308.724,263.276,302,255,302z"/>
</g>
</g>
<g>
<g>
<path d="M195,182c-8.276,0-15,6.724-15,15s6.724,15,15,15s15-6.724,15-15S203.276,182,195,182z"/>
</g>
</g>
<g>
<g>
<path d="M467,212h-22.229c-4.805-20.186-12.876-39.668-23.774-57.363l14.312-14.312c17.549-17.549,17.549-46.084,0-63.633
c-17.549-17.549-46.084-17.549-63.633,0l-14.312,14.312C339.668,80.105,320.186,72.034,300,67.229V45c0-24.814-20.186-45-45-45
c-24.814,0-45,20.186-45,45v22.229c-20.186,4.805-39.668,12.876-57.363,23.774l-14.312-14.312
c-17.549-17.549-46.084-17.549-63.633,0c-17.549,17.549-17.549,46.084,0,63.633l14.312,14.312
C78.105,172.332,70.034,191.814,65.229,212H45c-24.814,0-45,20.186-45,45c0,24.814,20.186,45,45,45h20.229
c4.805,20.186,12.876,39.668,23.774,57.363l-14.312,14.312c-17.549,17.549-17.549,46.084,0,63.633
c17.549,17.549,46.084,17.549,63.633,0l14.312-14.312c17.695,10.898,37.178,18.97,57.363,23.774V467c0,24.814,20.186,45,45,45
c24.814,0,45-20.186,45-45v-20.229c20.186-4.805,39.668-12.876,57.363-23.774l14.312,14.312c17.549,17.549,46.084,17.549,63.633,0
s17.549-46.084,0-63.633l-14.312-14.312c10.898-17.695,18.97-37.178,23.774-57.363H467c24.814,0,45-20.186,45-45
C512,232.187,491.814,212,467,212z M255,122c8.284,0,15,6.716,15,15s-6.716,15-15,15s-15-6.716-15-15S246.716,122,255,122z
M165,362c-8.284,0-15-6.716-15-15s6.716-15,15-15s15,6.716,15,15S173.284,362,165,362z M175.605,297.605
c-2.93,2.93-6.768,4.395-10.605,4.395s-7.676-1.465-10.605-4.395l-30-30c-5.859-5.859-5.859-15.352,0-21.211
c5.859-5.859,15.352-5.859,21.211,0l30,30C181.465,282.254,181.465,291.746,175.605,297.605z M195,242c-24.814,0-45-20.186-45-45
c0-24.814,20.186-45,45-45c24.814,0,45,20.186,45,45C240,221.814,219.814,242,195,242z M300,347c0,24.814-20.186,45-45,45
c-24.814,0-45-20.186-45-45v-30c0-24.814,20.186-45,45-45c24.814,0,45,20.186,45,45V347z M345,362c-8.284,0-15-6.716-15-15
s6.716-15,15-15s15,6.716,15,15S353.284,362,345,362z M379.79,262.171l-0.088,0.088c-8.73,8.73-20.186,13.096-31.655,13.096
s-22.925-4.365-31.655-13.096l-36.606-36.606c-17.446-17.446-17.446-45.835-0.015-63.296
c17.549-17.549,45.952-17.593,63.413-0.103l36.606,36.606C397.251,216.321,397.251,244.71,379.79,262.171z"/>
</g>
</g>
<g>
<g>
<path d="M358.579,220.07l-36.606-36.605c-2.871-2.871-6.65-4.307-10.43-4.307c-3.78,0-7.573,1.436-10.444,4.321
c-5.845,5.845-5.845,15.205-0.103,20.962l36.606,36.606c5.771,5.742,15.117,5.742,20.889,0l0.088-0.088
C364.336,235.202,364.336,225.827,358.579,220.07z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<g>
<g>
<path d="M255,302c-8.276,0-15,6.724-15,15v30c0,8.276,6.724,15,15,15s15-6.724,15-15v-30C270,308.724,263.276,302,255,302z"/>
</g>
</g>
<g>
<g>
<path d="M195,182c-8.276,0-15,6.724-15,15s6.724,15,15,15s15-6.724,15-15S203.276,182,195,182z"/>
</g>
</g>
<g>
<g>
<path d="M467,212h-22.229c-4.805-20.186-12.876-39.668-23.774-57.363l14.312-14.312c17.549-17.549,17.549-46.084,0-63.633
c-17.549-17.549-46.084-17.549-63.633,0l-14.312,14.312C339.668,80.105,320.186,72.034,300,67.229V45c0-24.814-20.186-45-45-45
c-24.814,0-45,20.186-45,45v22.229c-20.186,4.805-39.668,12.876-57.363,23.774l-14.312-14.312
c-17.549-17.549-46.084-17.549-63.633,0c-17.549,17.549-17.549,46.084,0,63.633l14.312,14.312
C78.105,172.332,70.034,191.814,65.229,212H45c-24.814,0-45,20.186-45,45c0,24.814,20.186,45,45,45h20.229
c4.805,20.186,12.876,39.668,23.774,57.363l-14.312,14.312c-17.549,17.549-17.549,46.084,0,63.633
c17.549,17.549,46.084,17.549,63.633,0l14.312-14.312c17.695,10.898,37.178,18.97,57.363,23.774V467c0,24.814,20.186,45,45,45
c24.814,0,45-20.186,45-45v-20.229c20.186-4.805,39.668-12.876,57.363-23.774l14.312,14.312c17.549,17.549,46.084,17.549,63.633,0
s17.549-46.084,0-63.633l-14.312-14.312c10.898-17.695,18.97-37.178,23.774-57.363H467c24.814,0,45-20.186,45-45
C512,232.187,491.814,212,467,212z M255,122c8.284,0,15,6.716,15,15s-6.716,15-15,15s-15-6.716-15-15S246.716,122,255,122z
M165,362c-8.284,0-15-6.716-15-15s6.716-15,15-15s15,6.716,15,15S173.284,362,165,362z M175.605,297.605
c-2.93,2.93-6.768,4.395-10.605,4.395s-7.676-1.465-10.605-4.395l-30-30c-5.859-5.859-5.859-15.352,0-21.211
c5.859-5.859,15.352-5.859,21.211,0l30,30C181.465,282.254,181.465,291.746,175.605,297.605z M195,242c-24.814,0-45-20.186-45-45
c0-24.814,20.186-45,45-45c24.814,0,45,20.186,45,45C240,221.814,219.814,242,195,242z M300,347c0,24.814-20.186,45-45,45
c-24.814,0-45-20.186-45-45v-30c0-24.814,20.186-45,45-45c24.814,0,45,20.186,45,45V347z M345,362c-8.284,0-15-6.716-15-15
s6.716-15,15-15s15,6.716,15,15S353.284,362,345,362z M379.79,262.171l-0.088,0.088c-8.73,8.73-20.186,13.096-31.655,13.096
s-22.925-4.365-31.655-13.096l-36.606-36.606c-17.446-17.446-17.446-45.835-0.015-63.296
c17.549-17.549,45.952-17.593,63.413-0.103l36.606,36.606C397.251,216.321,397.251,244.71,379.79,262.171z"/>
</g>
</g>
<g>
<g>
<path d="M358.579,220.07l-36.606-36.605c-2.871-2.871-6.65-4.307-10.43-4.307c-3.78,0-7.573,1.436-10.444,4.321
c-5.845,5.845-5.845,15.205-0.103,20.962l36.606,36.606c5.771,5.742,15.117,5.742,20.889,0l0.088-0.088
C364.336,235.202,364.336,225.827,358.579,220.07z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3 KiB

View file

@ -1,48 +1,48 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<g>
<path d="M112.782,205.804c10.644,7.166,23.449,11.355,37.218,11.355c36.837,0,66.808-29.971,66.808-66.808
c0-13.769-4.189-26.574-11.355-37.218L112.782,205.804z"/>
<path d="M150,83.542c-36.839,0-66.808,29.969-66.808,66.808c0,15.595,5.384,29.946,14.374,41.326l93.758-93.758
C179.946,88.926,165.595,83.542,150,83.542z"/>
<path d="M149.997,0C67.158,0,0.003,67.161,0.003,149.997S67.158,300,149.997,300s150-67.163,150-150.003S232.837,0,149.997,0z
M150,237.907c-48.28,0-87.557-39.28-87.557-87.557c0-48.28,39.277-87.557,87.557-87.557c48.277,0,87.557,39.277,87.557,87.557
C237.557,198.627,198.277,237.907,150,237.907z"/>
</g>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<g>
<path d="M112.782,205.804c10.644,7.166,23.449,11.355,37.218,11.355c36.837,0,66.808-29.971,66.808-66.808
c0-13.769-4.189-26.574-11.355-37.218L112.782,205.804z"/>
<path d="M150,83.542c-36.839,0-66.808,29.969-66.808,66.808c0,15.595,5.384,29.946,14.374,41.326l93.758-93.758
C179.946,88.926,165.595,83.542,150,83.542z"/>
<path d="M149.997,0C67.158,0,0.003,67.161,0.003,149.997S67.158,300,149.997,300s150-67.163,150-150.003S232.837,0,149.997,0z
M150,237.907c-48.28,0-87.557-39.28-87.557-87.557c0-48.28,39.277-87.557,87.557-87.557c48.277,0,87.557,39.277,87.557,87.557
C237.557,198.627,198.277,237.907,150,237.907z"/>
</g>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,47 +1,47 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<path d="M149.997,0C67.158,0,0.003,67.161,0.003,149.997S67.158,300,149.997,300s150-67.163,150-150.003S232.837,0,149.997,0z
M209.453,220.955c-1.644,0-3.268-0.091-4.866-0.254c-1.46,0.163-2.944,0.254-4.448,0.254h-37.656l40.504-40.87
c2.342-2.365,3.079-5.983,1.849-9.137c-1.227-3.156-4.165-5.218-7.431-5.218h-19.958v-42.662c0-5.14-4.171-9.311-9.311-9.311
h-28.231c-5.14,0-9.311,4.168-9.311,9.311v42.662h-21.529c-0.016,0-0.034,0-0.047,0c-4.43,0-8.019,3.737-8.019,8.354
c0,2.63,1.162,4.969,2.977,6.5l40.011,40.372H83.794c-21.916,0-39.684-17.771-39.684-39.684c0-18.256,12.327-33.615,29.108-38.245
c1.854-15.541,15.058-27.598,31.094-27.598c4.85,0,9.428,1.136,13.526,3.105c7.973-22.188,29.188-38.053,54.118-38.053
c29.896,0,54.455,22.821,57.227,51.988c15.779,7.42,26.709,23.454,26.709,42.045C255.891,200.163,235.101,220.955,209.453,220.955
z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<path d="M149.997,0C67.158,0,0.003,67.161,0.003,149.997S67.158,300,149.997,300s150-67.163,150-150.003S232.837,0,149.997,0z
M209.453,220.955c-1.644,0-3.268-0.091-4.866-0.254c-1.46,0.163-2.944,0.254-4.448,0.254h-37.656l40.504-40.87
c2.342-2.365,3.079-5.983,1.849-9.137c-1.227-3.156-4.165-5.218-7.431-5.218h-19.958v-42.662c0-5.14-4.171-9.311-9.311-9.311
h-28.231c-5.14,0-9.311,4.168-9.311,9.311v42.662h-21.529c-0.016,0-0.034,0-0.047,0c-4.43,0-8.019,3.737-8.019,8.354
c0,2.63,1.162,4.969,2.977,6.5l40.011,40.372H83.794c-21.916,0-39.684-17.771-39.684-39.684c0-18.256,12.327-33.615,29.108-38.245
c1.854-15.541,15.058-27.598,31.094-27.598c4.85,0,9.428,1.136,13.526,3.105c7.973-22.188,29.188-38.053,54.118-38.053
c29.896,0,54.455,22.821,57.227,51.988c15.779,7.42,26.709,23.454,26.709,42.045C255.891,200.163,235.101,220.955,209.453,220.955
z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Cog" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
<path d="M16.783,10c0-1.049,0.646-1.875,1.617-2.443c-0.176-0.584-0.407-1.145-0.692-1.672c-1.089,0.285-1.97-0.141-2.711-0.883
c-0.741-0.74-0.968-1.621-0.683-2.711c-0.527-0.285-1.088-0.518-1.672-0.691C12.074,2.57,11.047,3.215,10,3.215
c-1.048,0-2.074-0.645-2.643-1.615C6.772,1.773,6.213,2.006,5.686,2.291c0.285,1.09,0.059,1.971-0.684,2.711
C4.262,5.744,3.381,6.17,2.291,5.885C2.006,6.412,1.774,6.973,1.6,7.557C2.57,8.125,3.215,8.951,3.215,10
c0,1.047-0.645,2.074-1.615,2.643c0.175,0.584,0.406,1.144,0.691,1.672c1.09-0.285,1.971-0.059,2.711,0.682
c0.741,0.742,0.969,1.623,0.684,2.711c0.527,0.285,1.087,0.518,1.672,0.693c0.568-0.973,1.595-1.617,2.643-1.617
c1.047,0,2.074,0.645,2.643,1.617c0.584-0.176,1.144-0.408,1.672-0.693c-0.285-1.088-0.059-1.969,0.683-2.711
c0.741-0.74,1.622-1.166,2.711-0.883c0.285-0.527,0.517-1.086,0.692-1.672C17.429,11.873,16.783,11.047,16.783,10z M10,13.652
c-2.018,0-3.653-1.635-3.653-3.652c0-2.018,1.636-3.654,3.653-3.654c2.018,0,3.652,1.637,3.652,3.654
C13.652,12.018,12.018,13.652,10,13.652z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -1,47 +1,47 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<g>
<path d="M149.999,74.97c-41.191,0-74.703,33.509-74.703,74.7c0,41.194,33.512,74.706,74.703,74.706
c41.191,0,74.703-33.512,74.703-74.706C224.702,108.482,191.19,74.97,149.999,74.97z M108.727,190.937l21.2-50.414l29.222,29.214
L108.727,190.937z M170.117,158.699l-29.155-29.147l50.303-21.148L170.117,158.699z"/>
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
S232.835,0,149.996,0z M149.999,239.938c-49.771,0-90.265-40.494-90.265-90.267c0-49.771,40.491-90.262,90.265-90.262
c49.774,0,90.265,40.491,90.265,90.262S199.77,239.938,149.999,239.938z"/>
</g>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<g>
<path d="M149.999,74.97c-41.191,0-74.703,33.509-74.703,74.7c0,41.194,33.512,74.706,74.703,74.706
c41.191,0,74.703-33.512,74.703-74.706C224.702,108.482,191.19,74.97,149.999,74.97z M108.727,190.937l21.2-50.414l29.222,29.214
L108.727,190.937z M170.117,158.699l-29.155-29.147l50.303-21.148L170.117,158.699z"/>
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
S232.835,0,149.996,0z M149.999,239.938c-49.771,0-90.265-40.494-90.265-90.267c0-49.771,40.491-90.262,90.265-90.262
c49.774,0,90.265,40.491,90.265,90.262S199.77,239.938,149.999,239.938z"/>
</g>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

View file

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Database" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
<path d="M16.726,12.641c-0.843,1.363-3.535,2.361-6.726,2.361c-3.191,0-5.883-0.998-6.727-2.361C3.095,12.351,3,12.506,3,12.648
c0,0.144,0,2.002,0,2.002C3,16.59,6.134,18.6,10,18.6s7-2.01,7-3.949c0,0,0-1.858,0-2.002C17,12.506,16.904,12.351,16.726,12.641z
M16.737,7.525c-0.83,1.205-3.532,2.09-6.737,2.09c-3.205,0-5.908-0.885-6.738-2.09C3.091,7.277,3,7.412,3,7.523
c0,0.113,0,2.357,0,2.357c0,1.762,3.134,3.189,7,3.189s7-1.428,7-3.189c0,0,0-2.244,0-2.357C17,7.412,16.908,7.277,16.737,7.525z
M10,1C6.134,1,3,2.18,3,3.633v1.26c0,1.541,3.134,2.791,7,2.791s7-1.25,7-2.791v-1.26C17,2.18,13.866,1,10,1z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1 KiB

View file

@ -1,50 +1,50 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 299.998 299.998" style="enable-background:new 0 0 299.998 299.998;" xml:space="preserve">
<g>
<g>
<g>
<rect x="103.313" y="157.774" width="93.369" height="10.374"/>
<rect x="103.313" y="134.761" width="93.369" height="10.374"/>
<path d="M149.995,0.001C67.156,0.001,0,67.16,0,149.999s67.156,149.997,149.995,149.997s150.003-67.161,150.003-149.997
C299.997,67.157,232.834,0.001,149.995,0.001z M185.688,64.563l31.517,28.669h-31.517V64.563z M198.982,235.43h-97.967
c-10.068,0-18.225-8.159-18.225-18.225V82.79c0-10.066,8.159-18.225,18.225-18.225h76.889v36.45h39.298v92.412H180.2h-10.374
V203.8h-66.512v10.374h66.513v5.942v10.374H180.2h31.229C208.169,233.547,203.799,235.43,198.982,235.43z M230.018,220.116
L230.018,220.116H180.2V203.8h49.818V220.116z"/>
<rect x="103.313" y="111.746" width="93.369" height="10.374"/>
<rect x="103.313" y="180.787" width="93.369" height="10.374"/>
</g>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 299.998 299.998" style="enable-background:new 0 0 299.998 299.998;" xml:space="preserve">
<g>
<g>
<g>
<rect x="103.313" y="157.774" width="93.369" height="10.374"/>
<rect x="103.313" y="134.761" width="93.369" height="10.374"/>
<path d="M149.995,0.001C67.156,0.001,0,67.16,0,149.999s67.156,149.997,149.995,149.997s150.003-67.161,150.003-149.997
C299.997,67.157,232.834,0.001,149.995,0.001z M185.688,64.563l31.517,28.669h-31.517V64.563z M198.982,235.43h-97.967
c-10.068,0-18.225-8.159-18.225-18.225V82.79c0-10.066,8.159-18.225,18.225-18.225h76.889v36.45h39.298v92.412H180.2h-10.374
V203.8h-66.512v10.374h66.513v5.942v10.374H180.2h31.229C208.169,233.547,203.799,235.43,198.982,235.43z M230.018,220.116
L230.018,220.116H180.2V203.8h49.818V220.116z"/>
<rect x="103.313" y="111.746" width="93.369" height="10.374"/>
<rect x="103.313" y="180.787" width="93.369" height="10.374"/>
</g>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Grid" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8,4H5C4.447,4,4,4.447,4,5v3c0,0.552,0.447,1,1,1h3c0.553,0,1-0.448,1-1V5
C9,4.448,8.553,4,8,4z M15,4h-3c-0.553,0-1,0.447-1,1v3c0,0.552,0.447,1,1,1h3c0.553,0,1-0.448,1-1V5C16,4.448,15.553,4,15,4z M8,11
H5c-0.553,0-1,0.447-1,1v3c0,0.552,0.447,1,1,1h3c0.553,0,1-0.448,1-1v-3C9,11.448,8.553,11,8,11z M15,11h-3c-0.553,0-1,0.447-1,1v3
c0,0.552,0.447,1,1,1h3c0.553,0,1-0.448,1-1v-3C16,11.448,15.553,11,15,11z"/>
</svg>

Before

Width:  |  Height:  |  Size: 908 B

View file

@ -1,49 +1,49 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 299.998 299.998" style="enable-background:new 0 0 299.998 299.998;" xml:space="preserve">
<g>
<g>
<path d="M149.997,0C67.157,0,0.001,67.158,0.001,149.995s67.156,150.003,149.995,150.003s150-67.163,150-150.003
S232.836,0,149.997,0z M40.732,206.496c0-46.858,41.152-46.848,50.284-59.1l1.045-5.587c-12.83-6.505-21.887-22.178-21.887-40.514
c0-24.154,15.712-43.738,35.089-43.738c15.258,0,28.205,12.164,33.037,29.118c-19.41,6.168-33.768,27.214-33.768,52.232
c0,17.224,6.79,33.06,17.937,43.121c-1.79,0.918-3.781,1.854-5.493,2.656c-8.989,4.217-21.449,10.079-30.438,21.812H40.732z
M150.453,244.105v-0.002h-0.916H85.466c0-46.856,41.152-46.843,50.284-59.095l1.045-5.587
c-12.83-6.505-21.887-22.178-21.887-40.514c0-24.154,15.712-43.738,35.089-43.738c19.377,0,35.089,19.584,35.089,43.738
c0,18.178-8.896,33.758-21.555,40.361l1.19,6.352c10.019,11.658,49.802,12.418,49.802,58.485H150.453z M213.452,206.498v-0.002h0
c-8.992-11.731-21.452-17.592-30.441-21.809c-1.769-0.83-3.73-1.751-5.483-2.651c11.137-10.074,17.935-25.944,17.935-43.129
c0-25.015-14.353-46.057-33.758-52.227c4.829-16.957,17.776-29.121,33.037-29.121c19.379,0,35.089,19.584,35.089,43.738
c0,18.178-8.896,33.756-21.555,40.361l1.19,6.352c10.019,11.656,49.802,12.415,49.802,58.488H213.452z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 299.998 299.998" style="enable-background:new 0 0 299.998 299.998;" xml:space="preserve">
<g>
<g>
<path d="M149.997,0C67.157,0,0.001,67.158,0.001,149.995s67.156,150.003,149.995,150.003s150-67.163,150-150.003
S232.836,0,149.997,0z M40.732,206.496c0-46.858,41.152-46.848,50.284-59.1l1.045-5.587c-12.83-6.505-21.887-22.178-21.887-40.514
c0-24.154,15.712-43.738,35.089-43.738c15.258,0,28.205,12.164,33.037,29.118c-19.41,6.168-33.768,27.214-33.768,52.232
c0,17.224,6.79,33.06,17.937,43.121c-1.79,0.918-3.781,1.854-5.493,2.656c-8.989,4.217-21.449,10.079-30.438,21.812H40.732z
M150.453,244.105v-0.002h-0.916H85.466c0-46.856,41.152-46.843,50.284-59.095l1.045-5.587
c-12.83-6.505-21.887-22.178-21.887-40.514c0-24.154,15.712-43.738,35.089-43.738c19.377,0,35.089,19.584,35.089,43.738
c0,18.178-8.896,33.758-21.555,40.361l1.19,6.352c10.019,11.658,49.802,12.418,49.802,58.485H150.453z M213.452,206.498v-0.002h0
c-8.992-11.731-21.452-17.592-30.441-21.809c-1.769-0.83-3.73-1.751-5.483-2.651c11.137-10.074,17.935-25.944,17.935-43.129
c0-25.015-14.353-46.057-33.758-52.227c4.829-16.957,17.776-29.121,33.037-29.121c19.379,0,35.089,19.584,35.089,43.738
c0,18.178-8.896,33.756-21.555,40.361l1.19,6.352c10.019,11.656,49.802,12.415,49.802,58.488H213.452z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Hour_glass" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
<path d="M15.6,4.576c0-2.139,0-2.348,0-2.348C15.6,1.439,13.092,0,10,0C6.907,0,4.4,1.439,4.4,2.228c0,0,0,0.209,0,2.348
C4.4,6.717,8.277,8.484,8.277,10c0,1.514-3.877,3.281-3.877,5.422c0,2.141,0,2.35,0,2.35C4.4,18.56,6.907,20,10,20
c3.092,0,5.6-1.44,5.6-2.229c0,0,0-0.209,0-2.35c0-2.141-3.877-3.908-3.877-5.422C11.723,8.484,15.6,6.717,15.6,4.576z M5.941,2.328
c0.696-0.439,2-1.082,4.114-1.082c2.113,0,4.006,1.082,4.006,1.082c0.142,0.086,0.698,0.383,0.317,0.609
C13.54,3.434,11.9,3.957,10,3.957c-1.9,0-3.484-0.576-4.324-1.074C5.295,2.658,5.941,2.328,5.941,2.328z M10.501,10
c0,1.193,0.996,1.961,2.051,2.986c0.771,0.748,1.826,1.773,1.826,2.435v1.328c-0.97-0.483-3.872-0.955-3.872-2.504
c0-0.783-1.013-0.783-1.013,0c0,1.549-2.902,2.021-3.872,2.504v-1.328c0-0.662,1.056-1.688,1.826-2.435
C8.502,11.961,9.498,11.193,9.498,10c0-1.193-0.996-1.961-2.051-2.986c-0.771-0.75-1.826-1.775-1.826-2.438L5.575,3.578
C6.601,4.131,8.227,4.656,10,4.656c1.772,0,3.406-0.525,4.433-1.078l-0.055,0.998c0,0.662-1.056,1.688-1.826,2.438
C11.498,8.039,10.501,8.807,10.501,10z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Inbox" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 20 20" style="enable-background:new 0 0 20 20;" xml:space="preserve">
<path d="M19.253,9.542c-0.388-0.416-2.265-2.271-3.122-3.118C15.868,6.165,15.492,6,15.098,6H4.902c-0.394,0-0.77,0.165-1.033,0.424
C3.011,7.271,1.135,9.125,0.747,9.542c-0.485,0.521-0.723,0.902-0.624,1.449s0.466,2.654,0.556,3.074
C0.767,14.484,1.363,15,1.919,15h16.162c0.556,0,1.152-0.516,1.241-0.935c0.089-0.42,0.457-2.527,0.556-3.074
S19.739,10.062,19.253,9.542z M14.014,10.003c-0.101,0-0.193,0.052-0.238,0.133L12.966,12H7.034l-0.809-1.864
c-0.045-0.081-0.137-0.133-0.238-0.133H2.473L4.495,8h11.01l2.023,2.003H14.014z"/>
</svg>

Before

Width:  |  Height:  |  Size: 989 B

View file

@ -1,51 +1,51 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
S232.838,0,149.996,0z M234.752,201.789l-81.296,40.291c-1.089,0.539-2.272,0.812-3.455,0.812c-1.183,0-2.368-0.27-3.455-0.809
L65.25,201.792c-3.851-1.909-5.426-6.577-3.517-10.429c1.906-3.846,6.58-5.426,10.426-3.517l77.844,38.58l77.841-38.577
c3.844-1.911,8.517-0.335,10.426,3.514C240.178,195.211,238.603,199.88,234.752,201.789z M234.752,172.18l-81.296,40.291
c-1.089,0.539-2.272,0.812-3.455,0.812c-1.183,0-2.368-0.27-3.455-0.809L65.25,172.183c-3.851-1.909-5.426-6.577-3.517-10.429
c1.906-3.849,6.58-5.421,10.426-3.517l77.844,38.58l77.841-38.577c3.844-1.917,8.517-0.335,10.426,3.514
C240.178,165.603,238.603,170.271,234.752,172.18z M234.752,142.572l-81.296,40.291c-1.089,0.539-2.272,0.812-3.455,0.812
c-1.183,0-2.368-0.27-3.455-0.809L65.25,142.572c-3.851-1.909-5.426-6.577-3.517-10.426c1.906-3.849,6.58-5.426,10.426-3.517
l77.844,38.58l77.841-38.58c3.844-1.906,8.517-0.335,10.426,3.517C240.178,135.995,238.603,140.663,234.752,142.572z
M234.752,111.506l-81.296,40.289c-1.089,0.539-2.272,0.809-3.455,0.809c-1.183,0-2.368-0.27-3.455-0.809L65.25,111.506
c-2.648-1.312-4.326-4.015-4.326-6.972c0-2.957,1.675-5.659,4.326-6.972l81.299-40.294c2.176-1.079,4.733-1.079,6.909,0
l81.296,40.294c2.648,1.312,4.326,4.015,4.326,6.972C239.08,107.491,237.403,110.191,234.752,111.506z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
S232.838,0,149.996,0z M234.752,201.789l-81.296,40.291c-1.089,0.539-2.272,0.812-3.455,0.812c-1.183,0-2.368-0.27-3.455-0.809
L65.25,201.792c-3.851-1.909-5.426-6.577-3.517-10.429c1.906-3.846,6.58-5.426,10.426-3.517l77.844,38.58l77.841-38.577
c3.844-1.911,8.517-0.335,10.426,3.514C240.178,195.211,238.603,199.88,234.752,201.789z M234.752,172.18l-81.296,40.291
c-1.089,0.539-2.272,0.812-3.455,0.812c-1.183,0-2.368-0.27-3.455-0.809L65.25,172.183c-3.851-1.909-5.426-6.577-3.517-10.429
c1.906-3.849,6.58-5.421,10.426-3.517l77.844,38.58l77.841-38.577c3.844-1.917,8.517-0.335,10.426,3.514
C240.178,165.603,238.603,170.271,234.752,172.18z M234.752,142.572l-81.296,40.291c-1.089,0.539-2.272,0.812-3.455,0.812
c-1.183,0-2.368-0.27-3.455-0.809L65.25,142.572c-3.851-1.909-5.426-6.577-3.517-10.426c1.906-3.849,6.58-5.426,10.426-3.517
l77.844,38.58l77.841-38.58c3.844-1.906,8.517-0.335,10.426,3.517C240.178,135.995,238.603,140.663,234.752,142.572z
M234.752,111.506l-81.296,40.289c-1.089,0.539-2.272,0.809-3.455,0.809c-1.183,0-2.368-0.27-3.455-0.809L65.25,111.506
c-2.648-1.312-4.326-4.015-4.326-6.972c0-2.957,1.675-5.659,4.326-6.972l81.299-40.294c2.176-1.079,4.733-1.079,6.909,0
l81.296,40.294c2.648,1.312,4.326,4.015,4.326,6.972C239.08,107.491,237.403,110.191,234.752,111.506z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -1,44 +1,44 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
S232.835,0,149.996,0z M148.751,218.468c-12.893,0-23.342-11.082-23.342-24.764h46.685
C172.093,207.386,161.641,218.468,148.751,218.468z M170.413,180.695h-43.326c-1.167-12.753-31.476-23.871-31.476-55.747
c0-33.999,25.425-52.027,53.135-52.709h0.003c0.003,0,0.003,0,0.003,0c27.712,0.685,53.135,18.71,53.135,52.709
C201.889,156.824,171.58,167.942,170.413,180.695z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
S232.835,0,149.996,0z M148.751,218.468c-12.893,0-23.342-11.082-23.342-24.764h46.685
C172.093,207.386,161.641,218.468,148.751,218.468z M170.413,180.695h-43.326c-1.167-12.753-31.476-23.871-31.476-55.747
c0-33.999,25.425-52.027,53.135-52.709h0.003c0.003,0,0.003,0,0.003,0c27.712,0.685,53.135,18.71,53.135,52.709
C201.889,156.824,171.58,167.942,170.413,180.695z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 1,001 B

View file

@ -1,53 +1,53 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 299.997 299.997" style="enable-background:new 0 0 299.997 299.997;" xml:space="preserve">
<g>
<g>
<path d="M149.996,0C67.157,0,0.001,67.158,0.001,149.997c0,82.837,67.156,150,149.995,150s150-67.163,150-150
C299.996,67.158,232.835,0,149.996,0z M145.294,100.159h111.864c0.763,0,1.502,0.091,2.225,0.223l-62.648,36.017l-52.964-36.087
C144.275,100.25,144.77,100.159,145.294,100.159z M60.572,185.31v-15.558h49.921l-0.609,5.047l-0.112,0.931v0.936
c0,3.019,0.501,5.921,1.398,8.644H60.572z M112.293,154.842h-68.58V139.28h70.465L112.293,154.842z M117.571,111.218l-0.965,7.965
H28.585v-15.562h90.384C118.17,106.028,117.677,108.573,117.571,111.218z M249.375,188.852H137.513
c-3.348,0-6.378-1.351-8.58-3.538c0,0,0,0,0-0.003c-0.539-0.537-1.027-1.128-1.46-1.758c-0.01-0.016-0.029-0.031-0.039-0.047
c-0.402-0.594-0.737-1.232-1.032-1.891c-0.029-0.065-0.073-0.122-0.104-0.189c-0.265-0.622-0.451-1.284-0.609-1.956
c-0.029-0.117-0.083-0.223-0.106-0.34c-0.163-0.799-0.249-1.621-0.249-2.464l4.145-34.259l0.379-3.13l3.258-26.94
c0-0.77,0.093-1.515,0.231-2.243c0.016-0.078,0.008-0.163,0.026-0.241c0.01,0.005,0.018,0.013,0.029,0.021
c0.35-1.662,1.012-3.206,1.958-4.547v5.88l57.741,39.132c0.078,0.054,0.163,0.083,0.244,0.13c0.083,0.052,0.169,0.093,0.257,0.14
c0.456,0.233,0.923,0.42,1.401,0.545c0.052,0.013,0.099,0.021,0.15,0.031c0.524,0.124,1.056,0.2,1.582,0.2h0.005
c0.005,0,0.008,0,0.01,0c0.527,0,1.058-0.075,1.582-0.2c0.052-0.01,0.099-0.018,0.15-0.031c0.477-0.124,0.944-0.311,1.401-0.545
c0.086-0.047,0.171-0.088,0.257-0.14c0.08-0.047,0.163-0.075,0.244-0.13l68.792-39.716c0.08,0.565,0.171,1.128,0.171,1.717
l-7.781,64.329C261.559,183.4,256.105,188.852,249.375,188.852z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 299.997 299.997" style="enable-background:new 0 0 299.997 299.997;" xml:space="preserve">
<g>
<g>
<path d="M149.996,0C67.157,0,0.001,67.158,0.001,149.997c0,82.837,67.156,150,149.995,150s150-67.163,150-150
C299.996,67.158,232.835,0,149.996,0z M145.294,100.159h111.864c0.763,0,1.502,0.091,2.225,0.223l-62.648,36.017l-52.964-36.087
C144.275,100.25,144.77,100.159,145.294,100.159z M60.572,185.31v-15.558h49.921l-0.609,5.047l-0.112,0.931v0.936
c0,3.019,0.501,5.921,1.398,8.644H60.572z M112.293,154.842h-68.58V139.28h70.465L112.293,154.842z M117.571,111.218l-0.965,7.965
H28.585v-15.562h90.384C118.17,106.028,117.677,108.573,117.571,111.218z M249.375,188.852H137.513
c-3.348,0-6.378-1.351-8.58-3.538c0,0,0,0,0-0.003c-0.539-0.537-1.027-1.128-1.46-1.758c-0.01-0.016-0.029-0.031-0.039-0.047
c-0.402-0.594-0.737-1.232-1.032-1.891c-0.029-0.065-0.073-0.122-0.104-0.189c-0.265-0.622-0.451-1.284-0.609-1.956
c-0.029-0.117-0.083-0.223-0.106-0.34c-0.163-0.799-0.249-1.621-0.249-2.464l4.145-34.259l0.379-3.13l3.258-26.94
c0-0.77,0.093-1.515,0.231-2.243c0.016-0.078,0.008-0.163,0.026-0.241c0.01,0.005,0.018,0.013,0.029,0.021
c0.35-1.662,1.012-3.206,1.958-4.547v5.88l57.741,39.132c0.078,0.054,0.163,0.083,0.244,0.13c0.083,0.052,0.169,0.093,0.257,0.14
c0.456,0.233,0.923,0.42,1.401,0.545c0.052,0.013,0.099,0.021,0.15,0.031c0.524,0.124,1.056,0.2,1.582,0.2h0.005
c0.005,0,0.008,0,0.01,0c0.527,0,1.058-0.075,1.582-0.2c0.052-0.01,0.099-0.018,0.15-0.031c0.477-0.124,0.944-0.311,1.401-0.545
c0.086-0.047,0.171-0.088,0.257-0.14c0.08-0.047,0.163-0.075,0.244-0.13l68.792-39.716c0.08,0.565,0.171,1.128,0.171,1.717
l-7.781,64.329C261.559,183.4,256.105,188.852,249.375,188.852z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

@ -1,46 +1,46 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
S232.835,0,149.996,0z M133.314,149.997c0,3.133-0.571,6.111-1.569,8.901l41.868,20.142c4.819-5.275,11.731-8.595,19.436-8.595
c14.553,0,26.353,11.796,26.353,26.348c0,14.555-11.803,26.356-26.359,26.356c-14.553,0-26.359-11.801-26.359-26.356
c0-1.395,0.145-2.757,0.353-4.09l-44.568-21.436c-4.357,3.188-9.71,5.089-15.52,5.089c-14.555,0-26.356-11.796-26.356-26.361
c0-14.55,11.801-26.348,26.356-26.348c5.81,0,11.165,1.901,15.523,5.086l44.571-21.431c-0.21-1.336-0.353-2.692-0.353-4.09
c0-14.558,11.803-26.356,26.359-26.356c14.553,0,26.356,11.798,26.356,26.356c0,14.555-11.803,26.356-26.356,26.356
c-7.7,0-14.617-3.328-19.436-8.598l-41.868,20.134C132.744,143.89,133.314,146.875,133.314,149.997z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve">
<g>
<g>
<path d="M149.996,0C67.157,0,0.001,67.161,0.001,149.997S67.157,300,149.996,300s150.003-67.163,150.003-150.003
S232.835,0,149.996,0z M133.314,149.997c0,3.133-0.571,6.111-1.569,8.901l41.868,20.142c4.819-5.275,11.731-8.595,19.436-8.595
c14.553,0,26.353,11.796,26.353,26.348c0,14.555-11.803,26.356-26.359,26.356c-14.553,0-26.359-11.801-26.359-26.356
c0-1.395,0.145-2.757,0.353-4.09l-44.568-21.436c-4.357,3.188-9.71,5.089-15.52,5.089c-14.555,0-26.356-11.796-26.356-26.361
c0-14.55,11.801-26.348,26.356-26.348c5.81,0,11.165,1.901,15.523,5.086l44.571-21.431c-0.21-1.336-0.353-2.692-0.353-4.09
c0-14.558,11.803-26.356,26.359-26.356c14.553,0,26.356,11.798,26.356,26.356c0,14.555-11.803,26.356-26.356,26.356
c-7.7,0-14.617-3.328-19.436-8.598l-41.868,20.134C132.744,143.89,133.314,146.875,133.314,149.997z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Sound_mute" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
<path d="M14.201,9.194c1.389,1.883,1.818,3.517,1.559,3.777c-0.26,0.258-1.893-0.17-3.778-1.559l-5.526,5.527
c4.186,1.838,9.627-2.018,10.605-2.996c0.925-0.922,0.097-3.309-1.856-5.754L14.201,9.194z M8.667,7.941
c-1.099-1.658-1.431-3.023-1.194-3.26c0.233-0.234,1.6,0.096,3.257,1.197l1.023-1.025C9.489,3.179,7.358,2.519,6.496,3.384
C5.568,4.31,2.048,9.261,3.265,13.341L8.667,7.941z M18.521,1.478c-0.39-0.391-1.023-0.391-1.414,0L1.478,17.108
c-0.391,0.391-0.391,1.024,0,1.414c0.391,0.391,1.023,0.391,1.414,0L18.521,2.892C18.912,2.501,18.912,1.868,18.521,1.478z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1,020 B

View file

@ -1,45 +1,45 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 299.99 299.99" style="enable-background:new 0 0 299.99 299.99;" xml:space="preserve">
<g>
<g>
<path d="M149.995,0C67.158,0,0,67.156,0,149.995S67.158,299.99,149.995,299.99c82.839,0,149.995-67.156,149.995-149.995
S232.834,0,149.995,0z M89.481,211.219l-37.176,9.959l10.177-37.973c-7.01-12.05-11.051-26.05-11.051-40.997
c0-45.074,36.541-81.618,81.62-81.618c45.071,0,81.615,36.544,81.615,81.618c0,45.074-36.544,81.62-81.615,81.62
C117.023,223.832,102.091,219.199,89.481,211.219z M247.76,236.976l-33.818-9.059c-11.477,7.257-25.057,11.474-39.63,11.474
c-10.39,0-20.271-2.142-29.248-5.999c45.064-5.9,79.981-44.527,79.981-91.177c0-13.518-2.959-26.351-8.216-37.926
c19.182,13.427,31.73,35.67,31.73,60.853c0,13.596-3.673,26.33-10.05,37.293L247.76,236.976z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 299.99 299.99" style="enable-background:new 0 0 299.99 299.99;" xml:space="preserve">
<g>
<g>
<path d="M149.995,0C67.158,0,0,67.156,0,149.995S67.158,299.99,149.995,299.99c82.839,0,149.995-67.156,149.995-149.995
S232.834,0,149.995,0z M89.481,211.219l-37.176,9.959l10.177-37.973c-7.01-12.05-11.051-26.05-11.051-40.997
c0-45.074,36.541-81.618,81.62-81.618c45.071,0,81.615,36.544,81.615,81.618c0,45.074-36.544,81.62-81.615,81.62
C117.023,223.832,102.091,219.199,89.481,211.219z M247.76,236.976l-33.818-9.059c-11.477,7.257-25.057,11.474-39.63,11.474
c-10.39,0-20.271-2.142-29.248-5.999c45.064-5.9,79.981-44.527,79.981-91.177c0-13.518-2.959-26.351-8.216-37.926
c19.182,13.427,31.73,35.67,31.73,60.853c0,13.596-3.673,26.33-10.05,37.293L247.76,236.976z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

View file

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Windows_Store" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
<path d="M9.5,3.2410278V9.5H18V2L9.5,3.2410278z M2,9.5h6.5V3.3870239L2,4.3359985V9.5z M9.5,16.7589722L18,18v-7.5H9.5V16.7589722z
M2,15.6640015l6.5,0.9489746V10.5H2V15.6640015z"/>
</svg>

Before

Width:  |  Height:  |  Size: 639 B

View file

@ -1 +0,0 @@
docker run --rm -v "$PWD:/src" -p 4000:4000 -p 35729:35729 markkimsal/jekyll-plus

161
documentation/SUMMARY.md Normal file
View file

@ -0,0 +1,161 @@
# Table of contents
* [Introduction to DNSControl](index.md)
## Getting Started
* [Overview](getting-started.md)
* [Examples](examples.md)
* [Migrating zones to DNSControl](migrating.md)
* [TypeScript autocomplete and type checking](typescript.md)
## Language Reference
* [JavaScript DSL](js.md)
* Top Level Functions
* [D](functions/global/D.md)
* [DEFAULTS](functions/global/DEFAULTS.md)
* [DOMAIN_ELSEWHERE](functions/global/DOMAIN_ELSEWHERE.md)
* [DOMAIN_ELSEWHERE_AUTO](functions/global/DOMAIN_ELSEWHERE_AUTO.md)
* [D_EXTEND](functions/global/D_EXTEND.md)
* [FETCH](functions/global/FETCH.md)
* [IP](functions/global/IP.md)
* [NewDnsProvider](functions/global/NewDnsProvider.md)
* [NewRegistrar](functions/global/NewRegistrar.md)
* [PANIC](functions/global/PANIC.md)
* [REV](functions/global/REV.md)
* [getConfiguredDomains](functions/global/getConfiguredDomains.md)
* [require](functions/global/require.md)
* [require_glob](functions/global/require_glob.md)
* Domain Modifiers
* [A](functions/domain/A.md)
* [AAAA](functions/domain/AAAA.md)
* [ALIAS](functions/domain/ALIAS.md)
* [AUTODNSSEC_OFF](functions/domain/AUTODNSSEC_OFF.md)
* [AUTODNSSEC_ON](functions/domain/AUTODNSSEC_ON.md)
* [CAA](functions/domain/CAA.md)
* [CNAME](functions/domain/CNAME.md)
* [DS](functions/domain/DS.md)
* [DefaultTTL](functions/domain/DefaultTTL.md)
* [DnsProvider](functions/domain/DnsProvider.md)
* [FRAME](functions/domain/FRAME.md)
* [IGNORE](functions/domain/IGNORE.md)
* [IGNORE_NAME](functions/domain/IGNORE_NAME.md)
* [IGNORE_TARGET](functions/domain/IGNORE_TARGET.md)
* [IMPORT_TRANSFORM](functions/domain/IMPORT_TRANSFORM.md)
* [INCLUDE](functions/domain/INCLUDE.md)
* [MX](functions/domain/MX.md)
* [NAMESERVER](functions/domain/NAMESERVER.md)
* [NAMESERVER_TTL](functions/domain/NAMESERVER_TTL.md)
* [NO_PURGE](functions/domain/NO_PURGE.md)
* [NS](functions/domain/NS.md)
* [PTR](functions/domain/PTR.md)
* [PURGE](functions/domain/PURGE.md)
* [SOA](functions/domain/SOA.md)
* [SRV](functions/domain/SRV.md)
* [SSHFP](functions/domain/SSHFP.md)
* [TLSA](functions/domain/TLSA.md)
* [TXT](functions/domain/TXT.md)
* [URL](functions/domain/URL.md)
* [URL301](functions/domain/URL301.md)
* Service Provider specific
* Akamai Edge Dns
* [AKAMAICDN](functions/domain/AKAMAICDN.md)
* Amazon Route 53
* [R53_ALIAS](functions/domain/R53_ALIAS.md)
* Azure DNS
* [AZURE_ALIAS](functions/domain/AZURE_ALIAS.md)
* Cloudflare DNS
* [CF_REDIRECT](functions/domain/CF_REDIRECT.md)
* [CF_TEMP_REDIRECT](functions/domain/CF_TEMP_REDIRECT.md)
* [CF_WORKER_ROUTE](functions/domain/CF_WORKER_ROUTE.md)
* ClouDNS
* [CLOUDNS_WR](functions/domain/CLOUDNS_WR.md)
* NS1
* [NS1_URLFWD](functions/domain/NS1_URLFWD.md)
* Record Modifiers
* [CAA_BUILDER](functions/record/CAA_BUILDER.md)
* [DMARC_BUILDER](functions/record/DMARC_BUILDER.md)
* [SPF_BUILDER](functions/record/SPF_BUILDER.md)
* [TTL](functions/record/TTL.md)
* Service Provider specific
* Amazon Route 53
* [R53_ZONE](functions/record/R53_ZONE.md)
* [Why CNAME/MX/NS targets require a "dot"](why-the-dot.md)
## Service Providers
* [Providers](providers.md)
* [Akamai Edge DNS](providers/akamaiedgedns.md)
* [AutoDNS](providers/autodns.md)
* [AXFR+DDNS](providers/axfrddns.md)
* [Azure DNS](providers/azure_dns.md)
* [BIND](providers/bind.md)
* [Cloudflare](providers/cloudflareapi.md)
* [ClouDNS](providers/cloudns.md)
* [CSC Global](providers/cscglobal.md)
* [deSEC](providers/desec.md)
* [DigitalOcean](providers/digitalocean.md)
* [DNSimple](providers/dnsimple.md)
* [DNS Made Simple](providers/dnsmadeeasy.md)
* [DNS-over-HTTPS](providers/dnsoverhttps.md)
* [DOMAINNAMESHOP](providers/domainnameshop.md)
* [easyname](providers/easyname.md)
* [Gandi_v5](providers/gandi_v5.md)
* [Google Cloud DNS](providers/gcloud.md)
* [Gcore](providers/gcore.md)
* [Hurricane Electric DNS](providers/hedns.md)
* [Hetzner DNS Console](providers/hetzner.md)
* [HEXONET](providers/hexonet.md)
* [hosting.de](providers/hostingde.md)
* [Internet.bs](providers/internetbs.md)
* [INWX](providers/inwx.md)
* [Linode](providers/linode.md)
* [Microsoft DNS Server on Microsoft Windows Server](providers/msdns.md)
* [Namecheap](providers/namecheap.md)
* [Name.com](providers/namedotcom.md)
* [Netcup](providers/netcup.md)
* [Netlify](providers/netlify.md)
* [NS1](providers/ns1.md)
* [Oracle Cloud](providers/oracle.md)
* [OVH](providers/ovh.md)
* [Packetframe](providers/packetframe.md)
* [Porkbun](providers/porkbun.md)
* [PowerDNS](providers/powerdns.md)
* [Amazon Route 53](providers/route53.md)
* [RWTH DNS-Admin](providers/rwth.md)
* [SoftLayer DNS](providers/softlayer.md)
* [TransIP](providers/transip.md)
* [Vultr](providers/vultr.md)
## Commands
* [creds.json](creds-json.md)
* [check-creds](check-creds.md)
* [get-certs](get-certs.md)
* [get-zones](get-zones.md)
## Advanced features
* [CI/CD example for GitLab](ci-cd-gitlab.md)
* [CLI variables](cli-variables.md)
* [Nameservers and Delegations](nameservers.md)
* [Notifications](notifications.md)
* [Useful code tricks](code-tricks.md)
## Developer info
* [ALIAS Records](alias.md)
* [Bug Triage Process](bug-triage.md)
* [Bring-Your-Own-Secrets for automated testing](byo-secrets.md)
* [Writing new DNS providers](writing-providers.md)
* [Creating new DNS Resource Types (rtypes)](adding-new-rtypes.md)
* [TXT record testing](testing-txt-records.md)
* [Unit Testing DNS Data](unittests.md)
* [DNSControl is an opinionated system](opinions.md)
## Release
* [How to build and ship a release](release-engineering.md)
* [Changelog v3.16.0](v316.md)
* [GitHub releases](https://github.com/StackExchange/dnscontrol/releases/latest)

View file

@ -1,8 +1,3 @@
---
layout: default
title: Creating new DNS Resource Types (rtypes)
---
# Creating new DNS Resource Types (rtypes)
Everyone is familiar with A, AAAA, CNAME, NS and other Rtypes.
@ -141,7 +136,7 @@ list.
Each `testgroup()` is a named list of tests.
```js
```javascript
testgroup("MX", <<< 1
tc("MX record", mx("@", 5, "foo.com.")), <<< 2
tc("Change MX pref", mx("@", 10, "foo.com.")), <<< 3
@ -223,12 +218,10 @@ tests, please ask!
## Step 8: Write documentation
Add a new Markdown file to `docs/_functions/domain`. Copy an existing file (`CNAME.md` is a good example). The section between the lines of `---` is called the front matter and it has the following keys:
Add a new Markdown file to `docs/functions/domain`. Copy an existing file (`CNAME.md` is a good example). The section between the lines of `---` is called the front matter and it has the following keys:
- `name`: The name of the record. This should match the file name and the name of the record in `helpers.js`.
- `parameters`: A list of parameter names, in order. Feel free to use spaces in the name if necessary. Your last parameter should be `modifiers...` to allow arbitrary modifiers like `TTL` to be applied to your record.
- `parameter_types`: an object with parameter names as keys and TypeScript type names as values. Check out existing record documentation if youre not sure to put for a parameter. Note that this isnt displayed on the website, its only used to generate the `.d.ts` file.
{% raw %}
The rest of the file is the documentation. You can use Markdown syntax to format the text. Use the `{% capture example %}` format to set up a collapsible code block. You can also use it multiple times to show multiple examples.
{% endraw %}
The rest of the file is the documentation. You can use Markdown syntax to format the text.

View file

@ -1,8 +1,3 @@
---
layout: default
title: ALIAS Records
---
# ALIAS Records
ALIAS records are not widely standardized across DNS providers. Some (Route 53, DNSimple) have a native ALIAS record type. Others (Cloudflare) implement transparent CNAME flattening.

View file

Before

Width:  |  Height:  |  Size: 755 KiB

After

Width:  |  Height:  |  Size: 755 KiB

View file

Before

Width:  |  Height:  |  Size: 750 KiB

After

Width:  |  Height:  |  Size: 750 KiB

View file

Before

Width:  |  Height:  |  Size: 326 KiB

After

Width:  |  Height:  |  Size: 326 KiB

View file

Before

Width:  |  Height:  |  Size: 618 KiB

After

Width:  |  Height:  |  Size: 618 KiB

View file

Before

Width:  |  Height:  |  Size: 638 KiB

After

Width:  |  Height:  |  Size: 638 KiB

View file

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

View file

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 84 KiB

View file

@ -1,13 +1,8 @@
---
layout: default
title: Bug Triage Process
---
# Who to assign bugs to?
If an issue is related to a particular provider, assign it to
the person responsible for the provider, as listed in
[Providers]({{site.github.url}}/provider-list)'s "Maintainers of
[Providers](providers.md)'s "Maintainers of
contributed providers".
Otherwise leave it unassigned until someone grabs it.
@ -32,7 +27,7 @@ priority:
1. Respond to the issue with the message below
1. Close the issue
The [Providers]({{site.github.url}}/provider-list) page is generated
The [Providers](providers.md) page is generated
automatically from all the issues tagged `provider-request`:
1. "Requested providers: state=closed, tagged `provider-request`
@ -45,7 +40,7 @@ Message to requester:
Thank you for requesting this provider!
I've tagged this issue as a provider-request. It will (soon) be listed as a "requested provider" on the provider list web page:
https://stackexchange.github.io/dnscontrol/provider-list
https://docs.dnscontrol.org/service-providers/providers
I will now close the issue. I know that's a bit confusing, but it will remain on the "requested provider" list.
@ -55,6 +50,6 @@ We encourage you to try adding this provider yourself. We've tried to
make the process as friendly as possible. Many people have reported
that adding a provider was their first experience writing Go. The
process is documented here:
https://stackexchange.github.io/dnscontrol/writing-providers
https://docs.dnscontrol.org/developer-info/writing-providers
If you need assistance, please speak up in this issue and someone will get back to you ASAP.
```

View file

@ -1,8 +1,3 @@
---
layout: default
title: Bring-Your-Own-Secrets for automated testing
---
# Bring-Your-Own-Secrets for automated testing
Goal: Enable automated integration testing without accidentally
@ -52,7 +47,7 @@ gets its secrets from TomOnTime's secrets.
Our automated integration tests leverages this info to have tests
only run if they have access to the secrets they will need.
# How it works:
# How it works
Tests are executed if `*_DOMAIN` exists. If the value is empty or
unset, the test is skipped. If a test doesn't require secrets, the
@ -79,15 +74,16 @@ In this branch, edit `.github/workflows/build.yml`:
to the matrix of providers. Technically you are adding to the list
at `jobs.integration-tests.strategy.matrix.provider`.
```yaml
matrix:
provider:
...
- DIGITALOCEAN
- FANCYDNS <<< NEW ITEM ADDED HERE
- GANDI_V5
- INWX
```
{% code title=".github/workflows/build.yml" %}
```diff
matrix:
provider:
- DIGITALOCEAN
+ - FANCYDNS
- GANDI_V5
- INWX
```
{% endcode %}
2. Add your test's env:
@ -103,28 +99,28 @@ Please replicate the formatting of the existing entries:
* The remaining variables are sorted lexicographically (what nerds call alphabetical order).
```yaml
FANCYDNS_DOMAIN: ${{ secrets.FANCYDNS_DOMAIN }}
FANCYDNS_KEY: ${{ secrets.FANCYDNS_KEY }}
FANCYDNS_USER: ${{ secrets.FANCYDNS_USER }}
FANCYDNS_DOMAIN: ${{ secrets.FANCYDNS_DOMAIN }}
FANCYDNS_KEY: ${{ secrets.FANCYDNS_KEY }}
FANCYDNS_USER: ${{ secrets.FANCYDNS_USER }}
```
# Examples
Let's look at three examples:
## Example 1:
## Example 1
The `BIND` integration tests do not require any secrets because it
simply generates files locally.
```yaml
BIND_DOMAIN: example.com
BIND_DOMAIN: example.com
```
The existence of `BIND_DOMAIN`, and the fact that the value is
available to all, means these tests will run for everyone.
## Example 2:
## Example 2
The `AZURE_DNS` provider requires many settings. Since
`AZURE_DNS_DOMAIN` comes from GHA's secrets storage, we can be assured
@ -140,15 +136,15 @@ this is not true for you, please feel free to submit a PR that turns
it into a secret.
```yaml
AZURE_DNS_DOMAIN: ${{ secrets.AZURE_DNS_DOMAIN }}
AZURE_DNS_CLIENT_ID: ${{ secrets.AZURE_DNS_CLIENT_ID }}
AZURE_DNS_CLIENT_SECRET: ${{ secrets.AZURE_DNS_CLIENT_SECRET }}
AZURE_DNS_RESOURCE_GROUP: DNSControl
AZURE_DNS_SUBSCRIPTION_ID: ${{ secrets.AZURE_DNS_SUBSCRIPTION_ID }}
AZURE_DNS_TENANT_ID: ${{ secrets.AZURE_DNS_TENANT_ID }}
AZURE_DNS_DOMAIN: ${{ secrets.AZURE_DNS_DOMAIN }}
AZURE_DNS_CLIENT_ID: ${{ secrets.AZURE_DNS_CLIENT_ID }}
AZURE_DNS_CLIENT_SECRET: ${{ secrets.AZURE_DNS_CLIENT_SECRET }}
AZURE_DNS_RESOURCE_GROUP: DNSControl
AZURE_DNS_SUBSCRIPTION_ID: ${{ secrets.AZURE_DNS_SUBSCRIPTION_ID }}
AZURE_DNS_TENANT_ID: ${{ secrets.AZURE_DNS_TENANT_ID }}
```
## Example 3:
## Example 3
The HEXONET integration tests require secrets, but HEXONET provides an
Operational Test and Evaluation (OT&E) environment with some "fake"
@ -160,14 +156,15 @@ secrets, we hard-code them into the `build.yml` file. Since
these tests. (We are grateful to HEXONET for this public service!)
```yaml
HEXONET_DOMAIN: yodream.com
HEXONET_ENTITY: OTE
HEXONET_PW: test.passw0rd
HEXONET_UID: test.user
HEXONET_DOMAIN: yodream.com
HEXONET_ENTITY: OTE
HEXONET_PW: test.passw0rd
HEXONET_UID: test.user
```
NOTE: The above credentials are [known to the public]({{site.github.url}}/providers/hexonet).
{% hint style="info" %}
**NOTE**: The above credentials are [known to the public](providers/hexonet.md).
{% endhint %}
# Caveats

View file

@ -1,8 +1,3 @@
---
layout: default
title: Check-Creds subcommand
---
# check-creds
This is a stand-alone utility to help verify entries in `creds.json`.
@ -10,6 +5,7 @@ This is a stand-alone utility to help verify entries in `creds.json`.
The command does a trivia operation to verify credentials. If
successful, a list of zones will be output (which may be an empty list). If the credentials or other problems prevent this operation from executing, the exit code will be non-zero and hopefully verbose error messages will be output.
```text
Syntax:
dnscontrol check-creds [command options] credkey provider
@ -20,19 +16,31 @@ Syntax:
ARGUMENTS:
credkey: The name used in creds.json (first parameter to NewDnsProvider() in dnsconfig.js)
provider: The name of the provider (second parameter to NewDnsProvider() in dnsconfig.js)
```
Starting in v3.16, "provider" is optional. If it is omitted (or the placeholder value `-` is used), the `TYPE` specified in `creds.json` will be used instead. A warning will be displayed with advice on how to remain compatible with v4.0.
Starting in [v3.16](v316.md), "provider" is optional. If it is omitted (or the placeholder value `-` is used), the `TYPE` specified in `creds.json` will be used instead. A warning will be displayed with advice on how to remain compatible with v4.0.
Starting in v4.0, the "provider" argument is expected to go away.
EXAMPLES:
dnscontrol check-creds myr53 ROUTE53
Starting in v3.16:
dnscontrol check-creds myr53
dnscontrol check-creds myr53 -
dnscontrol check-creds myr53 ROUTE53
## Examples
```shell
dnscontrol check-creds myr53 ROUTE53
```
Starting in [v3.16](v316.md):
```shell
dnscontrol check-creds myr53
dnscontrol check-creds myr53 -
dnscontrol check-creds myr53 ROUTE53
```
Starting in v4.0:
dnscontrol check-creds myr53
```shell
dnscontrol check-creds myr53
```
This command is the same as `get-zones` with `--format=nameonly`

View file

@ -1,11 +1,6 @@
---
layout: default
title: Gitlab CI/CD example
---
# Gitlab CI/CD example
Before discussing the Gitlab CI/CD setup, let's assume you already have a working DNSControl setup. Aren't you there yet? Then first check out the '[Getting Started](https://stackexchange.github.io/dnscontrol/getting-started)' section.
Before discussing the Gitlab CI/CD setup, let's assume you already have a working DNSControl setup. Aren't you there yet? Then first check out the '[Getting Started](getting-started.md)' section.
## DNSControl - Demo setup
@ -19,7 +14,7 @@ This is based on:
For convenience, both configuration files are shown below.
- `dnsconfig.js`
```js
```javascript
var PROVIDER_NONE = NewRegistrar('none');
var PROVIDER_TRANSIP = NewDnsProvider('transip', '-');
@ -61,9 +56,15 @@ hY/gnT/MmXXko3YAcI4eQL8=
_Example of variable `$TRANSIP_PRIVATE_KEY` contents._
<img src="{{ site.github.url }}/assets/ci-cd-gitlab/settings-ci-cd-variables.png" alt="Gitlab CI/CD variables" style="width: 900px;"/>
<figure>
<img src="https://raw.githubusercontent.com/stackexchange/dnscontrol/master/docs/assets/ci-cd-gitlab/settings-ci-cd-variables.png" alt="Gitlab CI/CD variables">
<figcaption><p>Gitlab CI/CD variables</p></figcaption>
</figure>
<img src="{{ site.github.url }}/assets/ci-cd-gitlab/settings-ci-cd-variables-insert.png" alt="Insert Gitlab CI/CD variable TRANSIP_PRIVATE_KEY" style="width: 900px;"/>
<figure>
<img src="https://raw.githubusercontent.com/stackexchange/dnscontrol/master/docs/assets/ci-cd-gitlab/settings-ci-cd-variables-insert.png" alt="Insert Gitlab CI/CD variable TRANSIP_PRIVATE_KEY">
<figcaption><p>Insert Gitlab CI/CD variable TRANSIP_PRIVATE_KEY</p></figcaption>
</figure>
## Gitlab CI - DNSControl preview
@ -134,9 +135,15 @@ $ /usr/local/bin/dnscontrol preview
Done. 1 corrections.
```
<img src="{{ site.github.url }}/assets/ci-cd-gitlab/ci-cd-job-output-dnscontrol-preview.png" alt="CI/CD job output for DNSControl preview" style="width: 900px;"/>
_<https://gitlab.com/cafferata/dnscontrol/-/jobs/3115895010>_
<figure>
<img src="https://raw.githubusercontent.com/stackexchange/dnscontrol/master/docs/assets/ci-cd-gitlab/ci-cd-job-output-dnscontrol-preview.png" alt="CI/CD job output for DNSControl preview">
<figcaption>
<p>
<a href="https://gitlab.com/cafferata/dnscontrol/-/jobs/3115895010">https://gitlab.com/cafferata/dnscontrol/-/jobs/3115895010</a><br>
CI/CD job output for DNSControl preview
</p>
</figcaption>
</figure>
## Gitlab CI - DNSControl push
@ -166,7 +173,10 @@ What does this (new) YAML configuration mean?
- The `dnscontrol push` is run within the Gitlab CI [predefined stage](https://docs.gitlab.com/ee/ci/yaml/#stages) `deploy`.
- This only happens when you start a Gitlab pipeline from the [Gitlab web interface](https://gitlab.com/cafferata/dnscontrol/-/pipelines/new) for the default branch (e.g. `main`).
<img src="{{ site.github.url }}/assets/ci-cd-gitlab/ci-cd-pipelines-new.png" alt="Start new CI/CD pipeline from the Gitlab web interface" style="width: 900px;"/>
<figure>
<img src="https://raw.githubusercontent.com/stackexchange/dnscontrol/master/docs/assets/ci-cd-gitlab/ci-cd-pipelines-new.png" alt="Start new CI/CD pipeline from the Gitlab web interface">
<figcaption><p>Start new CI/CD pipeline from the Gitlab web interface</p></figcaption>
</figure>
When we start the new [Gitlab pipeline](https://gitlab.com/cafferata/dnscontrol/-/pipelines/656368384) from the [Gitlab web interface](https://gitlab.com/cafferata/dnscontrol/-/pipelines/new), we see the Gitlab job [dnscontrol-push](https://gitlab.com/cafferata/dnscontrol/-/jobs/3115896199) which makes the changes within the DNS provider TransIP.
@ -187,9 +197,15 @@ SUCCESS!
Done. 1 corrections.
```
<img src="{{ site.github.url }}/assets/ci-cd-gitlab/ci-cd-job-output-dnscontrol-push.png" alt="CI/CD job output for DNSControl push" style="width: 900px;"/>
_<https://gitlab.com/cafferata/dnscontrol/-/jobs/3115896199>_
<figure>
<img src="https://raw.githubusercontent.com/stackexchange/dnscontrol/master/docs/assets/ci-cd-gitlab/ci-cd-job-output-dnscontrol-push.png" alt="CI/CD job output for DNSControl push">
<figcaption>
<p>
<a href="https://gitlab.com/cafferata/dnscontrol/-/jobs/3115896199">https://gitlab.com/cafferata/dnscontrol/-/jobs/3115896199</a><br>
CI/CD job output for DNSControl push
</p>
</figcaption>
</figure>
## Gitlab CI - Duplicate YAML configuration

View file

@ -1,7 +1,3 @@
---
layout: default
title: CLI variables
---
# CLI variables
You can pass variables into your configuration from the command line using the `-v key=value` flag. There is also a mechanism called `CLI_DEFAULTS` which lets you easily set the defaults on variables that are otherwise controlled from the command line.
@ -20,7 +16,7 @@ This would set the variable with the name `testKey` and the value of `testValue`
The `CLI_DEFAULTS` feature is used to define default values for when a variable is not defined on the command line.
```js
```javascript
CLI_DEFAULTS({
"variableName": "defaultValue",
});
@ -39,8 +35,8 @@ In this configuration:
* `dnscontrol push` would generate the external (default) view.
* `dnscontrol push -v view=internal` would generate the internal view.
```js
// See https://stackexchange.github.io/dnscontrol/cli-variables
```javascript
// See https://docs.dnscontrol.org/advanced-features/cli-variables
CLI_DEFAULTS({
"view": "external",
});
@ -74,8 +70,8 @@ In this configuration:
* `dnscontrol push` would generate the normal configuration.
* `dnscontrol push -v emergency=true` would generate the emergency configuration.
```js
// See https://stackexchange.github.io/dnscontrol/cli-variables
```javascript
// See https://docs.dnscontrol.org/advanced-features/cli-variables
CLI_DEFAULTS({
"emergency": false,
});

View file

@ -1,17 +1,12 @@
---
layout: default
title: Useful code tricks
---
# "Builders"
Problem: It is difficult to get CAA and other records exactly right.
Solution: Use a "builder" to construct it for you.
* [CAA Builder]({{site.github.url}}/js#CAA_BUILDER)
* [DMARC Builder]({{site.github.url}}/js#DMARC_BUILDER)
* [SPF Optimizer]({{site.github.url}}/js#SPF_BUILDER)
* [CAA Builder](functions/record/CAA_BUILDER.md)
* [DMARC Builder](functions/record/DMARC_BUILDER.md)
* [SPF Optimizer](functions/record/SPF_BUILDER.md)
# Repeat records in many domains (macros)
@ -25,7 +20,7 @@ Domains that use Google G-Suite require a specific list of MX
records, plus there are some CNAMEs that are useful (but we only
want the CNAMEs on a subset of domains).
```js
```javascript
var GOOGLE_APPS_DOMAIN_MX = [
MX("@", 1, "aspmx.l.google.com."),
MX("@", 5, "alt1.aspmx.l.google.com."),
@ -64,7 +59,7 @@ records.
Solution: Use a loop. (Note: See caveats below.)
```js
```javascript
// The domains are parked. Use the exact same records for each.
_.each(
[
@ -81,7 +76,7 @@ _.each(
);
```
# Caveats about getting too fancy.
# Caveats about getting too fancy
The `dnsconfig.js` language is JavaScript. On the plus side, this means
you can use loops and variables and anything else you want.
@ -140,5 +135,5 @@ domain exists, who requested it, any associated ticket numbers, and so
on.
We also comment the individual parts of a record. Look at the [SPF
Optimizer]({{site.github.url}}/js#SPF_BUILDER) example. Each part of
Optimizer](functions/record/SPF_BUILDER.md) example. Each part of
the SPF record has a comment.

View file

@ -1,8 +1,3 @@
---
layout: default
title: creds.json file format
---
# creds.json
When DNSControl interacts with a provider, any API keys, credentials, or other
@ -46,16 +41,16 @@ Here's a sample file:
* ...may include any JSON string value including the empty string.
* If a subkey starts with `$`, it is taken as an env variable. In the above example, `$HEXONET_APILOGIN` would be replaced by the value of the environment variable `HEXONET_APILOGIN` or the empty string if no such environment variable exists.
## New in v3.16:
## New in v3.16
The special subkey "TYPE" is used to indicate the provider type (NONE,
CLOUDFLAREAPI, GCLOUD, etc).
Prior to v3.16, the provider type is specified as the second argument
Prior to [v3.16](v316.md), the provider type is specified as the second argument
to `NewRegistrar()` and `NewDnsProvider()` in `dnsconfig.js` or as a
command-line argument in tools such as `dnscontrol get-zones`.
Starting in v3.16, `NewRegistrar()`, and `NewDnsProvider()` no longer
Starting in [v3.16](v316.md), `NewRegistrar()`, and `NewDnsProvider()` no longer
require the provider type to be specified. It may be specified for
backwards compatibility, but a warning will be generated with a
suggestion of how to upgrade to the 4.0 format. Likewise,
@ -105,22 +100,35 @@ Usually this is to simply remove the second parameter to the function.
Examples:
```js
OLD: var REG_THING = NewRegistrar("thing", "THING");
NEW: var REG_THING = NewRegistrar("thing");
OLD: var REG_THING = NewRegistrar("thing", "THING", { settings: "value" } );
NEW: var REG_THING = NewRegistrar("thing", { settings: "value" } );
OLD: var DNS_MYGANDI = NewDnsProvider("mygandi", "GANDI_V5");
NEW: var DNS_MYGANDI = NewDnsProvider("mygandi");
OLD: var DNS_MYGANDI = NewDnsProvider("mygandi", "GANDI_V5", { settings: "value" } );
NEW: var DNS_MYGANDI = NewDnsProvider("mygandi", { settings: "value" } );
{% code title="dnsconfig.js" %}
```diff
-var REG_THING = NewRegistrar("thing", "THING");
+var REG_THING = NewRegistrar("thing");
```
{% endcode %}
Starting with v3.16 use of an OLD format will trigger warnings with suggestions on how to adopt the NEW format.
{% code title="dnsconfig.js" %}
```diff
-var REG_THING = NewRegistrar("thing", "THING", { settings: "value" } );
+var REG_THING = NewRegistrar("thing", { settings: "value" } );
```
{% endcode %}
{% code title="dnsconfig.js" %}
```diff
-var DNS_MYGANDI = NewDnsProvider("mygandi", "GANDI_V5");
+var DNS_MYGANDI = NewDnsProvider("mygandi");
```
{% endcode %}
{% code title="dnsconfig.js" %}
```diff
-var DNS_MYGANDI = NewDnsProvider("mygandi", "GANDI_V5", { settings: "value" } );
+var DNS_MYGANDI = NewDnsProvider("mygandi", { settings: "value" } );
```
{% endcode %}
Starting with [v3.16](v316.md) use of an OLD format will trigger warnings with suggestions on how to adopt the NEW format.
Starting with v4.0 support for the OLD format may be reported as an error.
@ -155,7 +163,7 @@ invalid. Perhaps you meant to specify a `-` on a command-line tool?
The fix is to change the `TYPE` subkey entry in `creds.json` from `-` to
a valid service provider identifier, as listed
in [the service provider list](https://stackexchange.github.io/dnscontrol/provider-list).
in [the service provider list](providers.md).
## Using a different file name
@ -173,7 +181,8 @@ The `--creds` flag allows you to specify a different file name.
### Example commands
Following commands would execute a program/script:
``` bash
```shell
dnscontrol preview --creds !./creds.sh
dnscontrol preview --creds ./creds.sh
dnscontrol preview --creds creds.sh
@ -183,7 +192,8 @@ dnscontrol preview --creds /some/absolute/path/creds.sh
```
Following commands would execute a shell command:
``` bash
```shell
dnscontrol preview --creds "!op inject -i creds.json.tpl"
```

View file

@ -1,16 +1,6 @@
---
layout: default
title: Examples
---
# Examples
* TOC
{:toc}
## Typical DNS Records
```js
```javascript
D('example.com', REG, DnsProvider('GCLOUD'),
A('@', '1.2.3.4'), // The naked or 'apex' domain.
A('server1', '2.3.4.5'),
@ -27,7 +17,7 @@ D('example.com', REG, DnsProvider('GCLOUD'),
## Set TTLs
```js
```javascript
var mailTTL = TTL('1h');
D('example.com', registrar,
@ -44,7 +34,7 @@ D('example.com', registrar,
## Variables for common IP Addresses
```js
```javascript
var addrA = IP('1.2.3.4')
D('example.com', REG, DnsProvider('R53'),
@ -53,15 +43,17 @@ D('example.com', REG, DnsProvider('R53'),
)
```
NOTE: The `IP()` function doesn't currently support IPv6 (PRs welcome!). IPv6 addresses are strings.
{% hint style="info" %}
**NOTE**: The `IP()` function doesn't currently support IPv6 (PRs welcome!). IPv6 addresses are strings.
{% endhint %}
```js
```javascript
var addrAAAA = "0:0:0:0:0:0:0:0";
```
## Variables to swap active Data Center
```js
```javascript
var dcA = IP('5.5.5.5');
var dcB = IP('6.6.6.6');
@ -75,7 +67,7 @@ D('example.com', REG, DnsProvider('R53'),
## Macro to for repeated records
```js
```javascript
var GOOGLE_APPS_MX_RECORDS = [
MX('@', 1, 'aspmx.l.google.com.'),
MX('@', 5, 'alt1.aspmx.l.google.com.'),
@ -106,7 +98,7 @@ You normally can't put comments in the middle of a string,
but with a little bit of creativity you can document
each element of an SPF record this way.
```js
```javascript
var SPF_RECORDS = TXT('@', [
'v=spf1',
'ip4:1.2.3.0/24', // NY mail server
@ -126,7 +118,7 @@ D('example.com', REG, DnsProvider('R53'),
## Dual DNS Providers
```js
```javascript
D('example.com', REG, DnsProvider('R53'), DnsProvider('GCLOUD'),
A('@', '1.2.3.4')
)
@ -146,7 +138,7 @@ D('example3.com', REG, DnsProvider('R53'), DnsProvider('GCLOUD',0),
## Set default records modifiers
```js
```javascript
DEFAULTS(
NAMESERVER_TTL('24h'),
DefaultTTL('12h'),
@ -161,7 +153,7 @@ In this example we need a macro that can dynamically change for each domain.
Suppose you have many domains that use Fastmail as an MX. Here's a macro that sets the MX records.
```js
```javascript
var FASTMAIL_MX = [
MX('@', 10, 'in1-smtp.messagingengine.com.'),
MX('@', 20, 'in2-smtp.messagingengine.com.'),
@ -173,7 +165,7 @@ that includes the domain name. We can't use a simple macro. Instead, we use
a function that takes the domain name as a parameter to generate the right
records dynamically.
```js
```javascript
var FASTMAIL_DKIM = function(the_domain){
return [
CNAME('fm1._domainkey', 'fm1.' + the_domain + '.dkim.fmhosted.com.'),
@ -185,7 +177,7 @@ var FASTMAIL_DKIM = function(the_domain){
We can then use the macros as such:
```js
```javascript
D("example.com", REG_NONE, DnsProvider(DSP_R53_MAIN),
FASTMAIL_MX,
FASTMAIL_DKIM('example.com')

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,62 @@
<html >
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="flattener.js"></script>
<style>
ul {
margin: 0px 0px 0px 20px;
list-style: none;
line-height: 2em;
font-family: Arial;
}
ul li {
font-size: 16px;
position: relative;
}
ul li:before {
position: absolute;
left: -15px;
top: 0px;
content: '';
display: block;
border-left: 1px solid #ddd;
height: 1em;
border-bottom: 1px solid #ddd;
width: 10px;
}
ul li:after {
position: absolute;
left: -15px;
bottom: -7px;
content: '';
display: block;
border-left: 1px solid #ddd;
height: 100%;
}
ul li.root {
margin: 0px 0px 0px -20px;
}
ul li.root:before {
display: none;
}
ul li.root:after {
display: none;
}
ul li:last-child:after {
display: none;
}
</style>
</head>
<body>
<div class='container' style='padding-bottom:50px'>
<input type="text" id="domain" value="stackoverflow.com"></input>
<button id="lookup_btn">Lookup</button>
<div id="results"></div>
<div id="flattened"></div>
</div>
</body>

View file

@ -0,0 +1,159 @@
//go:build js
// +build js
package main
import (
"encoding/json"
"fmt"
"net/http"
"strings"
"github.com/StackExchange/dnscontrol/v3/pkg/spflib"
"github.com/gopherjs/jquery"
)
type gResolver struct{}
type gResp struct {
Status int
Answer []struct {
Data string `json:"data"`
}
}
func (g gResolver) GetSPF(fqdn string) (string, error) {
resp, err := http.Get("https://dns.google.com/resolve?type=txt&name=" + fqdn)
if err != nil {
return "", err
}
defer resp.Body.Close()
dec := json.NewDecoder(resp.Body)
dat := &gResp{}
if err = dec.Decode(dat); err != nil {
return "", err
}
for _, a := range dat.Answer {
val := strings.Trim(a.Data, "\"")
if strings.HasPrefix(val, "v=spf1 ") {
return val, nil
}
}
return "", fmt.Errorf("No spf records found")
}
var jq = jquery.NewJQuery
var parsed *spflib.SPFRecord
var domain string
var resolver = gResolver{}
func main() {
jq(func() {
jq("#lookup_btn").On(jquery.CLICK, func(e jquery.Event) {
go func() {
domain = jq("#domain").Val()
text, err := resolver.GetSPF(domain)
fmt.Println(text)
if err != nil {
panic(err)
}
parsed, err = spflib.Parse(text, resolver)
if err != nil {
panic(err)
}
jq("#results").SetHtml(buildHTML(parsed, domain))
jq(".cb").On(jquery.CHANGE, func(e jquery.Event) {
updateDisabledChecks()
renderResults()
})
updateDisabledChecks()
renderResults()
}()
})
})
}
func updateDisabledChecks() {
jq("input:checkbox").Each(func(i int, el interface{}) {
fmt.Println(jq(el).Prop("disabled"))
jq(el).SetProp("disabled", false)
})
jq("input:checkbox:not(:checked)").Each(func(i int, el interface{}) {
fmt.Println(jq(el).Attr("id"))
jq(el).Next().Next().Find("input:checkbox").Each(func(i int, el interface{}) {
fmt.Println("^^", jq(el).Attr("id"))
jq(el).SetProp("disabled", true)
})
})
}
func renderResults() {
content := ""
addFlattened := func(mode string, filter string) {
flat := parsed.Flatten(filter)
lookups := 0
if filter != "*" {
lookups = parsed.Lookups() - len(strings.Split(filter, ","))
}
content += fmt.Sprintf(`
<h3> %s flattened (length %d, %d lookups)</h3><code>%s</code>
`, mode, len(flat.TXT()), lookups, flat.TXT())
split := flat.TXTSplit("_spf%d."+domain, 0, 255)
if len(split) > 1 {
lookups += len(split) - 1
content += fmt.Sprintf("<h3>%s flattened split (%d lookups)</h3>", mode, lookups)
for k, v := range split {
content += fmt.Sprintf("<h4>%s</h4><code>%s</code>", k, v)
}
}
}
addFlattened("Fully", "*")
// look for selected divs
filters := []string{}
jq("input:checked").Each(func(i int, el interface{}) {
filters = append(filters, jq(el).Attr("id"))
})
if len(filters) > 0 {
addFlattened("Selectively", strings.Join(filters, ","))
}
jq("#flattened").SetHtml(content)
}
func buildHTML(rec *spflib.SPFRecord, domain string) string {
h := "<h1>" + domain + "</h1>"
h += fmt.Sprintf("<h2>%d lookups</h2>", rec.Lookups())
return h + genRoot(rec)
}
// html based on https://codepen.io/khoama/pen/hpljA
func genRoot(rec *spflib.SPFRecord) string {
h := fmt.Sprintf(`
<ul>
<li class='root'>%s</li>
`, rec.TXT())
for _, p := range rec.Parts {
h += genPart(p)
}
h += "</ul>"
return h
}
func genPart(rec *spflib.SPFPart) string {
if !rec.IsLookup {
return fmt.Sprintf(`<li>%s</li>`, rec.Text)
}
h := fmt.Sprintf(`<li>
<input type="checkbox" class='cb' id="%s" name="%s" />
<label for="%s">%s(%d lookups)</label>`, rec.IncludeDomain, rec.IncludeDomain, rec.IncludeDomain, rec.Text, rec.IncludeRecord.Lookups()+1)
h += fmt.Sprintf("<ul>")
for _, p := range rec.IncludeRecord.Parts {
h += genPart(p)
}
h += "</ul>"
h += "</li>"
return h
}

View file

@ -12,12 +12,11 @@ parameter_types:
A adds an A record To a domain. The name should be the relative label for the record. Use `@` for the domain apex.
The address should be an ip address, either a string, or a numeric value obtained via [IP](#IP).
The address should be an ip address, either a string, or a numeric value obtained via [IP](../global/IP.md).
Modifiers can be any number of [record modifiers](#record-modifiers) or JSON objects, which will be merged into the record's metadata.
Modifiers can be any number of [record modifiers](https://docs.dnscontrol.org/language-reference/record-modifiers) or JSON objects, which will be merged into the record's metadata.
{% capture example %}
```js
```javascript
D("example.com", REGISTRAR, DnsProvider("R53"),
A("@", "1.2.3.4"),
A("foo", "2.3.4.5"),
@ -25,6 +24,3 @@ D("example.com", REGISTRAR, DnsProvider("R53"),
A("*", "1.2.3.4", {foo: 42})
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -14,10 +14,9 @@ AAAA adds an AAAA record To a domain. The name should be the relative label for
The address should be an IPv6 address as a string.
Modifiers can be any number of [record modifiers](#record-modifiers) or JSON objects, which will be merged into the record's metadata.
Modifiers can be any number of [record modifiers](https://docs.dnscontrol.org/language-reference/record-modifiers) or JSON objects, which will be merged into the record's metadata.
{% capture example %}
```js
```javascript
var addrV6 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
D("example.com", REGISTRAR, DnsProvider("R53"),
@ -27,6 +26,3 @@ D("example.com", REGISTRAR, DnsProvider("R53"),
AAAA("*", addrV6, {foo: 42})
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -18,12 +18,8 @@ The name should be the relative label for the domain.
Target should be a string representing the target. If it is a single label we will assume it is a relative name on the current domain. If it contains *any* dots, it should be a fully qualified domain name, ending with a `.`.
{% capture example %}
```js
```javascript
D("example.com", REGISTRAR, DnsProvider("CLOUDFLARE"),
ALIAS("@", "google.com."), // example.com -> google.com
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -14,11 +14,12 @@ to tune what the DNS provider sets, no algorithm choice. We simply
ask that they follow their defaults when enabling a no-fuss DNSSEC
data model.
NOTE: No parenthesis should follow these keywords. That is, the
{% hint style="info" %}
**NOTE**: No parenthesis should follow these keywords. That is, the
correct syntax is `AUTODNSSEC_ON` not `AUTODNSSEC_ON()`
{% endhint %}
{% capture example %}
```js
```javascript
D("example.com", .... ,
AUTODNSSEC_ON, // Enable AutoDNSSEC.
A("@", "10.1.1.1")
@ -29,9 +30,6 @@ D("insecure.com", .... ,
A("@", "10.2.2.2")
);
```
{% endcapture %}
{% include example.html content=example %}
If neither `AUTODNSSEC_ON` or `AUTODNSSEC_OFF` is specified for a
domain no changes will be requested.

View file

@ -48,13 +48,9 @@ Alias records can reference other record sets of the same type.
For example, a DNS CNAME record set can be an alias to another CNAME record set.
This arrangement is useful if you want some record sets to be aliases and some non-aliases.
{% capture example %}
```js
```javascript
D("example.com", REGISTRAR, DnsProvider("AZURE_DNS"),
AZURE_ALIAS("foo", "A", "/subscriptions/726f8cd6-6459-4db4-8e6d-2cd2716904e2/resourceGroups/test/providers/Microsoft.Network/trafficManagerProfiles/testpp2"), // record for traffic manager
AZURE_ALIAS("foo", "CNAME", "/subscriptions/726f8cd6-6459-4db4-8e6d-2cd2716904e2/resourceGroups/test/providers/Microsoft.Network/dnszones/example.com/A/quux."), // record in the same zone
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -24,8 +24,7 @@ Flags are controlled by modifier:
CAA record is supported only by BIND, Google Cloud DNS, Amazon Route 53 and OVH. Some certificate authorities may not support this record until the mandatory date of September 2017.
{% capture example %}
```js
```javascript
D("example.com", REGISTRAR, DnsProvider("GCLOUD"),
// Allow letsencrypt to issue certificate for this domain
CAA("@", "issue", "letsencrypt.org"),
@ -36,6 +35,3 @@ D("example.com", REGISTRAR, DnsProvider("GCLOUD"),
CAA("@", "iodef", "mailto:test@example.com", CAA_CRITICAL)
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -18,11 +18,13 @@ If _any_ `CF_REDIRECT` or `CF_TEMP_REDIRECT` functions are used then
`dnscontrol` will manage _all_ "Forwarding URL" type Page Rules for the domain.
Page Rule types other than "Forwarding URL” will be left alone.
WARNING: Cloudflare does not currently fully document the Page Rules API and
{% hint style="warning" %}
**WARNING**: Cloudflare does not currently fully document the Page Rules API and
this interface is not extensively tested. Take precautions such as making
backups and manually verifying `dnscontrol preview` output before running
`dnscontrol push`. This is especially true when mixing Page Rules that are
managed by DNSControl and those that aren't.
{% endhint %}
HTTP 301 redirects are cached by browsers forever, usually ignoring any TTLs or
other cache invalidation techniques. It should be used with great care. We
@ -31,12 +33,8 @@ only after sufficient time has elapsed to prove this is what you really want.
This example redirects the bare (aka apex, or naked) domain to www:
{% capture example %}
```js
```javascript
D("foo.com", .... ,
CF_REDIRECT("mydomain.com/*", "https://www.mydomain.com/$1"),
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -18,18 +18,16 @@ If _any_ `CF_REDIRECT` or `CF_TEMP_REDIRECT` functions are used then
`dnscontrol` will manage _all_ "Forwarding URL" type Page Rules for the domain.
Page Rule types other than "Forwarding URL” will be left alone.
WARNING: Cloudflare does not currently fully document the Page Rules API and
{% hint style="warning" %}
**WARNING**: Cloudflare does not currently fully document the Page Rules API and
this interface is not extensively tested. Take precautions such as making
backups and manually verifying `dnscontrol preview` output before running
`dnscontrol push`. This is especially true when mixing Page Rules that are
managed by DNSControl and those that aren't.
{% endhint %}
{% capture example %}
```js
```javascript
D("foo.com", .... ,
CF_TEMP_REDIRECT("example.mydomain.com/*", "https://otherplace.yourdomain.com/$1"),
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -17,19 +17,17 @@ If _any_ `CF_WORKER_ROUTE` function is used then `dnscontrol` will manage _all_
Worker Routes for the domain. To be clear: this means it will delete existing routes that
were created outside of DNSControl.
WARNING: This interface is not extensively tested. Take precautions such as making
{% hint style="warning" %}
**WARNING**: This interface is not extensively tested. Take precautions such as making
backups and manually verifying `dnscontrol preview` output before running
`dnscontrol push`.
{% endhint %}
This example assigns the patterns `api.foo.com/*` and `foo.com/api/*` to a `my-worker` script:
{% capture example %}
```js
```javascript
D("foo.com", .... ,
CF_WORKER_ROUTE("api.foo.com/*", "my-worker"),
CF_WORKER_ROUTE("foo.com/api/*", "my-worker"),
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -10,4 +10,6 @@ parameter_types:
"modifiers...": RecordModifier[]
---
{% hint style="info" %}
Documentation needed.
{% endhint %}

View file

@ -15,14 +15,10 @@ Using `@` or `*` for CNAME records is not recommended, as different providers su
Target should be a string representing the CNAME target. If it is a single label we will assume it is a relative name on the current domain. If it contains *any* dots, it should be a fully qualified domain name, ending with a `.`.
{% capture example %}
```js
```javascript
D("example.com", REGISTRAR, DnsProvider("R53"),
CNAME("foo", "google.com."), // foo.example.com -> google.com
CNAME("abc", "@"), // abc.example.com -> example.com
CNAME("def", "test"), // def.example.com -> test.example.com
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -26,12 +26,8 @@ Digest Type must be a number.
Digest must be a string.
{% capture example %}
```js
```javascript
D("example.com", REGISTRAR, DnsProvider(R53),
DS("example.com", 2371, 13, 2, "ABCDEF")
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -6,11 +6,10 @@ parameter_types:
ttl: Duration
---
DefaultTTL sets the TTL for all records in a domain that do not explicitly set one with [TTL](#TTL). If neither `DefaultTTL` or `TTL` exist for a record,
DefaultTTL sets the TTL for all records in a domain that do not explicitly set one with [TTL](../record/TTL.md). If neither `DefaultTTL` or `TTL` exist for a record,
it will use the DNSControl global default of 300 seconds.
{% capture example %}
```js
```javascript
D('example.com', REGISTRAR, DnsProvider('R53'),
DefaultTTL("4h"),
A('@','1.2.3.4'), // uses default
@ -18,8 +17,5 @@ D('example.com', REGISTRAR, DnsProvider('R53'),
);
```
The DefaultTTL duration is the same format as [TTL](#TTL), an integer number of seconds
The DefaultTTL duration is the same format as [TTL](../record/TTL.md), an integer number of seconds
or a string with a unit such as `'4d'`.
{% endcapture %}
{% include example.html content=example %}

View file

@ -9,7 +9,7 @@ parameter_types:
---
DnsProvider indicates that the specified provider should be used to manage
records for this domain. The name must match the name used with [NewDnsProvider](#NewDnsProvider).
records for this domain. The name must match the name used with [NewDnsProvider](../global/NewDnsProvider.md).
The nsCount parameter determines how the nameservers will be managed from this provider.
@ -20,7 +20,7 @@ Using `0` for nsCount means "do not fetch nameservers from this domain, or give
Using a different number, ie: `DnsProvider("name",2)`, means "fetch all nameservers from this provider,
but limit it to this many.
See [this page]({{site.github.url}}/nameservers) for a detailed explanation of how DNSControl handles nameservers and NS records.
See [this page](../../nameservers.md) for a detailed explanation of how DNSControl handles nameservers and NS records.
If a domain (`D()`) does not include any `DnsProvider()` functions,
the DNS records will not be modified. In fact, if you want to control

View file

@ -10,4 +10,6 @@ parameter_types:
"modifiers...": RecordModifier[]
---
{% hint style="info" %}
Documentation needed.
{% endhint %}

View file

@ -0,0 +1,8 @@
---
name: IGNORE
ts_ignore: true
---
{% hint style="warning" %}
**WARNING**: IGNORE has been renamed to `IGNORE_NAME`. IGNORE will continue to function, but its use is deprecated. Please update your configuration files to use `IGNORE_NAME`.
{% endhint %}

View file

@ -8,9 +8,11 @@ parameter_types:
rTypes: string?
---
WARNING: The `IGNORE_*` family of functions is risky to use. The code
{% hint style="warning" %}
**WARNING**: The `IGNORE_*` family of functions is risky to use. The code
is brittle and has subtle bugs. Use at your own risk. Do not use these
commands with `D_EXTEND()`.
{% endhint %}
`IGNORE_NAME` can be used to ignore some records present in zone.
Records of that name will be completely ignored. An optional `rTypes` may be specified as a comma separated list to only ignore records of the given type, e.g. `"A"`, `"A,CNAME"`, `"A, MX, CNAME"`. If `rTypes` is omitted or is `"*"` all record types matching the name will be ignored.
@ -26,8 +28,7 @@ Technically `IGNORE_NAME` is a promise that DNSControl will not add, change, or
In this example, DNSControl will insert/update the "baz.example.com" record but will leave unchanged the "foo.example.com" and "bar.example.com" ones.
{% capture example %}
```js
```javascript
D("example.com",
IGNORE_NAME("foo"), // ignore all record types for name foo
IGNORE_NAME("baz", "*"), // ignore all record types for name baz
@ -36,9 +37,6 @@ D("example.com",
A("baz", "1.2.3.4")
);
```
{% endcapture %}
{% include example.html content=example %}
`IGNORE_NAME` also supports glob patterns in the style of the [gobwas/glob](https://github.com/gobwas/glob) library. All of
the following patterns will work:

View file

@ -8,9 +8,11 @@ parameter_types:
rType: string
---
WARNING: The `IGNORE_*` family of functions is risky to use. The code
{% hint style="warning" %}
**WARNING**: The `IGNORE_*` family of functions is risky to use. The code
is brittle and has subtle bugs. Use at your own risk. Do not use these
commands with `D_EXTEND()` or use it at the domain apex.
{% endhint %}
IGNORE_TARGET can be used to ignore some records present in zone based on the record's target and type. IGNORE_TARGET currently only supports CNAME record types.
@ -22,16 +24,12 @@ IGNORE_TARGET is generally used in very specific situations:
In this example, DNSControl will insert/update the "baz.example.com" record but will leave unchanged a CNAME to "foo.acm-validations.aws" record.
{% capture example %}
```js
```javascript
D("example.com",
IGNORE_TARGET('**.acm-validations.aws.', 'CNAME'),
A("baz", "1.2.3.4")
);
```
{% endcapture %}
{% include example.html content=example %}
IGNORE_TARGET also supports glob patterns in the style of the [gobwas/glob](https://github.com/gobwas/glob#example) library. Some example patterns:

View file

@ -7,7 +7,9 @@ parameters:
ts_ignore: true
---
{% hint style="warning" %}
Don't use this feature. It was added for a very specific situation at Stack Overflow.
{% endhint %}
`IMPORT_TRANSFORM` adds to the domain all the records from another
domain, after making certain transformations and resetting the TTL.
@ -24,7 +26,6 @@ You wouldn't want to maintain bar.com manually, would you? It would
be very error prone. Therefore instead you maintain foo.com and
let `IMPORT_TRANSFORM` automatically generate bar.com.
{% capture example %}
```text
foo.com:
one.foo.com. IN A 1.2.3.1
@ -39,14 +40,10 @@ bar.com:
three.foo.com.bar.com. IN A 123.123.123.113
four.foo.com.bar.com. IN A 123.123.123.114
```
{% endcapture %}
{% include example.html content=example %}
Here's how you'd implement this in DNSControl:
{% capture example %}
```js
```javascript
var TRANSFORM_INT = [
// RANGE_START, RANGE_END, NEW_BASE
{ low: "1.2.3.10", high: "1.2.3.20", newBase: "123.123.123.100" }, // .10 to .20 rewritten as 123.123.123.100+IP
@ -65,9 +62,6 @@ D("bar.com", .... ,
IMPORT_TRANSFORM(TRANSFORM_INT, 'foo.com', 300),
);
```
{% endcapture %}
{% include example.html content=example %}
Transform rules are: RANGE_START, RANGE_END, NEW_BASE. NEW_BASE may be:

View file

@ -9,8 +9,7 @@ parameter_types:
Includes all records from a given domain
{% capture example %}
```js
```javascript
D("example.com!external", REGISTRAR, DnsProvider(R53),
A("test", "8.8.8.8")
);
@ -20,6 +19,3 @@ D("example.com!internal", REGISTRAR, DnsProvider(R53),
A("home", "127.0.0.1")
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -18,13 +18,9 @@ Priority should be a number.
Target should be a string representing the MX target. If it is a single label we will assume it is a relative name on the current domain. If it contains *any* dots, it should be a fully qualified domain name, ending with a `.`.
{% capture example %}
```js
```javascript
D("example.com", REGISTRAR, DnsProvider(R53),
MX("@", 5, "mail"), // mx example.com -> mail.example.com
MX("sub", 10, "mail.foo.com.")
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -18,10 +18,9 @@ This is different than the `NS()` function, which inserts NS records
in the current zone and accepts a label. `NS()` is useful for downward
delegations. `NAMESERVER()` is for informing upstream delegations.
For more information, refer to [this page]({{site.github.url}}/nameservers).
For more information, refer to [this page](../../nameservers.md).
{% capture example %}
```js
```javascript
D("example.com", REGISTRAR, .... ,
DnsProvider(route53, 0),
// Replace the nameservers:
@ -35,9 +34,6 @@ D("example2.com", REGISTRAR, .... ,
NAMESERVER("ns2.myserver.com."),
);
```
{% endcapture %}
{% include example.html content=example %}
# The difference between NS() and NAMESERVER()
@ -82,7 +78,7 @@ special Registrar called "NONE". It makes no changes.
It looks like this:
```js
```javascript
var REG_THIRDPARTY = NewRegistrar('ThirdParty', 'NONE')
D("mydomain.com", REG_THIRDPARTY,
...

View file

@ -8,17 +8,13 @@ parameter_types:
modifiers...: RecordModifier[]
---
TTL sets the TTL on the domain apex NS RRs defined by [NAMESERVER](#NAMESERVER).
TTL sets the TTL on the domain apex NS RRs defined by [NAMESERVER](NAMESERVER.md).
The value can be an integer or a string. See [TTL](#TTL) for examples.
The value can be an integer or a string. See [TTL](../record/TTL.md) for examples.
{% capture example %}
```js
```javascript
D('example.com', REGISTRAR, DnsProvider('R53'),
NAMESERVER_TTL('2d'),
NAMESERVER('ns')
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -15,15 +15,11 @@ zone, but otherwise leave the zone alone. Changes to "foo"'s IP
address will update the record. Removing the A("foo", ...) record
from DNSControl will leave the record in place.
{% capture example %}
```js
```javascript
D("example.com", .... , NO_PURGE,
A("foo","1.2.3.4")
);
```
{% endcapture %}
{% include example.html content=example %}
The main caveat of NO_PURGE is that intentionally deleting records
becomes more difficult. Suppose a NO_PURGE zone has an record such

View file

@ -18,8 +18,7 @@ The difference between `NS()` and `NAMESERVER()` is explained in the `NAMESERVER
Target should be a string representing the NS target. If it is a single label we will assume it is a relative name on the current domain. If it contains *any* dots, it should be a fully qualified domain name, ending with a `.`.
{% capture example %}
```js
```javascript
D("example.com", REGISTRAR, DnsProvider("R53"),
NS("foo", "ns1.example2.com."), // Delegate ".foo.example.com" zone to another server.
NS("foo", "ns2.example2.com."), // Delegate ".foo.example.com" zone to another server.
@ -27,6 +26,3 @@ D("example.com", REGISTRAR, DnsProvider("R53"),
A("ns2.example2.com", "10.10.10.20"), // Glue records
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -10,4 +10,6 @@ parameter_types:
"modifiers...": RecordModifier[]
---
{% hint style="info" %}
Documentation needed.
{% endhint %}

View file

@ -60,8 +60,7 @@ and A, B, C are the first 3 octets of the IP address. For example
`172.20.18.130/27` is located in a zone named
`128/27.18.20.172.in-addr.arpa`
{% capture example %}
```js
```javascript
D(REV('1.2.3.0/24'), REGISTRAR, DnsProvider(BIND),
PTR('1', 'foo.example.com.'),
PTR('2', 'bar.example.com.'),
@ -81,9 +80,6 @@ D(REV('2001:db8:302::/48'), REGISTRAR, DnsProvider(BIND),
PTR('2001:db8:302::3', 'three.example.com.'), // '3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0'
);
```
{% endcapture %}
{% include example.html content=example %}
In the future we plan on adding a flag to `A()` which will insert
the correct PTR() record if the appropriate `.arpa` domain has been

View file

@ -12,31 +12,22 @@ These three examples all are equivalent.
PURGE is the default:
{% capture example %}
```js
```javascript
D("example.com", .... ,
);
```
{% endcapture %}
{% include example.html content=example %}
Purge is the default, but we set it anyway:
{% capture example %}
```js
```javascript
D("example.com", .... ,
PURGE,
);
```
{% endcapture %}
{% include example.html content=example %}
Since the "last command wins", this is the same as `PURGE`:
{% capture example %}
```js
```javascript
D("example.com", .... ,
PURGE,
NO_PURGE,
@ -45,6 +36,3 @@ D("example.com", .... ,
PURGE,
);
```
{% endcapture %}
{% include example.html content=example %}

View file

@ -37,8 +37,7 @@ The zone id can be found depending on the target type:
* _S3 bucket_ (configured as website): specify the hosted zone ID for the region that you created the bucket in. You can find it in [the List of regions and hosted Zone IDs](http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)
* _Another Route 53 record_: you can either specify the correct zone id or do not specify anything and DNSControl will figure out the right zone id. (Note: Route53 alias can't reference a record in a different zone).
{% capture example %}
```js
```javascript
D('example.com', REGISTRAR, DnsProvider('ROUTE53'),
R53_ALIAS('foo', 'A', 'bar'), // record in same zone
R53_ALIAS('foo', 'A', 'bar', R53_ZONE('Z35SXDOTRQ7X7K')), // record in same zone, zone specified
@ -47,6 +46,3 @@ D('example.com', REGISTRAR, DnsProvider('ROUTE53'),
R53_ALIAS('foo', 'A', 'blahblah-bucket.s3-website-us-west-1.amazonaws.com.', R53_ZONE('Z2F56UZL2M1ACD')), // a website S3 Bucket in us-west-1
);
```
{% endcapture %}
{% include example.html content=example %}

Some files were not shown because too many files have changed in this diff Show more