ansible可以在剧本中间获取更新的事实吗?

时间:2016-02-03 19:10:28

标签: ansible ansible-playbook selinux

我在运行完整的剧本时遇到了麻烦,因为之前播放的某些事实取决于早期剧本中的修改,但是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'

2 个答案:

答案 0 :(得分:12)

在您的剧本中添加此内容,以使用设置模块更新事实。

例如我添加了另一个带DHCP的接口,现在我想知道它有什么地址然后执行此操作:

- name: do facts module to get latest information
  setup:

答案 1 :(得分:6)

setup module是Ansible用来收集事实的东西。它在运行你的剧本之前隐含地运行它。您应该能够在您的剧本中手动运行它来更新您的事实。