Refactor API and zone update handling#30
Draft
tacerus wants to merge 3 commits intosaltstack-formulas:masterfrom
Draft
Refactor API and zone update handling#30tacerus wants to merge 3 commits intosaltstack-formulas:masterfrom
tacerus wants to merge 3 commits intosaltstack-formulas:masterfrom
Conversation
The existing modules rely on the "pdnsapi" library which is proprietary and has not received recent updates. Other Python libraries for interfacing with the PowerDNS API suffer from the same issues or are feature incomplete. Solve this and make the modules more easily extensible by directly interfacing with the PowerDNS HTTP REST API, utilizing the requests library which is already installed as a dependency of a common Salt deployment. For more efficient interaction as part of state modules which repeatedly call the execution module, add the requests-toolbelt library as the only additional dependency for easier implementation of a base session. As part of this refactoring the functions are renamed to follow a more streamlined scheme differentiating between read and write operations, and the output is aligned with what is returned directly by PowerDNS. As a result, this is a breaking change. Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
Avoid splitting rrsets updates to a separate state function when it is handled in the same PowerDNS API payload, rather integrate the logic from rrsets_presents() into zone_present(). The second function can be deleted in a later patch once functionality is deemed equivalent. Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
Factor in rrset and record changes and drop the separate rrsets_present() state function. Utilize dictdiffer to avoid lots of the complicated and convoluted comparison code at the cost of a slightly less uniform but still useful diff in the changes output. Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR progress checklist (to be filled in by reviewers)
What type of PR is this?
Primary type
[build]Changes related to the build system[chore]Changes to the build process or auxiliary tools and libraries such as documentation generation[ci]Changes to the continuous integration configuration[feat]A new feature[fix]A bug fix[perf]A code change that improves performance[refactor]A code change that neither fixes a bug nor adds a feature[revert]A change used to revert a previous commit[style]Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc.)Secondary type
[docs]Documentation changes[test]Adding missing or correcting existing testsDoes this PR introduce a
BREAKING CHANGE?Yes.
Related issues and/or pull requests
Describe the changes you're proposing
Pillar / config required to test the proposed changes
Pillar abstraction is not yet implemented. Hence a sample state file instead:
Debug log showing how the proposed changes work
Exceeds GitHub maximum body size.
Documentation checklist
README(e.g.Available states).pillar.example.Testing checklist
state_top).Additional context
This is a work in progress effort. I am sharing it already to gather potential early feedback and to learn whether such a big change is of interest to this project at all. The code still needs lots of cleanup, and it is of course lacking documentation and tests (for effective testing, the test suite will need to spin up a PowerDNS, which I am not yet sure how to integrate into the
kitchensuite in this repository).Most of the logic is around getting a usable diff for the changes to make for an experience as with other Salt states. Unfortunately, the PowerDNS API itself does not yet natively support operating in a dry-run mode with diff output.
The existing functions are for the most part refactored. Having a single
zone_present()state function instead of separate rrset logic allows following of the upstream PowerDNS API data structure, making the state both easier to use for users (the same documentation as the upstream API can be followed) and easier to adapt in case of future changes to the upstream API.