如何在Ansible中实现优先用DNS名命名文件,无记录时fallback到IP
解决方案
可以通过Ansible的lookup结合default过滤器实现需求,当反向DNS解析结果为空时自动 fallback 到IP地址。
修改后的完整Playbook如下:
--- - hosts: Configuration gather_facts: yes become: true tasks: - name: Gather Facts setup: - name: Capture Facts delegate_to: localhost run_once: true copy: content: "{{ hostvars[inventory_hostname] | to_nice_json }}" dest: "/tmp/Capture-{{ lookup('dig', ansible_default_ipv4.address) | default(ansible_default_ipv4.address, true) }}.json"
关键逻辑说明
lookup('dig', ansible_default_ipv4.address):对主机的默认IPv4地址执行反向DNS查询,获取对应的DNS名称| default(ansible_default_ipv4.address, true):default过滤器的第二个参数设为true,意味着即使解析结果是空字符串,也会使用后面的IP地址作为 fallback 值。如果不设这个参数,只有当解析结果是None时才会触发 fallback,无法覆盖空字符串的场景。
这样就能实现优先用DNS名称命名文件,当DNS记录未更新导致解析失败时,自动切换为IP地址命名。
内容的提问来源于stack exchange,提问作者Jibun no Kage
相关产品推荐
相关产品推荐

