v4.28.0 #3893
tlimoncelli
announced in
Announcements
v4.28.0
#3893
Replies: 2 comments 2 replies
-
|
Thanks to @gvengel for reporting #3894! It seems that split horizons is totally broken in this release. If you use that feature, please hold off until we can ship a fix. |
Beta Was this translation helpful? Give feedback.
1 reply
-
|
Congrats on a large move forward! |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Greetings DNS fans!
This release needs extra testing
WARNING: This release may be a little unstable. Test carefully before putting into production especially if you use IDN (Unicode in domain names) or Cloudflare redirects (CF_REDIRECT, CF_TEMP_REDIRECT, CF_SINGLE_REDIRECT), or the BIND "filenameformat" feature.
We're using the Github feature to mark this as a "pre-release". It will be labeled as non-production ready. It will be marked as production ready in a few weeks, or we may just skip to a .1 release if bugs are found.
Volunteer changes:
Monthly video call is Mon, Dec 15, 2025
Our next "Monthly DNSControl Community Video Conference Call" is on Monday, Dec 15. Join in whether you are a new user with questions or an experienced developer that wants to discuss DNSControl internals. More details at #3840. All are invited!
There's so much new in this release!
New Providers!
IDN support for domain names! c11a523 (FEATURE: Fixing IDN support for domains #3879) (@tlimoncelli)
IDNA proposal #2874 (shout out to @KaiSchwarz-cnic for explaining the conventions that other SDKs use). I haven't implemented all the IDN-related features discussed, but this is a good start.
DNSControl now plays well with K8s's "external-dns" service! f1b30a1 (feat: Add IGNORE_EXTERNAL_DNS() for Kubernetes external-dns coexistence #3869) (@tridion)
AKAMAIEDGEDNS now supports ALIAS and AKAMAITLC records! 97209bc (AKAMAIEDGEDNS: Add ALIAS and AKAMAITLC support to the Akamai Edge DNS provider #3836) (@gvengel)
CLOUDFLAREAPI now supports LOC records ec9a9e2 (CLOUDFLARE: Add LOC support #3857) (@kevinji)
GANDI_V5 and BIND now support the RP record. This is the first record type to use the new "RecordConfig v2" system (see below).
INWX now runs concurrently! 6e42ccf (INWX: Enable concurrency support #3856) (@patschi)
INWX fixed to support their unexpected data-type breaking-change! 9aad292 (INWX: Fix INWX provider after their unexpected data-type breaking-change #3855) (@patschi)
The output of
--reportnow includes details about what changed! 9d4cb30 (feat(report): --report output now includes detailed list of changes #3835) (@kevinneufeld)And not to forget...
creds.jsonis zero length. (NEW FEATURE: Empty creds.json should not be an error #3844) (@tlimoncelli)Thanks to all contributors involved in this release! This is a community project and we couldn't do it without all of your contributions!
Cloudflare's Page Rules are gone.
POTENTIAL BREAKING CHANGE:
Cloudflare is removing support for Page Rules and converting them to "Single Redirects". Earlier this year DNSControl added a mechanism where Page Rules were optionally transpiled into Single Redirect regular expressions.
This translation is no longer optional. All code for Page Rules has been removed. CF_TEMP_REDIRECT and CF_REDIRECT simply generate CF_SINGLE_REDIRECT records.
The first time you run "push" with the new release, DNSControl will change the "name" field (removing the "001,", "002,", .... prefix). Also, the order of the rules may change. The order can be managed in Cloudflare's dashboard, DNSControl will not affect the order. (Though, in the future we'd like for DNSControl to enforce ordering too.)
Please "preview" and verify the changes before running "push".
BIND "filenameformat" changes
POTENTIAL BREAKING CHANGE:
Implementing the IDN changes meant some potential breaking changes to the "filenameformat" string used in the BIND provider. I think (I hope!) that the only configurations that will break are ones with uppercase Unicode runes. That said, please review the "filenameformat" section of the BIND documentation for details.
RecordConfig v2 (big news!)
DNSControl stores each DNS Record in a structure called a "RecordConfig". The format of this record was showing its age. It consumes more memory as more record types are supported, it isn't flexible, it isn't very OO, and adding new record types is very difficult. In fact, the instructions for adding new types is many pages long. Worst of all, code for each record type is splattered all over the code base instead of being centralized to one place.
About a year ago I started working on prototypes that would fix these problems. There were many challenges. How could we make adding new record types super easy? How could we migrate a lot of the work done in JavaScript to the main Go code (which would make it easier to write unit tests and use more advanced debugging tools)? How could we do all that and not break old code?
The first 2 attempts were failures but I learned a lot. In particular I learned that it wasn't feasible to convert all the existing record types immediately and instead I could make the old and new system coexist. Converting older types could come later.
I'm excited to announce "RecordConfig v2"!
In this release RP and CF_SINGLE_REDIRECT are the only record types that use v2. One is entirely new to DNSControl, the other is an old type that's been migrated. That proves the concept works. Converting existing types will happen over the next year.
The original RecordConfig was designed in 2014. We're 11+ years smarter both about how to best use Go and what is important (and not important) to DNSControl users.
All of this is below the surface. It doesn't affect the user's experience or the format of dnsconfig.js. However in the future users will appreciate new record types and "builders" being added more rapidly and with better stability.
This change was low risk in that not many users use RP or CF_SINGLE_REDIRECT. However the change did affect many areas of the code base so please test carefully before putting v4.28.0 into production.
Feedback is appreciated!
P.S. If you are interested in converting existing types to the new system, please ping me!
Changelog
Major features:
Provider-specific changes:
Documentation:
CI/CD:
Dependencies:
Other changes and improvements:
Deprecation warnings
Warning
Install
macOS and Linux
Install with Homebrew (recommended)
Using with Docker
You can use the Docker image from Docker hub or GitHub Container Registry.
docker run --rm -it -v "$(pwd):/dns" ghcr.io/stackexchange/dnscontrol previewAnywhere else
Alternatively, you can install the latest binary (or the apt/rpm/deb/archlinux package) from this page.
Or, if you have Go installed, you can install the latest version of DNSControl with the following command:
Update
Update to the latest version depends on how you choose to install
dnscontrolon your machine.Update with Homebrew
Alternatively, you can grab the latest binary (or the apt/rpm/deb package) from this page.
This discussion was created from the release v4.28.0.
Beta Was this translation helpful? Give feedback.
All reactions