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

DOCS: Documentation directory structure (#2905)

This commit is contained in:
Jeffrey Cafferata
2024-04-09 20:26:45 +02:00
committed by GitHub
parent 17d644cfc6
commit c31064781f
86 changed files with 192 additions and 193 deletions

View File

@ -77,19 +77,19 @@ func matrixData() *FeatureMatrix {
ProviderDNSProvider = "DNS Provider" ProviderDNSProvider = "DNS Provider"
ProviderRegistrar = "Registrar" ProviderRegistrar = "Registrar"
ProviderThreadSafe = "Concurrency Verified" ProviderThreadSafe = "Concurrency Verified"
DomainModifierAlias = "[`ALIAS`](functions/domain/ALIAS.md)" DomainModifierAlias = "[`ALIAS`](language-reference/domain-modifiers/ALIAS.md)"
DomainModifierCaa = "[`CAA`](functions/domain/CAA.md)" DomainModifierCaa = "[`CAA`](language-reference/domain-modifiers/CAA.md)"
DomainModifierDnssec = "[`AUTODNSSEC`](functions/domain/AUTODNSSEC_ON.md)" DomainModifierDnssec = "[`AUTODNSSEC`](language-reference/domain-modifiers/AUTODNSSEC_ON.md)"
DomainModifierLoc = "[`LOC`](functions/domain/LOC.md)" DomainModifierLoc = "[`LOC`](language-reference/domain-modifiers/LOC.md)"
DomainModifierNaptr = "[`NAPTR`](functions/domain/NAPTR.md)" DomainModifierNaptr = "[`NAPTR`](language-reference/domain-modifiers/NAPTR.md)"
DomainModifierPtr = "[`PTR`](functions/domain/PTR.md)" DomainModifierPtr = "[`PTR`](language-reference/domain-modifiers/PTR.md)"
DomainModifierSoa = "[`SOA`](functions/domain/SOA.md)" DomainModifierSoa = "[`SOA`](language-reference/domain-modifiers/SOA.md)"
DomainModifierSrv = "[`SRV`](functions/domain/SRV.md)" DomainModifierSrv = "[`SRV`](language-reference/domain-modifiers/SRV.md)"
DomainModifierSshfp = "[`SSHFP`](functions/domain/SSHFP.md)" DomainModifierSshfp = "[`SSHFP`](language-reference/domain-modifiers/SSHFP.md)"
DomainModifierTlsa = "[`TLSA`](functions/domain/TLSA.md)" DomainModifierTlsa = "[`TLSA`](language-reference/domain-modifiers/TLSA.md)"
DomainModifierDs = "[`DS`](functions/domain/DS.md)" DomainModifierDs = "[`DS`](language-reference/domain-modifiers/DS.md)"
DomainModifierDhcid = "[`DHCID`](functions/domain/DHCID.md)" DomainModifierDhcid = "[`DHCID`](language-reference/domain-modifiers/DHCID.md)"
DomainModifierDname = "[`DNAME`](functions/domain/DNAME.md)" DomainModifierDname = "[`DNAME`](language-reference/domain-modifiers/DNAME.md)"
DualHost = "dual host" DualHost = "dual host"
CreateDomains = "create-domains" CreateDomains = "create-domains"
GetZones = "get-zones" GetZones = "get-zones"

View File

@ -78,15 +78,15 @@ func parseFrontMatter(content string) (map[string]interface{}, string, error) {
} }
var returnTypes = map[string]string{ var returnTypes = map[string]string{
"domain": "DomainModifier", "domain-modifiers": "DomainModifier",
"global": "void", "top-level-functions": "void",
"record": "RecordModifier", "record-modifiers": "RecordModifier",
} }
var categories = map[string]string{ var categories = map[string]string{
"domain": "domain-modifiers", "domain-modifiers": "domain-modifiers",
"global": "top-level-functions", "top-level-functions": "top-level-functions",
"record": "record-modifiers", "record-modifiers": "record-modifiers",
} }
var providerNames = map[string]string{ var providerNames = map[string]string{
@ -101,7 +101,7 @@ var providerNames = map[string]string{
func generateFunctionTypes() (string, error) { func generateFunctionTypes() (string, error) {
funcs := []Function{} funcs := []Function{}
srcRoot := join("documentation", "functions") srcRoot := join("documentation", "language-reference")
types, err := os.ReadDir(srcRoot) types, err := os.ReadDir(srcRoot)
if err != nil { if err != nil {
return "", err return "", err

View File

@ -180,7 +180,7 @@ declare const DISABLE_REPEATED_DOMAIN_CHECK: RecordModifier;
/** /**
* A adds an A record To a domain. The name should be the relative label for the record. Use `@` for the domain apex. * 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](../global/IP.md). * The address should be an ip address, either a string, or a numeric value obtained via [IP](../top-level-functions/IP.md).
* *
* 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. * 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.
* *
@ -371,7 +371,7 @@ declare function CAA(name: string, tag: "issue" | "issuewild" | "iodef", value:
/** /**
* DNSControl contains a `CAA_BUILDER` which can be used to simply create * DNSControl contains a `CAA_BUILDER` which can be used to simply create
* [`CAA()`](../domain/CAA.md) records for your domains. Instead of creating each [`CAA()`](../domain/CAA.md) record * [`CAA()`](../domain-modifiers/CAA.md) records for your domains. Instead of creating each [`CAA()`](../domain-modifiers/CAA.md) record
* individually, you can simply configure your report mail address, the * individually, you can simply configure your report mail address, the
* authorized certificate authorities and the builder cares about the rest. * authorized certificate authorities and the builder cares about the rest.
* *
@ -570,11 +570,11 @@ declare function CNAME(name: string, target: string, ...modifiers: RecordModifie
/** /**
* `D` adds a new Domain for DNSControl to manage. The first two arguments are required: the domain name (fully qualified `example.com` without a trailing dot), and the * `D` adds a new Domain for DNSControl to manage. The first two arguments are required: the domain name (fully qualified `example.com` without a trailing dot), and the
* name of the registrar (as previously declared with [NewRegistrar](NewRegistrar.md)). Any number of additional arguments may be included to add DNS Providers with [DNSProvider](NewDnsProvider.md), * name of the registrar (as previously declared with [NewRegistrar](NewRegistrar.md)). Any number of additional arguments may be included to add DNS Providers with [DNSProvider](NewDnsProvider.md),
* add records with [A](../domain/A.md), [CNAME](../domain/CNAME.md), and so forth, or add metadata. * add records with [A](../domain-modifiers/A.md), [CNAME](../domain-modifiers/CNAME.md), and so forth, or add metadata.
* *
* Modifier arguments are processed according to type as follows: * Modifier arguments are processed according to type as follows:
* *
* - A function argument will be called with the domain object as it's only argument. Most of the [built-in modifier functions](https://docs.dnscontrol.org/language-reference/domain-modifiers) return such functions. * - A function argument will be called with the domain object as it's only argument. Most of the [built-in modifier functions](https://docs.dnscontrol.org/language-reference/domain-modifiers-modifiers) return such functions.
* - An object argument will be merged into the domain's metadata collection. * - An object argument will be merged into the domain's metadata collection.
* - An array argument will have all of it's members evaluated recursively. This allows you to combine multiple common records or modifiers into a variable that can * - An array argument will have all of it's members evaluated recursively. This allows you to combine multiple common records or modifiers into a variable that can
* be used like a macro in multiple domains. * be used like a macro in multiple domains.
@ -660,7 +660,7 @@ declare function D(name: string, registrar: string, ...modifiers: DomainModifier
* *
* ## Example * ## Example
* *
* We want to create backup zone files for all domains, but not actually register them. Also create a [`DefaultTTL`](../domain/DefaultTTL.md). * We want to create backup zone files for all domains, but not actually register them. Also create a [`DefaultTTL`](../domain-modifiers/DefaultTTL.md).
* The domain `example.com` will have the defaults set. * The domain `example.com` will have the defaults set.
* *
* ```javascript * ```javascript
@ -713,7 +713,7 @@ declare function DHCID(name: string, digest: string, ...modifiers: RecordModifie
* It replaces the per-record `IGNORE_NAME_DISABLE_SAFETY_CHECK()` which is * It replaces the per-record `IGNORE_NAME_DISABLE_SAFETY_CHECK()` which is
* deprecated as of DNSControl v4.0.0.0. * deprecated as of DNSControl v4.0.0.0.
* *
* See [`IGNORE()`](../domain/IGNORE.md) for more information. * See [`IGNORE()`](../domain-modifiers/IGNORE.md) for more information.
* *
* ## Syntax * ## Syntax
* *
@ -861,7 +861,7 @@ declare function DNAME(name: string, target: string, ...modifiers: RecordModifie
* ); * );
* ``` * ```
* *
* NOTE: The [`NO_PURGE`](../domain/NO_PURGE.md) is used out of abundance of caution but since no * NOTE: The [`NO_PURGE`](../domain-modifiers/NO_PURGE.md) is used out of abundance of caution but since no
* `DnsProvider()` statements exist, no updates would be performed. * `DnsProvider()` statements exist, no updates would be performed.
* *
* @see https://docs.dnscontrol.org/language-reference/top-level-functions/domain_elsewhere * @see https://docs.dnscontrol.org/language-reference/top-level-functions/domain_elsewhere
@ -896,7 +896,7 @@ declare function DOMAIN_ELSEWHERE(name: string, registrar: string, nameserver_na
* ); * );
* ``` * ```
* *
* NOTE: The [`NO_PURGE`](../domain/NO_PURGE.md) is used to prevent DNSControl from changing the records. * NOTE: The [`NO_PURGE`](../domain-modifiers/NO_PURGE.md) is used to prevent DNSControl from changing the records.
* *
* @see https://docs.dnscontrol.org/language-reference/top-level-functions/domain_elsewhere_auto * @see https://docs.dnscontrol.org/language-reference/top-level-functions/domain_elsewhere_auto
*/ */
@ -945,7 +945,7 @@ declare function DS(name: string, keytag: number, algorithm: number, digesttype:
* not `domain.tld`. * not `domain.tld`.
* *
* Some operators only act on an apex domain (e.g. * Some operators only act on an apex domain (e.g.
* [`CF_REDIRECT`](../domain/CF_REDIRECT.md) and [`CF_TEMP_REDIRECT`](../domain/CF_TEMP_REDIRECT.md)). Using them * [`CF_REDIRECT`](../domain-modifiers/CF_REDIRECT.md) and [`CF_TEMP_REDIRECT`](../domain-modifiers/CF_TEMP_REDIRECT.md)). Using them
* in a `D_EXTEND` subdomain may not be what you expect. * in a `D_EXTEND` subdomain may not be what you expect.
* *
* ```javascript * ```javascript
@ -1007,10 +1007,10 @@ declare function DS(name: string, keytag: number, algorithm: number, digesttype:
declare function D_EXTEND(name: string, ...modifiers: DomainModifier[]): void; declare function D_EXTEND(name: string, ...modifiers: DomainModifier[]): void;
/** /**
* DefaultTTL sets the TTL for all subsequent records following it in a domain that do not explicitly set one with [`TTL`](../record/TTL.md). If neither `DefaultTTL` or `TTL` exist for a record, * DefaultTTL sets the TTL for all subsequent records following it in a domain that do not explicitly set one with [`TTL`](../record-modifiers/TTL.md). If neither `DefaultTTL` or `TTL` exist for a record,
* the record will inherit the DNSControl global internal default of 300 seconds. See also [`DEFAULTS`](../global/DEFAULTS.md) to override the internal defaults. * the record will inherit the DNSControl global internal default of 300 seconds. See also [`DEFAULTS`](../top-level-functions/DEFAULTS.md) to override the internal defaults.
* *
* NS records are currently a special case, and do not inherit from `DefaultTTL`. See [`NAMESERVER_TTL`](../domain/NAMESERVER_TTL.md) to set a default TTL for all NS records. * NS records are currently a special case, and do not inherit from `DefaultTTL`. See [`NAMESERVER_TTL`](../domain-modifiers/NAMESERVER_TTL.md) to set a default TTL for all NS records.
* *
* ```javascript * ```javascript
* D("example.com", REG_MY_PROVIDER, DnsProvider(DSP_MY_PROVIDER), * D("example.com", REG_MY_PROVIDER, DnsProvider(DSP_MY_PROVIDER),
@ -1020,7 +1020,7 @@ declare function D_EXTEND(name: string, ...modifiers: DomainModifier[]): void;
* ); * );
* ``` * ```
* *
* The DefaultTTL duration is the same format as [`TTL`](../record/TTL.md), an integer number of seconds * The DefaultTTL duration is the same format as [`TTL`](../record-modifiers/TTL.md), an integer number of seconds
* or a string with a unit such as `"4d"`. * or a string with a unit such as `"4d"`.
* *
* @see https://docs.dnscontrol.org/language-reference/domain-modifiers/defaultttl * @see https://docs.dnscontrol.org/language-reference/domain-modifiers/defaultttl
@ -1029,7 +1029,7 @@ declare function DefaultTTL(ttl: Duration): DomainModifier;
/** /**
* DnsProvider indicates that the specified provider should be used to manage * DnsProvider indicates that the specified provider should be used to manage
* records for this domain. The name must match the name used with [NewDnsProvider](../global/NewDnsProvider.md). * records for this domain. The name must match the name used with [NewDnsProvider](../top-level-functions/NewDnsProvider.md).
* *
* The nsCount parameter determines how the nameservers will be managed from this provider. * The nsCount parameter determines how the nameservers will be managed from this provider.
* *
@ -1075,11 +1075,11 @@ declare function FRAME(name: string, target: string, ...modifiers: RecordModifie
* *
* Technically `IGNORE_NAME` is a promise that DNSControl will not modify or * Technically `IGNORE_NAME` is a promise that DNSControl will not modify or
* delete existing records that match particular patterns. It is like * delete existing records that match particular patterns. It is like
* [`NO_PURGE`](../domain/NO_PURGE.md) that matches only specific records. * [`NO_PURGE`](../domain-modifiers/NO_PURGE.md) that matches only specific records.
* *
* Including a record that is ignored is considered an error and may have * Including a record that is ignored is considered an error and may have
* undefined behavior. This safety check can be disabled using the * undefined behavior. This safety check can be disabled using the
* [`DISABLE_IGNORE_SAFETY_CHECK`](../domain/DISABLE_IGNORE_SAFETY_CHECK.md) feature. * [`DISABLE_IGNORE_SAFETY_CHECK`](../domain-modifiers/DISABLE_IGNORE_SAFETY_CHECK.md) feature.
* *
* ## Syntax * ## Syntax
* *
@ -1815,7 +1815,7 @@ declare function NAMESERVER(name: string, ...modifiers: RecordModifier[]): Domai
/** /**
* NAMESERVER_TTL sets the TTL on the domain apex NS RRs defined by [`NAMESERVER`](NAMESERVER.md). * 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`](../record/TTL.md) for examples. * The value can be an integer or a string. See [`TTL`](../record-modifiers/TTL.md) for examples.
* *
* ```javascript * ```javascript
* D("example.com", REG_MY_PROVIDER, DnsProvider(DSP_MY_PROVIDER), * D("example.com", REG_MY_PROVIDER, DnsProvider(DSP_MY_PROVIDER),
@ -1837,7 +1837,7 @@ declare function NAMESERVER(name: string, ...modifiers: RecordModifier[]): Domai
* ); * );
* ``` * ```
* *
* To apply a default TTL to all other record types, see [`DefaultTTL`](../domain/DefaultTTL.md) * To apply a default TTL to all other record types, see [`DefaultTTL`](../domain-modifiers/DefaultTTL.md)
* *
* @see https://docs.dnscontrol.org/language-reference/domain-modifiers/nameserver_ttl * @see https://docs.dnscontrol.org/language-reference/domain-modifiers/nameserver_ttl
*/ */
@ -2250,7 +2250,7 @@ declare function PANIC(message: string): never;
* * `PTR("4.3", ...` // Assuming the domain is `2.1.in-addr.arpa` * * `PTR("4.3", ...` // Assuming the domain is `2.1.in-addr.arpa`
* *
* All magic is RFC2317-aware. We use the first format listed in the * All magic is RFC2317-aware. We use the first format listed in the
* RFC for both [`REV()`](../global/REV.md) and `PTR()`. The format is * RFC for both [`REV()`](../top-level-functions/REV.md) and `PTR()`. The format is
* `FIRST/MASK.C.B.A.in-addr.arpa` where `FIRST` is the first IP address * `FIRST/MASK.C.B.A.in-addr.arpa` where `FIRST` is the first IP address
* of the zone, `MASK` is the netmask of the zone (25-31 inclusive), * of the zone, `MASK` is the netmask of the zone (25-31 inclusive),
* and A, B, C are the first 3 octets of the IP address. For example * and A, B, C are the first 3 octets of the IP address. For example
@ -2371,7 +2371,7 @@ declare const PURGE: DomainModifier;
* * _S3 bucket_ (configured as website): specify the domain name of the Amazon S3 website endpoint in which you configured the bucket (for instance s3-website-us-east-2.amazonaws.com). For the available values refer to the [Amazon S3 Website Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region). * * _S3 bucket_ (configured as website): specify the domain name of the Amazon S3 website endpoint in which you configured the bucket (for instance s3-website-us-east-2.amazonaws.com). For the available values refer to the [Amazon S3 Website Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region).
* * _Another Route53 record_: specify the value of the name of another record in the same hosted zone. * * _Another Route53 record_: specify the value of the name of another record in the same hosted zone.
* *
* For all the target type, excluding 'another record', you have to specify the `Zone ID` of the target. This is done by using the [`R53_ZONE`](../record/R53_ZONE.md) record modifier. * For all the target type, excluding 'another record', you have to specify the `Zone ID` of the target. This is done by using the [`R53_ZONE`](../record-modifiers/R53_ZONE.md) record modifier.
* *
* The zone id can be found depending on the target type: * The zone id can be found depending on the target type:
* *
@ -2381,7 +2381,7 @@ declare const PURGE: DomainModifier;
* * _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](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) * * _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](https://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). * * _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).
* *
* Target health evaluation can be enabled with the [`R53_EVALUATE_TARGET_HEALTH`](../record/R53\_EVALUATE\_TARGET\_HEALTH.md) record modifier. * Target health evaluation can be enabled with the [`R53_EVALUATE_TARGET_HEALTH`](../record-modifiers/R53\_EVALUATE\_TARGET\_HEALTH.md) record modifier.
* *
* ```javascript * ```javascript
* D("example.com", REG_MY_PROVIDER, DnsProvider("ROUTE53"), * D("example.com", REG_MY_PROVIDER, DnsProvider("ROUTE53"),
@ -2398,18 +2398,18 @@ declare const PURGE: DomainModifier;
declare function R53_ALIAS(name: string, target: string, zone_idModifier: DomainModifier & RecordModifier, evaluatetargethealthModifier: RecordModifier): DomainModifier; declare function R53_ALIAS(name: string, target: string, zone_idModifier: DomainModifier & RecordModifier, evaluatetargethealthModifier: RecordModifier): DomainModifier;
/** /**
* `R53_EVALUATE_TARGET_HEALTH` lets you enable target health evaluation for a [`R53_ALIAS()`](../domain/R53_ALIAS.md) record. Omitting `R53_EVALUATE_TARGET_HEALTH()` from `R53_ALIAS()` set the behavior to false. * `R53_EVALUATE_TARGET_HEALTH` lets you enable target health evaluation for a [`R53_ALIAS()`](../domain-modifiers/R53_ALIAS.md) record. Omitting `R53_EVALUATE_TARGET_HEALTH()` from `R53_ALIAS()` set the behavior to false.
* *
* @see https://docs.dnscontrol.org/language-reference/record-modifiers/service-provider-specific/amazon-route-53/r53_evaluate_target_health * @see https://docs.dnscontrol.org/language-reference/record-modifiers/service-provider-specific/amazon-route-53/r53_evaluate_target_health
*/ */
declare function R53_EVALUATE_TARGET_HEALTH(enabled: boolean): RecordModifier; declare function R53_EVALUATE_TARGET_HEALTH(enabled: boolean): RecordModifier;
/** /**
* `R53_ZONE` lets you specify the AWS Zone ID for an entire domain ([`D()`](../global/D.md)) or a specific [`R53_ALIAS()`](../domain/R53_ALIAS.md) record. * `R53_ZONE` lets you specify the AWS Zone ID for an entire domain ([`D()`](../top-level-functions/D.md)) or a specific [`R53_ALIAS()`](../domain-modifiers/R53_ALIAS.md) record.
* *
* When used with [`D()`](../global/D.md), it sets the zone id of the domain. This can be used to differentiate between split horizon domains in public and private zones. See this [example](../../providers/route53.md#split-horizon) in the [Amazon Route 53 provider page](../../providers/route53.md). * When used with [`D()`](../top-level-functions/D.md), it sets the zone id of the domain. This can be used to differentiate between split horizon domains in public and private zones. See this [example](../../providers/route53.md#split-horizon) in the [Amazon Route 53 provider page](../../providers/route53.md).
* *
* When used with [`R53_ALIAS()`](../domain/R53_ALIAS.md) it sets the required Route53 hosted zone id in a R53_ALIAS record. See [`R53_ALIAS()`](../domain/R53_ALIAS.md) documentation for details. * When used with [`R53_ALIAS()`](../domain-modifiers/R53_ALIAS.md) it sets the required Route53 hosted zone id in a R53_ALIAS record. See [`R53_ALIAS()`](../domain-modifiers/R53_ALIAS.md) documentation for details.
* *
* @see https://docs.dnscontrol.org/language-reference/record-modifiers/service-provider-specific/amazon-route-53/r53_zone * @see https://docs.dnscontrol.org/language-reference/record-modifiers/service-provider-specific/amazon-route-53/r53_zone
*/ */
@ -2906,7 +2906,7 @@ declare function TLSA(name: string, usage: number, selector: number, type: numbe
/** /**
* TTL sets the TTL for a single record only. This will take precedence * TTL sets the TTL for a single record only. This will take precedence
* over the domain's [DefaultTTL](../domain/DefaultTTL.md) if supplied. * over the domain's [DefaultTTL](../domain-modifiers/DefaultTTL.md) if supplied.
* *
* The value can be: * The value can be:
* *
@ -3010,7 +3010,7 @@ declare function TTL(ttl: Duration): RecordModifier;
* *
* #### How can you tell if a provider will support a particular `TXT()` record? * #### How can you tell if a provider will support a particular `TXT()` record?
* *
* Include the `TXT()` record in a [`D()`](../global/D.md) as usual, along * Include the `TXT()` record in a [`D()`](../top-level-functions/D.md) as usual, along
* with the `DnsProvider()` for that provider. Run `dnscontrol check` to * with the `DnsProvider()` for that provider. Run `dnscontrol check` to
* see if any errors are produced. The check command does not talk to * see if any errors are produced. The check command does not talk to
* the provider's API, thus permitting you to do this without having an * the provider's API, thus permitting you to do this without having an

View File

@ -1,5 +1,5 @@
/** /**
* @dnscontrol-auto-doc-comment functions/global/FETCH.md * @dnscontrol-auto-doc-comment language-reference/top-level-functions/FETCH.md
*/ */
declare function FETCH( declare function FETCH(
url: string, url: string,

View File

@ -13,86 +13,85 @@
* [JavaScript DSL](js.md) * [JavaScript DSL](js.md)
* Top Level Functions * Top Level Functions
* [D](functions/global/D.md) * [D](language-reference/top-level-functions/D.md)
* [DEFAULTS](functions/global/DEFAULTS.md) * [DEFAULTS](language-reference/top-level-functions/DEFAULTS.md)
* [DOMAIN_ELSEWHERE](functions/global/DOMAIN_ELSEWHERE.md) * [DOMAIN_ELSEWHERE](language-reference/top-level-functions/DOMAIN_ELSEWHERE.md)
* [DOMAIN_ELSEWHERE_AUTO](functions/global/DOMAIN_ELSEWHERE_AUTO.md) * [DOMAIN_ELSEWHERE_AUTO](language-reference/top-level-functions/DOMAIN_ELSEWHERE_AUTO.md)
* [D_EXTEND](functions/global/D_EXTEND.md) * [D_EXTEND](language-reference/top-level-functions/D_EXTEND.md)
* [FETCH](functions/global/FETCH.md) * [FETCH](language-reference/top-level-functions/FETCH.md)
* [IP](functions/global/IP.md) * [IP](language-reference/top-level-functions/IP.md)
* [NewDnsProvider](functions/global/NewDnsProvider.md) * [NewDnsProvider](language-reference/top-level-functions/NewDnsProvider.md)
* [NewRegistrar](functions/global/NewRegistrar.md) * [NewRegistrar](language-reference/top-level-functions/NewRegistrar.md)
* [PANIC](functions/global/PANIC.md) * [PANIC](language-reference/top-level-functions/PANIC.md)
* [REV](functions/global/REV.md) * [REV](language-reference/top-level-functions/REV.md)
* [REVCOMPAT](functions/global/REVCOMPAT.md) * [getConfiguredDomains](language-reference/top-level-functions/getConfiguredDomains.md)
* [getConfiguredDomains](functions/global/getConfiguredDomains.md) * [require](language-reference/top-level-functions/require.md)
* [require](functions/global/require.md) * [require_glob](language-reference/top-level-functions/require_glob.md)
* [require_glob](functions/global/require_glob.md)
* Domain Modifiers * Domain Modifiers
* [A](functions/domain/A.md) * [A](language-reference/domain-modifiers/A.md)
* [AAAA](functions/domain/AAAA.md) * [AAAA](language-reference/domain-modifiers/AAAA.md)
* [ALIAS](functions/domain/ALIAS.md) * [ALIAS](language-reference/domain-modifiers/ALIAS.md)
* [AUTODNSSEC_OFF](functions/domain/AUTODNSSEC_OFF.md) * [AUTODNSSEC_OFF](language-reference/domain-modifiers/AUTODNSSEC_OFF.md)
* [AUTODNSSEC_ON](functions/domain/AUTODNSSEC_ON.md) * [AUTODNSSEC_ON](language-reference/domain-modifiers/AUTODNSSEC_ON.md)
* [CAA](functions/domain/CAA.md) * [CAA](language-reference/domain-modifiers/CAA.md)
* [CAA_BUILDER](functions/domain/CAA_BUILDER.md) * [CAA_BUILDER](language-reference/domain-modifiers/CAA_BUILDER.md)
* [CNAME](functions/domain/CNAME.md) * [CNAME](language-reference/domain-modifiers/CNAME.md)
* [DHCID](functions/domain/DHCID.md) * [DHCID](language-reference/domain-modifiers/DHCID.md)
* [DNAME](functions/domain/DNAME.md) * [DNAME](language-reference/domain-modifiers/DNAME.md)
* [DISABLE_IGNORE_SAFETY_CHECK](functions/domain/DISABLE_IGNORE_SAFETY_CHECK.md) * [DISABLE_IGNORE_SAFETY_CHECK](language-reference/domain-modifiers/DISABLE_IGNORE_SAFETY_CHECK.md)
* [DMARC_BUILDER](functions/domain/DMARC_BUILDER.md) * [DMARC_BUILDER](language-reference/domain-modifiers/DMARC_BUILDER.md)
* [DS](functions/domain/DS.md) * [DS](language-reference/domain-modifiers/DS.md)
* [DefaultTTL](functions/domain/DefaultTTL.md) * [DefaultTTL](language-reference/domain-modifiers/DefaultTTL.md)
* [DnsProvider](functions/domain/DnsProvider.md) * [DnsProvider](language-reference/domain-modifiers/DnsProvider.md)
* [FRAME](functions/domain/FRAME.md) * [FRAME](language-reference/domain-modifiers/FRAME.md)
* [IGNORE](functions/domain/IGNORE.md) * [IGNORE](language-reference/domain-modifiers/IGNORE.md)
* [IGNORE_NAME](functions/domain/IGNORE_NAME.md) * [IGNORE_NAME](language-reference/domain-modifiers/IGNORE_NAME.md)
* [IGNORE_TARGET](functions/domain/IGNORE_TARGET.md) * [IGNORE_TARGET](language-reference/domain-modifiers/IGNORE_TARGET.md)
* [IMPORT_TRANSFORM](functions/domain/IMPORT_TRANSFORM.md) * [IMPORT_TRANSFORM](language-reference/domain-modifiers/IMPORT_TRANSFORM.md)
* [INCLUDE](functions/domain/INCLUDE.md) * [INCLUDE](language-reference/domain-modifiers/INCLUDE.md)
* [LOC](functions/domain/LOC.md) * [LOC](language-reference/domain-modifiers/LOC.md)
* [LOC_BUILDER_DD](functions/domain/LOC_BUILDER_DD.md) * [LOC_BUILDER_DD](language-reference/domain-modifiers/LOC_BUILDER_DD.md)
* [LOC_BUILDER_DMM_STR](functions/domain/LOC_BUILDER_DMM_STR.md) * [LOC_BUILDER_DMM_STR](language-reference/domain-modifiers/LOC_BUILDER_DMM_STR.md)
* [LOC_BUILDER_DMS_STR](functions/domain/LOC_BUILDER_DMS_STR.md) * [LOC_BUILDER_DMS_STR](language-reference/domain-modifiers/LOC_BUILDER_DMS_STR.md)
* [LOC_BUILDER_STR](functions/domain/LOC_BUILDER_STR.md) * [LOC_BUILDER_STR](language-reference/domain-modifiers/LOC_BUILDER_STR.md)
* [M365_BUILDER](functions/domain/M365_BUILDER.md) * [M365_BUILDER](language-reference/domain-modifiers/M365_BUILDER.md)
* [MX](functions/domain/MX.md) * [MX](language-reference/domain-modifiers/MX.md)
* [NAMESERVER](functions/domain/NAMESERVER.md) * [NAMESERVER](language-reference/domain-modifiers/NAMESERVER.md)
* [NAMESERVER_TTL](functions/domain/NAMESERVER_TTL.md) * [NAMESERVER_TTL](language-reference/domain-modifiers/NAMESERVER_TTL.md)
* [NAPTR](functions/domain/NAPTR.md) * [NAPTR](language-reference/domain-modifiers/NAPTR.md)
* [NO_PURGE](functions/domain/NO_PURGE.md) * [NO_PURGE](language-reference/domain-modifiers/NO_PURGE.md)
* [NS](functions/domain/NS.md) * [NS](language-reference/domain-modifiers/NS.md)
* [PTR](functions/domain/PTR.md) * [PTR](language-reference/domain-modifiers/PTR.md)
* [PURGE](functions/domain/PURGE.md) * [PURGE](language-reference/domain-modifiers/PURGE.md)
* [SOA](functions/domain/SOA.md) * [SOA](language-reference/domain-modifiers/SOA.md)
* [SPF_BUILDER](functions/domain/SPF_BUILDER.md) * [SPF_BUILDER](language-reference/domain-modifiers/SPF_BUILDER.md)
* [SRV](functions/domain/SRV.md) * [SRV](language-reference/domain-modifiers/SRV.md)
* [SSHFP](functions/domain/SSHFP.md) * [SSHFP](language-reference/domain-modifiers/SSHFP.md)
* [TLSA](functions/domain/TLSA.md) * [TLSA](language-reference/domain-modifiers/TLSA.md)
* [TXT](functions/domain/TXT.md) * [TXT](language-reference/domain-modifiers/TXT.md)
* [URL](functions/domain/URL.md) * [URL](language-reference/domain-modifiers/URL.md)
* [URL301](functions/domain/URL301.md) * [URL301](language-reference/domain-modifiers/URL301.md)
* Service Provider specific * Service Provider specific
* Akamai Edge Dns * Akamai Edge Dns
* [AKAMAICDN](functions/domain/AKAMAICDN.md) * [AKAMAICDN](language-reference/domain-modifiers/AKAMAICDN.md)
* Amazon Route 53 * Amazon Route 53
* [R53_ALIAS](functions/domain/R53_ALIAS.md) * [R53_ALIAS](language-reference/domain-modifiers/R53_ALIAS.md)
* Azure DNS * Azure DNS
* [AZURE_ALIAS](functions/domain/AZURE_ALIAS.md) * [AZURE_ALIAS](language-reference/domain-modifiers/AZURE_ALIAS.md)
* Cloudflare DNS * Cloudflare DNS
* [CF_REDIRECT](functions/domain/CF_REDIRECT.md) * [CF_REDIRECT](language-reference/domain-modifiers/CF_REDIRECT.md)
* [CF_TEMP_REDIRECT](functions/domain/CF_TEMP_REDIRECT.md) * [CF_TEMP_REDIRECT](language-reference/domain-modifiers/CF_TEMP_REDIRECT.md)
* [CF_WORKER_ROUTE](functions/domain/CF_WORKER_ROUTE.md) * [CF_WORKER_ROUTE](language-reference/domain-modifiers/CF_WORKER_ROUTE.md)
* ClouDNS * ClouDNS
* [CLOUDNS_WR](functions/domain/CLOUDNS_WR.md) * [CLOUDNS_WR](language-reference/domain-modifiers/CLOUDNS_WR.md)
* NS1 * NS1
* [NS1_URLFWD](functions/domain/NS1_URLFWD.md) * [NS1_URLFWD](language-reference/domain-modifiers/NS1_URLFWD.md)
* Record Modifiers * Record Modifiers
* [TTL](functions/record/TTL.md) * [TTL](language-reference/record-modifiers/TTL.md)
* Service Provider specific * Service Provider specific
* Amazon Route 53 * Amazon Route 53
* [R53_ZONE](functions/record/R53_ZONE.md) * [R53_ZONE](language-reference/record-modifiers/R53_ZONE.md)
* [R53_EVALUATE_TARGET_HEALTH](functions/record/R53\_EVALUATE\_TARGET\_HEALTH.md) * [R53_EVALUATE_TARGET_HEALTH](language-reference/record-modifiers/R53\_EVALUATE\_TARGET\_HEALTH.md)
* [Why CNAME/MX/NS targets require a "dot"](why-the-dot.md) * [Why CNAME/MX/NS targets require a "dot"](why-the-dot.md)
## Service Providers ## Service Providers

View File

@ -79,9 +79,9 @@ popd
func matrixData() *FeatureMatrix { func matrixData() *FeatureMatrix {
const ( const (
... ...
DomainModifierCaa = "[`CAA`](functions/domain/CAA.md)" DomainModifierCaa = "[`CAA`](language-reference/domain-modifiers/CAA.md)"
+ DomainModifierFoo = "[`FOO`](functions/domain/FOO.md)" + DomainModifierFoo = "[`FOO`](language-reference/domain-modifiers/FOO.md)"
DomainModifierLoc = "[`LOC`](functions/domain/LOC.md)" DomainModifierLoc = "[`LOC`](language-reference/domain-modifiers/LOC.md)"
... ...
) )
matrix := &FeatureMatrix{ matrix := &FeatureMatrix{
@ -153,7 +153,7 @@ example we removed `providers.CanUseCAA` from the
Add a function to `pkg/js/helpers.js` for the new record type. This Add a function to `pkg/js/helpers.js` for the new record type. This
is the JavaScript file that defines `dnsconfig.js`'s functions like is the JavaScript file that defines `dnsconfig.js`'s functions like
[`A()`](functions/domain/A.md) and [`MX()`](functions/domain/MX.md). Look at the definition of `A`, `MX` and `CAA` for good [`A()`](language-reference/domain-modifiers/A.md) and [`MX()`](language-reference/domain-modifiers/MX.md). Look at the definition of `A`, `MX` and `CAA` for good
examples to use as a base. examples to use as a base.
Please add the function alphabetically with the others. Also, please run Please add the function alphabetically with the others. Also, please run
@ -292,7 +292,7 @@ tests, please ask!
## Step 8: Write documentation ## Step 8: Write documentation
Add a new Markdown file to `documentation/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 `documentation/language-reference/domain-modifiers`. 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`. - `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. - `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.
@ -307,24 +307,24 @@ Add the new file `FOO.md` to the documentation table of contents [`documentation
... ...
* Domain Modifiers * Domain Modifiers
... ...
* [DnsProvider](functions/domain/DnsProvider.md) * [DnsProvider](language-reference/domain-modifiers/DnsProvider.md)
+ * [FOO](functions/domain/FOO.md) + * [FOO](language-reference/domain-modifiers/FOO.md)
* [FRAME](functions/domain/FRAME.md) * [FRAME](language-reference/domain-modifiers/FRAME.md)
... ...
* Service Provider specific * Service Provider specific
... ...
* ClouDNS * ClouDNS
* [CLOUDNS_WR](functions/domain/CLOUDNS_WR.md) * [CLOUDNS_WR](language-reference/domain-modifiers/CLOUDNS_WR.md)
+ * ASDF + * ASDF
+ * [ASDF_NINJA](function/domain/ASDF_NINJA.md) + * [ASDF_NINJA](language-reference/domain-modifiers/ASDF_NINJA.md)
* NS1 * NS1
* [NS1_URLFWD](functions/domain/NS1_URLFWD.md) * [NS1_URLFWD](language-reference/domain-modifiers/NS1_URLFWD.md)
... ...
* Record Modifiers * Record Modifiers
... ...
* [DMARC_BUILDER](functions/domain/DMARC_BUILDER.md) * [DMARC_BUILDER](language-reference/domain-modifiers/DMARC_BUILDER.md)
+ * [FOO_HELPER](functions/record/FOO_HELPER.md) + * [FOO_HELPER](language-reference/record-modifiers/FOO_HELPER.md)
* [SPF_BUILDER](functions/domain/SPF_BUILDER.md) * [SPF_BUILDER](language-reference/domain-modifiers/SPF_BUILDER.md)
... ...
``` ```
{% endcode %} {% endcode %}

View File

@ -4,10 +4,10 @@ Problem: It is difficult to get CAA and other records exactly right.
Solution: Use a "builder" to construct it for you. Solution: Use a "builder" to construct it for you.
* [CAA Builder](functions/domain/CAA_BUILDER.md) * [CAA Builder](language-reference/domain-modifiers/CAA_BUILDER.md)
* [DMARC Builder](functions/domain/DMARC_BUILDER.md) * [DMARC Builder](language-reference/domain-modifiers/DMARC_BUILDER.md)
* [M365_BUILDER](functions/domain/M365_BUILDER.md) * [M365_BUILDER](language-reference/domain-modifiers/M365_BUILDER.md)
* [SPF Optimizer](functions/domain/SPF_BUILDER.md) * [SPF Optimizer](language-reference/domain-modifiers/SPF_BUILDER.md)
# Trailing commas # Trailing commas
@ -21,7 +21,7 @@ Because the DNSControl JavaScript DSL has no trailing commas, you can use the `E
**NOTE**: `END` is just an alias for `{}`, which is ignored by DNSControl. **NOTE**: `END` is just an alias for `{}`, which is ignored by DNSControl.
{% endhint %} {% endhint %}
Let's take an example with domain: `example.com`. We have recorded the [A-record](functions/domain/A.md) 'foo' configured. Let's take an example with domain: `example.com`. We have recorded the [A-record](language-reference/domain-modifiers/A.md) 'foo' configured.
{% code title="dnsconfig.js" %} {% code title="dnsconfig.js" %}
```javascript ```javascript
@ -31,7 +31,7 @@ D("example.com", REG_MY_PROVIDER, DnsProvider(DSP_MY_PROVIDER),
``` ```
{% endcode %} {% endcode %}
Let's say we want to add an [A record](functions/domain/A.md) 'bar' to this domain. Let's say we want to add an [A record](language-reference/domain-modifiers/A.md) 'bar' to this domain.
{% code title="dnsconfig.js" %} {% code title="dnsconfig.js" %}
```javascript ```javascript
@ -221,5 +221,5 @@ domain exists, who requested it, any associated ticket numbers, and so
on. on.
We also comment the individual parts of a record. Look at the [SPF We also comment the individual parts of a record. Look at the [SPF
Optimizer](functions/domain/SPF_BUILDER.md) example. Each part of Optimizer](language-reference/domain-modifiers/SPF_BUILDER.md) example. Each part of
the SPF record has a comment. the SPF record has a comment.

View File

@ -51,7 +51,7 @@ D("example.com", REG_MY_PROVIDER, DnsProvider(DSP_R53),
{% endcode %} {% endcode %}
{% hint style="info" %} {% hint style="info" %}
**NOTE**: The [`IP()`](functions/global/IP.md) function doesn't currently support IPv6 (PRs welcome!). IPv6 addresses are strings. **NOTE**: The [`IP()`](language-reference/top-level-functions/IP.md) function doesn't currently support IPv6 (PRs welcome!). IPv6 addresses are strings.
{% endhint %} {% endhint %}
{% code title="dnsconfig.js" %} {% code title="dnsconfig.js" %}
```javascript ```javascript

View File

@ -1,15 +0,0 @@
---
name: R53_ZONE
parameters:
- zone_id
parameter_types:
zone_id: string
ts_return: DomainModifier & RecordModifier
provider: ROUTE53
---
`R53_ZONE` lets you specify the AWS Zone ID for an entire domain ([`D()`](../global/D.md)) or a specific [`R53_ALIAS()`](../domain/R53_ALIAS.md) record.
When used with [`D()`](../global/D.md), it sets the zone id of the domain. This can be used to differentiate between split horizon domains in public and private zones. See this [example](../../providers/route53.md#split-horizon) in the [Amazon Route 53 provider page](../../providers/route53.md).
When used with [`R53_ALIAS()`](../domain/R53_ALIAS.md) it sets the required Route53 hosted zone id in a R53_ALIAS record. See [`R53_ALIAS()`](../domain/R53_ALIAS.md) documentation for details.

View File

@ -18,7 +18,7 @@ Take advantage of the advanced features. Use macros and variables for easier upd
* Supports 35+ [DNS Providers](providers.md) including [BIND](providers/bind.md), [AWS Route 53](providers/route53.md), [Google DNS](providers/gcloud.md), and [name.com](providers/namedotcom.md). * Supports 35+ [DNS Providers](providers.md) including [BIND](providers/bind.md), [AWS Route 53](providers/route53.md), [Google DNS](providers/gcloud.md), and [name.com](providers/namedotcom.md).
* [Apply CI/CD principles](ci-cd-gitlab.md) to DNS: Unit-tests, system-tests, automated deployment. * [Apply CI/CD principles](ci-cd-gitlab.md) to DNS: Unit-tests, system-tests, automated deployment.
* All the benefits of Git (or any VCS) for your DNS zone data. View history. Accept PRs. * All the benefits of Git (or any VCS) for your DNS zone data. View history. Accept PRs.
* Optimize DNS with [SPF optimizer](functions/domain/SPF_BUILDER.md). Detect too many lookups. Flatten includes. * Optimize DNS with [SPF optimizer](language-reference/domain-modifiers/SPF_BUILDER.md). Detect too many lookups. Flatten includes.
* Runs on Linux, Windows, Mac, or any operating system supported by Go. * Runs on Linux, Windows, Mac, or any operating system supported by Go.
* Enable/disable Cloudflare proxying (the "orange cloud" button) directly from your DNSControl files. * Enable/disable Cloudflare proxying (the "orange cloud" button) directly from your DNSControl files.
* [Assign an IP address to a constant](examples.md#variables-for-common-ip-addresses) and use the variable name throughout the configuration. Need to change the IP address globally? Just change the variable and "recompile". * [Assign an IP address to a constant](examples.md#variables-for-common-ip-addresses) and use the variable name throughout the configuration. Need to change the IP address globally? Just change the variable and "recompile".

View File

@ -12,7 +12,7 @@ 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. 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](../global/IP.md). The address should be an ip address, either a string, or a numeric value obtained via [IP](../top-level-functions/IP.md).
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. 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.

View File

@ -20,7 +20,7 @@ parameter_types:
--- ---
DNSControl contains a `CAA_BUILDER` which can be used to simply create DNSControl contains a `CAA_BUILDER` which can be used to simply create
[`CAA()`](../domain/CAA.md) records for your domains. Instead of creating each [`CAA()`](../domain/CAA.md) record [`CAA()`](../domain-modifiers/CAA.md) records for your domains. Instead of creating each [`CAA()`](../domain-modifiers/CAA.md) record
individually, you can simply configure your report mail address, the individually, you can simply configure your report mail address, the
authorized certificate authorities and the builder cares about the rest. authorized certificate authorities and the builder cares about the rest.

View File

@ -9,7 +9,7 @@ safety check for the entire domain.
It replaces the per-record `IGNORE_NAME_DISABLE_SAFETY_CHECK()` which is It replaces the per-record `IGNORE_NAME_DISABLE_SAFETY_CHECK()` which is
deprecated as of DNSControl v4.0.0.0. deprecated as of DNSControl v4.0.0.0.
See [`IGNORE()`](../domain/IGNORE.md) for more information. See [`IGNORE()`](../domain-modifiers/IGNORE.md) for more information.
## Syntax ## Syntax

View File

@ -6,10 +6,10 @@ parameter_types:
ttl: Duration ttl: Duration
--- ---
DefaultTTL sets the TTL for all subsequent records following it in a domain that do not explicitly set one with [`TTL`](../record/TTL.md). If neither `DefaultTTL` or `TTL` exist for a record, DefaultTTL sets the TTL for all subsequent records following it in a domain that do not explicitly set one with [`TTL`](../record-modifiers/TTL.md). If neither `DefaultTTL` or `TTL` exist for a record,
the record will inherit the DNSControl global internal default of 300 seconds. See also [`DEFAULTS`](../global/DEFAULTS.md) to override the internal defaults. the record will inherit the DNSControl global internal default of 300 seconds. See also [`DEFAULTS`](../top-level-functions/DEFAULTS.md) to override the internal defaults.
NS records are currently a special case, and do not inherit from `DefaultTTL`. See [`NAMESERVER_TTL`](../domain/NAMESERVER_TTL.md) to set a default TTL for all NS records. NS records are currently a special case, and do not inherit from `DefaultTTL`. See [`NAMESERVER_TTL`](../domain-modifiers/NAMESERVER_TTL.md) to set a default TTL for all NS records.
{% code title="dnsconfig.js" %} {% code title="dnsconfig.js" %}
@ -22,5 +22,5 @@ D("example.com", REG_MY_PROVIDER, DnsProvider(DSP_MY_PROVIDER),
``` ```
{% endcode %} {% endcode %}
The DefaultTTL duration is the same format as [`TTL`](../record/TTL.md), an integer number of seconds The DefaultTTL duration is the same format as [`TTL`](../record-modifiers/TTL.md), an integer number of seconds
or a string with a unit such as `"4d"`. or a string with a unit such as `"4d"`.

View File

@ -9,7 +9,7 @@ parameter_types:
--- ---
DnsProvider indicates that the specified provider should be used to manage DnsProvider indicates that the specified provider should be used to manage
records for this domain. The name must match the name used with [NewDnsProvider](../global/NewDnsProvider.md). records for this domain. The name must match the name used with [NewDnsProvider](../top-level-functions/NewDnsProvider.md).
The nsCount parameter determines how the nameservers will be managed from this provider. The nsCount parameter determines how the nameservers will be managed from this provider.

View File

@ -26,11 +26,11 @@ records.
Technically `IGNORE_NAME` is a promise that DNSControl will not modify or Technically `IGNORE_NAME` is a promise that DNSControl will not modify or
delete existing records that match particular patterns. It is like delete existing records that match particular patterns. It is like
[`NO_PURGE`](../domain/NO_PURGE.md) that matches only specific records. [`NO_PURGE`](../domain-modifiers/NO_PURGE.md) that matches only specific records.
Including a record that is ignored is considered an error and may have Including a record that is ignored is considered an error and may have
undefined behavior. This safety check can be disabled using the undefined behavior. This safety check can be disabled using the
[`DISABLE_IGNORE_SAFETY_CHECK`](../domain/DISABLE_IGNORE_SAFETY_CHECK.md) feature. [`DISABLE_IGNORE_SAFETY_CHECK`](../domain-modifiers/DISABLE_IGNORE_SAFETY_CHECK.md) feature.
## Syntax ## Syntax
@ -45,7 +45,7 @@ IGNORE(labelSpec):
{% endcode %} {% endcode %}
* `labelSpec` is a glob that matches the DNS label. For example `"foo"` or `"foo*"`. `"*"` matches all labels, as does the empty string (`""`). * `labelSpec` is a glob that matches the DNS label. For example `"foo"` or `"foo*"`. `"*"` matches all labels, as does the empty string (`""`).
* `typeSpec` is a comma-separated list of DNS types. For example `"A"` matches DNS A records, `"A,CNAME"` matches both A and CNAME records. `"*"` matches any DNS type, as does the empty string (`""`). * `typeSpec` is a comma-separated list of DNS types. For example `"A"` matches DNS A records, `"A,CNAME"` matches both A and CNAME records. `"*"` matches any DNS type, as does the empty string (`""`).
* `targetSpec` is a glob that matches the DNS target. For example `"foo"` or `"foo*"`. `"*"` matches all targets, as does the empty string (`""`). * `targetSpec` is a glob that matches the DNS target. For example `"foo"` or `"foo*"`. `"*"` matches all targets, as does the empty string (`""`).
`typeSpec` and `targetSpec` default to `"*"` if they are omitted. `typeSpec` and `targetSpec` default to `"*"` if they are omitted.

View File

@ -10,7 +10,7 @@ parameter_types:
NAMESERVER_TTL sets the TTL on the domain apex NS RRs defined by [`NAMESERVER`](NAMESERVER.md). 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`](../record/TTL.md) for examples. The value can be an integer or a string. See [`TTL`](../record-modifiers/TTL.md) for examples.
{% code title="dnsconfig.js" %} {% code title="dnsconfig.js" %}
```javascript ```javascript
@ -36,4 +36,4 @@ D("example.com", REG_MY_PROVIDER, DnsProvider(DSP_MY_PROVIDER),
``` ```
{% endcode %} {% endcode %}
To apply a default TTL to all other record types, see [`DefaultTTL`](../domain/DefaultTTL.md) To apply a default TTL to all other record types, see [`DefaultTTL`](../domain-modifiers/DefaultTTL.md)

View File

@ -53,7 +53,7 @@ are all equivalent:
* `PTR("4.3", ...` // Assuming the domain is `2.1.in-addr.arpa` * `PTR("4.3", ...` // Assuming the domain is `2.1.in-addr.arpa`
All magic is RFC2317-aware. We use the first format listed in the All magic is RFC2317-aware. We use the first format listed in the
RFC for both [`REV()`](../global/REV.md) and `PTR()`. The format is RFC for both [`REV()`](../top-level-functions/REV.md) and `PTR()`. The format is
`FIRST/MASK.C.B.A.in-addr.arpa` where `FIRST` is the first IP address `FIRST/MASK.C.B.A.in-addr.arpa` where `FIRST` is the first IP address
of the zone, `MASK` is the netmask of the zone (25-31 inclusive), of the zone, `MASK` is the netmask of the zone (25-31 inclusive),
and A, B, C are the first 3 octets of the IP address. For example and A, B, C are the first 3 octets of the IP address. For example

View File

@ -29,7 +29,7 @@ The Target can be any of:
* _S3 bucket_ (configured as website): specify the domain name of the Amazon S3 website endpoint in which you configured the bucket (for instance s3-website-us-east-2.amazonaws.com). For the available values refer to the [Amazon S3 Website Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region). * _S3 bucket_ (configured as website): specify the domain name of the Amazon S3 website endpoint in which you configured the bucket (for instance s3-website-us-east-2.amazonaws.com). For the available values refer to the [Amazon S3 Website Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region).
* _Another Route53 record_: specify the value of the name of another record in the same hosted zone. * _Another Route53 record_: specify the value of the name of another record in the same hosted zone.
For all the target type, excluding 'another record', you have to specify the `Zone ID` of the target. This is done by using the [`R53_ZONE`](../record/R53_ZONE.md) record modifier. For all the target type, excluding 'another record', you have to specify the `Zone ID` of the target. This is done by using the [`R53_ZONE`](../record-modifiers/R53_ZONE.md) record modifier.
The zone id can be found depending on the target type: The zone id can be found depending on the target type:
@ -39,7 +39,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](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) * _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](https://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). * _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).
Target health evaluation can be enabled with the [`R53_EVALUATE_TARGET_HEALTH`](../record/R53\_EVALUATE\_TARGET\_HEALTH.md) record modifier. Target health evaluation can be enabled with the [`R53_EVALUATE_TARGET_HEALTH`](../record-modifiers/R53\_EVALUATE\_TARGET\_HEALTH.md) record modifier.
{% code title="dnsconfig.js" %} {% code title="dnsconfig.js" %}
```javascript ```javascript

View File

@ -87,7 +87,7 @@ double quotes, back-ticks, or other chars.
#### How can you tell if a provider will support a particular `TXT()` record? #### How can you tell if a provider will support a particular `TXT()` record?
Include the `TXT()` record in a [`D()`](../global/D.md) as usual, along Include the `TXT()` record in a [`D()`](../top-level-functions/D.md) as usual, along
with the `DnsProvider()` for that provider. Run `dnscontrol check` to with the `DnsProvider()` for that provider. Run `dnscontrol check` to
see if any errors are produced. The check command does not talk to see if any errors are produced. The check command does not talk to
the provider's API, thus permitting you to do this without having an the provider's API, thus permitting you to do this without having an

View File

@ -8,4 +8,4 @@ ts_return: RecordModifier
provider: ROUTE53 provider: ROUTE53
--- ---
`R53_EVALUATE_TARGET_HEALTH` lets you enable target health evaluation for a [`R53_ALIAS()`](../domain/R53_ALIAS.md) record. Omitting `R53_EVALUATE_TARGET_HEALTH()` from `R53_ALIAS()` set the behavior to false. `R53_EVALUATE_TARGET_HEALTH` lets you enable target health evaluation for a [`R53_ALIAS()`](../domain-modifiers/R53_ALIAS.md) record. Omitting `R53_EVALUATE_TARGET_HEALTH()` from `R53_ALIAS()` set the behavior to false.

View File

@ -0,0 +1,15 @@
---
name: R53_ZONE
parameters:
- zone_id
parameter_types:
zone_id: string
ts_return: DomainModifier & RecordModifier
provider: ROUTE53
---
`R53_ZONE` lets you specify the AWS Zone ID for an entire domain ([`D()`](../top-level-functions/D.md)) or a specific [`R53_ALIAS()`](../domain-modifiers/R53_ALIAS.md) record.
When used with [`D()`](../top-level-functions/D.md), it sets the zone id of the domain. This can be used to differentiate between split horizon domains in public and private zones. See this [example](../../providers/route53.md#split-horizon) in the [Amazon Route 53 provider page](../../providers/route53.md).
When used with [`R53_ALIAS()`](../domain-modifiers/R53_ALIAS.md) it sets the required Route53 hosted zone id in a R53_ALIAS record. See [`R53_ALIAS()`](../domain-modifiers/R53_ALIAS.md) documentation for details.

View File

@ -7,7 +7,7 @@ parameter_types:
--- ---
TTL sets the TTL for a single record only. This will take precedence TTL sets the TTL for a single record only. This will take precedence
over the domain's [DefaultTTL](../domain/DefaultTTL.md) if supplied. over the domain's [DefaultTTL](../domain-modifiers/DefaultTTL.md) if supplied.
The value can be: The value can be:

View File

@ -12,11 +12,11 @@ parameter_types:
`D` adds a new Domain for DNSControl to manage. The first two arguments are required: the domain name (fully qualified `example.com` without a trailing dot), and the `D` adds a new Domain for DNSControl to manage. The first two arguments are required: the domain name (fully qualified `example.com` without a trailing dot), and the
name of the registrar (as previously declared with [NewRegistrar](NewRegistrar.md)). Any number of additional arguments may be included to add DNS Providers with [DNSProvider](NewDnsProvider.md), name of the registrar (as previously declared with [NewRegistrar](NewRegistrar.md)). Any number of additional arguments may be included to add DNS Providers with [DNSProvider](NewDnsProvider.md),
add records with [A](../domain/A.md), [CNAME](../domain/CNAME.md), and so forth, or add metadata. add records with [A](../domain-modifiers/A.md), [CNAME](../domain-modifiers/CNAME.md), and so forth, or add metadata.
Modifier arguments are processed according to type as follows: Modifier arguments are processed according to type as follows:
- A function argument will be called with the domain object as it's only argument. Most of the [built-in modifier functions](https://docs.dnscontrol.org/language-reference/domain-modifiers) return such functions. - A function argument will be called with the domain object as it's only argument. Most of the [built-in modifier functions](https://docs.dnscontrol.org/language-reference/domain-modifiers-modifiers) return such functions.
- An object argument will be merged into the domain's metadata collection. - An object argument will be merged into the domain's metadata collection.
- An array argument will have all of it's members evaluated recursively. This allows you to combine multiple common records or modifiers into a variable that can - An array argument will have all of it's members evaluated recursively. This allows you to combine multiple common records or modifiers into a variable that can
be used like a macro in multiple domains. be used like a macro in multiple domains.

View File

@ -11,7 +11,7 @@ arguments passed as if they were the first modifiers in the argument list.
## Example ## Example
We want to create backup zone files for all domains, but not actually register them. Also create a [`DefaultTTL`](../domain/DefaultTTL.md). We want to create backup zone files for all domains, but not actually register them. Also create a [`DefaultTTL`](../domain-modifiers/DefaultTTL.md).
The domain `example.com` will have the defaults set. The domain `example.com` will have the defaults set.
{% code title="dnsconfig.js" %} {% code title="dnsconfig.js" %}

View File

@ -40,6 +40,6 @@ D("example.com", REG_MY_PROVIDER, DnsProvider(DSP_MY_PROVIDER),
{% endcode %} {% endcode %}
{% hint style="info" %} {% hint style="info" %}
**NOTE**: The [`NO_PURGE`](../domain/NO_PURGE.md) is used out of abundance of caution but since no **NOTE**: The [`NO_PURGE`](../domain-modifiers/NO_PURGE.md) is used out of abundance of caution but since no
`DnsProvider()` statements exist, no updates would be performed. `DnsProvider()` statements exist, no updates would be performed.
{% endhint %} {% endhint %}

View File

@ -44,5 +44,5 @@ D("example.com", REG_NAMEDOTCOM,
{% endcode %} {% endcode %}
{% hint style="info" %} {% hint style="info" %}
**NOTE**: The [`NO_PURGE`](../domain/NO_PURGE.md) is used to prevent DNSControl from changing the records. **NOTE**: The [`NO_PURGE`](../domain-modifiers/NO_PURGE.md) is used to prevent DNSControl from changing the records.
{% endhint %} {% endhint %}

View File

@ -29,7 +29,7 @@ defined as separate domains via separate [`D()`](D.md) statements, then
not `domain.tld`. not `domain.tld`.
Some operators only act on an apex domain (e.g. Some operators only act on an apex domain (e.g.
[`CF_REDIRECT`](../domain/CF_REDIRECT.md) and [`CF_TEMP_REDIRECT`](../domain/CF_TEMP_REDIRECT.md)). Using them [`CF_REDIRECT`](../domain-modifiers/CF_REDIRECT.md) and [`CF_TEMP_REDIRECT`](../domain-modifiers/CF_TEMP_REDIRECT.md)). Using them
in a `D_EXTEND` subdomain may not be what you expect. in a `D_EXTEND` subdomain may not be what you expect.
{% code title="dnsconfig.js" %} {% code title="dnsconfig.js" %}

View File

@ -28,7 +28,7 @@ Notifications are set up in your credentials JSON file. They will use the `notif
If you want to send a notification, add the `--notify` flag to the `dnscontrol preview` or `dnscontrol push` commands. If you want to send a notification, add the `--notify` flag to the `dnscontrol preview` or `dnscontrol push` commands.
Below is an example where we add [the A record](functions/domain/A.md) `foo` and display the notification output. Below is an example where we add [the A record](language-reference/domain-modifiers/A.md) `foo` and display the notification output.
{% code title="dnsconfig.js" %} {% code title="dnsconfig.js" %}
```diff ```diff

View File

@ -12,8 +12,8 @@ a provider that supports it, we'd love your contribution to ensure it works corr
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. 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.
<!-- provider-matrix-start --> <!-- provider-matrix-start -->
| Provider name | Official Support | DNS Provider | Registrar | Concurrency Verified | [`ALIAS`](functions/domain/ALIAS.md) | [`CAA`](functions/domain/CAA.md) | [`AUTODNSSEC`](functions/domain/AUTODNSSEC_ON.md) | [`LOC`](functions/domain/LOC.md) | [`NAPTR`](functions/domain/NAPTR.md) | [`PTR`](functions/domain/PTR.md) | [`SOA`](functions/domain/SOA.md) | [`SRV`](functions/domain/SRV.md) | [`SSHFP`](functions/domain/SSHFP.md) | [`TLSA`](functions/domain/TLSA.md) | [`DS`](functions/domain/DS.md) | [`DHCID`](functions/domain/DHCID.md) | [`DNAME`](functions/domain/DNAME.md) | dual host | create-domains | get-zones | | Provider name | Official Support | DNS Provider | Registrar | Concurrency Verified | [`ALIAS`](language-reference/domain-modifiers/ALIAS.md) | [`CAA`](language-reference/domain-modifiers/CAA.md) | [`AUTODNSSEC`](language-reference/domain-modifiers/AUTODNSSEC_ON.md) | [`LOC`](language-reference/domain-modifiers/LOC.md) | [`NAPTR`](language-reference/domain-modifiers/NAPTR.md) | [`PTR`](language-reference/domain-modifiers/PTR.md) | [`SOA`](language-reference/domain-modifiers/SOA.md) | [`SRV`](language-reference/domain-modifiers/SRV.md) | [`SSHFP`](language-reference/domain-modifiers/SSHFP.md) | [`TLSA`](language-reference/domain-modifiers/TLSA.md) | [`DS`](language-reference/domain-modifiers/DS.md) | [`DHCID`](language-reference/domain-modifiers/DHCID.md) | [`DNAME`](language-reference/domain-modifiers/DNAME.md) | dual host | create-domains | get-zones |
| ------------- | ---------------- | ------------ | --------- | -------------------- | ------------------------------------ | -------------------------------- | ------------------------------------------------- | -------------------------------- | ------------------------------------ | -------------------------------- | -------------------------------- | -------------------------------- | ------------------------------------ | ---------------------------------- | ------------------------------ | ------------------------------------ | ------------------------------------ | --------- | -------------- | --------- | | ------------- | ---------------- | ------------ | --------- | -------------------- | ------------------------------------------------------- | --------------------------------------------------- | -------------------------------------------------------------------- | --------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | ------------------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | --------- | -------------- | --------- |
| [`AKAMAIEDGEDNS`](providers/akamaiedgedns.md) | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❔ | ❔ | ✅ | ✅ | ✅ | | [`AKAMAIEDGEDNS`](providers/akamaiedgedns.md) | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❔ | ❔ | ✅ | ✅ | ✅ |
| [`AUTODNS`](providers/autodns.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ❔ | ❔ | ❌ | ❔ | ✅ | ❌ | ❌ | ❌ | ❔ | ❔ | ❌ | ❌ | ✅ | | [`AUTODNS`](providers/autodns.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ❔ | ❔ | ❌ | ❔ | ✅ | ❌ | ❌ | ❌ | ❔ | ❔ | ❌ | ❌ | ✅ |
| [`AXFRDDNS`](providers/axfrddns.md) | ❌ | ✅ | ❌ | ❌ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ❔ | ✅ | ❔ | ❌ | ❌ | ❌ | | [`AXFRDDNS`](providers/axfrddns.md) | ❌ | ✅ | ❌ | ❌ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ❔ | ✅ | ❔ | ❌ | ❌ | ❌ |

View File

@ -80,10 +80,10 @@ D("example.com", REG_NONE, DnsProvider(DSP_R53),
## Split horizon ## Split horizon
This provider supports split horizons using the [`R53_ZONE()`](../functions/record/R53_ZONE.md) domain function. This provider supports split horizons using the [`R53_ZONE()`](../language-reference/record-modifiers/R53_ZONE.md) domain function.
In this example the domain `testzone.net` appears in the same account twice, In this example the domain `testzone.net` appears in the same account twice,
each with different zone IDs specified using [`R53_ZONE()`](../functions/record/R53_ZONE.md). each with different zone IDs specified using [`R53_ZONE()`](../language-reference/record-modifiers/R53_ZONE.md).
{% code title="dnsconfig.js" %} {% code title="dnsconfig.js" %}
```javascript ```javascript

View File

@ -64,7 +64,7 @@ TransIP depends on a TransIP personal access token.
> "When multiple or none of the current DNS entries matches, the response will be an error with http status code 406." — _[TransIP - REST API - Update single DNS entry](https://api.transip.nl/rest/docs.html#domains-dns-patch)_ > "When multiple or none of the current DNS entries matches, the response will be an error with http status code 406." — _[TransIP - REST API - Update single DNS entry](https://api.transip.nl/rest/docs.html#domains-dns-patch)_
This makes it not possible, for example, to update a [`CAA()`](../functions/domain/CAA.md) record in one update. Instead, the old DNS entry is deleted and the replacement is added. You'll see `[1/2]` and `[2/2]` in the DNSControl output whenever this happens. This makes it not possible, for example, to update a [`CAA()`](../language-reference/domain-modifiers/CAA.md) record in one update. Instead, the old DNS entry is deleted and the replacement is added. You'll see `[1/2]` and `[2/2]` in the DNSControl output whenever this happens.
### Example with a `CAA_BUILDER()` ### Example with a `CAA_BUILDER()`

View File

@ -23,7 +23,7 @@ Within the git repo, docs are grouped:
* [`documentation/`](https://github.com/StackExchange/dnscontrol/tree/main/documentation): general docs * [`documentation/`](https://github.com/StackExchange/dnscontrol/tree/main/documentation): general docs
* [`documentation/providers/`](https://github.com/StackExchange/dnscontrol/tree/main/documentation/providers/): One file per provider * [`documentation/providers/`](https://github.com/StackExchange/dnscontrol/tree/main/documentation/providers/): One file per provider
* [`documentation/functions/`](https://github.com/StackExchange/dnscontrol/tree/main/documentation/functions/): One file per `dnsconfig.js` language feature * [`documentation/language-reference/`](https://github.com/StackExchange/dnscontrol/tree/main/documentation/language-reference/): One file per `dnsconfig.js` language feature
* [`documentation/assets/FOO/`](https://github.com/StackExchange/dnscontrol/tree/main/documentation/assets/): Images for page FOO(PNGs only, please!) * [`documentation/assets/FOO/`](https://github.com/StackExchange/dnscontrol/tree/main/documentation/assets/): Images for page FOO(PNGs only, please!)
## How to add a new page? ## How to add a new page?
@ -33,10 +33,10 @@ Within the git repo, docs are grouped:
## Top-of-Document parameters ## Top-of-Document parameters
Files in the `documentation/functions/{record,domain,global}` subdirectories Files in the `documentation/language-reference/{record,domain,global}` subdirectories
have a header at the top that is used to populate other systems. have a header at the top that is used to populate other systems.
Here's an example from [`A`](functions/domain/A.md) Here's an example from [`A`](language-reference/domain-modifiers/A.md)
``` ```
--- ---
@ -193,7 +193,7 @@ However, the first mention on a page should always
be a link. Others are at the authors digression. be a link. Others are at the authors digression.
```markdown ```markdown
The [`PTR`](functions/domain/PTR.md) feature is helpful in LANs. The [`PTR`](language-reference/domain-modifiers/PTR.md) feature is helpful in LANs.
``` ```
#### Mentioning functions from the Source code #### Mentioning functions from the Source code
@ -207,7 +207,7 @@ The function `GetRegistrarCorrections()` returns...
#### Internal links #### Internal links
```markdown ```markdown
Blah blah blah [M365_BUILDER](functions/domain/M365_BUILDER.md) Blah blah blah [M365_BUILDER](language-reference/domain-modifiers/M365_BUILDER.md)
``` ```
{% hint style="info" %} {% hint style="info" %}

View File

@ -10,7 +10,7 @@ assigned bugs related to the provider in the future (unless
you designate someone else as the maintainer). More details you designate someone else as the maintainer). More details
[here](providers.md). [here](providers.md).
Please follow the [DNSControl Code Style Guide](https://docs.dnscontrol.org/developer-info/styleguide-code) and the [DNSControl Documentation Style Guide](https://docs.dnscontrol.org/developer-info/styleguide-doc). Please follow the [DNSControl Code Style Guide](styleguide-code.md) and the [DNSControl Documentation Style Guide](styleguide-doc.md).
## Overview ## Overview

View File

@ -1,7 +1,7 @@
var REG = NewRegistrar("Third-Party", "NONE"); var REG = NewRegistrar("Third-Party", "NONE");
var DNS = NewDnsProvider("Cloudflare", "CLOUDFLAREAPI"); var DNS = NewDnsProvider("Cloudflare", "CLOUDFLAREAPI");
// The example from docs/functions/global/D_EXTEND.md // The example from documentation/language-reference/top-level-functions/D_EXTEND.md
D("domain.tld", REG, DnsProvider(DNS), D("domain.tld", REG, DnsProvider(DNS),
A("@", "127.0.0.1"), // domain.tld A("@", "127.0.0.1"), // domain.tld