如何使用 Ansible dig 获取 DNS A 记录的域区域

How to get domain zone of the DNS A record using Ansible dig

基本上我有一个简单的服务器名称(非 FQDN),我试图确定它在哪个 DNS 区域中有 A 记录
我们的环境中有多个 DNS 区域。

因为我不能依赖 PTR 记录,我正在尝试使用 DIG 模块来查找以区域名称作为变量的 A 记录。找到 A 记录后,我想使用该区域名称。不幸的是,我无法将以上所有内容放在一起放在可靠的代码中

我试过关注

- name:
      set_fact: 
        found: "{{found+[ lookup('dig', ('{{ dns_name }}.{{item.1}}'), 'qtype=A' , flat=0)] }}"
        domain: "{{ item.0 }}"
        with_indexed_items:
        - zone1.com
        - zone2.com
        - zone3.com
ok: [xxxxxxxxxxxxxxxxxxxx] => {
    "found": [
        "10.10.10.10",
        "NXDOMAIN",
        "NXDOMAIN"]}

这会生成项目列表,但我不知道如何将这些项目与区域列表匹配或如何将索引添加到此列表中。

非常欢迎任何帮助

可以用 json_query 创建一个字典而不是列表和 select 个有效记录。下面的播放给出了有效记录的区域列表

- set_fact:
    found: "{{ found|default({})|
               combine({ item: {
                        'rec_a': lookup('dig',
                                        dns_name ~ '.' ~ item,
                                        'qtype=A',
                                        flat=0)}}) }}"
  loop: "{{ zones }}"
- set_fact:
    dns_domains: "{{ found|
                     dict2items|
                     json_query('[?value.rec_a != `NXDOMAIN`].key') }}"