BUNNY_DNS: Add support for Redirect record (#3472)

This commit is contained in:
Steven Rombauts 2025-03-07 15:07:25 +01:00 committed by GitHub
parent 38fd85af5d
commit 063d8b06e8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 28 additions and 8 deletions

View file

@ -61,9 +61,22 @@ records. You will need to generate an [API key](https://dash.bunny.net/account/s
If a domain does not exist in your Bunny account, DNSControl will automatically add it with the `push` command.
## Custom record types
Any custom record types like Script, Flatten or Pull Zone are currently not supported by this provider, except
those explicitely listed below. Such records will be completely ignored by DNSControl and left as-is.
### Redirect
You can configure Bunny's Redirect type with `BUNNY_DNS_RDR`:
{% code title="dnsconfig.js" %}
```javascript
BUNNY_DNS_RDR("@", "https://foo.bar"),
```
{% endcode %}
## Caveats
- Bunny DNS does not support dual-hosting or configuring custom TTLs for NS records on the zone apex.
- While custom nameservers are properly recognized by this provider, it is currently not possible to configure them.
- Any custom record types like Script, Redirect, Flatten or Pull Zone are currently not supported by this provider. Such
records will be completely ignored by DNSControl and left as-is.

View file

@ -129,7 +129,7 @@ func (dc *DomainConfig) Punycode() error {
// Set the target:
switch rec.Type { // #rtype_variations
case "ALIAS", "MX", "NS", "CNAME", "DNAME", "PTR", "SRV", "URL", "URL301", "FRAME", "R53_ALIAS", "AKAMAICDN", "CLOUDNS_WR", "PORKBUN_URLFWD":
case "ALIAS", "MX", "NS", "CNAME", "DNAME", "PTR", "SRV", "URL", "URL301", "FRAME", "R53_ALIAS", "AKAMAICDN", "CLOUDNS_WR", "PORKBUN_URLFWD", "BUNNY_DNS_RDR":
// These rtypes are hostnames, therefore need to be converted (unlike, for example, an AAAA record)
t, err := idna.ToASCII(rec.GetTargetField())
if err != nil {

View file

@ -1406,7 +1406,7 @@ var URL301 = recordBuilder('URL301');
var FRAME = recordBuilder('FRAME');
var CLOUDNS_WR = recordBuilder('CLOUDNS_WR');
var PORKBUN_URLFWD = recordBuilder('PORKBUN_URLFWD');
var BUNNY_DNS_RDR = recordBuilder('BUNNY_DNS_RDR');
// LOC_BUILDER_DD takes an object:
// label: The DNS label for the LOC record. (default: '@')
// x: Decimal X coordinate.

View file

@ -45,6 +45,8 @@ func init() {
}
providers.RegisterDomainServiceProviderType(providerName, fns, features)
providers.RegisterMaintainer(providerName, providerMaintainer)
providers.RegisterCustomRecordType("BUNNY_DNS_RDR", providerName, "")
}
func newBunnydns(settings map[string]string, _ json.RawMessage) (providers.DNSServiceProvider, error) {

View file

@ -61,6 +61,8 @@ func toRecordConfig(domain string, r *record) (*models.RecordConfig, error) {
var err error
switch rc.Type {
case "BUNNY_DNS_RDR":
err = rc.SetTarget(r.Value)
case "CAA":
err = rc.SetTargetCAA(r.Flags, r.Tag, recordValue)
case "MX":
@ -107,8 +109,6 @@ func recordTypeFromString(t string) recordType {
return recordTypeTXT
case "MX":
return recordTypeMX
case "REDIRECT":
return recordTypeRedirect
case "FLATTEN":
return recordTypeFlatten
case "PULL_ZONE":
@ -123,6 +123,8 @@ func recordTypeFromString(t string) recordType {
return recordTypeScript
case "NS":
return recordTypeNS
case "BUNNY_DNS_RDR":
return recordTypeRedirect
default:
panic(fmt.Errorf("BUNNY_DNS: rtype %v unimplemented", t))
}
@ -141,7 +143,7 @@ func recordTypeToString(t recordType) string {
case recordTypeMX:
return "MX"
case recordTypeRedirect:
return "REDIRECT"
return "BUNNY_DNS_RDR"
case recordTypeFlatten:
return "FLATTEN"
case recordTypePullZone:

View file

@ -31,7 +31,6 @@ func (b *bunnydnsProvider) GetZoneRecords(domain string, meta map[string]string)
// Define a list of record types that are currently not supported by this provider.
unsupportedTypes := []recordType{
recordTypeRedirect,
recordTypeFlatten,
recordTypePullZone,
recordTypeScript,
@ -63,6 +62,10 @@ func (b *bunnydnsProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, ex
rc.TTL = 0
}
if rc.Type == "BUNNY_DNS_RDR" {
rc.TTL = 0
}
if rc.Type == "ALIAS" {
rc.ChangeType("CNAME", dc.Name)
}