如何为Ansible Ad-hoc返回内容添加指定facts?Playbook是否支持?
Ansible自动获取额外主机facts的可行性说明
没办法不用额外操作就自动获取ansible_fqdn这类额外facts。
你看到的discovered_interpreter_python是Ansible运行的基础前置项——为了确保模块能正常调用Python解释器,所有模块执行时都会默认触发这个最小化的fact收集,属于Ansible的底层必要操作。但像ansible_fqdn、ansible_default_ipv4这类系统级主机信息,属于非基础的扩展facts,Ansible不会默认自动收集,毕竟这类收集会增加执行开销,尤其在大规模主机集群场景下会影响效率。
Ad-hoc命令场景
如果要在ad-hoc里获取这些扩展facts,直接用setup模块即可,这是Ansible专门用于收集主机facts的模块:
# 收集所有主机facts ansible all -m setup # 仅收集ansible_fqdn这一项,减少输出内容 ansible all -m setup -a 'filter=ansible_fqdn'
Playbook场景
在Playbook里获取扩展facts的方式更灵活:
- 每个Play默认会自动收集全量facts(除非你手动关闭),只要Play里没设置
gather_facts: no,执行时就会自动拿到ansible_fqdn这类变量,后续任务可以直接引用。 - 如果已经关闭了自动收集,或者需要在特定环节手动收集,添加
setup模块任务即可:
- name: 收集指定主机facts ansible.builtin.setup: filter: ansible_fqdn # 可选参数,仅收集指定的fact项
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

