Many providers make their modifications in the order that changes comes. In
python3 this causes things to be inconsistently ordered. That mostly works, but
could result in hidenbugs (e.g. Route53Provider's batching could be completely
different based on the order it sees changes.) Sorting changes consistently
is a good thing and it shouldn't hurt situations where providers are already
doing their own ordering. All-in-all more consistent is better and we have to be
explicit with python 3.
Note that you can't specify a Host header for these which I believe will
complicate the ability to use this. Figuring that out will have to wait
until I or someone else has a use case for these...
This will ensure that deletes come before creates which are before upserts and
that records that uses aliases always come after their target (though implicitly
based on sorting types and not explicitly by looking at them.)
Route53 allows to specify an interval for its health checks.
To maintain backward compatibility, the default for this option
when ommited is 10 (fast check).
Route53 allows to monitor latency information on the dashboard
and using CloudWatch. While that is a nice to have function,
it is not necessary for a DNS failover scenario and increases
Route 53 costs.
To maintain backward compatibility, the default for this option
when ommited is true.
This will ensure unique refs for different zones. Without them the ref isn't
enough to make sure we're looking at the right thing (notably when we're
gc'ing old health checks.) This also adds a bit more debugging around health
checks.
Before, 1-2k record took ~10s and more than that was just painful, 5k took
forever. This records things to keep a dict of nodes with a set of records so
that we can quickly "jump" to the point we're looking for without having to
search. 10k records now takes ~5s.
- adds lenient flag to Record.new, problems during validation are just
warnings if it's true
- target populate calls during the plan phase pass lenient=True
- make all of the provider.populate call logging consistent including both
target and lenient
- add source=self to Record.new in a few places that were missing it