community.general.dig 查找 – 使用 dnspython 库查询 DNS
注意
此查找插件是 community.general 集合(版本 10.1.0)的一部分。
如果您正在使用 ansible
包,您可能已经安装了此集合。它不包含在 ansible-core
中。要检查是否已安装,请运行 ansible-galaxy collection list
。
要安装它,请使用:ansible-galaxy collection install community.general
。您需要其他要求才能使用此查找插件,有关详细信息,请参阅 要求。
要在剧本中使用它,请指定:community.general.dig
。
概要
dig 查找对 DNS 服务器运行查询,以检索特定名称(FQDN - 完全限定域名)的 DNS 记录。可以以这种方式查找任何 DNS 记录。
有几种不同的语法可以用来指定应该检索什么记录,以及针对哪个名称。还可以显式指定用于查找的 DNS 服务器。
在其最简单的形式中,dig 查找插件可用于检索与 FQDN 关联的 IPv4 地址(DNS A 记录)
除了(默认)A 记录之外,还可以指定应查询的不同记录类型。这可以通过向 dig 查找传递格式为 qtype=TYPE 的附加参数,或者通过将 /TYPE 附加到被查询的 FQDN 来完成。
如果多个值与请求的记录关联,则结果将作为逗号分隔的列表返回。在这种情况下,您可能需要将选项
wantlist=true
传递给查找调用,或者使用query
而不是lookup
,这将导致记录值作为列表返回,您可以在以后遍历该列表。默认情况下,查找将依赖于系统范围内配置的 DNS 服务器来执行查询。也可以使用 @DNS_SERVER_1,DNS_SERVER_2,…,DNS_SERVER_N 表示法显式指定要查询的 DNS 服务器。这需要作为查找的附加参数传递
要求
以下要求需要在执行此查找的本地控制器节点上满足。
dnspython (python 库, http://www.dnspython.org/)
术语
参数 |
注释 |
---|---|
要查询的域。 |
关键字参数
这描述了查找的关键字参数。这些是在以下示例中的 key1=value1
、key2=value2
等值:lookup('community.general.dig', key1=value1, key2=value2, ...)
和 query('community.general.dig', key1=value1, key2=value2, ...)
参数 |
注释 |
---|---|
类。 默认值: |
|
在查找错误时中止执行。 此选项的默认值将来可能会更改为 选项
|
|
如果为 0,则每个记录都作为字典返回,否则为字符串。 默认值: |
|
在查找 DNS 记录时使用端口作为目标端口。 默认值: |
|
要查询的记录类型。
选项
|
|
返回不含空字符串的空结果,并返回空列表而不是 此选项的默认值将来可能会更改为 如果指定要查询的多个域名,此选项将被强制设置为 选项
|
|
如果名称服务器返回 SERVFAIL,则重试。 选项
|
|
使用 TCP 查找 DNS 记录。 选项
|
注意
注意
当关键字和位置参数一起使用时,位置参数必须列在关键字参数之前:
lookup('community.general.dig', term1, term2, key1=value1, key2=value2)
和query('community.general.dig', term1, term2, key1=value1, key2=value2)
ALL 本身不是一个记录,仅仅是所列字段可用于您以字典形式检索的任何记录结果。
虽然“dig”查找插件支持 dnspython 开箱即用的任何内容,但只有一部分可以转换为字典。
如果需要获取 AAAA 记录(IPv6 地址),则必须显式指定记录类型。指定记录类型的语法如下面的示例所示。
在大多数列出的示例中,尾随的点是纯粹可选的,但为了完整/正确性而指定。
示例
- name: Simple A record (IPV4 address) lookup for example.com
ansible.builtin.debug:
msg: "{{ lookup('community.general.dig', 'example.com.')}}"
- name: "The TXT record for example.org."
ansible.builtin.debug:
msg: "{{ lookup('community.general.dig', 'example.org.', qtype='TXT') }}"
- name: "The TXT record for example.org, alternative syntax."
ansible.builtin.debug:
msg: "{{ lookup('community.general.dig', 'example.org./TXT') }}"
- name: use in a loop
ansible.builtin.debug:
msg: "MX record for gmail.com {{ item }}"
with_items: "{{ lookup('community.general.dig', 'gmail.com./MX', wantlist=true) }}"
- name: Lookup multiple names at once
ansible.builtin.debug:
msg: "A record found {{ item }}"
loop: "{{ query('community.general.dig', 'example.org.', 'example.com.', 'gmail.com.') }}"
- name: Lookup multiple names at once (from list variable)
ansible.builtin.debug:
msg: "A record found {{ item }}"
loop: "{{ query('community.general.dig', *hosts) }}"
vars:
hosts:
- example.org.
- example.com.
- gmail.com.
- ansible.builtin.debug:
msg: "Reverse DNS for 192.0.2.5 is {{ lookup('community.general.dig', '192.0.2.5/PTR') }}"
- ansible.builtin.debug:
msg: "Reverse DNS for 192.0.2.5 is {{ lookup('community.general.dig', '5.2.0.192.in-addr.arpa./PTR') }}"
- ansible.builtin.debug:
msg: "Reverse DNS for 192.0.2.5 is {{ lookup('community.general.dig', '5.2.0.192.in-addr.arpa.', qtype='PTR') }}"
- ansible.builtin.debug:
msg: "Querying 198.51.100.23 for IPv4 address for example.com. produces {{ lookup('dig', 'example.com', '@198.51.100.23') }}"
- ansible.builtin.debug:
msg: "XMPP service for gmail.com. is available at {{ item.target }} on port {{ item.port }}"
with_items: "{{ lookup('community.general.dig', '_xmpp-server._tcp.gmail.com./SRV', flat=0, wantlist=true) }}"
- name: Retry nameservers that return SERVFAIL
ansible.builtin.debug:
msg: "{{ lookup('community.general.dig', 'example.org./A', retry_servfail=true) }}"
返回值
键 |
描述 |
---|---|
带有键和值的组合字符串或字典的列表。如果是字典,则字段显示根据查询类型返回的键 返回: 成功 |
|
地址 返回: 成功 |
|
地址 返回: 成功 |
|
所有者, ttl, 类型 返回: 成功 |
|
标志 标签 值 返回: 成功 |
|
目标 返回: 成功 |
|
目标 返回: 成功 |
|
标志, 算法, 协议, 密钥 返回: 成功 |
|
算法, 摘要类型, 密钥标签, 摘要 返回: 成功 |
|
cpu, os 返回: 成功 |
|
纬度, 经度, 海拔, 大小, 水平精度, 垂直精度 返回: 成功 |
|
优先级, 交换 返回: 成功 |
|
顺序, 优先级, 标志, 服务, 正则表达式, 替换 返回: 成功 |
|
目标 返回: 成功 |
|
算法, 标志, 迭代次数, 盐值 返回: 成功 |
|
目标 返回: 成功 |
|
mbox, txt 返回: 成功 |
|
mname, rname, 序列号, 刷新, 重试, 过期, 最小值 返回: 成功 |
|
字符串 返回: 成功 |
|
优先级, 权重, 端口, 目标 返回: 成功 |
|
算法, 指纹类型, 指纹 返回: 成功 |
|
用法, 选择器, mtype, 证书 返回: 成功 |
|
字符串 返回: 成功 |