rwmcfa1
That did require making the initial decision that octoDNS would own the zone completely so that it could know it's safe to remove records that aren't configured, but later work with filters and processors does allow softening that requirement.
I've always had similar feelings about Terraform's state, in fact I started in on a prototype of an IaC system specifically to see if it was workable to avoid external state. The answer as far as that POC made it was yes. I was able to create VPCs, subnets, instances, to the point I stopped working on it. It was generally straightforward, but there was a hiccup for things that don't have a place to store metadata of some sort and the biggest issue was knowing when they were "owned" by the IaC.
I think some of the other issues that things would eventually run into would be around finding out what exists (again to be able to delete things.) The system would essentially have to list/iterate every object of every possible type in order to decide whether or not to delete them. Similar to octoDNS this could be simplified by making the assumption that anything that exists is managed, but that's not workable unless you're starting greenfield and it would still require calling every possible API to list things.
Anyway, I see why Terraform went the way it did, but I still wish it wasn't so. Thinking about it now makes me want to pick the POC back up...
(maintainer of octoDNS)
It's true that nothing extra is needed for simple/standard records, but once you start doing GeoDNS, failover, health check, etc. it's required.
In all cases thus far we've been able to find a way to store/indicate whatever we need.
(maintainer of octoDNS)
In order to make it possible for anyone at the company to make PRs, not just SRE team members, we had to minimize or eliminate the learning curve and YAML was the best option for that we could think of. In the past those 75 PRs would have instead been issues asking an engineer on the infrastructure team to make the changes. It's been a huge and positive shift.
Terraform requires creating a resource for each record and provider pair. It's good for orchestrating a single provider especially when you're otherwise creating associated resources with Terraform.
The custom DSL for each provider varies thought and I wasn't happy with my attempts at trying to abstract away which provider(s) things were going to using modules. The result wasn't simple enough that anyone at the company, not just engineers, could submit a PR for.
It also doesn't help with managing the records in the primary provider, requiring either working in a UI or writing using software like OctoDNS to manage it. It's definitely a good option for simpler and stable setups, neither of which is the case for us or many of the people I've talked to. If it fits a situation you have it's worth exploring.
There's an article on ZDnet, http://www.zdnet.com/article/github-open-sources-octodns-new... that does a good job of covering some of the reasons for it that is probably relivant to this.
There is a PowerDNS provider, https://github.com/github/octodns/blob/master/octodns/provid... which we use for some internal DNS purposes. We actually plan to talk about that in a future post to compliment this one's focus on our external DNS setup.
A lot of thought was put into making it relatively easy to add new ones. Writing the tests is generally the most involved part. There's a plan to add a doc on creating a new provider which I/we will hopefully get to soon.
Brute Force Puzzle Solving in JavaScript
Natural Sort Order with Zero Padding
High Performance Web: Asynchronous HTTP
Average Play Store Review Times
What Google gets right and where it fails
High Performance Web: Reducing Database Round Trips
Efficiently Querying for Nearby Things
Amazing hand drawn 360 degree panorama, page 8.
Django ALLOWED_HOSTS and Amazon Elastic Load Balancer
The Real Startup Curves
The Future of Comics
Rock stars are not overrated
The Only Good Ad Is One You Don't Have To See
Lies, Damned Lies, and Statistics
pixels of iPad screens: 768 * 7 = 5376 1024 * 3 = 3072 approximate dimensions: 51.75x27.5"