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格式编写静态自定义事实文件。
也可以使用JSON格式提供
自定义事实是储存在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
包含清单中配置的当前受管主机的主机名称。这可能因为各种原因而与事实报告的主机名称不同。