diff options
Diffstat (limited to 'ansible_collections/community/dns')
34 files changed, 915 insertions, 581 deletions
diff --git a/ansible_collections/community/dns/.github/workflows/ansible-test.yml b/ansible_collections/community/dns/.github/workflows/ansible-test.yml index 186079a41..d8121c8f7 100644 --- a/ansible_collections/community/dns/.github/workflows/ansible-test.yml +++ b/ansible_collections/community/dns/.github/workflows/ansible-test.yml @@ -29,53 +29,30 @@ jobs: ansible: # It's important that Sanity is tested against all stable-X.Y branches # Testing against `devel` may fail as new tests are added. - - stable-2.9 - - stable-2.10 - - stable-2.11 - - stable-2.12 - - stable-2.13 - stable-2.14 - stable-2.15 - stable-2.16 - stable-2.17 - devel - # Ansible-test on various stable branches does not yet work well with cgroups v2. - # Since ubuntu-latest now uses Ubuntu 22.04, we need to fall back to the ubuntu-20.04 - # image for these stable branches. The list of branches where this is necessary will - # shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28 - # for the latest list. - runs-on: >- - ${{ contains(fromJson( - '["stable-2.9", "stable-2.10", "stable-2.11"]' - ), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }} + runs-on: ubuntu-latest steps: - name: Perform sanity testing uses: felixfontein/ansible-test-gh-action@main with: ansible-core-version: ${{ matrix.ansible }} + codecov-token: ${{ secrets.CODECOV_TOKEN }} testing-type: sanity + test-deps: >- + git+https://github.com/ansible-collections/community.library_inventory_filtering.git,stable-1 units: - # Ansible-test on various stable branches does not yet work well with cgroups v2. - # Since ubuntu-latest now uses Ubuntu 22.04, we need to fall back to the ubuntu-20.04 - # image for these stable branches. The list of branches where this is necessary will - # shrink over time, check out https://github.com/ansible-collections/news-for-maintainers/issues/28 - # for the latest list. - runs-on: >- - ${{ contains(fromJson( - '["stable-2.9", "stable-2.10", "stable-2.11"]' - ), matrix.ansible) && 'ubuntu-20.04' || 'ubuntu-latest' }} + runs-on: ubuntu-latest name: Units (Ⓐ${{ matrix.ansible }}) strategy: # As soon as the first unit test fails, cancel the others to free up the CI queue fail-fast: true matrix: ansible: - - stable-2.9 - - stable-2.10 - - stable-2.11 - - stable-2.12 - - stable-2.13 - stable-2.14 - stable-2.15 - stable-2.16 @@ -89,12 +66,13 @@ jobs: uses: felixfontein/ansible-test-gh-action@main with: ansible-core-version: ${{ matrix.ansible }} + codecov-token: ${{ secrets.CODECOV_TOKEN }} testing-type: units - # NOTE: we're installing with git to work around Galaxy being a huge PITA (https://github.com/ansible/galaxy/issues/2429) pre-test-cmd: >- - git clone --depth=1 --single-branch https://github.com/ansible-collections/community.internal_test_tools.git ../../community/internal_test_tools - ; tests/unit/replace-requirements.sh requirements-${{ matrix.ansible }}.txt + test-deps: >- + git+https://github.com/ansible-collections/community.internal_test_tools.git,main + git+https://github.com/ansible-collections/community.library_inventory_filtering.git,stable-1 integration: # Ansible-test on various stable branches does not yet work well with cgroups v2. @@ -119,26 +97,11 @@ jobs: - "3.11" - "3.12" include: - # 2.9 - - ansible: stable-2.9 - python: "2.7" - - ansible: stable-2.9 - python: "3.6" - # 2.10 - - ansible: stable-2.10 - python: "3.5" - # 2.11 - - ansible: stable-2.11 + # 2.14 + - ansible: stable-2.14 python: "2.7" - # 2.12 - - ansible: stable-2.12 - python: "2.6" - - ansible: stable-2.12 + - ansible: stable-2.14 python: "3.5" - # 2.13 - - ansible: stable-2.13 - python: "3.6" - # 2.14 - ansible: stable-2.14 python: "3.9" # 2.15 @@ -165,11 +128,13 @@ jobs: uses: felixfontein/ansible-test-gh-action@main with: ansible-core-version: ${{ matrix.ansible }} + codecov-token: ${{ secrets.CODECOV_TOKEN }} integration-continue-on-error: 'false' integration-diff: 'false' integration-retry-on-error: 'true' - # NOTE: we're installing with git to work around Galaxy being a huge PITA (https://github.com/ansible/galaxy/issues/2429) pre-test-cmd: >- tests/integration/replace-requirements.sh requirements-${{ matrix.ansible }}.txt + test-deps: >- + git+https://github.com/ansible-collections/community.library_inventory_filtering.git,stable-1 target-python-version: ${{ matrix.python }} testing-type: integration diff --git a/ansible_collections/community/dns/.github/workflows/ee.yml b/ansible_collections/community/dns/.github/workflows/ee.yml index 9a2f1164b..afa820d0d 100644 --- a/ansible_collections/community/dns/.github/workflows/ee.yml +++ b/ansible_collections/community/dns/.github/workflows/ee.yml @@ -62,22 +62,6 @@ jobs: ansible_runner: ansible-runner base_image: quay.io/centos/centos:stream9 pre_base: '"#"' - - name: ansible-core 2.13 @ RHEL UBI 8 - ansible_core: https://github.com/ansible/ansible/archive/stable-2.13.tar.gz - ansible_runner: ansible-runner - other_deps: |2 - python_interpreter: - package_system: python39 python39-pip python39-wheel python39-cryptography - base_image: docker.io/redhat/ubi8:latest - pre_base: '"#"' - - name: ansible-core 2.12 @ CentOS Stream 8 - ansible_core: https://github.com/ansible/ansible/archive/stable-2.12.tar.gz - ansible_runner: ansible-runner - other_deps: |2 - python_interpreter: - package_system: python39 python39-pip python39-wheel python39-cryptography - base_image: quay.io/centos/centos:stream8 - pre_base: '"#"' runs-on: ubuntu-latest steps: - name: Check out code @@ -88,7 +72,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: '3.12' - name: Install ansible-builder and ansible-navigator run: pip install ansible-builder ansible-navigator diff --git a/ansible_collections/community/dns/.github/workflows/extra-tests.yml b/ansible_collections/community/dns/.github/workflows/extra-tests.yml index 975404fa5..397b22af7 100644 --- a/ansible_collections/community/dns/.github/workflows/extra-tests.yml +++ b/ansible_collections/community/dns/.github/workflows/extra-tests.yml @@ -33,15 +33,16 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: '3.12' - name: Install ansible-core run: pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check - name: Install collection dependencies - run: git clone --depth=1 --single-branch https://github.com/ansible-collections/community.internal_test_tools.git ./ansible_collections/community/internal_test_tools - # NOTE: we're installing with git to work around Galaxy being a huge PITA (https://github.com/ansible/galaxy/issues/2429) - # run: ansible-galaxy collection install community.internal_test_tools -p . + run: >- + ansible-galaxy collection install -p . + git+https://github.com/ansible-collections/community.internal_test_tools.git,main + git+https://github.com/ansible-collections/community.library_inventory_filtering.git,stable-1 - name: Run sanity tests run: ../../community/internal_test_tools/tools/run.py --color diff --git a/ansible_collections/community/dns/CHANGELOG.md b/ansible_collections/community/dns/CHANGELOG.md index 9881ee7ed..95a940b1c 100644 --- a/ansible_collections/community/dns/CHANGELOG.md +++ b/ansible_collections/community/dns/CHANGELOG.md @@ -2,193 +2,239 @@ **Topics** -- <a href="#v2-9-0">v2\.9\.0</a> +- <a href="#v3-0-0">v3\.0\.0</a> - <a href="#release-summary">Release Summary</a> + - <a href="#major-changes">Major Changes</a> + - <a href="#minor-changes">Minor Changes</a> + - <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a> + - <a href="#removed-features-previously-deprecated">Removed Features \(previously deprecated\)</a> - <a href="#bugfixes">Bugfixes</a> +- <a href="#v2-9-0">v2\.9\.0</a> + - <a href="#release-summary-1">Release Summary</a> + - <a href="#bugfixes-1">Bugfixes</a> - <a href="#new-plugins">New Plugins</a> - <a href="#filter">Filter</a> - <a href="#v2-8-3">v2\.8\.3</a> - - <a href="#release-summary-1">Release Summary</a> - - <a href="#bugfixes-1">Bugfixes</a> -- <a href="#v2-8-2">v2\.8\.2</a> - <a href="#release-summary-2">Release Summary</a> - - <a href="#security-fixes">Security Fixes</a> - <a href="#bugfixes-2">Bugfixes</a> -- <a href="#v2-8-1">v2\.8\.1</a> +- <a href="#v2-8-2">v2\.8\.2</a> - <a href="#release-summary-3">Release Summary</a> + - <a href="#security-fixes">Security Fixes</a> - <a href="#bugfixes-3">Bugfixes</a> -- <a href="#v2-8-0">v2\.8\.0</a> +- <a href="#v2-8-1">v2\.8\.1</a> - <a href="#release-summary-4">Release Summary</a> - - <a href="#minor-changes">Minor Changes</a> - - <a href="#deprecated-features">Deprecated Features</a> - <a href="#bugfixes-4">Bugfixes</a> -- <a href="#v2-7-0">v2\.7\.0</a> +- <a href="#v2-8-0">v2\.8\.0</a> - <a href="#release-summary-5">Release Summary</a> - <a href="#minor-changes-1">Minor Changes</a> + - <a href="#deprecated-features">Deprecated Features</a> - <a href="#bugfixes-5">Bugfixes</a> -- <a href="#v2-6-4">v2\.6\.4</a> +- <a href="#v2-7-0">v2\.7\.0</a> - <a href="#release-summary-6">Release Summary</a> + - <a href="#minor-changes-2">Minor Changes</a> - <a href="#bugfixes-6">Bugfixes</a> -- <a href="#v2-6-3">v2\.6\.3</a> +- <a href="#v2-6-4">v2\.6\.4</a> - <a href="#release-summary-7">Release Summary</a> - <a href="#bugfixes-7">Bugfixes</a> -- <a href="#v2-6-2">v2\.6\.2</a> +- <a href="#v2-6-3">v2\.6\.3</a> - <a href="#release-summary-8">Release Summary</a> - <a href="#bugfixes-8">Bugfixes</a> -- <a href="#v2-6-1">v2\.6\.1</a> +- <a href="#v2-6-2">v2\.6\.2</a> - <a href="#release-summary-9">Release Summary</a> - <a href="#bugfixes-9">Bugfixes</a> -- <a href="#v2-6-0">v2\.6\.0</a> +- <a href="#v2-6-1">v2\.6\.1</a> - <a href="#release-summary-10">Release Summary</a> - - <a href="#minor-changes-2">Minor Changes</a> - <a href="#bugfixes-10">Bugfixes</a> +- <a href="#v2-6-0">v2\.6\.0</a> + - <a href="#release-summary-11">Release Summary</a> + - <a href="#minor-changes-3">Minor Changes</a> + - <a href="#bugfixes-11">Bugfixes</a> - <a href="#new-plugins-1">New Plugins</a> - <a href="#lookup">Lookup</a> - <a href="#new-modules">New Modules</a> - <a href="#v2-5-7">v2\.5\.7</a> - - <a href="#release-summary-11">Release Summary</a> - - <a href="#bugfixes-11">Bugfixes</a> -- <a href="#v2-5-6">v2\.5\.6</a> - <a href="#release-summary-12">Release Summary</a> + - <a href="#bugfixes-12">Bugfixes</a> +- <a href="#v2-5-6">v2\.5\.6</a> + - <a href="#release-summary-13">Release Summary</a> - <a href="#known-issues">Known Issues</a> - <a href="#v2-5-5">v2\.5\.5</a> - - <a href="#release-summary-13">Release Summary</a> - - <a href="#bugfixes-12">Bugfixes</a> -- <a href="#v2-5-4">v2\.5\.4</a> - <a href="#release-summary-14">Release Summary</a> - <a href="#bugfixes-13">Bugfixes</a> -- <a href="#v2-5-3">v2\.5\.3</a> +- <a href="#v2-5-4">v2\.5\.4</a> - <a href="#release-summary-15">Release Summary</a> - <a href="#bugfixes-14">Bugfixes</a> -- <a href="#v2-5-2">v2\.5\.2</a> +- <a href="#v2-5-3">v2\.5\.3</a> - <a href="#release-summary-16">Release Summary</a> - <a href="#bugfixes-15">Bugfixes</a> -- <a href="#v2-5-1">v2\.5\.1</a> +- <a href="#v2-5-2">v2\.5\.2</a> - <a href="#release-summary-17">Release Summary</a> - <a href="#bugfixes-16">Bugfixes</a> -- <a href="#v2-5-0">v2\.5\.0</a> +- <a href="#v2-5-1">v2\.5\.1</a> - <a href="#release-summary-18">Release Summary</a> - - <a href="#minor-changes-3">Minor Changes</a> - - <a href="#deprecated-features-1">Deprecated Features</a> - <a href="#bugfixes-17">Bugfixes</a> -- <a href="#v2-4-2">v2\.4\.2</a> +- <a href="#v2-5-0">v2\.5\.0</a> - <a href="#release-summary-19">Release Summary</a> + - <a href="#minor-changes-4">Minor Changes</a> + - <a href="#deprecated-features-1">Deprecated Features</a> - <a href="#bugfixes-18">Bugfixes</a> -- <a href="#v2-4-1">v2\.4\.1</a> +- <a href="#v2-4-2">v2\.4\.2</a> - <a href="#release-summary-20">Release Summary</a> - <a href="#bugfixes-19">Bugfixes</a> -- <a href="#v2-4-0">v2\.4\.0</a> +- <a href="#v2-4-1">v2\.4\.1</a> - <a href="#release-summary-21">Release Summary</a> - - <a href="#minor-changes-4">Minor Changes</a> - <a href="#bugfixes-20">Bugfixes</a> -- <a href="#v2-3-4">v2\.3\.4</a> +- <a href="#v2-4-0">v2\.4\.0</a> - <a href="#release-summary-22">Release Summary</a> + - <a href="#minor-changes-5">Minor Changes</a> - <a href="#bugfixes-21">Bugfixes</a> -- <a href="#v2-3-3">v2\.3\.3</a> +- <a href="#v2-3-4">v2\.3\.4</a> - <a href="#release-summary-23">Release Summary</a> - <a href="#bugfixes-22">Bugfixes</a> -- <a href="#v2-3-2">v2\.3\.2</a> +- <a href="#v2-3-3">v2\.3\.3</a> - <a href="#release-summary-24">Release Summary</a> - <a href="#bugfixes-23">Bugfixes</a> -- <a href="#v2-3-1">v2\.3\.1</a> +- <a href="#v2-3-2">v2\.3\.2</a> - <a href="#release-summary-25">Release Summary</a> - - <a href="#minor-changes-5">Minor Changes</a> - <a href="#bugfixes-24">Bugfixes</a> -- <a href="#v2-3-0">v2\.3\.0</a> +- <a href="#v2-3-1">v2\.3\.1</a> - <a href="#release-summary-26">Release Summary</a> - <a href="#minor-changes-6">Minor Changes</a> - <a href="#bugfixes-25">Bugfixes</a> -- <a href="#v2-2-1">v2\.2\.1</a> +- <a href="#v2-3-0">v2\.3\.0</a> - <a href="#release-summary-27">Release Summary</a> + - <a href="#minor-changes-7">Minor Changes</a> - <a href="#bugfixes-26">Bugfixes</a> -- <a href="#v2-2-0">v2\.2\.0</a> +- <a href="#v2-2-1">v2\.2\.1</a> - <a href="#release-summary-28">Release Summary</a> - - <a href="#minor-changes-7">Minor Changes</a> - <a href="#bugfixes-27">Bugfixes</a> -- <a href="#v2-1-1">v2\.1\.1</a> +- <a href="#v2-2-0">v2\.2\.0</a> - <a href="#release-summary-29">Release Summary</a> + - <a href="#minor-changes-8">Minor Changes</a> - <a href="#bugfixes-28">Bugfixes</a> -- <a href="#v2-1-0">v2\.1\.0</a> +- <a href="#v2-1-1">v2\.1\.1</a> - <a href="#release-summary-30">Release Summary</a> - - <a href="#minor-changes-8">Minor Changes</a> - <a href="#bugfixes-29">Bugfixes</a> -- <a href="#v2-0-9">v2\.0\.9</a> +- <a href="#v2-1-0">v2\.1\.0</a> - <a href="#release-summary-31">Release Summary</a> + - <a href="#minor-changes-9">Minor Changes</a> - <a href="#bugfixes-30">Bugfixes</a> -- <a href="#v2-0-8">v2\.0\.8</a> +- <a href="#v2-0-9">v2\.0\.9</a> - <a href="#release-summary-32">Release Summary</a> - <a href="#bugfixes-31">Bugfixes</a> -- <a href="#v2-0-7">v2\.0\.7</a> +- <a href="#v2-0-8">v2\.0\.8</a> - <a href="#release-summary-33">Release Summary</a> - <a href="#bugfixes-32">Bugfixes</a> -- <a href="#v2-0-6">v2\.0\.6</a> +- <a href="#v2-0-7">v2\.0\.7</a> - <a href="#release-summary-34">Release Summary</a> - <a href="#bugfixes-33">Bugfixes</a> -- <a href="#v2-0-5">v2\.0\.5</a> +- <a href="#v2-0-6">v2\.0\.6</a> - <a href="#release-summary-35">Release Summary</a> - <a href="#bugfixes-34">Bugfixes</a> -- <a href="#v2-0-4">v2\.0\.4</a> +- <a href="#v2-0-5">v2\.0\.5</a> - <a href="#release-summary-36">Release Summary</a> - <a href="#bugfixes-35">Bugfixes</a> -- <a href="#v2-0-3">v2\.0\.3</a> +- <a href="#v2-0-4">v2\.0\.4</a> - <a href="#release-summary-37">Release Summary</a> - - <a href="#minor-changes-9">Minor Changes</a> -- <a href="#v2-0-2">v2\.0\.2</a> - - <a href="#release-summary-38">Release Summary</a> - <a href="#bugfixes-36">Bugfixes</a> -- <a href="#v2-0-1">v2\.0\.1</a> +- <a href="#v2-0-3">v2\.0\.3</a> + - <a href="#release-summary-38">Release Summary</a> + - <a href="#minor-changes-10">Minor Changes</a> +- <a href="#v2-0-2">v2\.0\.2</a> - <a href="#release-summary-39">Release Summary</a> - <a href="#bugfixes-37">Bugfixes</a> -- <a href="#v2-0-0">v2\.0\.0</a> +- <a href="#v2-0-1">v2\.0\.1</a> - <a href="#release-summary-40">Release Summary</a> - - <a href="#minor-changes-10">Minor Changes</a> - - <a href="#breaking-changes--porting-guide">Breaking Changes / Porting Guide</a> - - <a href="#deprecated-features-2">Deprecated Features</a> - <a href="#bugfixes-38">Bugfixes</a> +- <a href="#v2-0-0">v2\.0\.0</a> + - <a href="#release-summary-41">Release Summary</a> + - <a href="#minor-changes-11">Minor Changes</a> + - <a href="#breaking-changes--porting-guide-1">Breaking Changes / Porting Guide</a> + - <a href="#deprecated-features-2">Deprecated Features</a> + - <a href="#bugfixes-39">Bugfixes</a> - <a href="#new-plugins-2">New Plugins</a> - <a href="#inventory">Inventory</a> - <a href="#new-modules-1">New Modules</a> - <a href="#v1-2-0">v1\.2\.0</a> - - <a href="#release-summary-41">Release Summary</a> - - <a href="#minor-changes-11">Minor Changes</a> - - <a href="#bugfixes-39">Bugfixes</a> -- <a href="#v1-1-0">v1\.1\.0</a> - <a href="#release-summary-42">Release Summary</a> - <a href="#minor-changes-12">Minor Changes</a> - <a href="#bugfixes-40">Bugfixes</a> -- <a href="#v1-0-1">v1\.0\.1</a> +- <a href="#v1-1-0">v1\.1\.0</a> - <a href="#release-summary-43">Release Summary</a> + - <a href="#minor-changes-13">Minor Changes</a> - <a href="#bugfixes-41">Bugfixes</a> -- <a href="#v1-0-0">v1\.0\.0</a> +- <a href="#v1-0-1">v1\.0\.1</a> - <a href="#release-summary-44">Release Summary</a> - <a href="#bugfixes-42">Bugfixes</a> -- <a href="#v0-3-0">v0\.3\.0</a> +- <a href="#v1-0-0">v1\.0\.0</a> - <a href="#release-summary-45">Release Summary</a> - - <a href="#minor-changes-13">Minor Changes</a> - <a href="#bugfixes-43">Bugfixes</a> - - <a href="#new-modules-2">New Modules</a> -- <a href="#v0-2-0">v0\.2\.0</a> +- <a href="#v0-3-0">v0\.3\.0</a> - <a href="#release-summary-46">Release Summary</a> - - <a href="#major-changes">Major Changes</a> - <a href="#minor-changes-14">Minor Changes</a> - - <a href="#breaking-changes--porting-guide-1">Breaking Changes / Porting Guide</a> - <a href="#bugfixes-44">Bugfixes</a> + - <a href="#new-modules-2">New Modules</a> +- <a href="#v0-2-0">v0\.2\.0</a> + - <a href="#release-summary-47">Release Summary</a> + - <a href="#major-changes-1">Major Changes</a> + - <a href="#minor-changes-15">Minor Changes</a> + - <a href="#breaking-changes--porting-guide-2">Breaking Changes / Porting Guide</a> + - <a href="#bugfixes-45">Bugfixes</a> - <a href="#new-modules-3">New Modules</a> - <a href="#v0-1-0">v0\.1\.0</a> - - <a href="#release-summary-47">Release Summary</a> + - <a href="#release-summary-48">Release Summary</a> - <a href="#new-plugins-3">New Plugins</a> - <a href="#filter-1">Filter</a> - <a href="#new-modules-4">New Modules</a> +<a id="v3-0-0"></a> +## v3\.0\.0 + +<a id="release-summary"></a> +### Release Summary + +\.\.\. + +<a id="major-changes"></a> +### Major Changes + +* The <code>community\.dns</code> collection now depends on the <code>community\.library\_inventory\_filtering\_v1</code> collection\. This utility collection provides host filtering functionality for inventory plugins\. If you use the Ansible community package\, both collections are included and you do not have to do anything special\. If you install the collection with <code>ansible\-galaxy collection install</code>\, it will be installed automatically\. If you install the collection by copying the files of the collection to a place where ansible\-core can find it\, for example by cloning the git repository\, you need to make sure that you also have to install the dependency if you are using the inventory plugins \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. + +<a id="minor-changes"></a> +### Minor Changes + +* inventory plugins \- add <code>filter</code> option which allows to include and exclude hosts based on Jinja2 conditions \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. +* lookup\, lookup\_as\_dict \- it is now possible to configure whether the input should be treated as an absolute domain name \(<code>search\=false</code>\)\, or potentially as a relative domain name \(<code>search\=true</code>\) \([https\://github\.com/ansible\-collections/community\.dns/issues/200](https\://github\.com/ansible\-collections/community\.dns/issues/200)\, [https\://github\.com/ansible\-collections/community\.dns/pull/201](https\://github\.com/ansible\-collections/community\.dns/pull/201)\)\. + +<a id="breaking-changes--porting-guide"></a> +### Breaking Changes / Porting Guide + +* The default for the <code>txt\_character\_encoding</code> options in various modules and plugins changed from <code>octal</code> to <code>decimal</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. +* inventory plugins \- <code>filters</code> is now no longer an alias of <code>simple\_filters</code>\, but a new\, different option \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. +* inventory plugins \- the <code>plugin</code> option is now required \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. +* lookup\, lookup\_as\_dict \- the default for <code>search</code> changed from <code>false</code> \(implicit default for community\.dns 2\.x\.y\) to <code>true</code> \([https\://github\.com/ansible\-collections/community\.dns/issues/200](https\://github\.com/ansible\-collections/community\.dns/issues/200)\, [https\://github\.com/ansible\-collections/community\.dns/pull/201](https\://github\.com/ansible\-collections/community\.dns/pull/201)\)\. + +<a id="removed-features-previously-deprecated"></a> +### Removed Features \(previously deprecated\) + +* The collection no longer supports Ansible\, ansible\-base\, and ansible\-core releases that are currently End of Life at the time of the 3\.0\.0 release\. This means that Ansible 2\.9\, ansible\-base 2\.10\, ansible\-core 2\.11\, ansible\-core 2\.12\, ansible\-core 2\.13\, and ansible\-core 2\.14 are no longer supported\. The collection might still work with these versions\, but it can stop working at any moment without advance notice\, and this will not be considered a bug \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. +* hetzner\_dns\_record\_set\, hetzner\_dns\_record \- the deprecated alias <code>name</code> of the prefix option was removed \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. +* hosttech\_dns\_records \- the redirect to the <code>hosttech\_dns\_record\_sets</code> module has been removed \([https\://github\.com/ansible\-collections/community\.dns/pull/196](https\://github\.com/ansible\-collections/community\.dns/pull/196)\)\. + +<a id="bugfixes"></a> +### Bugfixes + +* Update Public Suffix List\. + <a id="v2-9-0"></a> ## v2\.9\.0 -<a id="release-summary"></a> +<a id="release-summary-1"></a> ### Release Summary Feature and bugfix release\. -<a id="bugfixes"></a> +<a id="bugfixes-1"></a> ### Bugfixes * Update Public Suffix List\. @@ -206,12 +252,12 @@ Feature and bugfix release\. <a id="v2-8-3"></a> ## v2\.8\.3 -<a id="release-summary-1"></a> +<a id="release-summary-2"></a> ### Release Summary Bugfix release\. -<a id="bugfixes-1"></a> +<a id="bugfixes-2"></a> ### Bugfixes * DNS record modules\, inventory plugins \- fix the TXT entry encoder to avoid splitting up escape sequences for quotes and backslashes over multiple TXT strings \([https\://github\.com/ansible\-collections/community\.dns/issues/190](https\://github\.com/ansible\-collections/community\.dns/issues/190)\, [https\://github\.com/ansible\-collections/community\.dns/pull/191](https\://github\.com/ansible\-collections/community\.dns/pull/191)\)\. @@ -220,7 +266,7 @@ Bugfix release\. <a id="v2-8-2"></a> ## v2\.8\.2 -<a id="release-summary-2"></a> +<a id="release-summary-3"></a> ### Release Summary Bugfix release\. @@ -230,7 +276,7 @@ Bugfix release\. * hosttech\_dns\_records and hetzner\_dns\_records inventory plugins \- make sure all data received from the remote servers is marked as unsafe\, so remote code execution by obtaining texts that can be evaluated as templates is not possible \([https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/](https\://www\.die\-welt\.net/2024/03/remote\-code\-execution\-in\-ansible\-dynamic\-inventory\-plugins/)\, [https\://github\.com/ansible\-collections/community\.dns/pull/189](https\://github\.com/ansible\-collections/community\.dns/pull/189)\)\. -<a id="bugfixes-2"></a> +<a id="bugfixes-3"></a> ### Bugfixes * Update Public Suffix List\. @@ -238,12 +284,12 @@ Bugfix release\. <a id="v2-8-1"></a> ## v2\.8\.1 -<a id="release-summary-3"></a> +<a id="release-summary-4"></a> ### Release Summary Maintenance release with updated PSL\. -<a id="bugfixes-3"></a> +<a id="bugfixes-4"></a> ### Bugfixes * Update Public Suffix List\. @@ -251,12 +297,12 @@ Maintenance release with updated PSL\. <a id="v2-8-0"></a> ## v2\.8\.0 -<a id="release-summary-4"></a> +<a id="release-summary-5"></a> ### Release Summary Feature and maintenance release with updated PSL\. -<a id="minor-changes"></a> +<a id="minor-changes-1"></a> ### Minor Changes * hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- the <code>filters</code> option has been renamed to <code>simple\_filters</code>\. The old name still works until community\.hrobot 2\.0\.0\. Then it will change to allow more complex filtering with the <code>community\.library\_inventory\_filtering\_v1</code> collection\'s functionality \([https\://github\.com/ansible\-collections/community\.dns/pull/181](https\://github\.com/ansible\-collections/community\.dns/pull/181)\)\. @@ -266,7 +312,7 @@ Feature and maintenance release with updated PSL\. * hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- the <code>filters</code> option has been renamed to <code>simple\_filters</code>\. The old name will stop working in community\.hrobot 2\.0\.0 \([https\://github\.com/ansible\-collections/community\.dns/pull/181](https\://github\.com/ansible\-collections/community\.dns/pull/181)\)\. -<a id="bugfixes-4"></a> +<a id="bugfixes-5"></a> ### Bugfixes * Update Public Suffix List\. @@ -274,18 +320,18 @@ Feature and maintenance release with updated PSL\. <a id="v2-7-0"></a> ## v2\.7\.0 -<a id="release-summary-5"></a> +<a id="release-summary-6"></a> ### Release Summary Bugfix and feature release with updated PSL\. -<a id="minor-changes-1"></a> +<a id="minor-changes-2"></a> ### Minor Changes * nameserver\_info and nameserver\_record\_info \- add <code>server</code> parameter to specify custom DNS servers \([https\://github\.com/ansible\-collections/community\.dns/pull/168](https\://github\.com/ansible\-collections/community\.dns/pull/168)\, [https\://github\.com/ansible\-collections/community\.dns/pull/178](https\://github\.com/ansible\-collections/community\.dns/pull/178)\)\. * wait\_for\_txt \- add <code>server</code> parameter to specify custom DNS servers \([https\://github\.com/ansible\-collections/community\.dns/pull/178](https\://github\.com/ansible\-collections/community\.dns/pull/178)\)\. -<a id="bugfixes-5"></a> +<a id="bugfixes-6"></a> ### Bugfixes * Update Public Suffix List\. @@ -294,12 +340,12 @@ Bugfix and feature release with updated PSL\. <a id="v2-6-4"></a> ## v2\.6\.4 -<a id="release-summary-6"></a> +<a id="release-summary-7"></a> ### Release Summary Bugfix and maintenance version\. -<a id="bugfixes-6"></a> +<a id="bugfixes-7"></a> ### Bugfixes * Update Public Suffix List\. @@ -308,12 +354,12 @@ Bugfix and maintenance version\. <a id="v2-6-3"></a> ## v2\.6\.3 -<a id="release-summary-7"></a> +<a id="release-summary-8"></a> ### Release Summary Maintenance release with updated PSL\. -<a id="bugfixes-7"></a> +<a id="bugfixes-8"></a> ### Bugfixes * HTTP module utils \- make compatible with ansible\-core 2\.17 \([https\://github\.com/ansible\-collections/community\.dns/pull/165](https\://github\.com/ansible\-collections/community\.dns/pull/165)\)\. @@ -322,12 +368,12 @@ Maintenance release with updated PSL\. <a id="v2-6-2"></a> ## v2\.6\.2 -<a id="release-summary-8"></a> +<a id="release-summary-9"></a> ### Release Summary Maintenance release with updated PSL\. -<a id="bugfixes-8"></a> +<a id="bugfixes-9"></a> ### Bugfixes * Update Public Suffix List\. @@ -335,12 +381,12 @@ Maintenance release with updated PSL\. <a id="v2-6-1"></a> ## v2\.6\.1 -<a id="release-summary-9"></a> +<a id="release-summary-10"></a> ### Release Summary Maintenance release with updated PSL\. -<a id="bugfixes-9"></a> +<a id="bugfixes-10"></a> ### Bugfixes * Update Public Suffix List\. @@ -348,18 +394,18 @@ Maintenance release with updated PSL\. <a id="v2-6-0"></a> ## v2\.6\.0 -<a id="release-summary-10"></a> +<a id="release-summary-11"></a> ### Release Summary Feature release with an updated Public Suffix List\. -<a id="minor-changes-2"></a> +<a id="minor-changes-3"></a> ### Minor Changes * wait\_for\_txt \- add <code>servfail\_retries</code> parameter that allows retrying after SERVFAIL errors \([https\://github\.com/ansible\-collections/community\.dns/pull/159](https\://github\.com/ansible\-collections/community\.dns/pull/159)\)\. * wait\_for\_txt\, resolver module utils \- use [EDNS](https\://en\.wikipedia\.org/wiki/Extension\_Mechanisms\_for\_DNS) \([https\://github\.com/ansible\-collections/community\.dns/pull/158](https\://github\.com/ansible\-collections/community\.dns/pull/158)\)\. -<a id="bugfixes-10"></a> +<a id="bugfixes-11"></a> ### Bugfixes * Update Public Suffix List\. @@ -383,12 +429,12 @@ Feature release with an updated Public Suffix List\. <a id="v2-5-7"></a> ## v2\.5\.7 -<a id="release-summary-11"></a> +<a id="release-summary-12"></a> ### Release Summary Regular maintenance release with updated Public Suffix List\. -<a id="bugfixes-11"></a> +<a id="bugfixes-12"></a> ### Bugfixes * Update Public Suffix List\. @@ -396,7 +442,7 @@ Regular maintenance release with updated Public Suffix List\. <a id="v2-5-6"></a> ## v2\.5\.6 -<a id="release-summary-12"></a> +<a id="release-summary-13"></a> ### Release Summary Maintenance release\. @@ -417,12 +463,12 @@ for the rendered HTML version of the documentation of the latest release\. <a id="v2-5-5"></a> ## v2\.5\.5 -<a id="release-summary-13"></a> +<a id="release-summary-14"></a> ### Release Summary Maintenance release with updated PSL\. -<a id="bugfixes-12"></a> +<a id="bugfixes-13"></a> ### Bugfixes * Update Public Suffix List\. @@ -430,12 +476,12 @@ Maintenance release with updated PSL\. <a id="v2-5-4"></a> ## v2\.5\.4 -<a id="release-summary-14"></a> +<a id="release-summary-15"></a> ### Release Summary Maintenance release with updated PSL\. -<a id="bugfixes-13"></a> +<a id="bugfixes-14"></a> ### Bugfixes * Update Public Suffix List\. @@ -443,12 +489,12 @@ Maintenance release with updated PSL\. <a id="v2-5-3"></a> ## v2\.5\.3 -<a id="release-summary-15"></a> +<a id="release-summary-16"></a> ### Release Summary Maintenance release with updated PSL\. -<a id="bugfixes-14"></a> +<a id="bugfixes-15"></a> ### Bugfixes * Update Public Suffix List\. @@ -456,12 +502,12 @@ Maintenance release with updated PSL\. <a id="v2-5-2"></a> ## v2\.5\.2 -<a id="release-summary-16"></a> +<a id="release-summary-17"></a> ### Release Summary Maintenance release with improved documentation and updated PSL\. -<a id="bugfixes-15"></a> +<a id="bugfixes-16"></a> ### Bugfixes * Update Public Suffix List\. @@ -469,12 +515,12 @@ Maintenance release with improved documentation and updated PSL\. <a id="v2-5-1"></a> ## v2\.5\.1 -<a id="release-summary-17"></a> +<a id="release-summary-18"></a> ### Release Summary Maintenance release \(updated PSL\)\. -<a id="bugfixes-16"></a> +<a id="bugfixes-17"></a> ### Bugfixes * Update Public Suffix List\. @@ -482,12 +528,12 @@ Maintenance release \(updated PSL\)\. <a id="v2-5-0"></a> ## v2\.5\.0 -<a id="release-summary-18"></a> +<a id="release-summary-19"></a> ### Release Summary Feature and bugfix release with updated PSL\. -<a id="minor-changes-3"></a> +<a id="minor-changes-4"></a> ### Minor Changes * hosttech inventory plugin \- allow to configure token\, username\, and password with <code>ANSIBLE\_HOSTTECH\_DNS\_TOKEN</code>\, <code>ANSIBLE\_HOSTTECH\_API\_USERNAME</code>\, and <code>ANSIBLE\_HOSTTECH\_API\_PASSWORD</code> environment variables\, respectively \([https\://github\.com/ansible\-collections/community\.dns/pull/131](https\://github\.com/ansible\-collections/community\.dns/pull/131)\)\. @@ -498,7 +544,7 @@ Feature and bugfix release with updated PSL\. * The default of the newly added option <code>txt\_character\_encoding</code> will change from <code>octal</code> to <code>decimal</code> in community\.dns 3\.0\.0\. The new default will be compatible with [RFC 1035](https\://www\.ietf\.org/rfc/rfc1035\.txt) \([https\://github\.com/ansible\-collections/community\.dns/pull/134](https\://github\.com/ansible\-collections/community\.dns/pull/134)\)\. -<a id="bugfixes-17"></a> +<a id="bugfixes-18"></a> ### Bugfixes * Update Public Suffix List\. @@ -507,12 +553,12 @@ Feature and bugfix release with updated PSL\. <a id="v2-4-2"></a> ## v2\.4\.2 -<a id="release-summary-19"></a> +<a id="release-summary-20"></a> ### Release Summary Maintenance release with updated Public Suffix List\. -<a id="bugfixes-18"></a> +<a id="bugfixes-19"></a> ### Bugfixes * Update Public Suffix List\. @@ -520,12 +566,12 @@ Maintenance release with updated Public Suffix List\. <a id="v2-4-1"></a> ## v2\.4\.1 -<a id="release-summary-20"></a> +<a id="release-summary-21"></a> ### Release Summary Regular maintenance release\. -<a id="bugfixes-19"></a> +<a id="bugfixes-20"></a> ### Bugfixes * Update Public Suffix List\. @@ -534,19 +580,19 @@ Regular maintenance release\. <a id="v2-4-0"></a> ## v2\.4\.0 -<a id="release-summary-21"></a> +<a id="release-summary-22"></a> ### Release Summary Feature and maintenance release\. -<a id="minor-changes-4"></a> +<a id="minor-changes-5"></a> ### Minor Changes * Added a <code>community\.dns\.hetzner</code> module defaults group / action group\. Use with <code>group/community\.dns\.hetzner</code> to provide options for all Hetzner DNS modules \([https\://github\.com/ansible\-collections/community\.dns/pull/119](https\://github\.com/ansible\-collections/community\.dns/pull/119)\)\. * Added a <code>community\.dns\.hosttech</code> module defaults group / action group\. Use with <code>group/community\.dns\.hosttech</code> to provide options for all Hosttech DNS modules \([https\://github\.com/ansible\-collections/community\.dns/pull/119](https\://github\.com/ansible\-collections/community\.dns/pull/119)\)\. * wait\_for\_txt \- the module now supports check mode\. The only practical change in behavior is that in check mode\, the module is now executed instead of skipped\. Since the module does not change anything\, it should have been marked as supporting check mode since it was originally added \([https\://github\.com/ansible\-collections/community\.dns/pull/119](https\://github\.com/ansible\-collections/community\.dns/pull/119)\)\. -<a id="bugfixes-20"></a> +<a id="bugfixes-21"></a> ### Bugfixes * Update Public Suffix List\. @@ -554,12 +600,12 @@ Feature and maintenance release\. <a id="v2-3-4"></a> ## v2\.3\.4 -<a id="release-summary-22"></a> +<a id="release-summary-23"></a> ### Release Summary Maintenance release with updated Public Suffix List\. -<a id="bugfixes-21"></a> +<a id="bugfixes-22"></a> ### Bugfixes * Update Public Suffix List\. @@ -567,12 +613,12 @@ Maintenance release with updated Public Suffix List\. <a id="v2-3-3"></a> ## v2\.3\.3 -<a id="release-summary-23"></a> +<a id="release-summary-24"></a> ### Release Summary Maintenance release including an updated Public Suffix List\. -<a id="bugfixes-22"></a> +<a id="bugfixes-23"></a> ### Bugfixes * Update Public Suffix List\. @@ -580,12 +626,12 @@ Maintenance release including an updated Public Suffix List\. <a id="v2-3-2"></a> ## v2\.3\.2 -<a id="release-summary-24"></a> +<a id="release-summary-25"></a> ### Release Summary Maintenance release with updated Public Suffix List\. -<a id="bugfixes-23"></a> +<a id="bugfixes-24"></a> ### Bugfixes * Update Public Suffix List\. @@ -593,17 +639,17 @@ Maintenance release with updated Public Suffix List\. <a id="v2-3-1"></a> ## v2\.3\.1 -<a id="release-summary-25"></a> +<a id="release-summary-26"></a> ### Release Summary Maintenance release including an updated Public Suffix List\. -<a id="minor-changes-5"></a> +<a id="minor-changes-6"></a> ### Minor Changes * The collection repository conforms to the [REUSE specification](https\://reuse\.software/spec/) except for the changelog fragments \([https\://github\.com/ansible\-collections/community\.dns/pull/112](https\://github\.com/ansible\-collections/community\.dns/pull/112)\)\. -<a id="bugfixes-24"></a> +<a id="bugfixes-25"></a> ### Bugfixes * Update Public Suffix List\. @@ -611,17 +657,17 @@ Maintenance release including an updated Public Suffix List\. <a id="v2-3-0"></a> ## v2\.3\.0 -<a id="release-summary-26"></a> +<a id="release-summary-27"></a> ### Release Summary Maintenance release including an updated Public Suffix List\. -<a id="minor-changes-6"></a> +<a id="minor-changes-7"></a> ### Minor Changes * All software licenses are now in the <code>LICENSES/</code> directory of the collection root\. Moreover\, <code>SPDX\-License\-Identifier\:</code> is used to declare the applicable license for every file that is not automatically generated \([https\://github\.com/ansible\-collections/community\.dns/pull/109](https\://github\.com/ansible\-collections/community\.dns/pull/109)\)\. -<a id="bugfixes-25"></a> +<a id="bugfixes-26"></a> ### Bugfixes * Update Public Suffix List\. @@ -629,12 +675,12 @@ Maintenance release including an updated Public Suffix List\. <a id="v2-2-1"></a> ## v2\.2\.1 -<a id="release-summary-27"></a> +<a id="release-summary-28"></a> ### Release Summary Maintenance release with updated Public Suffix List\. -<a id="bugfixes-26"></a> +<a id="bugfixes-27"></a> ### Bugfixes * Update Public Suffix List\. @@ -642,18 +688,18 @@ Maintenance release with updated Public Suffix List\. <a id="v2-2-0"></a> ## v2\.2\.0 -<a id="release-summary-28"></a> +<a id="release-summary-29"></a> ### Release Summary Feature release\. -<a id="minor-changes-7"></a> +<a id="minor-changes-8"></a> ### Minor Changes * hetzner\_dns\_records and hosttech\_dns\_records inventory plugins \- allow to template provider\-specific credentials and the <code>zone\_name</code>\, <code>zone\_id</code> options \([https\://github\.com/ansible\-collections/community\.dns/pull/106](https\://github\.com/ansible\-collections/community\.dns/pull/106)\)\. * wait\_for\_txt \- improve error messages so that in case of SERVFAILs or other DNS errors it is clear which record was queried from which DNS server \([https\://github\.com/ansible\-collections/community\.dns/pull/105](https\://github\.com/ansible\-collections/community\.dns/pull/105)\)\. -<a id="bugfixes-27"></a> +<a id="bugfixes-28"></a> ### Bugfixes * Update Public Suffix List\. @@ -661,12 +707,12 @@ Feature release\. <a id="v2-1-1"></a> ## v2\.1\.1 -<a id="release-summary-29"></a> +<a id="release-summary-30"></a> ### Release Summary Maintenance release with updated Public Suffix List\. -<a id="bugfixes-28"></a> +<a id="bugfixes-29"></a> ### Bugfixes * Update Public Suffix List\. @@ -674,17 +720,17 @@ Maintenance release with updated Public Suffix List\. <a id="v2-1-0"></a> ## v2\.1\.0 -<a id="release-summary-30"></a> +<a id="release-summary-31"></a> ### Release Summary Feature and maintenance release with updated PSL\. -<a id="minor-changes-8"></a> +<a id="minor-changes-9"></a> ### Minor Changes * Prepare collection for inclusion in an Execution Environment by declaring its dependencies \([https\://github\.com/ansible\-collections/community\.dns/pull/93](https\://github\.com/ansible\-collections/community\.dns/pull/93)\)\. -<a id="bugfixes-29"></a> +<a id="bugfixes-30"></a> ### Bugfixes * Update Public Suffix List\. @@ -692,12 +738,12 @@ Feature and maintenance release with updated PSL\. <a id="v2-0-9"></a> ## v2\.0\.9 -<a id="release-summary-31"></a> +<a id="release-summary-32"></a> ### Release Summary Maintenance release with updated Public Suffix List and added collection links file\. -<a id="bugfixes-30"></a> +<a id="bugfixes-31"></a> ### Bugfixes * Update Public Suffix List\. @@ -705,12 +751,12 @@ Maintenance release with updated Public Suffix List and added collection links f <a id="v2-0-8"></a> ## v2\.0\.8 -<a id="release-summary-32"></a> +<a id="release-summary-33"></a> ### Release Summary Maintenance release with updated Public Suffix List\. -<a id="bugfixes-31"></a> +<a id="bugfixes-32"></a> ### Bugfixes * Update Public Suffix List\. @@ -718,12 +764,12 @@ Maintenance release with updated Public Suffix List\. <a id="v2-0-7"></a> ## v2\.0\.7 -<a id="release-summary-33"></a> +<a id="release-summary-34"></a> ### Release Summary Maintenance release with updated Public Suffix List\. -<a id="bugfixes-32"></a> +<a id="bugfixes-33"></a> ### Bugfixes * Update Public Suffix List\. @@ -731,12 +777,12 @@ Maintenance release with updated Public Suffix List\. <a id="v2-0-6"></a> ## v2\.0\.6 -<a id="release-summary-34"></a> +<a id="release-summary-35"></a> ### Release Summary Bugfix release\. -<a id="bugfixes-33"></a> +<a id="bugfixes-34"></a> ### Bugfixes * Update Public Suffix List\. @@ -745,12 +791,12 @@ Bugfix release\. <a id="v2-0-5"></a> ## v2\.0\.5 -<a id="release-summary-35"></a> +<a id="release-summary-36"></a> ### Release Summary Maintenance release with updated Public Suffix List\. -<a id="bugfixes-34"></a> +<a id="bugfixes-35"></a> ### Bugfixes * Update Public Suffix List\. @@ -758,12 +804,12 @@ Maintenance release with updated Public Suffix List\. <a id="v2-0-4"></a> ## v2\.0\.4 -<a id="release-summary-36"></a> +<a id="release-summary-37"></a> ### Release Summary Maintenance release with updated Public Suffix List\. -<a id="bugfixes-35"></a> +<a id="bugfixes-36"></a> ### Bugfixes * Update Public Suffix List\. @@ -771,12 +817,12 @@ Maintenance release with updated Public Suffix List\. <a id="v2-0-3"></a> ## v2\.0\.3 -<a id="release-summary-37"></a> +<a id="release-summary-38"></a> ### Release Summary Bugfix release\. -<a id="minor-changes-9"></a> +<a id="minor-changes-10"></a> ### Minor Changes * HTTP API module utils \- fix usage of <code>fetch\_url</code> with changes in latest ansible\-core <code>devel</code> branch \([https\://github\.com/ansible\-collections/community\.dns/pull/73](https\://github\.com/ansible\-collections/community\.dns/pull/73)\)\. @@ -784,12 +830,12 @@ Bugfix release\. <a id="v2-0-2"></a> ## v2\.0\.2 -<a id="release-summary-38"></a> +<a id="release-summary-39"></a> ### Release Summary Regular maintenance release\. -<a id="bugfixes-36"></a> +<a id="bugfixes-37"></a> ### Bugfixes * Update Public Suffix List\. @@ -797,12 +843,12 @@ Regular maintenance release\. <a id="v2-0-1"></a> ## v2\.0\.1 -<a id="release-summary-39"></a> +<a id="release-summary-40"></a> ### Release Summary Maintenance release with Public Suffix List updates\. -<a id="bugfixes-37"></a> +<a id="bugfixes-38"></a> ### Bugfixes * Update Public Suffix List\. @@ -810,12 +856,12 @@ Maintenance release with Public Suffix List updates\. <a id="v2-0-0"></a> ## v2\.0\.0 -<a id="release-summary-40"></a> +<a id="release-summary-41"></a> ### Release Summary This release contains many new features\, modules and plugins\, but also has several breaking changes to the 1\.x\.y versions\. Please read the changelog carefully to determine what to change if you used an earlier version of this collection\. -<a id="minor-changes-10"></a> +<a id="minor-changes-11"></a> ### Minor Changes * Add support for Hetzner DNS \([https\://github\.com/ansible\-collections/community\.dns/pull/27](https\://github\.com/ansible\-collections/community\.dns/pull/27)\)\. @@ -831,7 +877,7 @@ This release contains many new features\, modules and plugins\, but also has sev * hosttech\_dns\_record\_sets \- <code>records</code> has been renamed to <code>record\_sets</code>\. The old name <code>records</code> can still be used as an alias \([https\://github\.com/ansible\-collections/community\.dns/pull/31](https\://github\.com/ansible\-collections/community\.dns/pull/31)\)\. * hosttech\_dns\_zone\_info \- return extra information as <code>zone\_info</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/38](https\://github\.com/ansible\-collections/community\.dns/pull/38)\)\. -<a id="breaking-changes--porting-guide"></a> +<a id="breaking-changes--porting-guide-1"></a> ### Breaking Changes / Porting Guide * All Hetzner modules and plugins which handle DNS records now work with unquoted TXT values by default\. The old behavior can be obtained by setting <code>txt\_transformation\=api</code> \([https\://github\.com/ansible\-collections/community\.dns/issues/48](https\://github\.com/ansible\-collections/community\.dns/issues/48)\, [https\://github\.com/ansible\-collections/community\.dns/pull/57](https\://github\.com/ansible\-collections/community\.dns/pull/57)\, [https\://github\.com/ansible\-collections/community\.dns/pull/60](https\://github\.com/ansible\-collections/community\.dns/pull/60)\)\. @@ -850,7 +896,7 @@ This release contains many new features\, modules and plugins\, but also has sev * The hosttech\_dns\_records module has been renamed to hosttech\_dns\_record\_sets\. The old name will stop working in community\.dns 3\.0\.0 \([https\://github\.com/ansible\-collections/community\.dns/pull/31](https\://github\.com/ansible\-collections/community\.dns/pull/31)\)\. -<a id="bugfixes-38"></a> +<a id="bugfixes-39"></a> ### Bugfixes * Hetzner API \- interpret missing TTL as 300\, which is what the web console also does \([https\://github\.com/ansible\-collections/community\.dns/pull/42](https\://github\.com/ansible\-collections/community\.dns/pull/42)\)\. @@ -888,19 +934,19 @@ This release contains many new features\, modules and plugins\, but also has sev <a id="v1-2-0"></a> ## v1\.2\.0 -<a id="release-summary-41"></a> +<a id="release-summary-42"></a> ### Release Summary Last minor 1\.x\.0 version\. The 2\.0\.0 version will have some backwards incompatible changes to the <code>hosttech\_dns\_record</code> and <code>hosttech\_dns\_records</code> modules which will require user intervention\. These changes should result in a better UX\. -<a id="minor-changes-11"></a> +<a id="minor-changes-12"></a> ### Minor Changes * hosttech modules \- add <code>api\_token</code> alias for <code>hosttech\_token</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/26](https\://github\.com/ansible\-collections/community\.dns/pull/26)\)\. * hosttech\_dns\_record \- in <code>diff</code> mode\, also return <code>diff</code> data structure when <code>changed</code> is <code>false</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/28](https\://github\.com/ansible\-collections/community\.dns/pull/28)\)\. * module utils \- add default implementation for some zone/record API functions\, and move common JSON API code to helper class \([https\://github\.com/ansible\-collections/community\.dns/pull/26](https\://github\.com/ansible\-collections/community\.dns/pull/26)\)\. -<a id="bugfixes-39"></a> +<a id="bugfixes-40"></a> ### Bugfixes * Update Public Suffix List\. @@ -909,17 +955,17 @@ Last minor 1\.x\.0 version\. The 2\.0\.0 version will have some backwards incomp <a id="v1-1-0"></a> ## v1\.1\.0 -<a id="release-summary-42"></a> +<a id="release-summary-43"></a> ### Release Summary Regular maintenance release\. -<a id="minor-changes-12"></a> +<a id="minor-changes-13"></a> ### Minor Changes * Avoid internal ansible\-core module\_utils in favor of equivalent public API available since at least Ansible 2\.9 \([https\://github\.com/ansible\-collections/community\.dns/pull/24](https\://github\.com/ansible\-collections/community\.dns/pull/24)\)\. -<a id="bugfixes-40"></a> +<a id="bugfixes-41"></a> ### Bugfixes * Update Public Suffix List\. @@ -927,12 +973,12 @@ Regular maintenance release\. <a id="v1-0-1"></a> ## v1\.0\.1 -<a id="release-summary-43"></a> +<a id="release-summary-44"></a> ### Release Summary Regular maintenance release\. -<a id="bugfixes-41"></a> +<a id="bugfixes-42"></a> ### Bugfixes * Update Public Suffix List\. @@ -940,12 +986,12 @@ Regular maintenance release\. <a id="v1-0-0"></a> ## v1\.0\.0 -<a id="release-summary-44"></a> +<a id="release-summary-45"></a> ### Release Summary First stable release\. -<a id="bugfixes-42"></a> +<a id="bugfixes-43"></a> ### Bugfixes * Update Public Suffix List\. @@ -953,17 +999,17 @@ First stable release\. <a id="v0-3-0"></a> ## v0\.3\.0 -<a id="release-summary-45"></a> +<a id="release-summary-46"></a> ### Release Summary Fixes bugs\, adds rate limiting for Hosttech JSON API\, and adds a new bulk synchronization module\. -<a id="minor-changes-13"></a> +<a id="minor-changes-14"></a> ### Minor Changes * hosttech\_dns\_\* \- handle <code>419 Too Many Requests</code> with proper rate limiting for JSON API \([https\://github\.com/ansible\-collections/community\.dns/pull/14](https\://github\.com/ansible\-collections/community\.dns/pull/14)\)\. -<a id="bugfixes-43"></a> +<a id="bugfixes-44"></a> ### Bugfixes * Avoid converting ASCII labels which contain underscores or other printable ASCII characters outside <code>\[a\-zA\-Z0\-9\-\]</code> to alabels during normalization \([https\://github\.com/ansible\-collections/community\.dns/pull/13](https\://github\.com/ansible\-collections/community\.dns/pull/13)\)\. @@ -977,17 +1023,17 @@ Fixes bugs\, adds rate limiting for Hosttech JSON API\, and adds a new bulk sync <a id="v0-2-0"></a> ## v0\.2\.0 -<a id="release-summary-46"></a> +<a id="release-summary-47"></a> ### Release Summary Major refactoring release\, which adds a zone information module and supports HostTech\'s new REST API\. -<a id="major-changes"></a> +<a id="major-changes-1"></a> ### Major Changes * hosttech\_\* modules \- support the new JSON API at [https\://api\.ns1\.hosttech\.eu/api/documentation/](https\://api\.ns1\.hosttech\.eu/api/documentation/) \([https\://github\.com/ansible\-collections/community\.dns/pull/4](https\://github\.com/ansible\-collections/community\.dns/pull/4)\)\. -<a id="minor-changes-14"></a> +<a id="minor-changes-15"></a> ### Minor Changes * hosttech\_dns\_record\* modules \- allow to specify <code>prefix</code> instead of <code>record</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/8](https\://github\.com/ansible\-collections/community\.dns/pull/8)\)\. @@ -997,12 +1043,12 @@ Major refactoring release\, which adds a zone information module and supports Ho * hosttech\_dns\_record\_info \- also return <code>prefix</code> for a record set \([https\://github\.com/ansible\-collections/community\.dns/pull/8](https\://github\.com/ansible\-collections/community\.dns/pull/8)\)\. * hosttech\_record \- allow to delete records without querying their content first by specifying <code>overwrite\=true</code> \([https\://github\.com/ansible\-collections/community\.dns/pull/4](https\://github\.com/ansible\-collections/community\.dns/pull/4)\)\. -<a id="breaking-changes--porting-guide-1"></a> +<a id="breaking-changes--porting-guide-2"></a> ### Breaking Changes / Porting Guide * hosttech\_\* module\_utils \- completely rewrite and refactor to support new JSON API and allow to reuse provider\-independent module logic \([https\://github\.com/ansible\-collections/community\.dns/pull/4](https\://github\.com/ansible\-collections/community\.dns/pull/4)\)\. -<a id="bugfixes-44"></a> +<a id="bugfixes-45"></a> ### Bugfixes * Update Public Suffix List\. @@ -1017,7 +1063,7 @@ Major refactoring release\, which adds a zone information module and supports Ho <a id="v0-1-0"></a> ## v0\.1\.0 -<a id="release-summary-47"></a> +<a id="release-summary-48"></a> ### Release Summary Initial public release\. diff --git a/ansible_collections/community/dns/CHANGELOG.rst b/ansible_collections/community/dns/CHANGELOG.rst index e91d83ebf..9aef9afb1 100644 --- a/ansible_collections/community/dns/CHANGELOG.rst +++ b/ansible_collections/community/dns/CHANGELOG.rst @@ -4,6 +4,45 @@ Community DNS Collection Release Notes .. contents:: Topics +v3.0.0 +====== + +Release Summary +--------------- + +... + +Major Changes +------------- + +- The ``community.dns`` collection now depends on the ``community.library_inventory_filtering_v1`` collection. This utility collection provides host filtering functionality for inventory plugins. If you use the Ansible community package, both collections are included and you do not have to do anything special. If you install the collection with ``ansible-galaxy collection install``, it will be installed automatically. If you install the collection by copying the files of the collection to a place where ansible-core can find it, for example by cloning the git repository, you need to make sure that you also have to install the dependency if you are using the inventory plugins (https://github.com/ansible-collections/community.dns/pull/196). + +Minor Changes +------------- + +- inventory plugins - add ``filter`` option which allows to include and exclude hosts based on Jinja2 conditions (https://github.com/ansible-collections/community.dns/pull/196). +- lookup, lookup_as_dict - it is now possible to configure whether the input should be treated as an absolute domain name (``search=false``), or potentially as a relative domain name (``search=true``) (https://github.com/ansible-collections/community.dns/issues/200, https://github.com/ansible-collections/community.dns/pull/201). + +Breaking Changes / Porting Guide +-------------------------------- + +- The default for the ``txt_character_encoding`` options in various modules and plugins changed from ``octal`` to ``decimal`` (https://github.com/ansible-collections/community.dns/pull/196). +- inventory plugins - ``filters`` is now no longer an alias of ``simple_filters``, but a new, different option (https://github.com/ansible-collections/community.dns/pull/196). +- inventory plugins - the ``plugin`` option is now required (https://github.com/ansible-collections/community.dns/pull/196). +- lookup, lookup_as_dict - the default for ``search`` changed from ``false`` (implicit default for community.dns 2.x.y) to ``true`` (https://github.com/ansible-collections/community.dns/issues/200, https://github.com/ansible-collections/community.dns/pull/201). + +Removed Features (previously deprecated) +---------------------------------------- + +- The collection no longer supports Ansible, ansible-base, and ansible-core releases that are currently End of Life at the time of the 3.0.0 release. This means that Ansible 2.9, ansible-base 2.10, ansible-core 2.11, ansible-core 2.12, ansible-core 2.13, and ansible-core 2.14 are no longer supported. The collection might still work with these versions, but it can stop working at any moment without advance notice, and this will not be considered a bug (https://github.com/ansible-collections/community.dns/pull/196). +- hetzner_dns_record_set, hetzner_dns_record - the deprecated alias ``name`` of the prefix option was removed (https://github.com/ansible-collections/community.dns/pull/196). +- hosttech_dns_records - the redirect to the ``hosttech_dns_record_sets`` module has been removed (https://github.com/ansible-collections/community.dns/pull/196). + +Bugfixes +-------- + +- Update Public Suffix List. + v2.9.0 ====== diff --git a/ansible_collections/community/dns/FILES.json b/ansible_collections/community/dns/FILES.json index 52b3239cd..32915c500 100644 --- a/ansible_collections/community/dns/FILES.json +++ b/ansible_collections/community/dns/FILES.json @@ -25,7 +25,7 @@ "name": ".github/workflows/ansible-test.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ef2a19d9715b2b9a70a6fe716ec40726b3c425f3c2b96d9bfe5d12489f74574", + "chksum_sha256": "02ff9da8ae9991541407a1f05a5b2bafa3d558213b44c63287665d370c4091da", "format": 1 }, { @@ -53,14 +53,14 @@ "name": ".github/workflows/ee.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bcef35a96fa3202cfec5d7adcb76b93124fa08e1a8c6dd914bf8cbb8aed28f11", + "chksum_sha256": "dcd1d5b0f91b932e5b535b9e5c08a3b02123e089a1ac1846f8bad9ba892e9893", "format": 1 }, { "name": ".github/workflows/extra-tests.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7ed351192ec963495e9a1752c3ecd914698582affd90dec5065c7f2180fe1dc", + "chksum_sha256": "67094594a3f5090d92cbc78fd0c1020ed3c1a30f69a850b92de3a226692a01e0", "format": 1 }, { @@ -151,7 +151,7 @@ "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6afad220bd94bbf6ffd765666b7589d04b014238a3e02973e066958c44acf43", + "chksum_sha256": "1f73967d9bae45a0341f90dd810cd70afa17786df1d296e5803f18f4d5c4d33c", "format": 1 }, { @@ -200,7 +200,7 @@ "name": "docs/docsite/rst/hetzner_guide.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b7f406b5c5d7921909eb2196feae0ec9a28e18ee5a2ce08e0a8db50c3e2506f6", + "chksum_sha256": "06fa52a3c1e246e5cee3b9b556c412b842a109ab37a56121754a81819327f9d3", "format": 1 }, { @@ -256,7 +256,7 @@ "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a0f15da8558a0fcbe370883adaa3a3982a99ae3d93e785523b126d1912bcc30a", + "chksum_sha256": "402e41b8f52840f3e00165fbac091febdb9542600fec9626c654f16569fa4b82", "format": 1 }, { @@ -305,7 +305,7 @@ "name": "plugins/doc_fragments/inventory_records.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca51ab2e9350f36f68827a2fa86145ad0865838ac43313e07e09f853fd6e1f3c", + "chksum_sha256": "acae110608db050d3f39ae87490c4d94c80a6fc0d7eff427eb3b39b3c1c443ae", "format": 1 }, { @@ -354,7 +354,7 @@ "name": "plugins/doc_fragments/options.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6187dcb10a41b78a6bf385d22a3fafe2c1a8e69b296aeb8292d109edfab3b22", + "chksum_sha256": "99f9e241c2b7937cfe03684be5d83b5b5fba46f114776731da4b81de244603db", "format": 1 }, { @@ -431,14 +431,14 @@ "name": "plugins/inventory/hetzner_dns_records.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6531b5ee8da29ac4909eeb4db27b9d5c232c8acfd8741dc99cc6d5877ccf213", + "chksum_sha256": "2321c6f2bbf813769d033a2ea087874c59b165503e6e9d63e7538485eafd7745", "format": 1 }, { "name": "plugins/inventory/hosttech_dns_records.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed0fef2e327ea3103a8e3c08a0af587f1cc48c6239ad14e3164f706e86d7f160", + "chksum_sha256": "ceb63f67d1c2b3c60d50b6bd8838cf1125057e6e79dcfe87295bf9700d1acac0", "format": 1 }, { @@ -452,14 +452,14 @@ "name": "plugins/lookup/lookup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6571e35773f4c9116eaf7c21e5c25ab95d803e54d3c929e6b94b82eaa503d8ee", + "chksum_sha256": "8bdcf8b3091a59c20b4aa656150055959b8c24d378a0d96b565629d99d49ce77", "format": 1 }, { "name": "plugins/lookup/lookup_as_dict.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2eb51bdf708dc19c84dd15e16c8804570922cdf0b5cfad337c7a85c93b326750", + "chksum_sha256": "707a51ebeff3a2cbf1ae4324e1dcf7fb7e589af3ef44c67cb0336c95c81c75dc", "format": 1 }, { @@ -487,7 +487,7 @@ "name": "plugins/module_utils/conversion/converter.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "06a3d891a5c81bc1552ba2be7d7bca8cae84c1d7a9e51fb0bd9d7e957e02b575", + "chksum_sha256": "db2ac83bb84e53abafccd7ec6974059c37e03b18e6265ea07490bcc23879dafe", "format": 1 }, { @@ -641,14 +641,14 @@ "name": "plugins/module_utils/options.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ab338a1f293a6bb6b041a8a01d99885dc6388b672a8ca01f78ac37615089f09", + "chksum_sha256": "40ae1e4a499762415df77dc1778b6c8679d71a8b004945537f0c631afef926f0", "format": 1 }, { "name": "plugins/module_utils/provider.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "894a0fb9f647b50f80ec6cad79181804cc0a2be8aa5fb3c9875d0524647445f3", + "chksum_sha256": "248dbb61a2c77dd8389e7d9cb6fe53650ce9d4b7a9a6c973c6f41e5bc7ab4d00", "format": 1 }, { @@ -662,7 +662,7 @@ "name": "plugins/module_utils/resolver.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d0ceedf04f529e982d7865daa9c7d56b4ba49361e665a5e246fb4f3f4de569a", + "chksum_sha256": "5b3faecab5ba159a7208509ed2511519343cdae5ed3def6d511e4458a4df3ccf", "format": 1 }, { @@ -701,17 +701,10 @@ "format": 1 }, { - "name": "plugins/modules/hosttech_dns_records.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fe2c760eaf5bccaed8abbefe6dd6952b428fd05c0cc48919dc579acc7ad57141", - "format": 1 - }, - { "name": "plugins/modules/hetzner_dns_record.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "235b7a73ce5f2a9e74098f8c4100fbe2ca828a13ec021872392e5f0442cc6e56", + "chksum_sha256": "eb5ecec9883413c8ba73e29877c051561eb62b0ba15cd947ee0bb679744106af", "format": 1 }, { @@ -725,7 +718,7 @@ "name": "plugins/modules/hetzner_dns_record_set.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "35f71b7b8f680261f51b78d7c34cf4d89f490ba5937674614055cd6593e578d3", + "chksum_sha256": "8b6617b6ffc67eab9ea1bdd3d7eab779588d6bea372b55cc051e3a33c2f077c1", "format": 1 }, { @@ -830,7 +823,7 @@ "name": "plugins/plugin_utils/inventory/records.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "768ceedc4f0b624a22f9b777452f143e0b88639c1bd7e5f861d789ec0269e6e1", + "chksum_sha256": "6f8073358134147fc4c46631dff39aaac94215423a68c622b29802459acb61c6", "format": 1 }, { @@ -872,7 +865,7 @@ "name": "plugins/public_suffix_list.dat", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "27ae0b652366e8c5675942482de87819cf7947f5f4dc7bc661dc82b9b5da2d04", + "chksum_sha256": "437ffb5d25e5dee3fa4fef0109aac0e37f2f67b03a6787eeb22db831e308efe9", "format": 1 }, { @@ -1012,7 +1005,7 @@ "name": "tests/integration/targets/filter_txt/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec0d81efcabab342ec8b892fdf9bcd54bf488a3b92a81a0efbe09f26e2d80c27", + "chksum_sha256": "089c3a08e5c4c1111c6a429944ceb1ecccd22ad4f3991ddfbbd07fd9ae4b3ccd", "format": 1 }, { @@ -1579,14 +1572,14 @@ "name": "tests/unit/plugins/inventory/test_hetzner_dns_records.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fcb263ece98ce1696cd5bbe594b86911d3365d9e8dfd9858ffbf6735c5dd46d2", + "chksum_sha256": "2695e818ea088c60143c39a2fa7610b885af292ff6b182559e77d3d2189070de", "format": 1 }, { "name": "tests/unit/plugins/inventory/test_hosttech_dns_records.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "20aafd958aa2e24b07b610c7d4efbee67cab74ecaada25876889564de7fe01d6", + "chksum_sha256": "c630d5dc0c2fbf2c0eb421e906e1f443c65b4fae6321ee76e72ebec2a3be8dd4", "format": 1 }, { @@ -1600,14 +1593,14 @@ "name": "tests/unit/plugins/lookup/test_lookup.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a888fcf181730c2aae23357e0a073cbf1996a2172b13ea8c96e0ab17623937af", + "chksum_sha256": "0e84b4e2cb5b44d4bf325440a9a20e1392d1f1b70af31cc077b6375d377abdf0", "format": 1 }, { "name": "tests/unit/plugins/lookup/test_lookup_as_dict.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "283ff7237b352e16cc23b413fd05b39bcb474c047f1662507f7c078a56d0814e", + "chksum_sha256": "65ec26898c31f97e5f155b520779aace7f0a056ea9654c662aadb4931630dee8", "format": 1 }, { @@ -1698,7 +1691,7 @@ "name": "tests/unit/plugins/module_utils/resolver_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1732b34b946b6911c9cc9690330f589691a71eccc1344d1973f31d3814327bf8", + "chksum_sha256": "8a4819cb5ff96f0f58fac8407282943e51afa11807bc7334f54515c6b7c71568", "format": 1 }, { @@ -1817,7 +1810,7 @@ "name": "tests/unit/plugins/modules/test_hetzner_dns_record_set_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f69a48413b461b5b7232b3eb6aab1ce61475922d47372bb621052366ce9e185d", + "chksum_sha256": "c4a5ab6f9c3bdd64c04321fe7d0bda4f0a9a5ffac691ae5d1a94979997e0ecd6", "format": 1 }, { @@ -1926,6 +1919,13 @@ "format": 1 }, { + "name": "tests/unit/plugins/plugin_utils/test_unsafe.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a48876d3a7e7dbc9fca656b2476824138ca1cd1c630a9b116c6398cf63d9f0ca", + "format": 1 + }, + { "name": "tests/unit/replace-requirements.sh", "ftype": "file", "chksum_type": "sha256", @@ -1971,7 +1971,7 @@ "name": "CHANGELOG.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bc56ad1ca72650697ca9f41b004a70f54ef329c79938268b1430d0dac8fa51d6", + "chksum_sha256": "1489e680b9d05205a48e068d84dc804325584d49005222f1f506f42ad49ae63a", "format": 1 }, { @@ -1985,7 +1985,7 @@ "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6dd1dbacede2c19ab983288d1fccde3d6369642593b1da10029cdf53e6b3176c", + "chksum_sha256": "8d243919ca88dbc2725a0b5a94ee622f405d42abcef4d6072f76c6539d1eef5a", "format": 1 }, { @@ -2013,7 +2013,7 @@ "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61615f641d8efd57833806770c66a86dfe2ceb595df9fe1e9ef1fc0d9e2bfab4", + "chksum_sha256": "216c0accaebda45205edabf0713d372f195393f49be5a94d6ba5e3fb6847502a", "format": 1 }, { diff --git a/ansible_collections/community/dns/MANIFEST.json b/ansible_collections/community/dns/MANIFEST.json index 0c60fe528..08e4d9c66 100644 --- a/ansible_collections/community/dns/MANIFEST.json +++ b/ansible_collections/community/dns/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "community", "name": "dns", - "version": "2.9.0", + "version": "3.0.0", "authors": [ "Felix Fontein (github.com/felixfontein)", "Markus Bergholz (github.com/markuman)" @@ -20,7 +20,9 @@ "MPL-2.0" ], "license_file": null, - "dependencies": {}, + "dependencies": { + "community.library_inventory_filtering_v1": ">=1.0.0" + }, "repository": "https://github.com/ansible-collections/community.dns", "documentation": "https://docs.ansible.com/ansible/devel/collections/community/dns/", "homepage": "https://github.com/ansible-collections/community.dns", @@ -30,7 +32,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "723a758354360ce388c0f83a88527e05dc67d3bcad6495e66deca44b8a169d12", + "chksum_sha256": "ba0f38847eafe7b48453fb5a53d01010332adb7982622a61061c9df456b18e68", "format": 1 }, "format": 1 diff --git a/ansible_collections/community/dns/README.md b/ansible_collections/community/dns/README.md index 32257a110..5a0ab4d42 100644 --- a/ansible_collections/community/dns/README.md +++ b/ansible_collections/community/dns/README.md @@ -9,6 +9,7 @@ SPDX-License-Identifier: GPL-3.0-or-later [![CI](https://github.com/ansible-collections/community.dns/workflows/CI/badge.svg?event=push)](https://github.com/ansible-collections/community.dns/actions) [![Public Suffix List up-to-date](https://github.com/ansible-collections/community.dns/workflows/Check%20for%20Public%20Suffix%20List%20updates/badge.svg?branch=main)](https://github.com/ansible-collections/community.dns/actions?query=workflow%3A%22Check+for+Public+Suffix+List+updates%22+branch%3Amain) [![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/community.dns)](https://codecov.io/gh/ansible-collections/community.dns) +[![REUSE status](https://api.reuse.software/badge/github.com/ansible-collections/community.dns)](https://api.reuse.software/info/github.com/ansible-collections/community.dns) This repository contains the `community.dns` Ansible Collection. The collection includes plugins and modules to work with DNS. @@ -16,7 +17,7 @@ Please note that this collection does **not** support Windows targets. ## Tested with Ansible -Tested with the current Ansible 2.9, ansible-base 2.10, ansible-core 2.11, ansible-core 2.12, ansible-core 2.13, ansible-core 2.14, ansible-core 2.15, ansible-core 2.16, and ansible-core 2.17 releases and the current development version of ansible-core. Ansible versions before 2.9.10 are not supported. +Tested with the current ansible-core 2.14, ansible-core 2.15, ansible-core 2.16, and ansible-core 2.17 releases and the current development version of ansible-core. Ansible versions before 2.9.10 are not supported. ## External requirements diff --git a/ansible_collections/community/dns/changelogs/changelog.yaml b/ansible_collections/community/dns/changelogs/changelog.yaml index 3eafad115..230527b2b 100644 --- a/ansible_collections/community/dns/changelogs/changelog.yaml +++ b/ansible_collections/community/dns/changelogs/changelog.yaml @@ -829,3 +829,52 @@ releases: name: unquote_txt namespace: null release_date: '2024-04-21' + 3.0.0: + changes: + breaking_changes: + - The default for the ``txt_character_encoding`` options in various modules + and plugins changed from ``octal`` to ``decimal`` (https://github.com/ansible-collections/community.dns/pull/196). + - inventory plugins - ``filters`` is now no longer an alias of ``simple_filters``, + but a new, different option (https://github.com/ansible-collections/community.dns/pull/196). + - inventory plugins - the ``plugin`` option is now required (https://github.com/ansible-collections/community.dns/pull/196). + - lookup, lookup_as_dict - the default for ``search`` changed from ``false`` + (implicit default for community.dns 2.x.y) to ``true`` (https://github.com/ansible-collections/community.dns/issues/200, + https://github.com/ansible-collections/community.dns/pull/201). + bugfixes: + - Update Public Suffix List. + major_changes: + - The ``community.dns`` collection now depends on the ``community.library_inventory_filtering_v1`` + collection. This utility collection provides host filtering functionality + for inventory plugins. If you use the Ansible community package, both collections + are included and you do not have to do anything special. If you install the + collection with ``ansible-galaxy collection install``, it will be installed + automatically. If you install the collection by copying the files of the collection + to a place where ansible-core can find it, for example by cloning the git + repository, you need to make sure that you also have to install the dependency + if you are using the inventory plugins (https://github.com/ansible-collections/community.dns/pull/196). + minor_changes: + - inventory plugins - add ``filter`` option which allows to include and exclude + hosts based on Jinja2 conditions (https://github.com/ansible-collections/community.dns/pull/196). + - lookup, lookup_as_dict - it is now possible to configure whether the input + should be treated as an absolute domain name (``search=false``), or potentially + as a relative domain name (``search=true``) (https://github.com/ansible-collections/community.dns/issues/200, + https://github.com/ansible-collections/community.dns/pull/201). + release_summary: '... + + ' + removed_features: + - The collection no longer supports Ansible, ansible-base, and ansible-core + releases that are currently End of Life at the time of the 3.0.0 release. + This means that Ansible 2.9, ansible-base 2.10, ansible-core 2.11, ansible-core + 2.12, ansible-core 2.13, and ansible-core 2.14 are no longer supported. The + collection might still work with these versions, but it can stop working at + any moment without advance notice, and this will not be considered a bug (https://github.com/ansible-collections/community.dns/pull/196). + - hetzner_dns_record_set, hetzner_dns_record - the deprecated alias ``name`` + of the prefix option was removed (https://github.com/ansible-collections/community.dns/pull/196). + - hosttech_dns_records - the redirect to the ``hosttech_dns_record_sets`` module + has been removed (https://github.com/ansible-collections/community.dns/pull/196). + fragments: + - 201-lookup-search.yml + - 3.0.0.yml + - update-psl.yml + release_date: '2024-05-19' diff --git a/ansible_collections/community/dns/docs/docsite/rst/hetzner_guide.rst b/ansible_collections/community/dns/docs/docsite/rst/hetzner_guide.rst index 8c0e34e26..f22412286 100644 --- a/ansible_collections/community/dns/docs/docsite/rst/hetzner_guide.rst +++ b/ansible_collections/community/dns/docs/docsite/rst/hetzner_guide.rst @@ -463,7 +463,7 @@ When :ansopt:`value` is not specified, the ``markuman.hetzner_dns.record`` modul # 'type' does not change: type: A -A last step is replacing the deprecated alias :ansopt:`community.dns.hetzner_dns_record_set#module:name` of :ansopt:`community.dns.hetzner_dns_record_set#module:prefix` by :ansopt:`community.dns.hetzner_dns_record_set#module:prefix`. This can be done later though, if you do not mind the deprecation warnings. +A last step is replacing the removed alias ``name`` of :ansopt:`community.dns.hetzner_dns_record_set#module:prefix` by :ansopt:`community.dns.hetzner_dns_record_set#module:prefix`. The markuman.hetzner_dns.record_info module ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/ansible_collections/community/dns/meta/runtime.yml b/ansible_collections/community/dns/meta/runtime.yml index 25f52c7a8..2cb1350ea 100644 --- a/ansible_collections/community/dns/meta/runtime.yml +++ b/ansible_collections/community/dns/meta/runtime.yml @@ -3,7 +3,7 @@ # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) # SPDX-License-Identifier: GPL-3.0-or-later -requires_ansible: '>=2.9.10' +requires_ansible: '>=2.14.0' action_groups: hetzner: - hetzner_dns_record_info @@ -18,12 +18,10 @@ action_groups: - hosttech_dns_record_set_info - hosttech_dns_record_set - hosttech_dns_record_sets - - hosttech_dns_records # deprecated redirect - hosttech_dns_zone_info plugin_routing: modules: hosttech_dns_records: - redirect: community.dns.hosttech_dns_record_sets - deprecation: + tombstone: removal_version: 3.0.0 warning_text: The hosttech_dns_records module has been renamed to hosttech_dns_record_sets. diff --git a/ansible_collections/community/dns/plugins/doc_fragments/inventory_records.py b/ansible_collections/community/dns/plugins/doc_fragments/inventory_records.py index e7a90a7b7..760ba1590 100644 --- a/ansible_collections/community/dns/plugins/doc_fragments/inventory_records.py +++ b/ansible_collections/community/dns/plugins/doc_fragments/inventory_records.py @@ -34,11 +34,10 @@ options: simple_filters: description: - A dictionary of filter value pairs. - - This option has been renamed from O(filters) to O(simple_filters) in community.dns 2.8.0. - The old name can still be used until community.dns 3.0.0. + - This option used to be called O(filters) before community.dns 3.0.0. It has been renamed from + O(filters) to O(simple_filters) in community.dns 2.8.0, and the old name was still available + as an alias until community.dns 3.0.0. O(filters) is now used for something else. type: dict - aliases: - - filters default: {} suboptions: # (The following must be kept in sync with the equivalent lines in <provider_name>.py!) diff --git a/ansible_collections/community/dns/plugins/doc_fragments/options.py b/ansible_collections/community/dns/plugins/doc_fragments/options.py index 55c83f1b2..9b892c711 100644 --- a/ansible_collections/community/dns/plugins/doc_fragments/options.py +++ b/ansible_collections/community/dns/plugins/doc_fragments/options.py @@ -55,11 +55,12 @@ options: description: - Whether to treat numeric escape sequences (V(\\xyz)) as octal or decimal numbers. This is only used when O(txt_transformation=quoted). - - The current default is V(octal) which is deprecated. It will change to V(decimal) in - community.dns 3.0.0. The value V(decimal) is compatible to L(RFC 1035, https://www.ietf.org/rfc/rfc1035.txt). + - The default changed to V(decimal) in community.dns 3.0.0. Before, the default used to be V(octal). + The value V(decimal) is compatible to L(RFC 1035, https://www.ietf.org/rfc/rfc1035.txt). type: str choices: - decimal - octal + default: decimal version_added: 2.5.0 ''' diff --git a/ansible_collections/community/dns/plugins/inventory/hetzner_dns_records.py b/ansible_collections/community/dns/plugins/inventory/hetzner_dns_records.py index 7982c23f0..8fe1d9465 100644 --- a/ansible_collections/community/dns/plugins/inventory/hetzner_dns_records.py +++ b/ansible_collections/community/dns/plugins/inventory/hetzner_dns_records.py @@ -24,12 +24,14 @@ description: options: plugin: description: The name of this plugin. Should always be set to V(community.dns.hetzner_dns_records) for this plugin to recognize it as its own. - # TODO: add `required: true` in 3.0.0 - # required: true + required: true choices: - community.dns.hetzner_dns_records type: str + filters: + version_added: 3.0.0 + extends_documentation_fragment: - community.dns.hetzner - community.dns.hetzner.plugin @@ -37,6 +39,7 @@ extends_documentation_fragment: - community.dns.hetzner.zone_id_type - community.dns.inventory_records - community.dns.options.record_transformation + - community.library_inventory_filtering_v1.inventory_filter notes: - The provider-specific O(hetzner_token) option can be templated. @@ -58,6 +61,10 @@ zone_name: domain.de simple_filters: type: - TXT +filters: + - include: >- + not ansible_host.startswith('v=') + - exclude: true txt_transformation: unquoted # You can also configure the token by putting secret value into this file, @@ -67,6 +74,7 @@ hetzner_token: >- {{ (lookup('community.sops.sops', 'keys/hetzner.sops.yml') | from_yaml).hetzner_dns_token }} ''' + from ansible_collections.community.dns.plugins.module_utils.http import ( OpenURLHelper, ) diff --git a/ansible_collections/community/dns/plugins/inventory/hosttech_dns_records.py b/ansible_collections/community/dns/plugins/inventory/hosttech_dns_records.py index d14cf73ed..e5573de5d 100644 --- a/ansible_collections/community/dns/plugins/inventory/hosttech_dns_records.py +++ b/ansible_collections/community/dns/plugins/inventory/hosttech_dns_records.py @@ -24,8 +24,7 @@ description: options: plugin: description: The name of this plugin. Should always be set to V(community.dns.hosttech_dns_records) for this plugin to recognize it as its own. - # TODO: add `required: true` in 3.0.0 - # required: true + required: true choices: - community.dns.hosttech_dns_records type: str @@ -38,6 +37,9 @@ options: # compatibility with previous type=int... # type: string + filters: + version_added: 3.0.0 + extends_documentation_fragment: - community.dns.hosttech - community.dns.hosttech.plugin @@ -45,6 +47,7 @@ extends_documentation_fragment: - community.dns.hosttech.zone_id_type - community.dns.inventory_records - community.dns.options.record_transformation + - community.library_inventory_filtering_v1.inventory_filter notes: - The provider-specific O(hosttech_username), O(hosttech_password), and O(hosttech_token) options can be templated. @@ -66,6 +69,10 @@ zone_name: domain.ch simple_filters: type: - AAAA +filters: + - include: >- + '*.' not in inventory_hostname + - exclude: true # You can also configure the token by putting secret value into this file, # but this is discouraged. Use a lookup like below, or leave it away and diff --git a/ansible_collections/community/dns/plugins/lookup/lookup.py b/ansible_collections/community/dns/plugins/lookup/lookup.py index 9f18164b1..0e968d81a 100644 --- a/ansible_collections/community/dns/plugins/lookup/lookup.py +++ b/ansible_collections/community/dns/plugins/lookup/lookup.py @@ -89,6 +89,17 @@ options: - fail - message default: empty + search: + description: + - If V(false), the input is assumed to be an absolute domain name. + - If V(true), the input is assumed to be a relative domain name if it does not end with C(.), + the search list configured in the system's resolver configuration will be used for relative + names, and the resolver's domain may be added to relative names. + - Note that this behavior changed in community.dns 3.0.0. In community.dns 2.x.y, O(search=false) + was the only available choice. + type: bool + default: true + version_added: 3.0.0 notes: - Note that when using this lookup plugin with V(lookup(\)), and the result is a one-element list, Ansible simply returns the one element not as a list. Since this behavior is surprising and @@ -151,7 +162,7 @@ except ImportError: class LookupModule(LookupBase): @staticmethod - def _resolve(resolver, name, rdtype, server_addresses, nxdomain_handling): + def _resolve(resolver, name, rdtype, server_addresses, nxdomain_handling, target_can_be_relative=True, search=True): def callback(): try: rrset = resolver.resolve( @@ -159,6 +170,8 @@ class LookupModule(LookupBase): rdtype=rdtype, server_addresses=server_addresses, nxdomain_is_empty=nxdomain_handling == 'empty', + target_can_be_relative=target_can_be_relative, + search=search, ) if not rrset: return [] @@ -189,6 +202,8 @@ class LookupModule(LookupBase): nxdomain_handling = self.get_option('nxdomain_handling') + search = self.get_option('search') + server_addresses = None if self.get_option('server'): server_addresses = [] @@ -206,5 +221,5 @@ class LookupModule(LookupBase): result = [] for name in terms: - result.extend(self._resolve(resolver, name, rdtype, server_addresses, nxdomain_handling)) + result.extend(self._resolve(resolver, name, rdtype, server_addresses, nxdomain_handling, target_can_be_relative=search, search=search)) return result diff --git a/ansible_collections/community/dns/plugins/lookup/lookup_as_dict.py b/ansible_collections/community/dns/plugins/lookup/lookup_as_dict.py index 8783d86c1..3650b2094 100644 --- a/ansible_collections/community/dns/plugins/lookup/lookup_as_dict.py +++ b/ansible_collections/community/dns/plugins/lookup/lookup_as_dict.py @@ -87,6 +87,17 @@ options: - empty - fail default: empty + search: + description: + - If V(false), the input is assumed to be an absolute domain name. + - If V(true), the input is assumed to be a relative domain name if it does not end with C(.), + the search list configured in the system's resolver configuration will be used for relative + names, and the resolver's domain may be added to relative names. + - Note that this behavior changed in community.dns 3.0.0. In community.dns 2.x.y, O(search=false) + was the only available choice. + type: bool + default: true + version_added: 3.0.0 notes: - Note that when using this lookup plugin with V(lookup(\)), and the result is a one-element list, Ansible simply returns the one element not as a list. Since this behavior is surprising and @@ -440,7 +451,7 @@ except ImportError: class LookupModule(LookupBase): @staticmethod - def _resolve(resolver, name, rdtype, server_addresses, nxdomain_handling): + def _resolve(resolver, name, rdtype, server_addresses, nxdomain_handling, target_can_be_relative=True, search=True): def callback(): try: rrset = resolver.resolve( @@ -448,6 +459,8 @@ class LookupModule(LookupBase): rdtype=rdtype, server_addresses=server_addresses, nxdomain_is_empty=nxdomain_handling == 'empty', + target_can_be_relative=target_can_be_relative, + search=search, ) if not rrset: return [] @@ -476,6 +489,8 @@ class LookupModule(LookupBase): nxdomain_handling = self.get_option('nxdomain_handling') + search = self.get_option('search') + server_addresses = None if self.get_option('server'): server_addresses = [] @@ -493,5 +508,5 @@ class LookupModule(LookupBase): result = [] for name in terms: - result.extend(self._resolve(resolver, name, rdtype, server_addresses, nxdomain_handling)) + result.extend(self._resolve(resolver, name, rdtype, server_addresses, nxdomain_handling, target_can_be_relative=search, search=search)) return result diff --git a/ansible_collections/community/dns/plugins/module_utils/conversion/converter.py b/ansible_collections/community/dns/plugins/module_utils/conversion/converter.py index b8a9f4a8d..c6667d50e 100644 --- a/ansible_collections/community/dns/plugins/module_utils/conversion/converter.py +++ b/ansible_collections/community/dns/plugins/module_utils/conversion/converter.py @@ -44,23 +44,9 @@ class RecordConverter(object): self._txt_transformation = self._option_provider.get_option('txt_transformation') # Valid values: 'decimal', 'octal' self._txt_character_encoding = self._option_provider.get_option('txt_character_encoding') - self._txt_character_encoding_deprecation = False - if self._txt_character_encoding is None: - # TODO: remove implicit default in community.dns 3.0.0 - self._txt_character_encoding = 'octal' - if self._txt_transformation == 'quoted': - self._txt_character_encoding_deprecation = True def emit_deprecations(self, deprecator): - if self._txt_character_encoding_deprecation: - deprecator( - 'The default of the txt_character_encoding option will change from "octal" to "decimal" in community.dns 3.0.0.' - ' This potentially affects you since you use txt_transformation=quoted. You can explicitly set txt_character_encoding' - ' to "octal" to keep the current behavior, or "decimal" to already now switch to the new behavior. We recommend' - ' switching to the new behavior, and using check/diff mode to figure out potential changes', - version='3.0.0', - collection_name='community.dns', - ) + pass def _handle_txt_api(self, to_api, record): """ diff --git a/ansible_collections/community/dns/plugins/module_utils/options.py b/ansible_collections/community/dns/plugins/module_utils/options.py index 3906b4b6c..3b88ebae8 100644 --- a/ansible_collections/community/dns/plugins/module_utils/options.py +++ b/ansible_collections/community/dns/plugins/module_utils/options.py @@ -32,6 +32,6 @@ def create_record_transformation_argspec(): return ArgumentSpec( argument_spec=dict( txt_transformation=dict(type='str', default='unquoted', choices=['api', 'quoted', 'unquoted']), - txt_character_encoding=dict(type='str', choices=['decimal', 'octal']), + txt_character_encoding=dict(type='str', default='decimal', choices=['decimal', 'octal']), ), ) diff --git a/ansible_collections/community/dns/plugins/module_utils/provider.py b/ansible_collections/community/dns/plugins/module_utils/provider.py index 56282d9c9..f5bf08a81 100644 --- a/ansible_collections/community/dns/plugins/module_utils/provider.py +++ b/ansible_collections/community/dns/plugins/module_utils/provider.py @@ -104,6 +104,6 @@ class ProviderInformation(object): This return value is only used if txt_record_handling returns 'encoded'. - WARNING: the default return value will change to 'decimal' for community.dns 3.0.0! + Note: the default return value changed from 'octal' to 'decimal' in community.dns 3.0.0. """ - return 'octal' + return 'decimal' diff --git a/ansible_collections/community/dns/plugins/module_utils/resolver.py b/ansible_collections/community/dns/plugins/module_utils/resolver.py index 280b697d4..3814b164b 100644 --- a/ansible_collections/community/dns/plugins/module_utils/resolver.py +++ b/ansible_collections/community/dns/plugins/module_utils/resolver.py @@ -73,7 +73,7 @@ class _Resolve(object): response = self._handle_timeout(resolver.resolve, dnsname, lifetime=self.timeout, **kwargs) except AttributeError: # For dnspython < 2.0.0 - resolver.search = False + resolver.search = kwargs.pop('search', False) try: response = self._handle_timeout(resolver.query, dnsname, lifetime=self.timeout, **kwargs) except TypeError: @@ -101,8 +101,11 @@ class SimpleResolver(_Resolve): servfail_retries=servfail_retries, ) - def resolve(self, target, nxdomain_is_empty=True, server_addresses=None, **kwargs): - dnsname = dns.name.from_unicode(to_text(target)) + def resolve(self, target, nxdomain_is_empty=True, server_addresses=None, target_can_be_relative=False, **kwargs): + if target_can_be_relative: + dnsname = dns.name.from_unicode(to_text(target), origin=None) + else: + dnsname = dns.name.from_unicode(to_text(target)) resolver = self.default_resolver if server_addresses: diff --git a/ansible_collections/community/dns/plugins/modules/hetzner_dns_record.py b/ansible_collections/community/dns/plugins/modules/hetzner_dns_record.py index 23c873322..c27c152c3 100644 --- a/ansible_collections/community/dns/plugins/modules/hetzner_dns_record.py +++ b/ansible_collections/community/dns/plugins/modules/hetzner_dns_record.py @@ -43,11 +43,6 @@ attributes: diff_mode: support: full -options: - prefix: - aliases: - - name - author: - Markus Bergholz (@markuman) <markuman+spambelongstogoogle@gmail.com> - Felix Fontein (@felixfontein) @@ -109,8 +104,6 @@ def main(): provider_information = create_hetzner_provider_information() argument_spec = create_hetzner_argument_spec() argument_spec.merge(create_module_argument_spec(provider_information=provider_information)) - argument_spec.argument_spec['prefix']['aliases'] = ['name'] - argument_spec.argument_spec['prefix']['deprecated_aliases'] = [dict(name='name', version='3.0.0', collection_name='community.dns')] module = AnsibleModule(supports_check_mode=True, **argument_spec.to_kwargs()) run_module(module, lambda: create_hetzner_api(ModuleOptionProvider(module), ModuleHTTPHelper(module)), provider_information=provider_information) diff --git a/ansible_collections/community/dns/plugins/modules/hetzner_dns_record_set.py b/ansible_collections/community/dns/plugins/modules/hetzner_dns_record_set.py index ce3ad313a..61cfca634 100644 --- a/ansible_collections/community/dns/plugins/modules/hetzner_dns_record_set.py +++ b/ansible_collections/community/dns/plugins/modules/hetzner_dns_record_set.py @@ -40,11 +40,6 @@ attributes: diff_mode: support: full -options: - prefix: - aliases: - - name - author: - Markus Bergholz (@markuman) <markuman+spambelongstogoogle@gmail.com> - Felix Fontein (@felixfontein) @@ -224,8 +219,6 @@ def main(): provider_information = create_hetzner_provider_information() argument_spec = create_hetzner_argument_spec() argument_spec.merge(create_module_argument_spec(provider_information=provider_information)) - argument_spec.argument_spec['prefix']['aliases'] = ['name'] - argument_spec.argument_spec['prefix']['deprecated_aliases'] = [dict(name='name', version='3.0.0', collection_name='community.dns')] module = AnsibleModule(supports_check_mode=True, **argument_spec.to_kwargs()) run_module(module, lambda: create_hetzner_api(ModuleOptionProvider(module), ModuleHTTPHelper(module)), provider_information=provider_information) diff --git a/ansible_collections/community/dns/plugins/modules/hosttech_dns_records.py b/ansible_collections/community/dns/plugins/modules/hosttech_dns_records.py deleted file mode 100644 index 583cfa58e..000000000 --- a/ansible_collections/community/dns/plugins/modules/hosttech_dns_records.py +++ /dev/null @@ -1,129 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017-2021 Felix Fontein -# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) -# SPDX-License-Identifier: GPL-3.0-or-later - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - - -DOCUMENTATION = ''' ---- -module: hosttech_dns_record_sets - -short_description: Bulk synchronize DNS record sets in Hosttech DNS service - -version_added: 2.0.0 - -description: - - Bulk synchronize DNS record sets in Hosttech DNS service. - - This module replaces C(hosttech_dns_records) from community.dns before 2.0.0. - -extends_documentation_fragment: - - community.dns.hosttech - - community.dns.hosttech.record_notes - - community.dns.hosttech.record_type_choices_record_sets_module - - community.dns.hosttech.zone_id_type - - community.dns.module_record_sets - - community.dns.options.record_transformation - - community.dns.attributes - - community.dns.attributes.actiongroup_hosttech - -attributes: - action_group: - version_added: 2.4.0 - check_mode: - support: full - diff_mode: - support: full - -author: - - Felix Fontein (@felixfontein) - -''' - -EXAMPLES = ''' -- name: Make sure some records exist and have the expected values - community.dns.hosttech_dns_record_sets: - zone_name: foo.com - records: - - prefix: new - type: A - ttl: 7200 - value: - - 1.1.1.1 - - 2.2.2.2 - - prefix: new - type: AAAA - ttl: 7200 - value: - - "::1" - - record: foo.com - type: TXT - value: - - test - hosttech_token: access_token - -- name: Synchronize DNS zone with a fixed set of records - # If a record exists that is not mentioned here, it will be deleted - community.dns.hosttech_dns_record_sets: - zone_id: 23 - purge: true - records: - - prefix: '' - type: A - value: 127.0.0.1 - - prefix: '' - type: AAAA - value: "::1" - - prefix: '' - type: NS - value: - - ns-1.hoster.com - - ns-2.hoster.com - - ns-3.hoster.com - hosttech_token: access_token -''' - -RETURN = ''' -zone_id: - description: The ID of the zone. - type: int - returned: success - sample: 23 -''' - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.community.dns.plugins.module_utils.argspec import ( - ModuleOptionProvider, -) - -from ansible_collections.community.dns.plugins.module_utils.http import ( - ModuleHTTPHelper, -) - -from ansible_collections.community.dns.plugins.module_utils.hosttech.api import ( - create_hosttech_argument_spec, - create_hosttech_api, - create_hosttech_provider_information, -) - -from ansible_collections.community.dns.plugins.module_utils.module.record_sets import ( - create_module_argument_spec, - run_module, -) - - -def main(): - provider_information = create_hosttech_provider_information() - argument_spec = create_hosttech_argument_spec() - argument_spec.merge(create_module_argument_spec(provider_information=provider_information)) - module = AnsibleModule(supports_check_mode=True, **argument_spec.to_kwargs()) - run_module(module, lambda: create_hosttech_api(ModuleOptionProvider(module), ModuleHTTPHelper(module)), provider_information=provider_information) - - -if __name__ == '__main__': - main() diff --git a/ansible_collections/community/dns/plugins/plugin_utils/inventory/records.py b/ansible_collections/community/dns/plugins/plugin_utils/inventory/records.py index 1d6827f2f..2ecfb1949 100644 --- a/ansible_collections/community/dns/plugins/plugin_utils/inventory/records.py +++ b/ansible_collections/community/dns/plugins/plugin_utils/inventory/records.py @@ -17,6 +17,8 @@ from ansible.plugins.inventory import BaseInventoryPlugin from ansible.utils.display import Display from ansible.template import Templar +from ansible_collections.community.library_inventory_filtering_v1.plugins.plugin_utils.inventory_filter import parse_filters, filter_host + from ansible_collections.community.dns.plugins.module_utils.provider import ( ensure_type, ) @@ -67,15 +69,7 @@ class RecordsInventoryModule(BaseInventoryPlugin): def parse(self, inventory, loader, path, cache=False): super(RecordsInventoryModule, self).parse(inventory, loader, path, cache) - orig_config = self._read_config_data(path) - - if 'filters' in orig_config: - display.deprecated( - 'The `filters` option of the %s inventory plugin has been renamed to `simple_filters`. ' - 'The old name will stop working in community.dns 3.0.0.' % self.NAME, - collection_name='community.dns', - version='3.0.0', - ) + self._read_config_data(path) self.templar = Templar(loader=loader) @@ -119,9 +113,10 @@ class RecordsInventoryModule(BaseInventoryPlugin): except DNSAPIError as e: raise AnsibleError('Error: %s' % e) - filters = self.get_option('simple_filters') + simple_filters = self.get_option('simple_filters') + filters = parse_filters(self.get_option('filters')) - filter_types = filters.get('type') or ['A', 'AAAA', 'CNAME'] + filter_types = simple_filters.get('type') or ['A', 'AAAA', 'CNAME'] if not isinstance(filter_types, Sequence) or isinstance(filter_types, six.string_types): filter_types = [filter_types] @@ -130,5 +125,12 @@ class RecordsInventoryModule(BaseInventoryPlugin): name = zone_with_records.zone.name if record.prefix: name = '%s.%s' % (record.prefix, name) + facts = { + 'ansible_host': make_unsafe(record.target), + } + if not filter_host(self, name, facts, filters): + continue + self.inventory.add_host(name) - self.inventory.set_variable(name, 'ansible_host', make_unsafe(record.target)) + for key, value in facts.items(): + self.inventory.set_variable(name, key, value) diff --git a/ansible_collections/community/dns/plugins/public_suffix_list.dat b/ansible_collections/community/dns/plugins/public_suffix_list.dat index 125f1e3d7..05df0af89 100644 --- a/ansible_collections/community/dns/plugins/public_suffix_list.dat +++ b/ansible_collections/community/dns/plugins/public_suffix_list.dat @@ -6710,7 +6710,7 @@ org.zw // newGTLDs -// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2024-03-28T15:13:37Z +// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2024-05-04T15:12:50Z // This list is auto-generated, don't edit it manually. // aaa : American Automobile Association, Inc. // https://www.iana.org/domains/root/db/aaa.html @@ -6896,7 +6896,7 @@ anquan // https://www.iana.org/domains/root/db/anz.html anz -// aol : Oath Inc. +// aol : Yahoo Inc. // https://www.iana.org/domains/root/db/aol.html aol @@ -11120,7 +11120,7 @@ xyz // https://www.iana.org/domains/root/db/yachts.html yachts -// yahoo : Oath Inc. +// yahoo : Yahoo Inc. // https://www.iana.org/domains/root/db/yahoo.html yahoo @@ -11200,6 +11200,10 @@ ltd.ua // 611coin : https://611project.org/ 611.to +// AAA workspace : https://aaa.vodka +// Submitted by Kirill Rezraf <admin@aaa.vodka> +aaa.vodka + // A2 Hosting // Submitted by Tyler Hall <sysadmin@a2hosting.com> a2hosted.com @@ -11346,23 +11350,28 @@ cloudfront.net // Amazon Cognito // Submitted by AWS Security <psl-maintainers@amazon.com> -// Reference: 7bee1013-f456-47df-bfe8-03c78d946d61 +// Reference: 09588633-91fe-49d8-b4e7-ec36496d11f3 auth.af-south-1.amazoncognito.com auth.ap-northeast-1.amazoncognito.com auth.ap-northeast-2.amazoncognito.com auth.ap-northeast-3.amazoncognito.com auth.ap-south-1.amazoncognito.com +auth.ap-south-2.amazoncognito.com auth.ap-southeast-1.amazoncognito.com auth.ap-southeast-2.amazoncognito.com auth.ap-southeast-3.amazoncognito.com +auth.ap-southeast-4.amazoncognito.com auth.ca-central-1.amazoncognito.com auth.eu-central-1.amazoncognito.com +auth.eu-central-2.amazoncognito.com auth.eu-north-1.amazoncognito.com auth.eu-south-1.amazoncognito.com +auth.eu-south-2.amazoncognito.com auth.eu-west-1.amazoncognito.com auth.eu-west-2.amazoncognito.com auth.eu-west-3.amazoncognito.com auth.il-central-1.amazoncognito.com +auth.me-central-1.amazoncognito.com auth.me-south-1.amazoncognito.com auth.sa-east-1.amazoncognito.com auth.us-east-1.amazoncognito.com @@ -11385,7 +11394,7 @@ us-east-1.amazonaws.com // Amazon EMR // Submitted by AWS Security <psl-maintainers@amazon.com> -// Reference: 597f3f8e-9283-4e48-8e32-7ee25a1ff6ab +// Reference: 82f43f9f-bbb8-400e-8349-854f5a62f20d emrappui-prod.cn-north-1.amazonaws.com.cn emrnotebooks-prod.cn-north-1.amazonaws.com.cn emrstudio-prod.cn-north-1.amazonaws.com.cn @@ -11410,6 +11419,9 @@ emrstudio-prod.ap-northeast-3.amazonaws.com emrappui-prod.ap-south-1.amazonaws.com emrnotebooks-prod.ap-south-1.amazonaws.com emrstudio-prod.ap-south-1.amazonaws.com +emrappui-prod.ap-south-2.amazonaws.com +emrnotebooks-prod.ap-south-2.amazonaws.com +emrstudio-prod.ap-south-2.amazonaws.com emrappui-prod.ap-southeast-1.amazonaws.com emrnotebooks-prod.ap-southeast-1.amazonaws.com emrstudio-prod.ap-southeast-1.amazonaws.com @@ -11419,18 +11431,30 @@ emrstudio-prod.ap-southeast-2.amazonaws.com emrappui-prod.ap-southeast-3.amazonaws.com emrnotebooks-prod.ap-southeast-3.amazonaws.com emrstudio-prod.ap-southeast-3.amazonaws.com +emrappui-prod.ap-southeast-4.amazonaws.com +emrnotebooks-prod.ap-southeast-4.amazonaws.com +emrstudio-prod.ap-southeast-4.amazonaws.com emrappui-prod.ca-central-1.amazonaws.com emrnotebooks-prod.ca-central-1.amazonaws.com emrstudio-prod.ca-central-1.amazonaws.com +emrappui-prod.ca-west-1.amazonaws.com +emrnotebooks-prod.ca-west-1.amazonaws.com +emrstudio-prod.ca-west-1.amazonaws.com emrappui-prod.eu-central-1.amazonaws.com emrnotebooks-prod.eu-central-1.amazonaws.com emrstudio-prod.eu-central-1.amazonaws.com +emrappui-prod.eu-central-2.amazonaws.com +emrnotebooks-prod.eu-central-2.amazonaws.com +emrstudio-prod.eu-central-2.amazonaws.com emrappui-prod.eu-north-1.amazonaws.com emrnotebooks-prod.eu-north-1.amazonaws.com emrstudio-prod.eu-north-1.amazonaws.com emrappui-prod.eu-south-1.amazonaws.com emrnotebooks-prod.eu-south-1.amazonaws.com emrstudio-prod.eu-south-1.amazonaws.com +emrappui-prod.eu-south-2.amazonaws.com +emrnotebooks-prod.eu-south-2.amazonaws.com +emrstudio-prod.eu-south-2.amazonaws.com emrappui-prod.eu-west-1.amazonaws.com emrnotebooks-prod.eu-west-1.amazonaws.com emrstudio-prod.eu-west-1.amazonaws.com @@ -11440,6 +11464,9 @@ emrstudio-prod.eu-west-2.amazonaws.com emrappui-prod.eu-west-3.amazonaws.com emrnotebooks-prod.eu-west-3.amazonaws.com emrstudio-prod.eu-west-3.amazonaws.com +emrappui-prod.il-central-1.amazonaws.com +emrnotebooks-prod.il-central-1.amazonaws.com +emrstudio-prod.il-central-1.amazonaws.com emrappui-prod.me-central-1.amazonaws.com emrnotebooks-prod.me-central-1.amazonaws.com emrstudio-prod.me-central-1.amazonaws.com @@ -11470,9 +11497,11 @@ emrstudio-prod.us-west-2.amazonaws.com // Amazon Managed Workflows for Apache Airflow // Submitted by AWS Security <psl-maintainers@amazon.com> -// Reference: 4ab55e6f-90c0-4a8d-b6a0-52ca5dbb1c2e +// Reference: 87f24ece-a77e-40e8-bb4a-f6b74fe9f975 *.cn-north-1.airflow.amazonaws.com.cn *.cn-northwest-1.airflow.amazonaws.com.cn +*.af-south-1.airflow.amazonaws.com +*.ap-east-1.airflow.amazonaws.com *.ap-northeast-1.airflow.amazonaws.com *.ap-northeast-2.airflow.amazonaws.com *.ap-south-1.airflow.amazonaws.com @@ -11481,12 +11510,15 @@ emrstudio-prod.us-west-2.amazonaws.com *.ca-central-1.airflow.amazonaws.com *.eu-central-1.airflow.amazonaws.com *.eu-north-1.airflow.amazonaws.com +*.eu-south-1.airflow.amazonaws.com *.eu-west-1.airflow.amazonaws.com *.eu-west-2.airflow.amazonaws.com *.eu-west-3.airflow.amazonaws.com +*.me-south-1.airflow.amazonaws.com *.sa-east-1.airflow.amazonaws.com *.us-east-1.airflow.amazonaws.com *.us-east-2.airflow.amazonaws.com +*.us-west-1.airflow.amazonaws.com *.us-west-2.airflow.amazonaws.com // Amazon S3 @@ -11780,9 +11812,25 @@ s3-fips.us-west-2.amazonaws.com s3-object-lambda.us-west-2.amazonaws.com s3-website.us-west-2.amazonaws.com +// Amazon SageMaker Ground Truth +// Submitted by AWS Security <psl-maintainers@amazon.com> +// Reference: 98dbfde4-7802-48c3-8751-b60f204e0d9c +labeling.ap-northeast-1.sagemaker.aws +labeling.ap-northeast-2.sagemaker.aws +labeling.ap-south-1.sagemaker.aws +labeling.ap-southeast-1.sagemaker.aws +labeling.ap-southeast-2.sagemaker.aws +labeling.ca-central-1.sagemaker.aws +labeling.eu-central-1.sagemaker.aws +labeling.eu-west-1.sagemaker.aws +labeling.eu-west-2.sagemaker.aws +labeling.us-east-1.sagemaker.aws +labeling.us-east-2.sagemaker.aws +labeling.us-west-2.sagemaker.aws + // Amazon SageMaker Notebook Instances // Submitted by AWS Security <psl-maintainers@amazon.com> -// Reference: ce8ae0b1-0070-496d-be88-37c31837af9d +// Reference: b5ea56df-669e-43cc-9537-14aa172f5dfc notebook.af-south-1.sagemaker.aws notebook.ap-east-1.sagemaker.aws notebook.ap-northeast-1.sagemaker.aws @@ -11819,6 +11867,7 @@ notebook-fips.us-gov-east-1.sagemaker.aws notebook.us-gov-west-1.sagemaker.aws notebook-fips.us-gov-west-1.sagemaker.aws notebook.us-west-1.sagemaker.aws +notebook-fips.us-west-1.sagemaker.aws notebook.us-west-2.sagemaker.aws notebook-fips.us-west-2.sagemaker.aws notebook.cn-north-1.sagemaker.com.cn @@ -11826,7 +11875,7 @@ notebook.cn-northwest-1.sagemaker.com.cn // Amazon SageMaker Studio // Submitted by AWS Security <psl-maintainers@amazon.com> -// Reference: 057ee397-6bf8-4f20-b807-d7bc145ac980 +// Reference: 69c723d9-6e1a-4bff-a203-48eecd203183 studio.af-south-1.sagemaker.aws studio.ap-east-1.sagemaker.aws studio.ap-northeast-1.sagemaker.aws @@ -11840,6 +11889,7 @@ studio.ca-central-1.sagemaker.aws studio.eu-central-1.sagemaker.aws studio.eu-north-1.sagemaker.aws studio.eu-south-1.sagemaker.aws +studio.eu-south-2.sagemaker.aws studio.eu-west-1.sagemaker.aws studio.eu-west-2.sagemaker.aws studio.eu-west-3.sagemaker.aws @@ -11951,6 +12001,11 @@ webview-assets.aws-cloud9.us-west-2.amazonaws.com vfs.cloud9.us-west-2.amazonaws.com webview-assets.cloud9.us-west-2.amazonaws.com +// AWS Directory Service +// Submitted by AWS Security <psl-maintainers@amazon.com> +// Reference: a13203e8-42dc-4045-a0d2-2ee67bed1068 +awsapps.com + // AWS Elastic Beanstalk // Submitted by AWS Security <psl-maintainers@amazon.com> // Reference: bb5a965c-dec3-4967-aa22-e306ad064797 @@ -12144,6 +12199,10 @@ pages.gay // Submitted by Adrian <adrian@betainabox.com> betainabox.com +// University of Bielsko-Biala regional domain: http://dns.bielsko.pl/ +// Submitted by Marcin <dns@ath.bielsko.pl> +bielsko.pl + // BinaryLane : http://www.binarylane.com // Submitted by Nathan O'Sullivan <nathan@mammoth.com.au> bnr.la @@ -12190,7 +12249,8 @@ square7.net *.s.brave.io // Brendly : https://brendly.rs -// Submitted by Dusan Radovanovic <dusan.radovanovic@brendly.rs> +// Submitted by Dusan Radovanovic <administracija@brendly.rs> +shop.brendly.hr shop.brendly.rs // BrowserSafetyMark @@ -12307,7 +12367,10 @@ discourse.team // Clever Cloud : https://www.clever-cloud.com/ // Submitted by Quentin Adam <noc@clever-cloud.com> +cleverapps.cc +*.services.clever-cloud.com cleverapps.io +cleverapps.tech // Clerk : https://www.clerk.dev // Submitted by Colin Sidoti <systems@clerk.dev> @@ -13093,6 +13156,11 @@ us-2.evennode.com us-3.evennode.com us-4.evennode.com +// Expo : https://expo.dev/ +// Submitted by James Ide <psl@expo.dev> +expo.app +staging.expo.app + // eDirect Corp. : https://hosting.url.com.tw/ // Submitted by C.S. chang <cschang@corp.url.com.tw> twmail.cc @@ -13391,10 +13459,6 @@ localcert.net localhostcert.net corpnet.work -// Ghost Foundation : https://ghost.org -// Submitted by Matt Hanley <security@ghost.org> -ghost.io - // GignoSystemJapan: http://gsj.bz // Submitted by GignoSystemJapan <kakutou-ec@gsj.bz> gsj.bz @@ -13559,7 +13623,8 @@ ro.im goip.de // Google, Inc. -// Submitted by Eduardo Vela <evn@google.com> +// Submitted by Shannon McCabe <public-suffix-editors@google.com> +*.hosted.app *.run.app web.app *.0emm.com @@ -14063,10 +14128,6 @@ co.network co.place co.technology -// Lightmaker Property Manager, Inc. : https://app.lmpm.com/ -// Submitted by Greg Holland <greg.holland@lmpm.com> -app.lmpm.com - // linkyard ldt: https://www.linkyard.ch/ // Submitted by Mario Siegenthaler <mario.siegenthaler@linkyard.ch> linkyard.cloud @@ -14312,6 +14373,10 @@ netlify.app // Submitted by Trung Tran <Trung.Tran@neustar.biz> 4u.com +// NGO.US Registry : https://nic.ngo.us +// Submitted by Alstra Solutions Ltd. Networking Team <admin@alstra.org> +ngo.us + // ngrok : https://ngrok.com/ // Submitted by Alan Shreve <alan@ngrok.com> ngrok.app @@ -14362,6 +14427,10 @@ noop.app // Submitted by Laurent Pellegrino <security@noticeable.io> noticeable.news +// Notion Labs, Inc : https://www.notion.so/ +// Submitted by Jess Yao <trust-core-team@makenotion.com> +notion.site + // Now-DNS : https://now-dns.com // Submitted by Steve Russell <steve@now-dns.com> dnsking.ch @@ -14495,8 +14564,13 @@ pcloud.host // Submitted by Matthew Brown <mattbrown@nyc.mn> nyc.mn +// O3O.Foundation : https://o3o.foundation/ +// Submitted by the prvcy.page Registry Team <psl@registry.prvcy.page> +prvcy.page + // Observable, Inc. : https://observablehq.com // Submitted by Mike Bostock <dns@observablehq.com> +observablehq.cloud static.observableusercontent.com // Octopodal Solutions, LLC. : https://ulterius.io/ @@ -14624,6 +14698,7 @@ pagexl.com // pcarrier.ca Software Inc: https://pcarrier.ca/ // Submitted by Pierre Carrier <pc@rrier.ca> *.xmit.co +xmit.dev srv.us gh.srv.us gl.srv.us @@ -14714,10 +14789,6 @@ xen.prgmr.com // Submitted by registry <lendl@nic.at> priv.at -// privacytools.io : https://www.privacytools.io/ -// Submitted by Jonah Aragon <jonah@privacytools.io> -prvcy.page - // Protocol Labs : https://protocol.ai/ // Submitted by Michael Burns <noc@protocol.ai> *.dweb.link @@ -15062,6 +15133,10 @@ biz.ua co.ua pp.ua +// Sheezy.Art : https://sheezy.art +// Submitted by Nyoom <admin@sheezy.art> +sheezy.games + // Shift Crypto AG : https://shiftcrypto.ch // Submitted by alex <alex@shiftcrypto.ch> shiftcrypto.dev @@ -15484,6 +15559,11 @@ dnsupdate.info // Submitted by Ed Moore <Ed.Moore@lib.de.us> lib.de.us +// Val Town, Inc : https://val.town/ +// Submitted by Tom MacWright <security@val.town> +express.val.run +web.val.run + // VeryPositive SIA : http://very.lv // Submitted by Danko Aleksejevs <danko@very.lv> 2038.io @@ -15548,6 +15628,10 @@ wedeploy.sh // Submitted by Jung Jin <jungseok.jin@wdc.com> remotewd.com +// Whatbox Inc. : https://whatbox.ca/ +// Submitted by Anthony Ryan <servers@whatbox.ca> +box.ca + // WIARD Enterprises : https://wiardweb.com // Submitted by Kidd Hustle <kiddhustle@wiardweb.com> pages.wiardweb.com @@ -15650,6 +15734,10 @@ za.org // Submitted by Julian Alker <security@zap-hosting.com> zap.cloud +// Zeabur : https://zeabur.com/ +// Submitted by Zeabur Team <contact@zeabur.com> +zeabur.app + // Zine EOOD : https://zine.bg/ // Submitted by Martin Angelov <martin@zine.bg> bss.design diff --git a/ansible_collections/community/dns/tests/integration/targets/filter_txt/tasks/main.yml b/ansible_collections/community/dns/tests/integration/targets/filter_txt/tasks/main.yml index c0afffcea..63c7d8424 100644 --- a/ansible_collections/community/dns/tests/integration/targets/filter_txt/tasks/main.yml +++ b/ansible_collections/community/dns/tests/integration/targets/filter_txt/tasks/main.yml @@ -47,3 +47,47 @@ '"foo" "bar"' | community.dns.unquote_txt == "foobar" - > 'foo "bar baz" bam' | community.dns.unquote_txt == "foobar bazbam" + +- name: quote_txt failure - input not string + set_fact: + output: "{{ 1 | community.dns.quote_txt }}" + register: quote_failure_1 + ignore_errors: true + +- name: quote_txt failure - always_quote not a boolean + set_fact: + output: "{{ '' | community.dns.quote_txt(always_quote=1) }}" + register: quote_failure_2 + ignore_errors: true + +- name: quote_txt failure - character_encoding has invalid value + set_fact: + output: "{{ '' | community.dns.quote_txt(character_encoding='foo') }}" + register: quote_failure_3 + ignore_errors: true + +- name: unquote_txt failure - input not string + set_fact: + output: "{{ 1 | community.dns.unquote_txt }}" + register: unquote_failure_1 + ignore_errors: true + +- name: unquote_txt failure - character_encoding has invalid value + set_fact: + output: "{{ '' | community.dns.unquote_txt(character_encoding='foo') }}" + register: unquote_failure_2 + ignore_errors: true + +- name: Validate errors + assert: + that: + - quote_failure_1 is failed + - quote_failure_1.msg == 'Input for community.dns.quote_txt must be a string' + - quote_failure_2 is failed + - quote_failure_2.msg == 'always_quote must be a boolean, not 1' + - quote_failure_3 is failed + - quote_failure_3.msg == "character_encoding must be \"decimal\" or \"octal\", not 'foo'" + - unquote_failure_1 is failed + - unquote_failure_1.msg == 'Input for community.dns.unquote_txt must be a string' + - unquote_failure_2 is failed + - unquote_failure_2.msg == "character_encoding must be \"decimal\" or \"octal\", not 'foo'" diff --git a/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hetzner_dns_records.py b/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hetzner_dns_records.py index 44f694708..2dadf2643 100644 --- a/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hetzner_dns_records.py +++ b/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hetzner_dns_records.py @@ -236,7 +236,7 @@ def test_inventory_file_simple(mocker): plugin: community.dns.hetzner_dns_records hetzner_token: foo zone_name: example.com - filters: + simple_filters: type: A """)} @@ -289,7 +289,7 @@ def test_inventory_file_collision(mocker): plugin: community.dns.hetzner_dns_records hetzner_token: '{{ "foo" }}' zone_name: '{{ "example." ~ "com" }}' - filters: + simple_filters: type: - A - AAAA diff --git a/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hosttech_dns_records.py b/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hosttech_dns_records.py index 11995198c..dd56623df 100644 --- a/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hosttech_dns_records.py +++ b/ansible_collections/community/dns/tests/unit/plugins/inventory/test_hosttech_dns_records.py @@ -220,7 +220,7 @@ def test_inventory_file_simple(mocker): plugin: community.dns.hosttech_dns_records hosttech_token: foo zone_name: example.com - filters: + simple_filters: type: A """)} @@ -270,7 +270,7 @@ def test_inventory_file_collision(mocker): plugin: community.dns.hosttech_dns_records hosttech_token: "{{ 'foo' }}" zone_name: "{{ 'example' ~ '.com' }}" - filters: + simple_filters: type: - A - AAAA diff --git a/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup.py b/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup.py index 0982d8704..010fe8ac0 100644 --- a/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup.py +++ b/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup.py @@ -35,7 +35,8 @@ class TestLookup(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(dns.rrset.from_rdata( @@ -57,29 +58,60 @@ class TestLookup(TestCase): assert result[0] == '127.0.0.1' assert result[1] == '127.0.0.2' - def test_retry_success(self): + def test_no_search(self): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { 'target': dns.name.from_unicode(u'www.example.com'), + 'search': False, + 'rdtype': dns.rdatatype.A, + 'lifetime': 10, + 'result': create_mock_answer(dns.rrset.from_rdata( + 'www.example.com', + 300, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, '127.0.0.1'), + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, '127.0.0.2'), + )), + }, + ], + }) + with patch('dns.resolver.get_default_resolver', resolver): + with patch('dns.resolver.Resolver', resolver): + with patch('dns.query.udp', mock_query_udp([])): + result = self.lookup.run(['www.example.com'], search=False) + + print(result) + assert len(result) == 2 + assert result[0] == '127.0.0.1' + assert result[1] == '127.0.0.2' + + def test_retry_success(self): + resolver = mock_resolver(['1.1.1.1'], { + ('1.1.1.1', ): [ + { + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(dns.rrset.from_rdata( @@ -105,25 +137,29 @@ class TestLookup(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), @@ -143,7 +179,8 @@ class TestLookup(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN), @@ -162,7 +199,8 @@ class TestLookup(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN), @@ -181,7 +219,8 @@ class TestLookup(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN), @@ -200,7 +239,8 @@ class TestLookup(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN), @@ -220,7 +260,8 @@ class TestLookup(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN), @@ -240,7 +281,8 @@ class TestLookup(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.SERVFAIL), @@ -260,19 +302,22 @@ class TestLookup(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.SERVFAIL), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.SERVFAIL), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN), @@ -291,19 +336,22 @@ class TestLookup(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.SERVFAIL), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.SERVFAIL), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.SERVFAIL), @@ -323,7 +371,8 @@ class TestLookup(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'example.com'), + 'target': dns.name.from_unicode(u'example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.TXT, 'lifetime': 10, 'result': create_mock_answer(dns.rrset.from_rdata( @@ -351,7 +400,8 @@ class TestLookup(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('2.2.2.2', '3.3.3.3'): [ { - 'target': dns.name.from_unicode(u'example.org'), + 'target': dns.name.from_unicode(u'example.org', origin=None), + 'search': True, 'rdtype': dns.rdatatype.AAAA, 'lifetime': 10, 'result': create_mock_answer(dns.rrset.from_rdata( @@ -397,7 +447,8 @@ class TestLookup(TestCase): ], ('1.2.3.4', '1::2', '2.2.2.2', '3.3.3.3'): [ { - 'target': dns.name.from_unicode(u'example.org'), + 'target': dns.name.from_unicode(u'example.org', origin=None), + 'search': True, 'rdtype': dns.rdatatype.AAAA, 'lifetime': 10, 'result': create_mock_answer(dns.rrset.from_rdata( @@ -477,7 +528,8 @@ class TestLookup(TestCase): ], ('3.3.3.3', ): [ { - 'target': dns.name.from_unicode(u'example.org'), + 'target': dns.name.from_unicode(u'example.org', origin=None), + 'search': True, 'rdtype': dns.rdatatype.AAAA, 'lifetime': 5, 'raise': dns.resolver.NoAnswer(response=fake_query), diff --git a/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup_as_dict.py b/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup_as_dict.py index f29d73143..57c3655a9 100644 --- a/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup_as_dict.py +++ b/ansible_collections/community/dns/tests/unit/plugins/lookup/test_lookup_as_dict.py @@ -35,7 +35,8 @@ class TestLookupAsDict(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(dns.rrset.from_rdata( @@ -61,29 +62,64 @@ class TestLookupAsDict(TestCase): 'address': '127.0.0.2', } - def test_retry_success(self): + def test_no_search(self): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { 'target': dns.name.from_unicode(u'www.example.com'), + 'search': False, + 'rdtype': dns.rdatatype.A, + 'lifetime': 10, + 'result': create_mock_answer(dns.rrset.from_rdata( + 'www.example.com', + 300, + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, '127.0.0.1'), + dns.rdata.from_text(dns.rdataclass.IN, dns.rdatatype.A, '127.0.0.2'), + )), + }, + ], + }) + with patch('dns.resolver.get_default_resolver', resolver): + with patch('dns.resolver.Resolver', resolver): + with patch('dns.query.udp', mock_query_udp([])): + result = self.lookup.run(['www.example.com'], search=False) + + print(result) + assert len(result) == 2 + assert result[0] == { + 'address': '127.0.0.1', + } + assert result[1] == { + 'address': '127.0.0.2', + } + + def test_retry_success(self): + resolver = mock_resolver(['1.1.1.1'], { + ('1.1.1.1', ): [ + { + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(dns.rrset.from_rdata( @@ -113,25 +149,29 @@ class TestLookupAsDict(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'raise': dns.exception.Timeout(timeout=10), @@ -151,7 +191,8 @@ class TestLookupAsDict(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN), @@ -170,7 +211,8 @@ class TestLookupAsDict(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN), @@ -190,7 +232,8 @@ class TestLookupAsDict(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.SERVFAIL), @@ -210,19 +253,22 @@ class TestLookupAsDict(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.SERVFAIL), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.SERVFAIL), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.NXDOMAIN), @@ -241,19 +287,22 @@ class TestLookupAsDict(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.SERVFAIL), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.SERVFAIL), }, { - 'target': dns.name.from_unicode(u'www.example.com'), + 'target': dns.name.from_unicode(u'www.example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.A, 'lifetime': 10, 'result': create_mock_answer(rcode=dns.rcode.SERVFAIL), @@ -273,7 +322,8 @@ class TestLookupAsDict(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('1.1.1.1', ): [ { - 'target': dns.name.from_unicode(u'example.com'), + 'target': dns.name.from_unicode(u'example.com', origin=None), + 'search': True, 'rdtype': dns.rdatatype.TXT, 'lifetime': 10, 'result': create_mock_answer(dns.rrset.from_rdata( @@ -310,7 +360,8 @@ class TestLookupAsDict(TestCase): resolver = mock_resolver(['1.1.1.1'], { ('2.2.2.2', '3.3.3.3'): [ { - 'target': dns.name.from_unicode(u'example.org'), + 'target': dns.name.from_unicode(u'example.org', origin=None), + 'search': True, 'rdtype': dns.rdatatype.AAAA, 'lifetime': 10, 'result': create_mock_answer(dns.rrset.from_rdata( @@ -358,7 +409,8 @@ class TestLookupAsDict(TestCase): ], ('1.2.3.4', '1::2', '2.2.2.2', '3.3.3.3'): [ { - 'target': dns.name.from_unicode(u'example.org'), + 'target': dns.name.from_unicode(u'example.org', origin=None), + 'search': True, 'rdtype': dns.rdatatype.AAAA, 'lifetime': 10, 'result': create_mock_answer(dns.rrset.from_rdata( @@ -440,7 +492,8 @@ class TestLookupAsDict(TestCase): ], ('3.3.3.3', ): [ { - 'target': dns.name.from_unicode(u'example.org'), + 'target': dns.name.from_unicode(u'example.org', origin=None), + 'search': True, 'rdtype': dns.rdatatype.AAAA, 'lifetime': 5, 'raise': dns.resolver.NoAnswer(response=fake_query), diff --git a/ansible_collections/community/dns/tests/unit/plugins/module_utils/resolver_helper.py b/ansible_collections/community/dns/tests/unit/plugins/module_utils/resolver_helper.py index 7fa213c9f..71a0af989 100644 --- a/ansible_collections/community/dns/tests/unit/plugins/module_utils/resolver_helper.py +++ b/ansible_collections/community/dns/tests/unit/plugins/module_utils/resolver_helper.py @@ -22,7 +22,7 @@ def mock_resolver(default_nameservers, nameserver_resolve_sequence): resolver = MagicMock() resolver.nameservers = default_nameservers if configure else [] - def mock_resolver_resolve(target, rdtype=None, lifetime=None): + def mock_resolver_resolve(target, rdtype=None, lifetime=None, search=None): resolver_index = tuple(sorted(resolver.nameservers)) assert resolver_index in nameserver_resolve_sequence, 'No resolver sequence for {0}'.format(resolver_index) resolve_sequence = nameserver_resolve_sequence[resolver_index] @@ -33,6 +33,7 @@ def mock_resolver(default_nameservers, nameserver_resolve_sequence): assert target == resolve_data['target'], 'target: {0!r} vs {1!r}'.format(target, resolve_data['target']) assert rdtype == resolve_data.get('rdtype'), 'rdtype: {0!r} vs {1!r}'.format(rdtype, resolve_data.get('rdtype')) assert lifetime == resolve_data['lifetime'], 'lifetime: {0!r} vs {1!r}'.format(lifetime, resolve_data['lifetime']) + assert search == resolve_data.get('search'), 'search: {0!r} vs {1!r}'.format(search, resolve_data.get('search')) if 'raise' in resolve_data: raise resolve_data['raise'] diff --git a/ansible_collections/community/dns/tests/unit/plugins/modules/test_hetzner_dns_record_set_info.py b/ansible_collections/community/dns/tests/unit/plugins/modules/test_hetzner_dns_record_set_info.py index a42add09d..e6894f97c 100644 --- a/ansible_collections/community/dns/tests/unit/plugins/modules/test_hetzner_dns_record_set_info.py +++ b/ansible_collections/community/dns/tests/unit/plugins/modules/test_hetzner_dns_record_set_info.py @@ -627,7 +627,7 @@ class TestHetznerDNSRecordSetInfoJSON(BaseTestModule): assert result['set']['value'] == [u'"b\\195\\164r \\"with quotes\\" (use \\\\ to escape)"'] assert 'sets' not in result - def test_get_single_txt_quoted_deprecation(self, mocker): + def test_get_single_txt_quoted_octal(self, mocker): with patch('time.sleep', mock_sleep): result = self.run_module_success(mocker, hetzner_dns_record_set_info, { 'hetzner_token': 'foo', @@ -635,6 +635,7 @@ class TestHetznerDNSRecordSetInfoJSON(BaseTestModule): 'prefix': 'foo', 'type': 'TXT', 'txt_transformation': 'quoted', + 'txt_character_encoding': 'octal', '_ansible_remote_tmp': '/tmp/tmp', '_ansible_keep_remote_files': True, }, [ @@ -678,19 +679,3 @@ class TestHetznerDNSRecordSetInfoJSON(BaseTestModule): assert result['set']['type'] == 'TXT' assert result['set']['value'] == [u'"b\\303\\244r \\"with quotes\\" (use \\\\ to escape)"'] assert 'sets' not in result - assert 'deprecations' in result - found = False - for deprecation in result['deprecations']: - if 'collection_name' in deprecation and deprecation['collection_name'] != 'community.dns': - continue - found = True - assert deprecation['msg'] == ( - 'The default of the txt_character_encoding option will change from "octal" to "decimal" in community.dns 3.0.0.' - ' This potentially affects you since you use txt_transformation=quoted.' - ' You can explicitly set txt_character_encoding to "octal" to keep the current behavior,' - ' or "decimal" to already now switch to the new behavior.' - ' We recommend switching to the new behavior, and using check/diff mode to figure out potential changes' - ) - assert deprecation['version'] == '3.0.0' - assert deprecation.get('date') is None - assert found diff --git a/ansible_collections/community/dns/tests/unit/plugins/plugin_utils/test_unsafe.py b/ansible_collections/community/dns/tests/unit/plugins/plugin_utils/test_unsafe.py new file mode 100644 index 000000000..cbda5f142 --- /dev/null +++ b/ansible_collections/community/dns/tests/unit/plugins/plugin_utils/test_unsafe.py @@ -0,0 +1,133 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2024, Felix Fontein <felix@fontein.de> +# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) +# SPDX-License-Identifier: GPL-3.0-or-later + +# Make coding more python3-ish +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +import pytest + +from ansible.utils.unsafe_proxy import AnsibleUnsafe + +from ansible_collections.community.dns.plugins.plugin_utils.unsafe import ( + make_unsafe, +) + + +TEST_MAKE_UNSAFE = [ + ( + u'text', + [], + [ + (), + ], + ), + ( + u'{{text}}', + [ + (), + ], + [], + ), + ( + b'text', + [], + [ + (), + ], + ), + ( + b'{{text}}', + [ + (), + ], + [], + ), + ( + { + 'skey': 'value', + 'ukey': '{{value}}', + 1: [ + 'value', + '{{value}}', + { + 1.0: '{{value}}', + 2.0: 'value', + }, + ], + }, + [ + ('ukey', ), + (1, 1), + (1, 2, 1.0), + ], + [ + ('skey', ), + (1, 0), + (1, 2, 2.0), + ], + ), + ( + ['value', '{{value}}'], + [ + (1, ), + ], + [ + (0, ), + ], + ), +] + + +@pytest.mark.parametrize("value, check_unsafe_paths, check_safe_paths", TEST_MAKE_UNSAFE) +def test_make_unsafe(value, check_unsafe_paths, check_safe_paths): + unsafe_value = make_unsafe(value) + assert unsafe_value == value + for check_path in check_unsafe_paths: + obj = unsafe_value + for elt in check_path: + obj = obj[elt] + assert isinstance(obj, AnsibleUnsafe) + for check_path in check_safe_paths: + obj = unsafe_value + for elt in check_path: + obj = obj[elt] + assert not isinstance(obj, AnsibleUnsafe) + + +def test_make_unsafe_dict_key(): + value = { + b'test': 1, + u'test': 2, + } + unsafe_value = make_unsafe(value) + assert unsafe_value == value + for obj in unsafe_value: + assert not isinstance(obj, AnsibleUnsafe) + + value = { + b'{{test}}': 1, + u'{{test}}': 2, + } + unsafe_value = make_unsafe(value) + assert unsafe_value == value + for obj in unsafe_value: + assert isinstance(obj, AnsibleUnsafe) + + +def test_make_unsafe_set(): + value = set([b'test', u'test']) + unsafe_value = make_unsafe(value) + assert unsafe_value == value + for obj in unsafe_value: + assert not isinstance(obj, AnsibleUnsafe) + + value = set([b'{{test}}', u'{{test}}']) + unsafe_value = make_unsafe(value) + assert unsafe_value == value + for obj in unsafe_value: + assert isinstance(obj, AnsibleUnsafe) |