我们可以通过Facts来获取目标主机的系统信息,当这些信息还不能满足我们的功能需要时,可以通过编写自定义的Facts模块来实现。当然,还有一个更简单的实现方法,就是通过本地Facts来实现。只需在目标设备 /etc/ansible/facts.d 目录自定义JSON、INI或可执行文件的JSON输出,文件扩展名要求使用 ".fact" ,这些文件都可以作为Ansible的本地Facts。
例如,在目标设备192.168.1.21定义三个变量,供以后playbook进行引用。
【 /etc/ansible/facts.d/preferences.fact 】
[general]
max_memory_size=32
max_user_processes=3730
open_files=65535
然后在主控端运行 ansible 192.168.1.21 -m setup -a "filter=ansible_local" filter作用是从setup输出的信息中摘出该 ansible_local 项。
可看到定义的结果,返回结果如下:
。。。
注意返回JSON的层次结构,preferences(facts文件名前缀)-->general(INI的节名)-->key:value(INI的键与值),最后就可以在我们的模板或playbook中通过以下方式进行调用:
{{ ansible_local.preferences.general.open_file }}
参考资料:http://ju.outofmemory.cn/entry/104885