寻求Ansible全主机100%可收集的通用Facts用于自动触发收集
问题描述
完整运行Ansible Playbook时,系统会自动收集Facts后再执行角色;但我经常通过标签单独运行特定角色,这种场景下Facts不会被自动收集,进而导致任务报错。目前需要手动执行以下命令来规避:
ansible-playbook playbook.yml -t setup,my-role
但我频繁遗忘这个操作,浪费了不少时间。因此我想在每个角色的开头添加一个故障安全任务,自动触发Facts收集:
- setup: when: ansible_os_family is undefined
不过我知道部分Facts并非所有主机都能收集到,用ansible_os_family存在通用性问题,想问问有没有100%能在所有主机上收集到的Facts(不需要完整列表,满足当前场景即可)。
解决方案
可以使用ansible_facts这个顶级变量作为判断条件——只要执行过setup模块,这个变量就一定会存在,无论主机是Unix/Linux、Windows还是网络设备等。修改后的任务如下:
- setup: when: ansible_facts is undefined
另外,ansible_python_version也是一个可靠的选择:Ansible依赖Python环境,只要能执行Ansible任务的主机,这个Facts就一定会被收集到。对应的任务写法:
- setup: when: ansible_python_version is undefined
这两个变量都能满足你的故障安全需求,确保在Facts未收集时自动触发setup模块。
内容的提问来源于stack exchange,提问作者lonix
相关产品推荐
相关产品推荐

