使用ansible set_fact模块来定义持久性事实?

时间:2015-03-13 00:23:59

标签: ansible

我想定义一个剧本,用于确定可以在其他剧本中使用的有关我的主机的事实。 set_fact模块声称能够执行此操作... http://docs.ansible.com/set_fact_module.html - 但它无法正常工作......我在游戏簿运行中调用set_fact之后可以使用我定义的事实 - 然后我希望能够使用ansible all -m setup并查看为每个主机收集的事实中定义的事实...

我尝试查看set_fact模块的代码 - 但我找到的只是文档字符串... https://github.com/ansible/ansible-modules-core/blob/19b328c4df2157b6c0191e9144236643ce2be890/utilities/logic/set_fact.py

3 个答案:

答案 0 :(得分:2)

首先,set_fact模块仅设置运行期间可用的事实。对于持久性事实,您需要:

  

- 静态 -

     
      
  • 在以下某个中定义它们:      
        
    • 乏/
    •   
    • group_vars /
    •   
    • host_vars /
    •   
  •   
     

- 动态 -

     

后者是我通常选择做的事情,因为它设置起来非常简单,并且所有主机上都可以获得事实,即使您正在执行以下操作:

  
      
  • 在连接到nagios主机时获取所有主机的所有事实,以生成其配置文件。
  •   

答案 1 :(得分:1)

您使用的是什么版本的Ansible?从版本1.8开始,内置fact caching capability,但默认情况下已禁用。您需要在ansible.cfg文件中启用它,并且还需要运行redis服务器,因为这实际上是缓存事实。

答案 2 :(得分:0)

如果远程管理的系统有/etc/ansible/facts.d目录,则此目录中以.fact结尾的任何文件都可以是JSON,INI或返回JSON的可执行文件,这些文件可以在Ansible中提供本地事实,自1.3。可以使用fact_path play指令指定备用目录。

http://docs.ansible.com/ansible/playbooks_variables.html#local-facts-facts-d