【问题标题】:How to get domain zone of the DNS A record using Ansible dig如何使用 Ansible dig 获取 DNS A 记录的域区域
【发布时间】:2020-01-13 23:06:04
【问题描述】:

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

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

我试过关注 - 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"]}

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

非常欢迎任何帮助

【问题讨论】:

    标签: ansible dig


    【解决方案1】:

    可以创建字典而不是列表,并使用 json_query 选择有效记录。下面的播放给出了具有有效记录的区域列表

    - 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') }}"
    

    【讨论】:

    • 如果我理解您的代码,那么我将收到 dns_domains 列表,这正是我正在寻找的。我实际上构建了解决方案,但它没有你的那么优雅:) - name: set_fact: found: "{{found+[ lookup('dig', ('{{ dns_name }}.{{item}}') , 'qtype=A' , flat=0)] }}" with_items: '{{ zones }} ' - name: result set_fact: dns_domain: "{{ item.0 }}" with_together: - "{{ zones }}" - "{{ found }}" when: item.1 | ipv4 Vy jste fakt machr !!!
    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多