mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-09-24 05:55:44 +08:00
100 lines
3.6 KiB
Markdown
100 lines
3.6 KiB
Markdown
---
|
|
name: IMPORT_TRANSFORM
|
|
parameters:
|
|
- transform table
|
|
- domain
|
|
- ttl
|
|
- modifiers...
|
|
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 the records from another
|
|
domain, after making certain transformations and resetting the TTL.
|
|
|
|
Not all records are copied and transformed:
|
|
* The record must be record type A or CNAME.
|
|
* Records are skipped if they have a metadata key `import_transform_skip` (any non-null value).
|
|
* Records are skipped if a record of the same label+type already exist in the destination domain.
|
|
|
|
Example:
|
|
|
|
Suppose foo.com is a regular domain. bar.com is a regular domain,
|
|
but certain records should be the same as foo.com with these
|
|
exceptions: "bar.com" is added to the name, the TTL is changed to
|
|
300, if the IP address is between 1.2.3.10 and 1.2.3.20 then rewrite
|
|
the IP address to be based on 123.123.123.100 (i.e. .113 or .114).
|
|
|
|
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.
|
|
|
|
```text
|
|
foo.com:
|
|
one.foo.com. IN A 1.2.3.1
|
|
two.foo.com. IN A 1.2.3.2
|
|
three.foo.com. IN A 1.2.3.13
|
|
four.foo.com. IN A 1.2.3.14
|
|
|
|
bar.com:
|
|
www.bar.com. IN 123.123.123.123
|
|
one.foo.com.bar.com. IN A 1.2.3.1
|
|
two.foo.com.bar.com. IN A 1.2.3.2
|
|
three.foo.com.bar.com. IN A 123.123.123.113
|
|
four.foo.com.bar.com. IN A 123.123.123.114
|
|
```
|
|
|
|
Here's how you'd implement this in DNSControl:
|
|
|
|
{% code title="dnsconfig.js" %}
|
|
```javascript
|
|
// Transforms that use newBase:
|
|
var TRANSFORM_CF = [
|
|
// 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
|
|
{ low: "2.4.6.80", high: "2.4.6.90", newBase: "123.123.123.200" }, // Another rule, just to show that you can have many.
|
|
]
|
|
// Transforms that use newIP
|
|
var TRANSFORM_FSTLY = [
|
|
// RANGE_START, RANGE_END, NEW_BASE
|
|
{ low: "1.2.3.10", high: "1.2.3.10", newIP: "123.123.123.100" }, // .10 is rewritten as 123.123.123.100
|
|
{ low: "2.4.6.20", high: "2.4.6.20", newIP: "123.123.123.200" }, // .20 is rewritten as 123.123.123.200
|
|
]
|
|
|
|
D("foo.com", REG_MY_PROVIDER, DnsProvider(DSP_MY_PROVIDER),
|
|
A("one","1.2.3.1"),
|
|
A("two","1.2.3.2"),
|
|
A("three","1.2.3.13"),
|
|
A("four","1.2.3.14"),
|
|
END);
|
|
|
|
D("bar.com", REG_MY_PROVIDER, DnsProvider(DSP_MY_PROVIDER),
|
|
A("www","123.123.123.123"),
|
|
IMPORT_TRANSFORM(TRANSFORM_CF, "foo.com", 300),
|
|
END);
|
|
|
|
D("baz.com", REG_MY_PROVIDER, DnsProvider(DSP_MY_PROVIDER),
|
|
A("www","123.123.123.123"),
|
|
IMPORT_TRANSFORM(TRANSFORM_FSTLY, "foo.com", 300),
|
|
END);
|
|
```
|
|
{% endcode %}
|
|
|
|
Transform rules are: `RANGE_START`, `RANGE_END`, `NEW_BASE` or `NEW_IP`.
|
|
|
|
Only one of `newBase` and `newBase` may be specified. If both are non-null the behavior is undefined.
|
|
|
|
`NEW_BASE` works as follows:
|
|
|
|
* An IP address. Rebase the IP address on this IP address. Extract the host part of the /24 and add it to the "new base" address.
|
|
* A list of IP addresses. For each A record, inject an A record for each item in the list: `newBase: ["1.2.3.100", "2.4.6.8.100"]` would produce 2 records for each A record.
|
|
* For CNAMEs, the `.internal` is appended to the end of the target.
|
|
|
|
`NEW_IP` works as follows:
|
|
|
|
* An IP address. Change the IP address of the A record to this IP address. If there are multiple A records at this label, only one A record is generated.
|
|
* A list of IP addresses. Not supported.
|
|
* For CNAMEs, the `.internal` is appended to the end of the target. (same as `NEW_BASE`)
|