我在运行完整的剧本时遇到了麻烦,因为之前播放的某些事实取决于早期剧本中的修改,但是ansible并未在中期更新事实。
当整个剧本开始对抗新的VPS时运行ansible somehost -m setup
:
"ansible_selinux": {
"status": "disabled"
},
我的剧本包含一个安装SELinux并重新启动服务器的游戏(同时是ansible wait_for' s),后面的任务使用条件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'
答案 0 :(得分:12)
在您的剧本中添加此内容,以使用设置模块更新事实。
例如我添加了另一个带DHCP的接口,现在我想知道它有什么地址然后执行此操作:
- name: do facts module to get latest information
setup:
答案 1 :(得分:6)
setup module是Ansible用来收集事实的东西。它在运行你的剧本之前隐含地运行它。您应该能够在您的剧本中手动运行它来更新您的事实。