我在运行一本完整的剧本时遇到了麻烦,因为后期戏剧所依赖的某些事实已在早期戏剧中进行了修改,但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/

10-11 10:31