ansible事实

Ansible事实是Ansible在受管主机上自动检测到的变量。事实中含有与主机相关的信息,可以像play中的常规变量、条件、循环或依赖于从受管主机收集的值的任何其他语句那样使用。
 

为受管主机收集的一些事实可能包括·

主机名称,内核版本,网络接口,IP地址,操作系统版本,各种环境变量,CPU数量,提供的或可用的内存,可用磁盘空间
 

通常,每一个play在执行任务的时候会自动运行setup模块收集事实

查看为受管主机收集的事实的一种方式是,运行一个收集事实并且使用debug模块显示的变量值

Ansible事实的实例

事实

变量

短主机名

ansible_facts['hostname']

完全限定的域名

ansible_facts['fqdn']

主要IPV4地址基于路由

ansible_facts['default_ipv4']['address']

所有网络接口的名称列表

ansible_facts['interfaces']

/dev/vda1磁盘分区的大小

ansible_facts['devices']['vda']['partitions']['vda1']['size']

当前运行的内核的版本

ansible_facts['kernel']

也可以将中括号换成点

ansible_facts['devices']['vda']['partitions']['vda1']['size']可以等同于

ansible_facts.devices.vda.partitions.vda1.size

创建自定义事实

默认情况下,setup模块从个受管主机的/etc/ansible/facts.d目录下的文件和脚本中加载自定义事实,各个文件或者脚本必须以.fact结尾才能使用。动态自定义事实脚本必须输出JSON格式的事实,且必须是可执行程序

可以使用INI格式编写静态自定义事实文件。

ansible replace 多行 ansible delegate_p2p

也可以使用JSON格式提供

ansible replace 多行 ansible delegate_自定义_02

 自定义事实是储存在ansible_facts.ansible_local变量中

例如保存在/etc/ansible/facts.d/demo.fact

可以使用ansible_facts.ansible_local.demo.users.user1的值为joe

 魔法变量

有一些变量并非事实或者setup配置,但是也是由ansible自动设置。这些魔法变量可以用于获取与特定受管主机相关的信息

常用的:

hostvars
包含受管主机的变量,可以用于获取另一台受管主机的变量的值。如果还没有为受管主机收集事实,则它不会包含该主机的事实。

group_names
列出当前受管主机所属的所有组。

groups
列出清单中的所有组和主机。

inventory_hostname
包含清单中配置的当前受管主机的主机名称。这可能因为各种原因而与事实报告的主机名称不同。