我在运行一本完整的剧本时遇到了麻烦,因为后期戏剧所依赖的某些事实已在早期戏剧中进行了修改,但ansible不会在中期运行时更新事实。
当整个剧本针对新的VPS启动时,运行ansible somehost -m setup
:
"ansible_selinux": {
"status": "disabled"
},
我的剧本包含一个安装SELinux并重新启动服务器(在ansible wait_for的情况下)的戏剧,并且稍后的任务使用条件
when: ansible_selinux.status != 'disabled'
。但是,即使现在已安装SELinux并强制执行(需要重新启动),系统的事实仍然显示SELinux被禁用,因此条件失败,该任务被跳过。当然,再次运行该剧本是可行的,因为事实已更新且现在返回:
"ansible_selinux": {
"config_mode": "enforcing",
"mode": "enforcing",
"policyvers": 28,
"status": "enabled",
"type": "targeted"
}
有什么方法可以使事实在剧本中刷新?也许黑客是在重启后自己在ansible_selinux.status上
set_fact
的?更新:
太简单了,多亏了BruceP,我在SELinux游戏结束时添加了此任务来获取更新的事实。
- name: SELinux - Force ansible to regather facts
setup: filter='ansible_selinux'
最佳答案
将其添加到您的剧本中以使用设置模块更新事实。
例如,我现在用DHCP添加了另一个接口(interface),我想知道它的地址,然后执行以下操作:
- name: do facts module to get latest information
setup:
关于ansible - Ansible能否在剧本的中间获取更新的事实?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35185635/