You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Ansible创建AD反向DNS主区域的幂等性?

问题

我通过Ansible执行以下任务为Active Directory域创建主反向DNS区域:

- name: Create reverse DNS zone
  ansible.windows.win_shell: Add-DnsServerPrimaryZone -NetworkID {{ reverse_dns_zone }} -ReplicationScope Forest
  retries: 30
  delay: 60
  tags: debug
  until: result is succeeded

希望实现幂等性,但第二次执行时总会报错:

Add-DnsServerPrimaryZone : Fehler beim Erstellen der Zone "0.3.10.in-addr.arpa" auf dem Server "DC01".
In Zeile:1 Zeichen:1
+ Add-DnsServerPrimaryZone -NetworkID 10.3.0.0/20 -ReplicationScope For ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceExists: (0.3.10.in-addr.arpa:root/Microsoft/...rverPrimaryZone) [Add-DnsServerPrimaryZone], CimException
    + FullyQualifiedErrorId : WIN32 9609,Add-DnsServerPrimaryZone

看到CategoryInfo里的ResourceExists,我认为这应该算作成功状态,但使用以下条件时任务仍会失败:

until: result.stderr.find('ResourceExists') != -1

请问这种场景下的正确处理方案是什么?

解决方案

方案1:改用专用Ansible模块(推荐)

直接使用Ansible官方维护的community.windows.win_dns_zone模块,该模块原生支持幂等性,无需手动处理重复创建的报错:

- name: Create reverse DNS zone
  community.windows.win_dns_zone:
    name: "{{ reverse_dns_zone | reverse_dns_zone_name }}"
    type: primary
    replication_scope: forest
    state: present
  retries: 30
  delay: 60
  tags: debug

注:reverse_dns_zone_name是Ansible内置过滤器,可自动将CIDR格式(如10.3.0.0/20)转换为对应的反向区域名称(如0.3.10.in-addr.arpa)。

方案2:修改现有win_shell任务的错误处理逻辑

如果必须保留win_shell执行方式,可通过failed_when和until组合条件,忽略"资源已存在"的错误,同时保留对真实故障的检测:

- name: Create reverse DNS zone
  ansible.windows.win_shell: Add-DnsServerPrimaryZone -NetworkID {{ reverse_dns_zone }} -ReplicationScope Forest
  register: result
  retries: 30
  delay: 60
  tags: debug
  until: result is succeeded or 'ResourceExists' in result.stderr
  failed_when: 
    - result is failed
    - 'ResourceExists' not in result.stderr
  • until条件:允许任务在执行成功或出现"ResourceExists"提示时终止重试
  • failed_when条件:仅当任务失败且错误原因不是"资源已存在"时,才标记任务失败

内容的提问来源于stack exchange,提问作者MaKaNu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:32:05