feat(win_dns_zone): add support for custom DNS application directory partitions#908
Conversation
Docs Build 📝Thank you for contribution!✨ The docsite for this PR is available for download as an artifact from this run: You can compare to the docs for the File changes:
Click to see the diff comparison.NOTE: only file modifications are shown here. New and deleted files are excluded. diff --git a/home/runner/work/ansible.windows/ansible.windows/docsbuild/base/collections/ansible/windows/win_dns_zone_module.html b/home/runner/work/ansible.windows/ansible.windows/docsbuild/head/collections/ansible/windows/win_dns_zone_module.html
index 46e643c..6e0ce55 100644
--- a/home/runner/work/ansible.windows/ansible.windows/docsbuild/base/collections/ansible/windows/win_dns_zone_module.html
+++ b/home/runner/work/ansible.windows/ansible.windows/docsbuild/head/collections/ansible/windows/win_dns_zone_module.html
@@ -175,6 +175,16 @@ see <a class="reference internal" href="#ansible-collections-ansible-windows-win
</thead>
<tbody>
<tr class="row-even"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-directory_partition"></div><p class="ansible-option-title" id="ansible-collections-ansible-windows-win-dns-zone-module-parameter-directory-partition"><strong>directory_partition</strong></p>
+<a class="ansibleOptionLink" href="#parameter-directory_partition" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>Specifies the name of an existing custom Active Directory application directory partition where the zone should be stored.</p>
+<p>When specified, the zone will use a custom replication scope instead of the standard domain or forest partitions.</p>
+<p>This is mutually exclusive with <code class="ansible-option docutils literal notranslate"><strong><a class="reference internal" href="#ansible-collections-ansible-windows-win-dns-zone-module-parameter-replication"><span class="std std-ref"><span class="pre">replication</span></span></a></strong></code> values of <code class="docutils literal notranslate"><span class="pre">forest</span></code>, <code class="docutils literal notranslate"><span class="pre">domain</span></code>, and <code class="docutils literal notranslate"><span class="pre">legacy</span></code>.</p>
+<p>Requires the target directory partition to already exist.</p>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-dns_servers"></div><p class="ansible-option-title" id="ansible-collections-ansible-windows-win-dns-zone-module-parameter-dns-servers"><strong>dns_servers</strong></p>
<a class="ansibleOptionLink" href="#parameter-dns_servers" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
</div></td>
@@ -184,7 +194,7 @@ see <a class="reference internal" href="#ansible-collections-ansible-windows-win
<p>At least one server is required.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-dynamic_update"></div><p class="ansible-option-title" id="ansible-collections-ansible-windows-win-dns-zone-module-parameter-dynamic-update"><strong>dynamic_update</strong></p>
<a class="ansibleOptionLink" href="#parameter-dynamic_update" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
@@ -199,7 +209,7 @@ see <a class="reference internal" href="#ansible-collections-ansible-windows-win
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-forwarder_timeout"></div><p class="ansible-option-title" id="ansible-collections-ansible-windows-win-dns-zone-module-parameter-forwarder-timeout"><strong>forwarder_timeout</strong></p>
<a class="ansibleOptionLink" href="#parameter-forwarder_timeout" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">integer</span></p>
</div></td>
@@ -208,20 +218,21 @@ see <a class="reference internal" href="#ansible-collections-ansible-windows-win
<p>If the provided value is not valid, it will be omitted and a warning will be issued.</p>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-name"></div><p class="ansible-option-title" id="ansible-collections-ansible-windows-win-dns-zone-module-parameter-name"><strong>name</strong></p>
<a class="ansibleOptionLink" href="#parameter-name" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span> / <span class="ansible-option-required">required</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Fully qualified name of the DNS zone.</p>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-replication"></div><p class="ansible-option-title" id="ansible-collections-ansible-windows-win-dns-zone-module-parameter-replication"><strong>replication</strong></p>
<a class="ansibleOptionLink" href="#parameter-replication" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
<td><div class="ansible-option-cell"><p>Specifies the replication scope for the DNS zone.</p>
<p>l(replication=forest) will replicate the DNS zone to all domain controllers in the Active Directory forest.</p>
<p>l(replication=domain) will replicate the DNS zone to all domain controllers in the Active Directory domain.</p>
+<p>l(replication=legacy) will replicate the DNS zone to all domain controllers in the Active Directory domain and to legacy clients.</p>
<p>l(replication=none) disables Active Directory integration and creates a local file with the name of the zone.</p>
<p>This is the equivalent of selecting l(store the zone in Active Directory) in the GUI.</p>
<p class="ansible-option-line"><strong class="ansible-option-choices">Choices:</strong></p>
@@ -233,7 +244,7 @@ see <a class="reference internal" href="#ansible-collections-ansible-windows-win
</ul>
</div></td>
</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-state"></div><p class="ansible-option-title" id="ansible-collections-ansible-windows-win-dns-zone-module-parameter-state"><strong>state</strong></p>
<a class="ansibleOptionLink" href="#parameter-state" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
@@ -247,7 +258,7 @@ see <a class="reference internal" href="#ansible-collections-ansible-windows-win
</ul>
</div></td>
</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-type"></div><p class="ansible-option-title" id="ansible-collections-ansible-windows-win-dns-zone-module-parameter-type"><strong>type</strong></p>
<a class="ansibleOptionLink" href="#parameter-type" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
</div></td>
@@ -335,6 +346,20 @@ see <a class="reference internal" href="#ansible-collections-ansible-windows-win
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">marshallb.euc.vmware.com</span>
<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">absent</span>
+<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Ensure primary zone is stored in a custom directory partition</span>
+<span class="w"> </span><span class="nt">ansible.windows.win_dns_zone</span><span class="p">:</span>
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">custom.euc.vmware.com</span>
+<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">primary</span>
+<span class="w"> </span><span class="nt">directory_partition</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">CustomDNSPartition</span>
+
+<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Ensure forwarder zone is stored in a custom directory partition</span>
+<span class="w"> </span><span class="nt">ansible.windows.win_dns_zone</span><span class="p">:</span>
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">forwarder.euc.vmware.com</span>
+<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">forwarder</span>
+<span class="w"> </span><span class="nt">directory_partition</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">CustomDNSPartition</span>
+<span class="w"> </span><span class="nt">dns_servers</span><span class="p">:</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">10.245.51.100</span>
+
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Ensure DNS zones are absent</span>
<span class="w"> </span><span class="nt">ansible.windows.win_dns_zone</span><span class="p">:</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s">"</span><span class="cp">{{</span> <span class="nv">item</span> <span class="cp">}}</span><span class="s">"</span>
@@ -364,7 +389,7 @@ see <a class="reference internal" href="#ansible-collections-ansible-windows-win
</div></td>
<td><div class="ansible-option-cell"><p>New/Updated DNS zone parameters</p>
<p class="ansible-option-line"><strong class="ansible-option-returned-bold">Returned:</strong> When l(state=present)</p>
-<p class="ansible-option-line ansible-option-sample"><strong class="ansible-option-sample-bold">Sample:</strong> <code class="ansible-option-sample docutils literal notranslate"><span class="pre">{"dns_servers":</span> <span class="pre">null,</span> <span class="pre">"dynamic_update":</span> <span class="pre">null,</span> <span class="pre">"forwarder_timeout":</span> <span class="pre">null,</span> <span class="pre">"name":</span> <span class="pre">null,</span> <span class="pre">"paused":</span> <span class="pre">null,</span> <span class="pre">"replication":</span> <span class="pre">null,</span> <span class="pre">"reverse_lookup":</span> <span class="pre">null,</span> <span class="pre">"shutdown":</span> <span class="pre">null,</span> <span class="pre">"type":</span> <span class="pre">null,</span> <span class="pre">"zone_file":</span> <span class="pre">null}</span></code></p>
+<p class="ansible-option-line ansible-option-sample"><strong class="ansible-option-sample-bold">Sample:</strong> <code class="ansible-option-sample docutils literal notranslate"><span class="pre">{"directory_partition":</span> <span class="pre">null,</span> <span class="pre">"dns_servers":</span> <span class="pre">null,</span> <span class="pre">"dynamic_update":</span> <span class="pre">null,</span> <span class="pre">"forwarder_timeout":</span> <span class="pre">null,</span> <span class="pre">"name":</span> <span class="pre">null,</span> <span class="pre">"paused":</span> <span class="pre">null,</span> <span class="pre">"replication":</span> <span class="pre">null,</span> <span class="pre">"reverse_lookup":</span> <span class="pre">null,</span> <span class="pre">"shutdown":</span> <span class="pre">null,</span> <span class="pre">"type":</span> <span class="pre">null,</span> <span class="pre">"zone_file":</span> <span class="pre">null}</span></code></p>
</div></td>
</tr>
</tbody>
|
…partitions (ansible-collections#908) Add directory_partition parameter to win_dns_zone module, allowing zones to be stored in custom Active Directory application directory partitions instead of the standard forest/domain/legacy scopes. The parameter is mutually exclusive with replication values of forest, domain, and legacy. Includes integration tests for primary, forwarder, and stub zone types with custom directory partitions, idempotence checks, mutual exclusivity validation, and check mode tests.
347e487 to
bbbbb55
Compare
Reworked implementation — fixes CI failures and design issuesThis push replaces the original approach with a cleaner design. Key changes: Design change: separate
|
…partitions (ansible-collections#908) Add directory_partition parameter to win_dns_zone module, allowing zones to be stored in custom Active Directory application directory partitions instead of the standard forest/domain/legacy scopes. The parameter is mutually exclusive with replication values of forest, domain, and legacy. Includes integration tests for primary, forwarder, and stub zone types with custom directory partitions, idempotence checks, mutual exclusivity validation, and check mode tests.
bbbbb55 to
4df15f7
Compare
Summary
Extends
win_dns_zoneto support custom DNS application directory partitions for AD-integrated zones, as requested in #901.Currently, the
replicationparameter only acceptsforest,domain,legacy, andnone. This PR extends it to also accept a distinguished name (DN) representing a DNS application directory partition (e.g.,DC=AppDnsPartition-East,DC=contoso,DC=com), enabling conditional forwarders and other zone types to be scoped to custom partitions for fine-grained replication control.Changes
plugins/modules/win_dns_zone.ps1:choicesconstraint fromreplicationargument spec (now accepts any string)forest/domain/legacy/noneare treated as custom partition DNs-DirectoryPartitionNameonAdd-DnsServer*ZoneandSet-DnsServer*ZonecmdletsDirectoryPartitionNameto zone comparison for idempotencydirectory_partitiontoGet-DnsZoneObjectoutputplugins/modules/win_dns_zone.py:replicationparameter documentation — removedchoices, added DN description and examplesRETURNblock to includedirectory_partitionfieldBackward Compatibility
Fully backward compatible:
forest,domain,legacy,nonevalues work exactly as beforeExample Usage
Test Plan
forest,domain,legacy,none) still work unchangeddomainto a custom partition DNsecondarytype rejects custom partition with a clear errorcheck_modecorrectly simulates the changeCloses #901