diff --git a/CHANGELOG.md b/CHANGELOG.md index 0df45b4..9c37546 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,115 +1,115 @@ ## v1.11.? - 2025-??-?? - ??? -* Correct type-o in name of AcmeManagingProcessor, backwards compatible alias +- Correct type-o in name of AcmeManagingProcessor, backwards compatible alias in place ## v1.11.0 - 2025-02-03 - Cleanup & deprecations with meta planning -* Deprecation warning for Source.populate w/o the lenient param, to be removed +- Deprecation warning for Source.populate w/o the lenient param, to be removed in 2.x -* Deprecation warning for Provider.populate w/o the processors param, to be +- Deprecation warning for Provider.populate w/o the processors param, to be removed in 2.x -* Add YamlProvider.order_mode to allow picking between natural (human) +- Add YamlProvider.order_mode to allow picking between natural (human) the default when enforce_order=True and simple `sort`. -* Fix type-o in _build_kwargs handler notification -* Add support for configuring OwnershipProcessor TXT record's TTL -* Add Plan.meta to allow providers to indicate they need to make changes to the +- Fix type-o in \_build_kwargs handler notification +- Add support for configuring OwnershipProcessor TXT record's TTL +- Add Plan.meta to allow providers to indicate they need to make changes to the zone that are not record specific ## v1.10.0 - 2024-10-06 - Lots of little stuff -* Zone name validation checking for double dots, and throwing InvalidNameError +- Zone name validation checking for double dots, and throwing InvalidNameError rather than base Exception -* Record validation checks for double dots in names -* MetaProcessor.include_extra to add support for arbitrary extra values to be +- Record validation checks for double dots in names +- MetaProcessor.include_extra to add support for arbitrary extra values to be set on the meta record. -* Correctly handled quoted svcparams when parsing SVCB/HTTPS rdata text -* Fix handling of chunked values (TXT, SPF) when escaped characters land at the +- Correctly handled quoted svcparams when parsing SVCB/HTTPS rdata text +- Fix handling of chunked values (TXT, SPF) when escaped characters land at the split boundaries, don't split escapes from their following chars ## v1.9.1 - 2024-06-21 - What's in a name -* Add `name` to Change.data, and thus PlanJson output +- Add `name` to Change.data, and thus PlanJson output ## v1.9.0 - 2024-06-20 - Grab bag -* ICMP & UDP healthcheck protocol support added -* Improved handling of present, but empty/None config file values. -* Add PlanJson plan_output support -* Include `record_type` in Change data - +- ICMP & UDP healthcheck protocol support added +- Improved handling of present, but empty/None config file values. +- Add PlanJson plan_output support +- Include `record_type` in Change data + ## v1.8.0 - 2024-06-10 - Set the records straight -* Add support for SVCB and HTTPS records -* Allow DS records to be specified for managed sub-zones, same as NS -* Fix CAA rdata parsing to allow values with tags +- Add support for SVCB and HTTPS records +- Allow DS records to be specified for managed sub-zones, same as NS +- Fix CAA rdata parsing to allow values with tags ## v1.7.0 - 2024-04-29 - All the knobs and dials -* Support for specifying per-zone change thresholds, to allow for zones +- Support for specifying per-zone change thresholds, to allow for zones where lots of changes are expected frequently to live along side zones where little or no churn is expected. -* AutoArpa gained support for prioritizing values -* Fix for EnsureTrailingDots reverting value types back to strings which then +- AutoArpa gained support for prioritizing values +- Fix for EnsureTrailingDots reverting value types back to strings which then failed when rr methods were used on them (e.g. w/octodns-bind) ## v1.6.1 - 2024-03-17 - Didn't we do this already -* Fix env var type handling that was previously fixed in 1.5.1 and then +- Fix env var type handling that was previously fixed in 1.5.1 and then regressed in 1.6.0. ## v1.6.0 - 2024-03-11 - It's a secret, if I told you I'd have to kill you -* Add EnsureTrailingDots processor -* Beta support for custom secret providers added to Manager. +- Add EnsureTrailingDots processor +- Beta support for custom secret providers added to Manager. -## v1.5.1 - 2024-03-08 - env/* type conversion fix +## v1.5.1 - 2024-03-08 - env/\* type conversion fix -* Improved env variable to parameter type conversion logic, avoid converting +- Improved env variable to parameter type conversion logic, avoid converting all numbers to float which caused some formatting issues in things that weren't being careful enough. ## v1.5.0 - 2024-02-26 - Checksums, nested expansion, & flexable values -* Beta support for Manager.enable_checksum and octodns-sync --checksum Allows a +- Beta support for Manager.enable_checksum and octodns-sync --checksum Allows a safer plan & apply workflow where the apply only moves forward if the apply phase plan exactly matches the previous round's planning. -* Fix for bug in MetaProcessor _up_to_date check that was failing when there was +- Fix for bug in MetaProcessor \_up_to_date check that was failing when there was a plan with a single change type with a single value, e.g. CNAME. -* Support added for config env variable expansion on nested levels, not just +- Support added for config env variable expansion on nested levels, not just top-level provider/processor keys -* _ChunkedValue ASCII validation added, SPF & TXT -* Re-work value/values handling to always try and do the "right" thing based on +- \_ChunkedValue ASCII validation added, SPF & TXT +- Re-work value/values handling to always try and do the "right" thing based on the content, so both singular values and lists will be handled identically regardless of whether the key is value or values. This may result in changes/fixes on the first sync after updating IFF you currently have `values: a-single-thing`, which would have previously been pushed up as bunch of single character values. -* Record.octodns added to formally make that data "API" and Record._octodns is +- Record.octodns added to formally make that data "API" and Record.\_octodns is deprecated. The latter has been converted to properties that return the former and emit deprecation warnings. ## v1.4.0 - 2023-12-04 - Minor Meta -* Record.lenient property added similar to other common/standard _octodns data -* Processor.process_source_and_target_zones added to support modifying both the +- Record.lenient property added similar to other common/standard \_octodns data +- Processor.process_source_and_target_zones added to support modifying both the desired and/or existing zones just prior to computing changes. -* Fix bug with Record.copy when values is an empty list [] -* Fix an issue in MetaProcessor/Manager.include_meta where include_provider +- Fix bug with Record.copy when values is an empty list [] +- Fix an issue in MetaProcessor/Manager.include_meta where include_provider wasn't correctly taking effect ## v1.3.0 - 2023-11-14 - New and improved processors #### Noteworthy changes -* Added `octodns.__version__` to replace `octodns.__VERSION__` as the former is +- Added `octodns.__version__` to replace `octodns.__VERSION__` as the former is more of a standard, per pep-8. `__VERSION__` is deprecated and will go away in 2.x -* Fixed issues with handling of chunking large TXT values for providers that use +- Fixed issues with handling of chunking large TXT values for providers that use the in-built `rrs` method -* Removed code that included sha in module version number when installing from +- Removed code that included sha in module version number when installing from repo as it caused problems with non-binary installs. -* Fixed a bug/shortcoming in Record.data where it didn't include the `octodns` +- Fixed a bug/shortcoming in Record.data where it didn't include the `octodns` portion of the record's data. Record.copy also omitted it since it relies on .data for the heavy lifting. There are no known actual problems due to this bug, but it's possible (non-public) third party providers are susceptible. The @@ -117,78 +117,78 @@ #### Stuff -* Added ZoneNameFilter processor to enable ignoring/alerting on type-os like +- Added ZoneNameFilter processor to enable ignoring/alerting on type-os like octodns.com.octodns.com -* NetworkValueAllowlistFilter/NetworkValueRejectlistFilter added to +- NetworkValueAllowlistFilter/NetworkValueRejectlistFilter added to processors.filter to enable filtering A/AAAA records based on value. Can be useful if you have records with non-routable values in an internal copy of a zone, but want to exclude them when pushing the same zone publically (split horizon) -* ExcludeRootNsChanges processor that will error (or warn) if plan includes a +- ExcludeRootNsChanges processor that will error (or warn) if plan includes a change to root NS records -* Include the octodns special section info in `Record.__repr__`, makes it easier +- Include the octodns special section info in `Record.__repr__`, makes it easier to debug things with providers that have special functionality configured there. -* Most processor.filter processors now support an include_target flag that can +- Most processor.filter processors now support an include_target flag that can be set to False to leave the target zone data untouched, thus remove any existing filtered records. Default behavior is unchanged and filtered records will be completely invisible to octoDNS ## v1.2.1 - 2023-09-29 - Now with fewer stale files -* Update script/release to do clean room dist builds +- Update script/release to do clean room dist builds ## v1.2.0 - 2023-09-28 - Bunch more bug fixes -* Record.from_rrs supports `source` parameter -* Record.parse_rdata_text unquotes any quoted (string) values -* Fix crash bug when using the YamlProvider with a directory that contains a +- Record.from_rrs supports `source` parameter +- Record.parse_rdata_text unquotes any quoted (string) values +- Fix crash bug when using the YamlProvider with a directory that contains a mix of split and non-split zone yamls. See https://github.com/octodns/octodns/issues/1066 -* Fix discovery of zones from different sources when there are multiple dynamic +- Fix discovery of zones from different sources when there are multiple dynamic zones. See https://github.com/octodns/octodns/issues/1068 ## v1.1.1 - 2023-09-16 - Doh! Fix that one little thing -* Address a bug in the handling of loading auto-arpa manager configuration. +- Address a bug in the handling of loading auto-arpa manager configuration. ## v1.1.0 - 2023-09-13 - More than enough for a minor release #### Noteworthy changes -* New dynamic zone config support that allows wildcard entries in the octoDNS +- New dynamic zone config support that allows wildcard entries in the octoDNS config to be expanded by the source provider(s). See [Dynamic Zone Config](/README.md#dynamic-zone-config) for more information. -* SplitYamlProvider has been deprecated and will be removed in 2.0. YamlProvider +- SplitYamlProvider has been deprecated and will be removed in 2.0. YamlProvider now includes the ability to process split zones when configured to do so and allows for more flexibility in how things are laid out than was previously possible. This includes the ability to split some zones and not others and even to have partially split zones with some records in the primary zone YAML and others in a split directory. See YamlProvider documentation for more info. -* YamlProvider now supports a `shared_filename` that can be used to add a set of +- YamlProvider now supports a `shared_filename` that can be used to add a set of common records across all zones using the provider. It can be used stand-alone or in combination with zone files and/or split configs to aid in DRYing up DNS -* YamlProvider now supports an `!include` directive which enables shared +- YamlProvider now supports an `!include` directive which enables shared snippets of config to be reused across many records, e.g. common dynamic rules across a set of services with service-specific pool values or a unified SFP value included in TXT records at the root of all zones. -* SpfRecord is formally deprecated with an warning and will become a +- SpfRecord is formally deprecated with an warning and will become a ValidationError in 2.x -* SpfDnsLookupProcessor is formally deprcated in favor of the version relocated +- SpfDnsLookupProcessor is formally deprcated in favor of the version relocated into https://github.com/octodns/octodns-spf and will be removed in 2.x -* MetaProcessor added to enable some useful/cool options for debugging/tracking +- MetaProcessor added to enable some useful/cool options for debugging/tracking DNS changes. Specifically timestamps/uuid so you can track whether changes that have been pushed to providers have propogated/transferred correctly. #### Stuff -* Add context to general configuration and Record validation, e.g. +- Add context to general configuration and Record validation, e.g. Some problem at filename.yaml, line 42, column 14. Our custom Yaml Loaders attach this context information, arbitrary string. Other providers may do so by creating ContextDict to pass as `data` into Record.new. -* Add --all option to octodns-validate to enable showing all record validation +- Add --all option to octodns-validate to enable showing all record validation errors (as warnings) rather than exiting on the first. Exit code is non-zero when there are any validation errors. -* New `post_processors` manager configuration parameter to add global processors +- New `post_processors` manager configuration parameter to add global processors that run AFTER zone-specific processors. This should allow more complete control over when processors are run. @@ -201,75 +201,75 @@ long (years) overdue. #### Noteworthy changes -* `geo` records are deprecated. +- `geo` records are deprecated. #### Stuff -* Removal of a Python 3.7 specific import work-around now that it's no longer an +- Removal of a Python 3.7 specific import work-around now that it's no longer an active/supported version. Also bumps required minimum version of Python 3.8 ## v1.0.0.rc1 - 2023-07-20 - The last one before the 1s -* Record and Zone validation now ensures there's no whitespace in names -* OwnershipProcessor managed records always add w/lenient=True, this allows +- Record and Zone validation now ensures there's no whitespace in names +- OwnershipProcessor managed records always add w/lenient=True, this allows ownership to be marked in the same zone for delegation NS records. -* octodns-report access --lenient flag to allow running reports with records +- octodns-report access --lenient flag to allow running reports with records sourced from providers with non-compliant record data. -* Correctly handle FQDNs in TinyDNS config files that end with trailing .'s -* Complete rewrite of TinyDnsBaseSource to fully implement the spec and the ipv6 +- Correctly handle FQDNs in TinyDNS config files that end with trailing .'s +- Complete rewrite of TinyDnsBaseSource to fully implement the spec and the ipv6 extensions ## v1.0.0.rc0 - 2023-05-16 - First of the ones #### Noteworthy changes -* 1.x Deprecation removals - * Provider, Source, and Processor shims removed, they've been warnings for > - 1yr. Everything should be using and referring to provider-specific - modules now. - * Provider.strict_supports defaults to true, can be returned to the old - behavior by setting strict_supports=False in your provider params. -* octodns.record has been broken up into multiple files/modules. Most of the +- 1.x Deprecation removals + - Provider, Source, and Processor shims removed, they've been warnings for > + 1yr. Everything should be using and referring to provider-specific + modules now. + - Provider.strict_supports defaults to true, can be returned to the old + behavior by setting strict_supports=False in your provider params. +- octodns.record has been broken up into multiple files/modules. Most of the primary things that were available at that module path still will be, but if you are importing things like idna_encode/decode that actually live elsewhere from octodns.record you'll need to update and pull them from their actual home. Classes beginning with _ are not exported from octodns.record any longer as they were considered private/protected. -* Beta support for auto-arpa has been added, See the +- Beta support for auto-arpa has been added, See the [auto-arpa documentation](/docs/auto_arpa.md) for more information. -* Support for subnet targeting in dynamic records, see +- Support for subnet targeting in dynamic records, see [this section](/docs/dynamic_records.md#subnets) of dynamic records documentation for more information. -* Enhanced validations on dynamic rules to encourage best practices - * The last rule must be a catch-all w/o any targeted geos or subnets - * Geos must not be repeated in multiple rules - * Geos in rules and subsequent rules must be ordered most to least specific, - e.g. NA-US-TN must come before NA-US, which must occur before NA - * Similarly, subnets must not be repeated in multiple rules, and various - subnet rules must be ordered such that most specific subnets appear before - less specific ones; e.g. 10.1.1.0/24 must appear before 10.1.0.0/16. - * Subnet targeting is considered to be more specific than geo targeting, so - subnet-only rules must appear before any subnet+geo rules, followed by - geo-only rules (and catch-all rule w/o any geos/subnets in the end) +- Enhanced validations on dynamic rules to encourage best practices + - The last rule must be a catch-all w/o any targeted geos or subnets + - Geos must not be repeated in multiple rules + - Geos in rules and subsequent rules must be ordered most to least specific, + e.g. NA-US-TN must come before NA-US, which must occur before NA + - Similarly, subnets must not be repeated in multiple rules, and various + subnet rules must be ordered such that most specific subnets appear before + less specific ones; e.g. 10.1.1.0/24 must appear before 10.1.0.0/16. + - Subnet targeting is considered to be more specific than geo targeting, so + subnet-only rules must appear before any subnet+geo rules, followed by + geo-only rules (and catch-all rule w/o any geos/subnets in the end) #### Stuff -* Added new DsRecord type (provider support will be added over time) -* Added simple IgnoreRootNsFilter -* Minor refactor on YamlProvider to add get_filenames making it a bit easier to +- Added new DsRecord type (provider support will be added over time) +- Added simple IgnoreRootNsFilter +- Minor refactor on YamlProvider to add get_filenames making it a bit easier to create specialized providers inheriting from it -* Fixed bug in OwnershipProcessor when all changes were removed from plans +- Fixed bug in OwnershipProcessor when all changes were removed from plans ## v0.9.21 - 2022-10-16 - Last of the oughts -* Shim AxfrSource and ZoneFileSource post extraction into +- Shim AxfrSource and ZoneFileSource post extraction into https://github.com/octodns/octodns-bind ## v0.9.20 - 2022-10-05 - International friendly #### Noteworthy changes -* Added support for automatic handling of IDNA (utf-8) zones. Everything is +- Added support for automatic handling of IDNA (utf-8) zones. Everything is stored IDNA encoded internally. For ASCII zones that's a noop. For zones with utf-8 chars they will be converted and all internals/providers will see the encoded version and work with it without any knowledge of it having been @@ -278,33 +278,33 @@ long (years) overdue. decoded form. Both forms should be accepted in command line arguments. Providers may need to be updated to display the decoded form in their logs, until then they'd display the IDNA version. -* IDNA value support for Record types that hold FQDNs: ALIAS, CNAME, DNAME, PTR, +- IDNA value support for Record types that hold FQDNs: ALIAS, CNAME, DNAME, PTR, MX, NS, and SRV. -* Support for configuring global processors that apply to all zones with +- Support for configuring global processors that apply to all zones with `manager.processors` #### Stuff -* Addressed shortcomings with YamlProvider.SUPPORTS in that it didn't include +- Addressed shortcomings with YamlProvider.SUPPORTS in that it didn't include dynamically registered types, was a static list that could have drifted over time even ignoring 3rd party types. -* Provider._process_desired_zone needed to call Provider.supports rather than +- Provider.\_process_desired_zone needed to call Provider.supports rather than doing it's own `_type in provider.SUPPORTS`. The default behavior in Source.supports is ^, but it's possible for providers to override that behavior and do special checking and `_process_desired_zone` wasn't taking that into account. -* Now that it's used as it needed to be YamlProvider overrides +- Now that it's used as it needed to be YamlProvider overrides Provider.supports and just always says Yes so that any dynamically registered types will be supported. -* Add TtlRestrictionFilter processor for adding ttl restriction/checking -* NameAllowlistFilter & NameRejectlistFilter implementations to support +- Add TtlRestrictionFilter processor for adding ttl restriction/checking +- NameAllowlistFilter & NameRejectlistFilter implementations to support filtering on record names to include/exclude records from management. -* All Record values are now first class objects. This shouldn't be an externally +- All Record values are now first class objects. This shouldn't be an externally visible change, but will enable future improvements. -* --quiet command line option added to raise log level to WARNING, plan +- --quiet command line option added to raise log level to WARNING, plan output now comes from `plan` logger rather than `Manager` so that it can stay at info -* --logging-config command line option added to allow complete logging config +- --logging-config command line option added to allow complete logging config customization, see https://docs.python.org/3/library/logging.config.html#logging-config-dictschema for file format and @@ -313,23 +313,23 @@ long (years) overdue. ## v0.9.19 - 2022-08-14 - Subzone handling -* Fixed issue with sub-zone handling introduced in 0.9.18 +- Fixed issue with sub-zone handling introduced in 0.9.18 ## v0.9.18 - 2022-08-09 - Internationalization -* Added octodns.idna idna_encode/idna_decode helpers, providers will need to +- Added octodns.idna idna_encode/idna_decode helpers, providers will need to individually add support via these helpers though :-/ -* `black` formatting implemented (including .git-blame-ignore-revs) -* --output-provider support for dump to allow configurable dump +- `black` formatting implemented (including .git-blame-ignore-revs) +- --output-provider support for dump to allow configurable dump formatting/details -* TLSA record type support -* Subzones support for skipping levels +- TLSA record type support +- Subzones support for skipping levels ## v0.9.17 - 2022-04-02 - Registration required #### Noteworthy changes -* The changes in plans are now ordered based on change type prior to +- The changes in plans are now ordered based on change type prior to considering the record name and type as was previously done. The chosen order is: deletes, creates, updates. The reason for that many providers make changes one at a time. When changing the type of a record, e.g. from A to @@ -340,15 +340,15 @@ long (years) overdue. just standardizes what they are doing as many other providers appear to need to do so, but weren't. There was an ordering before, but it was essentially arbitrarily picked. -* Record.register_type added so that providers can register custom record +- Record.register_type added so that providers can register custom record types, see [docs/records.md](docs/records.md) for more information -* New `octodns-versions` command which will log out the version of octodns and +- New `octodns-versions` command which will log out the version of octodns and any provider/processor/plan_output modules you are using. #### Stuff -* Manager includes the octoDNS version in its init log line -* Non-official release installs will now include a bit of the sha to indicate +- Manager includes the octoDNS version in its init log line +- Non-official release installs will now include a bit of the sha to indicate specifically what revision is being used, e.g. 0.9.17+abcdef12, these roughly follow PEP440 guidelines @@ -356,97 +356,97 @@ long (years) overdue. #### Noteworthy changes -* Foundational support for root NS record management. - * YamlProvider has it enabled and in general everyone should add root NS - records that match what is in their provider(s) as of this release if they - aren't already there. - * Other providers will add root NS support over time following this release - once they have had the chance to investigate the functionality and - implement management if possible with whatever accomidations are required. - * Watch your providers README.md and CHANGELOG.md for support and more - information. - * Root NS record changes will always require `--force` indicating that they - are impactful changes that need a careful :eyes: +- Foundational support for root NS record management. + - YamlProvider has it enabled and in general everyone should add root NS + records that match what is in their provider(s) as of this release if they + aren't already there. + - Other providers will add root NS support over time following this release + once they have had the chance to investigate the functionality and + implement management if possible with whatever accomidations are required. + - Watch your providers README.md and CHANGELOG.md for support and more + information. + - Root NS record changes will always require `--force` indicating that they + are impactful changes that need a careful :eyes: #### Stuff -* _AggregateTarget has more complete handling of SUPPORTS* functionality, +- \_AggregateTarget has more complete handling of SUPPORTS\* functionality, mostly applicable for the compare operation. -* Fix null MX record validation error introduced in 0.9.15, `.` is again +- Fix null MX record validation error introduced in 0.9.15, `.` is again allowed as a valid `exchange` value. ## v0.9.15 - 2022-02-07 - Where have all the providers gone? #### Noteworthy changes -* Providers extracted from octoDNS core into individual repos +- Providers extracted from octoDNS core into individual repos https://github.com/octodns/octodns/issues/622 & https://github.com/octodns/octodns/pull/822 for more information. - * [AzureProvider](https://github.com/octodns/octodns-azure/) - * [AkamaiProvider](https://github.com/octodns/octodns-edgedns/) - * [CloudflareProvider](https://github.com/octodns/octodns-cloudflare/) - * [ConstellixProvider](https://github.com/octodns/octodns-constellix/) - * [DigitalOceanProvider](https://github.com/octodns/octodns-digitalocean/) - * [DnsimpleProvider](https://github.com/octodns/octodns-dnsimple/) - * [DnsMadeEasyProvider](https://github.com/octodns/octodns-dnsmadeeasy/) - * [DynProvider](https://github.com/octodns/octodns-dynprovider/) - * [EasyDnsProvider](https://github.com/octodns/octodns-easydns/) - * [EtcHostsProvider](https://github.com/octodns/octodns-etchosts/) - * [GandiProvider](https://github.com/octodns/octodns-gandi/) - * [GcoreProvider](https://github.com/octodns/octodns-gcore/) - * [GoogleCloudProvider](https://github.com/octodns/octodns-googlecloud/) - * [HetznerProvider](https://github.com/octodns/octodns-hetzner/) - * [MythicBeastsProvider](https://github.com/octodns/octodns-mythicbeasts/) - * [Ns1Provider](https://github.com/octodns/octodns-ns1/) - * [OvhProvider](https://github.com/octodns/octodns-ovh/) - * [PowerDnsProvider](https://github.com/octodns/octodns-powerdns/) - * [RackspaceProvider](https://github.com/octodns/octodns-rackspace/) - * [Route53Provider](https://github.com/octodns/octodns-route53/) also - AwsAcmMangingProcessor - * [SelectelProvider](https://github.com/octodns/octodns-selectel/) - * [TransipProvider](https://github.com/octodns/octodns-transip/) - * [UltraDnsProvider](https://github.com/octodns/octodns-ultradns/) -* As part of the extraction work octoDNS's requirements (setup.py and .txt + - [AzureProvider](https://github.com/octodns/octodns-azure/) + - [AkamaiProvider](https://github.com/octodns/octodns-edgedns/) + - [CloudflareProvider](https://github.com/octodns/octodns-cloudflare/) + - [ConstellixProvider](https://github.com/octodns/octodns-constellix/) + - [DigitalOceanProvider](https://github.com/octodns/octodns-digitalocean/) + - [DnsimpleProvider](https://github.com/octodns/octodns-dnsimple/) + - [DnsMadeEasyProvider](https://github.com/octodns/octodns-dnsmadeeasy/) + - [DynProvider](https://github.com/octodns/octodns-dynprovider/) + - [EasyDnsProvider](https://github.com/octodns/octodns-easydns/) + - [EtcHostsProvider](https://github.com/octodns/octodns-etchosts/) + - [GandiProvider](https://github.com/octodns/octodns-gandi/) + - [GcoreProvider](https://github.com/octodns/octodns-gcore/) + - [GoogleCloudProvider](https://github.com/octodns/octodns-googlecloud/) + - [HetznerProvider](https://github.com/octodns/octodns-hetzner/) + - [MythicBeastsProvider](https://github.com/octodns/octodns-mythicbeasts/) + - [Ns1Provider](https://github.com/octodns/octodns-ns1/) + - [OvhProvider](https://github.com/octodns/octodns-ovh/) + - [PowerDnsProvider](https://github.com/octodns/octodns-powerdns/) + - [RackspaceProvider](https://github.com/octodns/octodns-rackspace/) + - [Route53Provider](https://github.com/octodns/octodns-route53/) also + AwsAcmMangingProcessor + - [SelectelProvider](https://github.com/octodns/octodns-selectel/) + - [TransipProvider](https://github.com/octodns/octodns-transip/) + - [UltraDnsProvider](https://github.com/octodns/octodns-ultradns/) +- As part of the extraction work octoDNS's requirements (setup.py and .txt files) have been updated and minimized and a helper script, script/update-requirements has been added to help manage the txt files going forward. #### Prior to extraction -* NS1 provider has received improvements to the dynamic record implementation. +- NS1 provider has received improvements to the dynamic record implementation. As a result, if octoDNS is downgraded from this version, any dynamic records created or updated using this version will show an update. -* An edge-case bug related to geo rules involving continents in NS1 provider +- An edge-case bug related to geo rules involving continents in NS1 provider has been fixed in this version. However, it will not show/fix the records that match this edge-case. See https://github.com/octodns/octodns/pull/809 for more information. If octoDNS is downgraded from this version, any dynamic records created or updated using this version and matching the said edge-case will not be read/parsed correctly by the older version and will show a diff. -* Transip was updated to their new client api +- Transip was updated to their new client api #### Stuff -* Additional FQDN validation to ALIAS/CNAME value, MX exchange, SRV target and +- Additional FQDN validation to ALIAS/CNAME value, MX exchange, SRV target and tests of the functionality. -* Improvements around dynamic record value weights allowing finer grained +- Improvements around dynamic record value weights allowing finer grained control ## v0.9.14 - 2021-10-10 - A new supports system #### Noteworthy changes -* Provider `strict_supports` param added, currently defaults to `false`, along - with Provider._process_desired_zone this forms the foundations of a new +- Provider `strict_supports` param added, currently defaults to `false`, along + with Provider.\_process_desired_zone this forms the foundations of a new "supports" system where providers will warn or error (depending on the value of `strict_supports`) during planning about their inability to do what they're being asked. When `false` they will warn and "adjust" the desired records. When true they will abort with an error indicating the problem. Over time it is expected that all "supports" checking/handling will move into this paradigm and `strict_supports` will likely be changed to default to `true`. -* Zone shallow copy support, reworking of Processors (alpha) semantics -* NS1 NA target now includes `SX` and `UM`. If `NA` continent is in use in +- Zone shallow copy support, reworking of Processors (alpha) semantics +- NS1 NA target now includes `SX` and `UM`. If `NA` continent is in use in dynamic records care must be taken to upgrade/downgrade to v0.9.13. -* Ns1Provider now supports a new parameter, shared_notifylist, which results in +- Ns1Provider now supports a new parameter, shared_notifylist, which results in all dynamic record monitors using a shared notify list named 'octoDNS NS1 Notify List'. Only newly created record values will use the shared notify list. It should be safe to enable this functionality, but existing records @@ -454,223 +454,223 @@ long (years) overdue. previous versions of octoDNS are discouraged and may result in undefined behavior and broken records. See https://github.com/octodns/octodns/pull/749 for related discussion. -* TransipProvider removed as it currently relies on `suds` which is broken in +- TransipProvider removed as it currently relies on `suds` which is broken in new python versions and hasn't seen a release since 2010. May return with https://github.com/octodns/octodns/pull/762 #### Stuff -* Fully remove python 2.7 support & sims -* Dynamic record pool status flag: up/down/obey added w/provider support as +- Fully remove python 2.7 support & sims +- Dynamic record pool status flag: up/down/obey added w/provider support as possible. -* Support for multi-value PTRs where providers allow them -* Normalize IPv6 addresses to avoid false changes and simplify providers -* Include pure-python wheel distirubtions in release builds -* Improvements and updates to AzureProvider, especially w/respect to dynamic +- Support for multi-value PTRs where providers allow them +- Normalize IPv6 addresses to avoid false changes and simplify providers +- Include pure-python wheel distirubtions in release builds +- Improvements and updates to AzureProvider, especially w/respect to dynamic records. -* NS1Provider support for IPv6 monitors and general caching/performance +- NS1Provider support for IPv6 monitors and general caching/performance improvements -* Route53Provider.get_zones_by_name option to avoid paging through huge lists +- Route53Provider.get_zones_by_name option to avoid paging through huge lists and hitting rate limits -* Misc Route53Provider -* Ensure no network access during testing (helps with runtime) -* Sped up the long pole unit tests -* Misc. ConstellixProvider, DigitalOceanProvider, GCoreProvider, and +- Misc Route53Provider +- Ensure no network access during testing (helps with runtime) +- Sped up the long pole unit tests +- Misc. ConstellixProvider, DigitalOceanProvider, GCoreProvider, and Route53Provider fixes & improvements ## v0.9.13 - 2021-07-18 - Processors Alpha #### Noteworthy changes -* Alpha support for Processors has been added. Processors allow for hooking +- Alpha support for Processors has been added. Processors allow for hooking into the source, target, and planing process to make nearly arbitrary changes to data. See the [octodns/processor/](/octodns/processor) directory for examples. The change has been designed to have no impact on the process unless the `processors` key is present in zone configs. -* Fixes NS1 provider's geotarget limitation of using `NA` continent. Now, when +- Fixes NS1 provider's geotarget limitation of using `NA` continent. Now, when `NA` is used in geos it considers **all** the countries of `North America` instead of just `us-east`, `us-west` and `us-central` regions -* `SX' & 'UM` country support added to NS1Provider, not yet in the North - America list for backwards compatibility reasons. They will be added in the - next releaser. +- `SX' & 'UM` country support added to NS1Provider, not yet in the North + America list for backwards compatibility reasons. They will be added in the + next releaser. #### Stuff -* Lots of progress on the partial/beta support for dynamic records in Azure, +- Lots of progress on the partial/beta support for dynamic records in Azure, still not production ready. -* NS1 fix for when a pool only exists as a fallback -* Zone level lenient flag -* Validate weight makes sense for pools with a single record -* UltraDNS support for aliases and general fixes/improvements -* Misc doc fixes and improvements +- NS1 fix for when a pool only exists as a fallback +- Zone level lenient flag +- Validate weight makes sense for pools with a single record +- UltraDNS support for aliases and general fixes/improvements +- Misc doc fixes and improvements ## v0.9.12 - 2021-04-30 - Enough time has passed #### Noteworthy changes -* Formal Python 2.7 support removed, deps and tooling were becoming +- Formal Python 2.7 support removed, deps and tooling were becoming unmaintainable -* octodns/octodns move, from github/octodns, more to come +- octodns/octodns move, from github/octodns, more to come #### Stuff -* ZoneFileSource supports specifying an extension & no files end in . to better +- ZoneFileSource supports specifying an extension & no files end in . to better support Windows -* LOC record type support added -* Support for pre-release versions of PowerDNS -* PowerDNS delete before create which allows A <-> CNAME etc. -* Improved validation of fqdn's in ALIAS, CNAME, etc. -* Transip support for NS records -* Support for sending plan output to a file -* DNSimple uses zone api rather than domain to support non-registered stuff, +- LOC record type support added +- Support for pre-release versions of PowerDNS +- PowerDNS delete before create which allows A \<-> CNAME etc. +- Improved validation of fqdn's in ALIAS, CNAME, etc. +- Transip support for NS records +- Support for sending plan output to a file +- DNSimple uses zone api rather than domain to support non-registered stuff, e.g. reverse zones. -* Support for fallback-only dynamic pools and related fixes to NS1 provider -* Initial Hetzner provider +- Support for fallback-only dynamic pools and related fixes to NS1 provider +- Initial Hetzner provider ## v0.9.11 - 2020-11-05 - We still don't know edition #### Noteworthy changes -* ALIAS records only allowed at the root of zones - see `leient` in record docs +- ALIAS records only allowed at the root of zones - see `leient` in record docs for work-arounds if you really need them. #### New Providers -* Gandi LiveDNS -* UltraDNS -* easyDNS +- Gandi LiveDNS +- UltraDNS +- easyDNS #### Stuff -* Add support for zones aliases -* octodns-compare: Prefix filtering and status code on on mismatch -* Implement octodns-sync --source -* Adding environment variable record injection -* Add support for wildcard SRV records, as shown in RFC 2782 -* Add healthcheck option 'request_interval' for Route53 provider -* NS1 georegion, country, and catchall need to be separate groups -* Add the ability to mark a zone as lenient -* Add support for geo-targeting of CA provinces -* Update geo_data to pick up a couple renames -* Cloudflare: Add PTR Support, update rate-limit handling and pagination -* Support PowerDNS 4.3.x -* Added support for TCP health checking of dynamic records +- Add support for zones aliases +- octodns-compare: Prefix filtering and status code on on mismatch +- Implement octodns-sync --source +- Adding environment variable record injection +- Add support for wildcard SRV records, as shown in RFC 2782 +- Add healthcheck option 'request_interval' for Route53 provider +- NS1 georegion, country, and catchall need to be separate groups +- Add the ability to mark a zone as lenient +- Add support for geo-targeting of CA provinces +- Update geo_data to pick up a couple renames +- Cloudflare: Add PTR Support, update rate-limit handling and pagination +- Support PowerDNS 4.3.x +- Added support for TCP health checking of dynamic records ## v0.9.10 - 2020-04-20 - Dynamic NS1 and lots of misc -* Added support for dynamic records to Ns1Provider, updated client and rate +- Added support for dynamic records to Ns1Provider, updated client and rate limiting implementation -* Moved CI to use GitHub Actions -* Set up dependabot to automatically PR requirements updates -* Pass at bumping all of the requirements and Dependabot them going forward -* Enhanced `dynamic` pool validation rules -* Delegation set support for Route53 and fix for CNAME/A ordering issues -* DNSimple sandbox support -* OVHProvider support for CAA -* Akamai rename FastDNS to EdgeDNS -* Transip bumped to 2.1.2 which should get away from its SOAP api which is EOLd +- Moved CI to use GitHub Actions +- Set up dependabot to automatically PR requirements updates +- Pass at bumping all of the requirements and Dependabot them going forward +- Enhanced `dynamic` pool validation rules +- Delegation set support for Route53 and fix for CNAME/A ordering issues +- DNSimple sandbox support +- OVHProvider support for CAA +- Akamai rename FastDNS to EdgeDNS +- Transip bumped to 2.1.2 which should get away from its SOAP api which is EOLd ## v0.9.9 - 2019-11-04 - Python 3.7 Support -* Extensive pass through the whole codebase to support Python 3 - * Tons of updates to replace `def __cmp__` with `__eq__` and friends to - preserve custom equality and ordering behaviors that are essential to - octoDNS's processes. - * Quite a few objects required the addition of `__eq__` and friends so that - they're sortable in Python 3 now that those things are more strict. A few - places this required jumping through hoops of sorts. Thankfully our tests - are pretty thorough and caught a lot of issues and hopefully the whole - plan, review, apply process will backstop that. - * Explicit ordering of changes by (name, type) to address inconsistent - ordering for a number of providers that just convert changes into API - calls as they come. Python 2 sets ordered consistently, Python 3 they do - not. https://github.com/octodns/octodns/pull/384/commits/7958233fccf9ea22d95e2fd06c48d7d0a4529e26 - * Route53 `_mod_keyer` ordering wasn't 100% complete and thus unreliable and - random in Python 3. This has been addressed and may result in value - reordering on next plan, no actual changes in behavior should occur. - * `incf.countryutils` (in pypi) was last released in 2009 is not python 3 - compatible (it's country data is also pretty stale.) `pycountry_convert` - appears to have the functionality required to replace its usage so it has - been removed as a dependency/requirement. - * Bunch of additional unit tests and supporting config to exercise new code - and verify things that were run into during the Python 3 work - * lots of `six`ing of things -* Validate Record name & fqdn length +- Extensive pass through the whole codebase to support Python 3 + - Tons of updates to replace `def __cmp__` with `__eq__` and friends to + preserve custom equality and ordering behaviors that are essential to + octoDNS's processes. + - Quite a few objects required the addition of `__eq__` and friends so that + they're sortable in Python 3 now that those things are more strict. A few + places this required jumping through hoops of sorts. Thankfully our tests + are pretty thorough and caught a lot of issues and hopefully the whole + plan, review, apply process will backstop that. + - Explicit ordering of changes by (name, type) to address inconsistent + ordering for a number of providers that just convert changes into API + calls as they come. Python 2 sets ordered consistently, Python 3 they do + not. https://github.com/octodns/octodns/pull/384/commits/7958233fccf9ea22d95e2fd06c48d7d0a4529e26 + - Route53 `_mod_keyer` ordering wasn't 100% complete and thus unreliable and + random in Python 3. This has been addressed and may result in value + reordering on next plan, no actual changes in behavior should occur. + - `incf.countryutils` (in pypi) was last released in 2009 is not python 3 + compatible (it's country data is also pretty stale.) `pycountry_convert` + appears to have the functionality required to replace its usage so it has + been removed as a dependency/requirement. + - Bunch of additional unit tests and supporting config to exercise new code + and verify things that were run into during the Python 3 work + - lots of `six`ing of things +- Validate Record name & fqdn length ## v0.9.8 - 2019-09-30 - One with no changes b/c PyPi description problems -* No material changes +- No material changes ## v0.9.7 - 2019-09-30 - It's about time -* AkamaiProvider, ConstellixProvider, MythicBeastsProvider, SelectelProvider, - & TransipPovider providers added -* Route53Provider separator fix -* YamlProvider export error around stringification -* PyPi markdown rendering fix +- AkamaiProvider, ConstellixProvider, MythicBeastsProvider, SelectelProvider, + & TransipPovider providers added +- Route53Provider separator fix +- YamlProvider export error around stringification +- PyPi markdown rendering fix ## v0.9.6 - 2019-07-16 - The little one that fixes stuff from the big one -* Reduced dynamic record value weight range to 0-15 so that Dyn and Route53 +- Reduced dynamic record value weight range to 0-15 so that Dyn and Route53 match up behaviors. Dyn is limited to 0-15 and scaling that up would lose resolution that couldn't be recovered during populate. -* Addressed issues with Route53 change set ordering for dynamic records -* Ignore unsupported record types in DigitalOceanProvider -* Fix bugs in Route53 extra changes handling and health check managagement +- Addressed issues with Route53 change set ordering for dynamic records +- Ignore unsupported record types in DigitalOceanProvider +- Fix bugs in Route53 extra changes handling and health check managagement ## v0.9.5 - 2019-05-06 - The big one, with all the dynamic stuff -* dynamic record support, essentially a v2 version of geo records with a lot +- dynamic record support, essentially a v2 version of geo records with a lot more flexibility and power. Also support dynamic CNAME records (alpha) -* Route53Provider dynamic record support -* DynProvider dynamic record support -* SUPPORTS_DYNAMIC is an optional property, defaults to False -* Route53Provider health checks support disabling latency measurement -* CloudflareProvider SRV record unpacking fix -* DNSMadeEasy provider uses supports to avoid blowing up on unknown record +- Route53Provider dynamic record support +- DynProvider dynamic record support +- SUPPORTS_DYNAMIC is an optional property, defaults to False +- Route53Provider health checks support disabling latency measurement +- CloudflareProvider SRV record unpacking fix +- DNSMadeEasy provider uses supports to avoid blowing up on unknown record types -* Updates to AzureProvider lib versions -* Normalize MX/CNAME/ALIAS/PTR value to lower case -* SplitYamlProvider support added -* DynProvider fix for Traffic Directors association to records, explicit rather +- Updates to AzureProvider lib versions +- Normalize MX/CNAME/ALIAS/PTR value to lower case +- SplitYamlProvider support added +- DynProvider fix for Traffic Directors association to records, explicit rather than "looks close enough" -* TinyDNS support for TXT and AAAA records and fixes to ; escaping -* pre-commit hook requires 100% code coverage +- TinyDNS support for TXT and AAAA records and fixes to ; escaping +- pre-commit hook requires 100% code coverage ## v0.9.4 - 2019-01-28 - The one with a bunch of stuff, before the big one -* A bunch of "dynamic" stuff that'll be detailed in the next release when +- A bunch of "dynamic" stuff that'll be detailed in the next release when providers actually support it :grin: -* Route53Provider adds support for using session tokens -* Added support for proxying Cloudflare ALIAS records -* Dyn CAA TTL fix -* Documentation fixes and improvements -* natsort version bump to address setup issues -* DNSSimple TXT record handling fixes, ; it's always ; -* Route53Provider support for sessiom tokens -* Add ALIAS to the list of Cloudflare record types that support proxying -* Fix for TTL bug in Dyn CCA records -* Records updated so that 'octodns' record metadata is persisted through +- Route53Provider adds support for using session tokens +- Added support for proxying Cloudflare ALIAS records +- Dyn CAA TTL fix +- Documentation fixes and improvements +- natsort version bump to address setup issues +- DNSSimple TXT record handling fixes, ; it's always ; +- Route53Provider support for sessiom tokens +- Add ALIAS to the list of Cloudflare record types that support proxying +- Fix for TTL bug in Dyn CCA records +- Records updated so that 'octodns' record metadata is persisted through YamlProvider -* Added --version support to ArguementParser (thus all commands) +- Added --version support to ArguementParser (thus all commands) ## v0.9.3 - 2018-10-29 - Misc. stuff sort of release -* ZoneFile source added -* Major rework/improvements to the Cloudflare record update process, fixed bugs +- ZoneFile source added +- Major rework/improvements to the Cloudflare record update process, fixed bugs and optimized it quite a bit -* Add ability to manage Cloudflare proxy flag -* Bump requests version to 2.20.0 +- Add ability to manage Cloudflare proxy flag +- Bump requests version to 2.20.0 ## v0.9.2 - 2018-08-20 - More sources -* EtcHostsProvider implementation to create static/emergency best effort +- EtcHostsProvider implementation to create static/emergency best effort content that can be used in /etc/hosts to resolve things. -* Add lenient support to Zone.add_record, allows populate from providers that +- Add lenient support to Zone.add_record, allows populate from providers that have allowed/created invalid data and situations where a sub-zone is being extracted from a parent, but the records still exist in the remote provider. -* AXFR source support added -* google-cloud-dns requirement instead of general package +- AXFR source support added +- google-cloud-dns requirement instead of general package ## v0.9.1 - 2018-05-21 - Going backwards with setup.py @@ -683,39 +683,39 @@ probably best to take extra care when updating and to try and make sure that all health checks are passing before the first sync with `--doit`. See [#67](https://github.com/octodns/octodns/pull/67) for more information. -* Major update to geo healthchecks to allow configuring host (header), path, +- Major update to geo healthchecks to allow configuring host (header), path, protocol, and port [#67](https://github.com/octodns/octodns/pull/67) -* SSHFP algorithm type 4 -* NS1 and DNSimple support skipping unsupported record types -* Revert back to old style setup.py & requirements.txt, setup.cfg was +- SSHFP algorithm type 4 +- NS1 and DNSimple support skipping unsupported record types +- Revert back to old style setup.py & requirements.txt, setup.cfg was causing too much pita ## v0.9.0 - 2018-03-26 - Way too long since we last met -* Way way way too much to list out here, shouldn't have waited so long -* Initial NS1 geo support -* Major reworking of `CloudflareProvider`'s update process, was only partially +- Way way way too much to list out here, shouldn't have waited so long +- Initial NS1 geo support +- Major reworking of `CloudflareProvider`'s update process, was only partially functional before, also ignore proxied records -* Fixes and improvements to better support non-ascii records and zones -* Plans indicate when Zones are going to be created -* Fix for `GoogleCloudProvider` handling of ; escapes -* Skip Alias recordsets for Route53 (unsupported concept/type) -* Make sure that Record geo values are sorted to prevent false diffs that can +- Fixes and improvements to better support non-ascii records and zones +- Plans indicate when Zones are going to be created +- Fix for `GoogleCloudProvider` handling of ; escapes +- Skip Alias recordsets for Route53 (unsupported concept/type) +- Make sure that Record geo values are sorted to prevent false diffs that can never be fixed -* `DynProvider` fix to safely roll rulesets, things could end up on rules +- `DynProvider` fix to safely roll rulesets, things could end up on rules without a pool and/or hitting the default rule previously. ## v0.8.8 - 2017-10-24 - Google Cloud DNS, Large TXT Record support -* Added support for "chunking" TXT records where individual values were larger +- Added support for "chunking" TXT records where individual values were larger than 255 chars. This is common with DKIM records involving multiple providers. -* Added `GoogleCloudProvider` -* Configurable `UnsafePlan` thresholds to allow modification of how many +- Added `GoogleCloudProvider` +- Configurable `UnsafePlan` thresholds to allow modification of how many updates/deletes are allowed before a plan is declared dangerous. -* Manager.dump bug fix around empty zones. -* Prefer use of `.` over `source` in shell scripts -* `DynProvider` warns when it ignores unrecognized traffic directors. +- Manager.dump bug fix around empty zones. +- Prefer use of `.` over `source` in shell scripts +- `DynProvider` warns when it ignores unrecognized traffic directors. ## v0.8.7 - 2017-09-29 - OVH support @@ -725,21 +725,21 @@ Adds an OVH provider. Misc fixes and improvements. -* Azure TXT record fix -* PowerDNS api support for https -* Configurable Route53 max retries and max-attempts -* Improved key ordering error message +- Azure TXT record fix +- PowerDNS api support for https +- Configurable Route53 max retries and max-attempts +- Improved key ordering error message ## v0.8.5 - 2017-07-21 - Azure, NS1 escaping, & large zones Relatively small delta this go around. No major themes or anything, just steady progress. -* AzureProvider added thanks to work by +- AzureProvider added thanks to work by [Heesu Hwang](https://github.com/h-hwang). -* Fixed some escaping issues with NS1 TXT and SPF records that were tracked down +- Fixed some escaping issues with NS1 TXT and SPF records that were tracked down with the help of [Blake Stoddard](https://github.com/blakestoddard). -* Some tweaks were made to Zone.records to vastly improve handling of zones with +- Some tweaks were made to Zone.records to vastly improve handling of zones with very large numbers of records, no more O(N^2). ## v0.8.4 - 2017-06-28 - It's been too long @@ -751,37 +751,37 @@ better in the future :fingers_crossed: #### Major: -* Complete rework of record validation with lenient mode support added to +- Complete rework of record validation with lenient mode support added to octodns-dump so that data with validation problems can be dumped to config files as a starting point. octoDNS now also ignores validation errors when pulling the current state from a provider before planning changes. In both cases this is best effort. -* Naming of record keys are based on RFC-1035 and friends, previous names have +- Naming of record keys are based on RFC-1035 and friends, previous names have been kept for backwards compatibility until the 1.0 release. -* Provider record type support is now explicit, i.e. opt-in, rather than +- Provider record type support is now explicit, i.e. opt-in, rather than opt-out. This prevents bugs/oversights in record handling where providers don't support (new) record types and didn't correctly ignore them. -* ALIAS support for DNSimple, Dyn, NS1, PowerDNS -* Ignored record support added, `octodns:\n ignored: True` -* Ns1Provider added +- ALIAS support for DNSimple, Dyn, NS1, PowerDNS +- Ignored record support added, `octodns:\n ignored: True` +- Ns1Provider added #### Miscellaneous -* Use a 3rd party lib for natural sorting of keys, rather than my old +- Use a 3rd party lib for natural sorting of keys, rather than my old implementation. Sorting can be disabled in the YamlProvider with `enforce_order: False`. -* Semi-colon/escaping fixes and improvements. -* Meta record support, `TXT octodns-meta.`. For now just +- Semi-colon/escaping fixes and improvements. +- Meta record support, `TXT octodns-meta.`. For now just `provider=`. Optionally turned on with `include_meta` manager config val. -* Validations check for CNAMEs co-existing with other records and error out if +- Validations check for CNAMEs co-existing with other records and error out if found. Was a common mistaken/unknown issue and this surfaces the problem early. -* Sizeable refactor in the way Route53 record translation works to make it +- Sizeable refactor in the way Route53 record translation works to make it cleaner/less hacky -* Lots of docs type-o fixes -* Fixed some pretty major bugs in DnsimpleProvider -* Relax UnsafePlan checks a bit, more to come here -* Set User-Agent header on Dyn health checks +- Lots of docs type-o fixes +- Fixed some pretty major bugs in DnsimpleProvider +- Relax UnsafePlan checks a bit, more to come here +- Set User-Agent header on Dyn health checks ## v0.8.0 - 2017-03-14 - First public release diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 5b0ae4d..33ade95 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,21 +14,21 @@ orientation. Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic +- The use of sexualized language or imagery and unwelcome sexual attention or + advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8015d4b..3beb8d7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,18 +10,18 @@ If you have questions, or you'd like to check with us before embarking on a majo This project uses the [GitHub Flow](https://guides.github.com/introduction/flow/). That means that the `main` branch is stable and new development is done in feature branches. Feature branches are merged into the `main` branch via a Pull Request. -0. Fork and clone the repository -1. Configure and install the dependencies: `./script/bootstrap` -2. Activate virtual environment: `source env/bin/activate` -3. Make sure the tests pass on your machine: `./script/test` -4. Create a new branch: `git checkout -b my-branch-name` -5. Make your change, add tests, and make sure the tests still pass -6. Make sure that `./script/lint` passes without any warnings -7. Run `./script/format` to make sure your changes follow Python's preferred - coding style -8. Run `./script/changelog create ...` to add a changelog entry to your PR -9. Make sure that coverage is at :100:% `./script/coverage` and open `htmlcov/index.html` - - You can open a draft PR for :eyes: & discussion prior to this +00. Fork and clone the repository +01. Configure and install the dependencies: `./script/bootstrap` +02. Activate virtual environment: `source env/bin/activate` +03. Make sure the tests pass on your machine: `./script/test` +04. Create a new branch: `git checkout -b my-branch-name` +05. Make your change, add tests, and make sure the tests still pass +06. Make sure that `./script/lint` passes without any warnings +07. Run `./script/format` to make sure your changes follow Python's preferred + coding style +08. Run `./script/changelog create ...` to add a changelog entry to your PR +09. Make sure that coverage is at :100:% `./script/coverage` and open `htmlcov/index.html` + - You can open a draft PR for :eyes: & discussion prior to this 10. Push to your fork and submit a pull request We will handle updating the version, tagging the release, and releasing the gem. Please don't bump the version or otherwise attempt to take on these administrative internal tasks as part of your pull request. diff --git a/README.md b/README.md index c0e8100..4f4a5b5 100644 --- a/README.md +++ b/README.md @@ -9,37 +9,37 @@ The architecture is pluggable and the tooling is flexible to make it applicable ## Table of Contents -* [Getting started](#getting-started) - * [Workspace](#workspace) - * [Installing a specific commit SHA](#installing-a-specific-commit-sha) - * [Config](#config) - * [Dynamic Zone Config](#dynamic-zone-config) - * [Static Zone Config](#static-zone-config) - * [General Configuration Concepts](#general-configuration-concepts) - * [Quick Example Record](#quick-example-record) - * [Noop](#noop) - * [Making changes](#making-changes) - * [Workflow](#workflow) - * [Bootstrapping config files](#bootstrapping-config-files) -* [Providers](#providers) - * [Updating to use extracted providers](#updating-to-use-extracted-providers) -* [Sources](#sources) - * [Notes](#notes) -* [Processors](#processors) -* [Automatic PTR generation](#automatic-ptr-generation) -* [Compatibility and Compliance](#compatibility-and-compliance) - * [`lenient`](#lenient) - * [`strict_supports`](#strict_supports) - * [Configuring `strict_supports`](#configuring-strict_supports) -* [Custom Sources and Providers](#custom-sources-and-providers) -* [Other Uses](#other-uses) - * [Syncing between providers](#syncing-between-providers) - * [Dynamic sources](#dynamic-sources) -* [Contributing](#contributing) -* [Getting help](#getting-help) -* [Related Projects and Resources](#related-projects-and-resources) -* [License](#license) -* [Authors](#authors) +- [Getting started](#getting-started) + - [Workspace](#workspace) + - [Installing a specific commit SHA](#installing-a-specific-commit-sha) + - [Config](#config) + - [Dynamic Zone Config](#dynamic-zone-config) + - [Static Zone Config](#static-zone-config) + - [General Configuration Concepts](#general-configuration-concepts) + - [Quick Example Record](#quick-example-record) + - [Noop](#noop) + - [Making changes](#making-changes) + - [Workflow](#workflow) + - [Bootstrapping config files](#bootstrapping-config-files) +- [Providers](#providers) + - [Updating to use extracted providers](#updating-to-use-extracted-providers) +- [Sources](#sources) + - [Notes](#notes) +- [Processors](#processors) +- [Automatic PTR generation](#automatic-ptr-generation) +- [Compatibility and Compliance](#compatibility-and-compliance) + - [`lenient`](#lenient) + - [`strict_supports`](#strict_supports) + - [Configuring `strict_supports`](#configuring-strict_supports) +- [Custom Sources and Providers](#custom-sources-and-providers) +- [Other Uses](#other-uses) + - [Syncing between providers](#syncing-between-providers) + - [Dynamic sources](#dynamic-sources) +- [Contributing](#contributing) +- [Getting help](#getting-help) +- [Related Projects and Resources](#related-projects-and-resources) +- [License](#license) +- [Authors](#authors) ## Getting started @@ -268,50 +268,50 @@ It is important to review any `WARNING` log lines printed out during an `octodns The table below lists the providers octoDNS supports. They are maintained in their own repositories and released as independent modules. | Provider | Module | Notes | -| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------ | -| /etc/hosts | [octodns_etchosts](https://github.com/octodns/octodns-etchosts/) | | -| [Akamai Edge DNS](https://www.akamai.com/products/edge-dns) | [octodns_edgedns](https://github.com/octodns/octodns-edgedns/) | | -| [Amazon Route 53](https://aws.amazon.com/route53/) | [octodns_route53](https://github.com/octodns/octodns-route53) | | -| [AutoDNS](https://www.internetx.com/autodns/) | [octodns_autodns](https://github.com/octodns/octodns-autodns) | | -| [Azure DNS](https://azure.microsoft.com/en-us/services/dns/) | [octodns_azure](https://github.com/octodns/octodns-azure/) | | -| [BIND, AXFR, RFC-2136](https://www.isc.org/bind/) | [octodns_bind](https://github.com/octodns/octodns-bind/) | | -| [Cloudflare DNS](https://www.cloudflare.com/dns/) | [octodns_cloudflare](https://github.com/octodns/octodns-cloudflare/) | | -| [ClouDNS](https://www.cloudns.net/) | [octodns_cloudns](https://github.com/ClouDNS/octodns_cloudns) | | -| [Constellix](https://constellix.com/) | [octodns_constellix](https://github.com/octodns/octodns-constellix/) | | -| [deSEC](https://desec.io/) | [octodns_desec](https://github.com/rootshell-labs/octodns-desec) | | -| [DigitalOcean](https://docs.digitalocean.com/products/networking/dns/) | [octodns_digitalocean](https://github.com/octodns/octodns-digitalocean/) | | -| [DNS Made Easy](https://dnsmadeeasy.com/) | [octodns_dnsmadeeasy](https://github.com/octodns/octodns-dnsmadeeasy/) | | -| [DNSimple](https://dnsimple.com/) | [octodns_dnsimple](https://github.com/octodns/octodns-dnsimple/) | | -| [Dyn](https://www.oracle.com/cloud/networking/dns/) ([deprecated](https://www.oracle.com/corporate/acquisitions/dyn/technologies/migrate-your-services/)) | [octodns_dyn](https://github.com/octodns/octodns-dyn/) | | -| [easyDNS](https://easydns.com/) | [octodns_easydns](https://github.com/octodns/octodns-easydns/) | | -| [EdgeCenter DNS](https://edgecenter.ru/dns/) | [octodns_edgecenter](https://github.com/octodns/octodns-edgecenter/) | | -| [Fastly](https://www.fastly.com/de/) | [Financial-Times/octodns-fastly](https://github.com/Financial-Times/octodns-fastly) | | -| [G-Core Labs DNS](https://gcorelabs.com/dns/) | [octodns_gcore](https://github.com/octodns/octodns-gcore/) | | -| [Gandi](https://www.gandi.net/en-US/domain/dns) | [octodns_gandi](https://github.com/octodns/octodns-gandi/) | | -| [Google Cloud DNS](https://cloud.google.com/dns) | [octodns_googlecloud](https://github.com/octodns/octodns-googlecloud/) | | -| [Hetzner DNS](https://www.hetzner.com/dns-console) | [octodns_hetzner](https://github.com/octodns/octodns-hetzner/) | | -| [Infoblox](https://www.infoblox.com/) | [asyncon/octoblox](https://github.com/asyncon/octoblox) | | -| [Infomaniak](https://www.infomaniak.com/) | [octodns_infomaniak](https://github.com/M0NsTeRRR/octodns-infomaniak) | | -| [Lexicon](https://dns-lexicon.github.io/dns-lexicon/#) | [dns-lexicon/dns-lexicon](https://github.com/dns-lexicon/dns-lexicon) | | -| [Mythic Beasts DNS](https://www.mythic-beasts.com/support/hosting/dns) | [octodns_mythicbeasts](https://github.com/octodns/octodns-mythicbeasts/) | | -| [NetBox-DNS Plugin](https://github.com/peteeckel/netbox-plugin-dns) | [olofvndrhr/octodns-netbox-dns](https://github.com/olofvndrhr/octodns-netbox-dns) | | -| [NS1](https://ns1.com/products/managed-dns) | [octodns_ns1](https://github.com/octodns/octodns-ns1/) | | -| [OVHcloud DNS](https://www.ovhcloud.com/en/domains/dns-subdomain/) | [octodns_ovh](https://github.com/octodns/octodns-ovh/) | | -| [Pi-hole](https://pi-hole.net/) | [jvoss/octodns-pihole](https://github.com/jvoss/octodns-pihole) | | -| [PowerDNS](https://www.powerdns.com/) | [octodns_powerdns](https://github.com/octodns/octodns-powerdns/) | | -| [Rackspace](https://www.rackspace.com/library/what-is-dns) | [octodns_rackspace](https://github.com/octodns/octodns-rackspace/) | | -| [Scaleway](https://www.scaleway.com/en/dns/) | [octodns_scaleway](https://github.com/scaleway/octodns-scaleway) | | -| [Selectel](https://selectel.ru/en/services/additional/dns/) | [octodns_selectel](https://github.com/octodns/octodns-selectel/) | | -| [SPF Value Management](https://github.com/octodns/octodns-spf) | [octodns_spf](https://github.com/octodns/octodns-spf/) | | -| [TransIP](https://www.transip.eu/knowledgebase/entry/155-dns-and-nameservers/) | [octodns_transip](https://github.com/octodns/octodns-transip/) | | -| [UltraDNS](https://vercara.com/authoritative-dns) | [octodns_ultra](https://github.com/octodns/octodns-ultra/) | | +| -- | -- | -- | +| /etc/hosts | [octodns_etchosts](https://github.com/octodns/octodns-etchosts/) | | +| [Akamai Edge DNS](https://www.akamai.com/products/edge-dns) | [octodns_edgedns](https://github.com/octodns/octodns-edgedns/) | | +| [Amazon Route 53](https://aws.amazon.com/route53/) | [octodns_route53](https://github.com/octodns/octodns-route53) | | +| [AutoDNS](https://www.internetx.com/autodns/) | [octodns_autodns](https://github.com/octodns/octodns-autodns) | | +| [Azure DNS](https://azure.microsoft.com/en-us/services/dns/) | [octodns_azure](https://github.com/octodns/octodns-azure/) | | +| [BIND, AXFR, RFC-2136](https://www.isc.org/bind/) | [octodns_bind](https://github.com/octodns/octodns-bind/) | | +| [Cloudflare DNS](https://www.cloudflare.com/dns/) | [octodns_cloudflare](https://github.com/octodns/octodns-cloudflare/) | | +| [ClouDNS](https://www.cloudns.net/) | [octodns_cloudns](https://github.com/ClouDNS/octodns_cloudns) | | +| [Constellix](https://constellix.com/) | [octodns_constellix](https://github.com/octodns/octodns-constellix/) | | +| [deSEC](https://desec.io/) | [octodns_desec](https://github.com/rootshell-labs/octodns-desec) | | +| [DigitalOcean](https://docs.digitalocean.com/products/networking/dns/) | [octodns_digitalocean](https://github.com/octodns/octodns-digitalocean/) | | +| [DNS Made Easy](https://dnsmadeeasy.com/) | [octodns_dnsmadeeasy](https://github.com/octodns/octodns-dnsmadeeasy/) | | +| [DNSimple](https://dnsimple.com/) | [octodns_dnsimple](https://github.com/octodns/octodns-dnsimple/) | | +| [Dyn](https://www.oracle.com/cloud/networking/dns/) ([deprecated](https://www.oracle.com/corporate/acquisitions/dyn/technologies/migrate-your-services/)) | [octodns_dyn](https://github.com/octodns/octodns-dyn/) | | +| [easyDNS](https://easydns.com/) | [octodns_easydns](https://github.com/octodns/octodns-easydns/) | | +| [EdgeCenter DNS](https://edgecenter.ru/dns/) | [octodns_edgecenter](https://github.com/octodns/octodns-edgecenter/) | | +| [Fastly](https://www.fastly.com/de/) | [Financial-Times/octodns-fastly](https://github.com/Financial-Times/octodns-fastly) | | +| [G-Core Labs DNS](https://gcorelabs.com/dns/) | [octodns_gcore](https://github.com/octodns/octodns-gcore/) | | +| [Gandi](https://www.gandi.net/en-US/domain/dns) | [octodns_gandi](https://github.com/octodns/octodns-gandi/) | | +| [Google Cloud DNS](https://cloud.google.com/dns) | [octodns_googlecloud](https://github.com/octodns/octodns-googlecloud/) | | +| [Hetzner DNS](https://www.hetzner.com/dns-console) | [octodns_hetzner](https://github.com/octodns/octodns-hetzner/) | | +| [Infoblox](https://www.infoblox.com/) | [asyncon/octoblox](https://github.com/asyncon/octoblox) | | +| [Infomaniak](https://www.infomaniak.com/) | [octodns_infomaniak](https://github.com/M0NsTeRRR/octodns-infomaniak) | | +| [Lexicon](https://dns-lexicon.github.io/dns-lexicon/#) | [dns-lexicon/dns-lexicon](https://github.com/dns-lexicon/dns-lexicon) | | +| [Mythic Beasts DNS](https://www.mythic-beasts.com/support/hosting/dns) | [octodns_mythicbeasts](https://github.com/octodns/octodns-mythicbeasts/) | | +| [NetBox-DNS Plugin](https://github.com/peteeckel/netbox-plugin-dns) | [olofvndrhr/octodns-netbox-dns](https://github.com/olofvndrhr/octodns-netbox-dns) | | +| [NS1](https://ns1.com/products/managed-dns) | [octodns_ns1](https://github.com/octodns/octodns-ns1/) | | +| [OVHcloud DNS](https://www.ovhcloud.com/en/domains/dns-subdomain/) | [octodns_ovh](https://github.com/octodns/octodns-ovh/) | | +| [Pi-hole](https://pi-hole.net/) | [jvoss/octodns-pihole](https://github.com/jvoss/octodns-pihole) | | +| [PowerDNS](https://www.powerdns.com/) | [octodns_powerdns](https://github.com/octodns/octodns-powerdns/) | | +| [Rackspace](https://www.rackspace.com/library/what-is-dns) | [octodns_rackspace](https://github.com/octodns/octodns-rackspace/) | | +| [Scaleway](https://www.scaleway.com/en/dns/) | [octodns_scaleway](https://github.com/scaleway/octodns-scaleway) | | +| [Selectel](https://selectel.ru/en/services/additional/dns/) | [octodns_selectel](https://github.com/octodns/octodns-selectel/) | | +| [SPF Value Management](https://github.com/octodns/octodns-spf) | [octodns_spf](https://github.com/octodns/octodns-spf/) | | +| [TransIP](https://www.transip.eu/knowledgebase/entry/155-dns-and-nameservers/) | [octodns_transip](https://github.com/octodns/octodns-transip/) | | +| [UltraDNS](https://vercara.com/authoritative-dns) | [octodns_ultra](https://github.com/octodns/octodns-ultra/) | | | [YamlProvider](/octodns/provider/yaml.py) | built-in | Supports all record types and core functionality | -| Zonefile | [kompetenzbolzen/octodns-custom-provider](https://github.com/kompetenzbolzen/octodns-custom-provider) | | +| Zonefile | [kompetenzbolzen/octodns-custom-provider](https://github.com/kompetenzbolzen/octodns-custom-provider) | | ### Updating to use extracted providers 1. Include the extracted module in your python environment, e.g. if using Route53 that would require adding the `octodns_route53` module to your requirements.txt, setup.py, or similar. -1. Update the `class` value for your provider to the new path, e.g. again for Route53 that would be replacing `octodns.provider.route53.Route53Provider` with `octodns_route53.Route53Provider` +2. Update the `class` value for your provider to the new path, e.g. again for Route53 that would be replacing `octodns.provider.route53.Route53Provider` with `octodns_route53.Route53Provider` The module required and provider class path for extracted providers can be found in the table above. @@ -320,7 +320,7 @@ The module required and provider class path for extracted providers can be found Similar to providers, but can only serve to populate records into a zone, cannot be synced to. | Source | Record Support | Dynamic | Notes | -| ---------------------------------------------------------------------------- | ---------------------------------------------------- | ------- | ---------------------------------------- | +| -- | -- | -- | -- | | [AxfrSource (BIND)](https://github.com/octodns/octodns-bind/) | A, AAAA, CAA, CNAME, LOC, MX, NS, PTR, SPF, SRV, TXT | No | read-only | | [DDNS Source](https://github.com/octodns/octodns-ddns) | A, AAAA | No | read-only | | [EnvVarSource](/octodns/source/envvar.py) | TXT | No | read-only environment variable injection | @@ -332,15 +332,15 @@ Similar to providers, but can only serve to populate records into a zone, cannot ### Notes -* ALIAS support varies a lot from provider to provider care should be taken to verify that your needs are met in detail. - * Dyn's UI doesn't allow editing or view of TTL, but the API accepts and stores the value provided, this value does not appear to be used when served - * Dnsimple's uses the configured TTL when serving things through the ALIAS, there's also a secondary TXT record created alongside the ALIAS that octoDNS ignores -* octoDNS itself supports non-ASCII character sets, but in testing Cloudflare is the only provider where that is currently functional end-to-end. Others have failures either in the client libraries or API calls +- ALIAS support varies a lot from provider to provider care should be taken to verify that your needs are met in detail. + - Dyn's UI doesn't allow editing or view of TTL, but the API accepts and stores the value provided, this value does not appear to be used when served + - Dnsimple's uses the configured TTL when serving things through the ALIAS, there's also a secondary TXT record created alongside the ALIAS that octoDNS ignores +- octoDNS itself supports non-ASCII character sets, but in testing Cloudflare is the only provider where that is currently functional end-to-end. Others have failures either in the client libraries or API calls ## Processors | Processor | Description | -| --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| -- | -- | | [AcmeManagingProcessor](/octodns/processor/acme.py) | Useful when processes external to octoDNS are managing acme challenge DNS records, e.g. LetsEncrypt | | [AutoArpa](/octodns/processor/arpa.py) | See [Automatic PTR generation](#automatic-ptr-generation) below | | [EnsureTrailingDots](/octodns/processor/trailing_dots.py) | Processor that ensures ALIAS, CNAME, DNAME, MX, NS, PTR, and SRVs have trailing dots | @@ -390,7 +390,7 @@ providers: ## Custom Sources and Providers -You can check out the [source](/octodns/source/) and [provider](/octodns/provider/) directory to see what's currently supported. Sources act as a source of record information. AxfrSource and TinyDnsFileSource are currently the only OSS sources, though we have several others internally that are specific to our environment. These include something to pull host data from [gPanel](https://githubengineering.com/githubs-metal-cloud/) and a similar provider that sources information about our network gear to create both `A` & `PTR` records for their interfaces. Things that might make good OSS sources might include an `ElbSource` that pulls information about [AWS Elastic Load Balancers](https://aws.amazon.com/elasticloadbalancing/) and dynamically creates `CNAME`s for them, or `Ec2Source` that pulls instance information so that records can be created for hosts similar to how our `GPanelProvider` works. +You can check out the [source](/octodns/source/) and [provider](/octodns/provider/) directory to see what's currently supported. Sources act as a source of record information. AxfrSource and TinyDnsFileSource are currently the only OSS sources, though we have several others internally that are specific to our environment. These include something to pull host data from [gPanel](https://githubengineering.com/githubs-metal-cloud/) and a similar provider that sources information about our network gear to create both `A` & `PTR` records for their interfaces. Things that might make good OSS sources might include an `ElbSource` that pulls information about [AWS Elastic Load Balancers](https://aws.amazon.com/elasticloadbalancing/) and dynamically creates `CNAME`s for them, or `Ec2Source` that pulls instance information so that records can be created for hosts similar to how our `GPanelProvider` works. Most of the things included in octoDNS are providers, the obvious difference being that they can serve as both sources and targets of data. We'd really like to see this list grow over time so if you use an unsupported provider then PRs are welcome. The existing providers should serve as reasonable examples. Those that have no GeoDNS support are relatively straightforward. Unfortunately most of the APIs involved to do GeoDNS style traffic management are complex and somewhat inconsistent so adding support for that function would be nice, but is optional and best done in a separate pass. @@ -460,7 +460,9 @@ If you have a problem or suggestion, please [open an issue](https://github.com/o ## Related Projects and Resources - **GitHub Action:** [octoDNS-Sync](https://github.com/marketplace/actions/octodns-sync) + - **NixOS Integration:** [NixOS-DNS](https://github.com/Janik-Haag/nixos-dns/) + - **Sample Implementations.** See how others are using it - [`hackclub/dns`](https://github.com/hackclub/dns) @@ -469,6 +471,7 @@ If you have a problem or suggestion, please [open an issue](https://github.com/o - [`jekyll/dns`](https://github.com/jekyll/dns) - **Resources.** + - Article: [Visualising DNS records with Neo4j](https://medium.com/@costask/querying-and-visualising-octodns-records-with-neo4j-f4f72ab2d474) + code - Video: [FOSDEM 2019 - DNS as code with octodns](https://archive.fosdem.org/2019/schedule/event/dns_octodns/) - GitHub Blog: [Enabling DNS split authority with octoDNS](https://github.blog/2017-04-27-enabling-split-authority-dns-with-octodns/) diff --git a/docs/index.md b/docs/index.md index 4e0d9be..1f32422 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,10 +1,12 @@ # octodns documentation ```{include} ../README.md -:end-before: "## Table of Contents" +--- +end-before: '## Table of Contents' +--- ``` ---- +______________________________________________________________________ ## Indices and tables @@ -16,7 +18,7 @@ - [License](infos/license.md) - [Changelog](infos/changelog.md) ---- +______________________________________________________________________ ## User documentation @@ -28,7 +30,7 @@ pages/* ``` ---- +______________________________________________________________________ ## Module documentation diff --git a/docs/pages/auto_arpa.md b/docs/pages/auto_arpa.md index a1f7053..105da43 100644 --- a/docs/pages/auto_arpa.md +++ b/docs/pages/auto_arpa.md @@ -46,7 +46,7 @@ In order to add `PTR` records for a zone the `auto-arpa` source should be added - ... ``` -The above will add `PTR` records for any `A` records previously seen with IP addresses 10.0.0.*. +The above will add `PTR` records for any `A` records previously seen with IP addresses 10.0.0.\*. ### A Complete Example @@ -98,9 +98,9 @@ fileserver: #### Auto-generated PTRs -* 101.0.0.10: exxampled.com. -* 102.0.0.10: exxampled.com. -* 103.0.0.10: email.exxampled.com., fileserver.exxampled.com. +- 101.0.0.10: exxampled.com. +- 102.0.0.10: exxampled.com. +- 103.0.0.10: email.exxampled.com., fileserver.exxampled.com. ### Notes @@ -123,4 +123,5 @@ example.com.: targets: - ... ``` + That would take all the relevant records from example.com and add them as PTR records for the arpa zones in the same place as the 'config' source specifies. diff --git a/docs/pages/dynamic_records.md b/docs/pages/dynamic_records.md index e3e2faf..4fa6124 100644 --- a/docs/pages/dynamic_records.md +++ b/docs/pages/dynamic_records.md @@ -106,25 +106,23 @@ flowchart LR class values valueColor ``` - - #### Geo Codes Geo codes consist of one to three parts depending on the scope of the area being targeted. Examples of these look like: -* 'NA-US-KY' - North America, United States, Kentucky -* 'NA-US' - North America, United States -* 'NA' - North America +- 'NA-US-KY' - North America, United States, Kentucky +- 'NA-US' - North America, United States +- 'NA' - North America The first portion is the continent: -* 'AF': 14, # Continental Africa -* 'AN': 17, # Continental Antarctica -* 'AS': 15, # Continental Asia -* 'EU': 13, # Continental Europe -* 'NA': 11, # Continental North America -* 'OC': 16, # Continental Australia/Oceania -* 'SA': 12, # Continental South America +- 'AF': 14, # Continental Africa +- 'AN': 17, # Continental Antarctica +- 'AS': 15, # Continental Asia +- 'EU': 13, # Continental Europe +- 'NA': 11, # Continental North America +- 'OC': 16, # Continental Australia/Oceania +- 'SA': 12, # Continental South America The second is the two-letter ISO Country Code https://en.wikipedia.org/wiki/ISO_3166-2 and the third is the ISO Country Code Subdivision as per https://en.wikipedia.org/wiki/ISO_3166-2:US. Change the code at the end for the country you are subdividing. Note that these may not always be supported depending on the providers in use. @@ -160,7 +158,7 @@ Subnet targeting is considered more specific than geo targeting. This means that ### Health Checks -octoDNS will automatically configure the provider to monitor each IP and check for a 200 response for **https:///_dns**. +octoDNS will automatically configure the provider to monitor each IP and check for a 200 response for **https://\/\_dns**. These checks can be customized via the `healthcheck` configuration options. @@ -178,10 +176,10 @@ test: ... ``` -| Key | Description | Default | -|--|--|--| +| Key | Description | Default | +| -- | -- | -- | | host | FQDN for host header and SNI | - | -| path | path to check | _dns | +| path | path to check | \_dns | | port | port to check | 443 | | protocol | HTTP/HTTPS/TCP | HTTPS | @@ -206,7 +204,8 @@ test: ``` Support matrix: -* NS1 and Azure DNS support all 3 flag values -* All other dynamic-capable providers only support the default `obey` + +- NS1 and Azure DNS support all 3 flag values +- All other dynamic-capable providers only support the default `obey` See "Health Check Options" in individual provider documentation for customization support. diff --git a/docs/pages/geo_records.md b/docs/pages/geo_records.md index e6486b1..9f54747 100644 --- a/docs/pages/geo_records.md +++ b/docs/pages/geo_records.md @@ -28,33 +28,31 @@ test: value: 111.111.111.5 ``` - The geo labels breakdown based on: -1. - - 'AF': 14, # Continental Africa - - 'AN': 17, # Continental Antarctica - - 'AS': 15, # Continental Asia - - 'EU': 13, # Continental Europe - - 'NA': 11, # Continental North America - - 'OC': 16, # Continental Australia/Oceania - - 'SA': 12, # Continental South America +1. - 'AF': 14, # Continental Africa + - 'AN': 17, # Continental Antarctica + - 'AS': 15, # Continental Asia + - 'EU': 13, # Continental Europe + - 'NA': 11, # Continental North America + - 'OC': 16, # Continental Australia/Oceania + - 'SA': 12, # Continental South America 2. ISO Country Code https://en.wikipedia.org/wiki/ISO_3166-2 -3. ISO Country Code Subdivision as per https://en.wikipedia.org/wiki/ISO_3166-2:US (change the code at the end for the country you are subdividing) * these may not always be supported depending on the provider. +3. ISO Country Code Subdivision as per https://en.wikipedia.org/wiki/ISO_3166-2:US (change the code at the end for the country you are subdividing) * these may not always be supported depending on the provider. So the example is saying: -- North America - United States - New York: gets served an "A" record of 111.111.111.1 -- North America - United States - California: gets served an "A" record of 111.111.111.2 +- North America - United States - New York: gets served an "A" record of 111.111.111.1 +- North America - United States - California: gets served an "A" record of 111.111.111.2 - Oceania - Australia: Gets served an "A" record of 111.111.111.3 - Europe: gets an "A" record of 111.111.111.4 - Everyone else gets an "A" record of 111.111.111.5 ### Health Checks -octoDNS will automatically set up monitors check for a 200 response for **https:///_dns**. +octoDNS will automatically set up monitors check for a 200 response for **https://\/\_dns**. These checks can be configured by adding a `healthcheck` configuration to the record: @@ -74,17 +72,17 @@ test: protocol: HTTPS ``` -| Key | Description | Default | -|--|--|--| +| Key | Description | Default | +| -- | -- | -- | | host | FQDN for host header and SNI | - | -| path | path to check | _dns | +| path | path to check | \_dns | | port | port to check | 443 | | protocol | HTTP/HTTPS | HTTPS | #### Route53 Healtch Check Options -| Key | Description | Default | -|--|--|--| +| Key | Description | Default | +| -- | -- | -- | | measure_latency | Show latency in AWS console | true | | request_interval | Healthcheck interval [10\|30] seconds | 10 | diff --git a/docs/pages/quick-start.md b/docs/pages/quick-start.md index 8f72687..06132c8 100644 --- a/docs/pages/quick-start.md +++ b/docs/pages/quick-start.md @@ -1,6 +1,8 @@ # Quick-Start ```{include} ../../README.md -:start-after: "## Getting started" -:end-before: "## Providers" +--- +start-after: '## Getting started' +end-before: '## Providers' +--- ``` diff --git a/docs/pages/records.md b/docs/pages/records.md index d5f2cc4..27bdfad 100644 --- a/docs/pages/records.md +++ b/docs/pages/records.md @@ -4,24 +4,24 @@ octoDNS supports the following record types: -* `A` -* `AAAA` -* `ALIAS` -* `CAA` -* `CNAME` -* `DNAME` -* `DS` -* `LOC` -* `MX` -* `NAPTR` -* `NS` -* `PTR` -* `SPF` -* `SRV` -* `SSHFP` -* `TLSA` -* `TXT` -* `URLFWD` +- `A` +- `AAAA` +- `ALIAS` +- `CAA` +- `CNAME` +- `DNAME` +- `DS` +- `LOC` +- `MX` +- `NAPTR` +- `NS` +- `PTR` +- `SPF` +- `SRV` +- `SSHFP` +- `TLSA` +- `TXT` +- `URLFWD` Underlying provider support for each of these varies and some providers have extra requirements or limitations. In cases where a record type is not supported by a provider octoDNS will ignore it there and continue to manage the record elsewhere. For example `SSHFP` is supported by Dyn, but not Route53. If your source data includes an SSHFP record octoDNS will keep it in sync on Dyn, but not consider it when evaluating the state of Route53. The best way to find out what types are supported by a provider is to look for its `supports` method. If that method exists the logic will drive which records are supported and which are ignored. If the provider does not implement the method it will fall back to `BaseProvider.supports` which indicates full support. @@ -29,8 +29,8 @@ Adding new record types to octoDNS is relatively straightforward, but will requi ## Advanced Record Support (GeoDNS, Weighting) -* [Dynamic Records](/docs/dynamic_records.md) - the preferred method for configuring geo-location, weights, and healthcheck based fallback between pools of services. -* [Geo Records](/docs/geo_records.md) - the original implementation of geo-location based records, now superseded by Dynamic Records (above) +- [Dynamic Records](/docs/dynamic_records.md) - the preferred method for configuring geo-location, weights, and healthcheck based fallback between pools of services. +- [Geo Records](/docs/geo_records.md) - the original implementation of geo-location based records, now superseded by Dynamic Records (above) ## Config (`YamlProvider`) @@ -96,6 +96,7 @@ octoDNS is fairly strict in terms of standards compliance and is opinionated in It's best to think of the `lenient` flag as "I know what I'm doing and accept any problems I run across." The main reason being is that some providers may allow the non-compliant setup and others may not. The behavior of the non-compliant records may even vary from one provider to another. Caveat emptor. #### Record priority for AutoArpa + When multiple A or AAAA records point to the same IP, it is possible to set an optional priority on each record. The records with the lowest priority will have the highest preference when being processed by AutoArpa. The AutoArpa provider will create PTR records in order of preference, up to a set limit defined by the `max_auto_arpa` option in the provider configuration. ```yaml @@ -143,12 +144,12 @@ If left unconfigured, suitable defaults take over instead. In the below example, the Dyn provider is configured with limits of 40% on both update and delete operations over all the records present. -````yaml +```yaml dyn: class: octodns.provider.dyn.DynProvider update_pcent_threshold: 0.4 delete_pcent_threshold: 0.4 -```` +``` Additionally, thresholds can be configured at the zone level. Zone thresholds take precedence over any provider default or explicit configuration. Zone diff --git a/examples/README.md b/examples/README.md index f3adfa1..017c51b 100644 --- a/examples/README.md +++ b/examples/README.md @@ -7,10 +7,10 @@ ideas for other subjects to cover. ### Examples -* Getting started with a [basic octoDNS configuration](basic/) - new to octoDNS +- Getting started with a [basic octoDNS configuration](basic/) - new to octoDNS this is the place to start. It'll walk you through the main pieces of DNS IaC with octoDNS including the process of planning and applying changes. -* [Migrating to octoDNS](migrating-to-octodns/) - have an existing DNS setup +- [Migrating to octoDNS](migrating-to-octodns/) - have an existing DNS setup you'd like to bring into octoDNS check this example out right after [basic](basic/). It'll walk you through the steps of using `octodns-dump` to pull the existing data out of your provider into matching YAML config files on @@ -29,7 +29,7 @@ local PowerDNS instance the following instructions below should get it up and running. 1. If you haven't already [install docker compose](https://docs.docker.com/compose/install/) -1. If you don't already have a copy of octoDNS checked out run `git clone https://github.com/octodns/octodns.git` -1. In a seperate terminal window or tab -1. cd into the examples directory `cd octodns/examples` -1. Run docker-compose up `docker-compose up`, this will start up MySQL and PowerDNS running them in the foreground with their logs printing to the terminal +2. If you don't already have a copy of octoDNS checked out run `git clone https://github.com/octodns/octodns.git` +3. In a seperate terminal window or tab +4. cd into the examples directory `cd octodns/examples` +5. Run docker-compose up `docker-compose up`, this will start up MySQL and PowerDNS running them in the foreground with their logs printing to the terminal diff --git a/examples/basic/README.md b/examples/basic/README.md index f210881..b9d9eef 100644 --- a/examples/basic/README.md +++ b/examples/basic/README.md @@ -6,9 +6,9 @@ might see for managing a set of personal domains or a small business. Most of the actual documentation for this example is found in the comments in the YAML configuration files. -* [config/octodns.yaml](config/octodns.yaml) -* [config/my-domain.com.yaml](config/my-domain.com.yaml) -* [config/unused-domain.io.yaml](config/unused-domain.io.yaml) +- [config/octodns.yaml](config/octodns.yaml) +- [config/my-domain.com.yaml](config/my-domain.com.yaml) +- [config/unused-domain.io.yaml](config/unused-domain.io.yaml) From here on this README focuses on the general process of running octoDNS. @@ -250,5 +250,5 @@ No changes were planned ## What's Next -* Check out [migrating to octoDNS](../migrating-to-octodns) for an example of how to create zone configuration YAML files from your existing provider's configuration -* For a complete list check out the [Examples Directory](../) +- Check out [migrating to octoDNS](../migrating-to-octodns) for an example of how to create zone configuration YAML files from your existing provider's configuration +- For a complete list check out the [Examples Directory](../) diff --git a/examples/migrating-to-octodns/README.md b/examples/migrating-to-octodns/README.md index 15c1742..0dcd42d 100644 --- a/examples/migrating-to-octodns/README.md +++ b/examples/migrating-to-octodns/README.md @@ -6,10 +6,10 @@ straightforward process and can generally be completed in minutes. Some relevant documentation for this example is in comments in the YAML configuration files. -* [config/octodns.yaml](config/octodns.yaml) -* [populate/octodns.yaml](populate/octodns.yaml) -* [populate/my-dumpable.com.yaml](populate/my-dumpable.com.yaml) -* [populate/unused-dumpable.com.yaml](populate/unused-dumpable.com.yaml) +- [config/octodns.yaml](config/octodns.yaml) +- [populate/octodns.yaml](populate/octodns.yaml) +- [populate/my-dumpable.com.yaml](populate/my-dumpable.com.yaml) +- [populate/unused-dumpable.com.yaml](populate/unused-dumpable.com.yaml) From here on this README focuses on the process of using `octodns-dump` to import your existing DNS data into octoDNS. @@ -267,5 +267,5 @@ which is beyond the scope of this example. So now you can commit your config and start managing you DNS with octoDNS rather than clicking buttons in UIs or using whatever you previous had used. -* Check out [octoDNS basic example](../basic) for an example of how to create zone configuration YAML files from your existing provider's configuration -* For a complete list check out the [Examples Directory](../) +- Check out [octoDNS basic example](../basic) for an example of how to create zone configuration YAML files from your existing provider's configuration +- For a complete list check out the [Examples Directory](../) diff --git a/script/format b/script/format index 2a8438d..d83d0cd 100755 --- a/script/format +++ b/script/format @@ -2,9 +2,12 @@ set -e -SOURCES="$(find *.py octodns tests -name '*.py') $(grep --files-with-matches '^#!.*python' script/*)" +SOURCES_PYTHON="$(find *.py octodns tests -name '*.py') $(grep --files-with-matches '^#!.*python' script/*)" +SOURCE_MARKDOWN="$(find *.md docs examples -name '*.md')" . env/bin/activate -isort "$@" $SOURCES -black "$@" $SOURCES +isort "$@" $SOURCES_PYTHON +black "$@" $SOURCES_PYTHON + +mdformat --compact-tables --number $SOURCE_MARKDOWN diff --git a/script/lint b/script/lint index fd0d36c..f580ed1 100755 --- a/script/lint +++ b/script/lint @@ -15,6 +15,6 @@ if [ ! -f "$ACTIVATE" ]; then fi . "$ACTIVATE" -SOURCES="$(find *.py octodns tests -name '*.py') $(grep --files-with-matches '^#!.*python' script/*)" +SOURCES_PYTHON="$(find *.py octodns tests -name '*.py') $(grep --files-with-matches '^#!.*python' script/*)" -pyflakes $SOURCES +pyflakes $SOURCES_PYTHON diff --git a/setup.py b/setup.py index de9f294..812ff9e 100644 --- a/setup.py +++ b/setup.py @@ -74,6 +74,7 @@ setup( 'furo>=2024.8.6', 'myst-parser>=4.0.1', 'sphinx-copybutton>=0.5.2', + 'mdformat-myst>=0.2.1', ) }, install_requires=(