文章目录
管理事实
描述Ansible事实
Ansible事实是Ansible在受管主机上自动检测到的变量。事实中包含有与主机相关的信息,可以像play中的常规变量、条件、循环或依赖于从受管主机收集的值的任何其他语句那样使用。
事实包括:
- 主机名称
- 内核版本
- 网络接口
- IP地址
- 操作系统版本
- 各种环境变量
- CPU数量
- 提供的或可用的内存
- 可用磁盘空间
借助事实,可以方便地检索受管主机的状态,并根据该状态确定要执行的操作。例如:
- 可以根据含有受管主机当前内核版本的事实运行条件任务,以此来重启服务器
- 可以根据通过事实报告的可用内存来自定义MySQL配置文件
- 可以根据事实的值设置配置文件中使用的IPv4地址
通常,每个play在执行第一个任务之前会先自动运行setup模块来收集事实。
查看为受管主机收集的事实的一种方式是,运行一个收集事实并使用debug模块显示ansible_facts变量值的简短playbook。
[root@localhost ansible]# mkdir facts
[root@localhost ansible]# vim facts/fact.yml
- name: fact
hosts: all
tasks:
- name: Print all facts
debug:
var: ansible_facts
运行该playbook时,事实将显示在作业输出中:
[root@localhost ansible]# ansible-playbook facts/fact.yml
Playbook以JSON格式显示ansible_facts变量的内容。
下表显示了可能从受管节点收集的并可在playbook中使用的一些事实:
Ansible事实的示例
事实 | 变量 |
---|---|
短主机名 | ansible_facts[‘hostname’] |
完全限定域名 | ansible_facts[‘fqdn’] |
ipv4地址 | ansible_facts[‘default_ipv4’][‘address’] |
所有网络接口的名称列表 | ansible_facts[‘interfaces’] |
dns服务器列表 | ansible_facts[‘dns’][‘nameservers’] |
所有当前运行的版本内核 | ansible_facts[‘kernel’] |
如果变量的值为散列/字典类型,则可使用两种语法来获取其值。比如:
- ansible_facts[‘default_ipv4’][‘address’]也可以写成ansible_facts.default_ipv4.address
- ansible_facts[‘dns’][‘nameservers’]也可以写成ansible_facts.dns.nameservers
在playbook中使用事实时,Ansible将事实的变量名动态替换为对应的值:
- hosts: all
tasks:
- name: Prints various Ansible facts
debug:
msg: >
The default IPv4 address of {
{ ansible_facts.fqdn }}
is {
{ ansible_facts.default_ipv4.address }}
Ansible事实作为变量注入
在Ansible2.5之前,事实是作为前缀为字符串ansible_的单个变量注入,而不是作为ansible_facts变量的一部分注入。例如,ansible_facts[‘distribution’]事实会被称为ansible_distribution。
许多较旧的playbook仍然使用作为变量注入的事实,而不是在ansible_facts变量下创建命名空间的新语法。我们可以使用临时命令来运行setup模块,以此形式显示所有事实的值。以下示例中使用一个临时命令在受管主机172.168.101.200上运行setup模块:
[root@localhost ansible]# ansible 192.168.101.200 -m setup
192.168.101.200 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.101.200",
"192.168.122.1"
],
"ansible_all_ipv6_addresses": [
"fe80::c4bc:49bf:b759:3272"
],
"ansible_apparmor": {
"status": "disabled"
},
"ansible_architecture": "x86_64",
"ansible_bios_date": "07/22/2020",
"ansible_bios_version": "6.00",
"ansible_cmdline": {
"BOOT_IMAGE": "(hd0,msdos1)/vmlinuz-4.18.0-257.el8.x86_64",
"crashkernel": "auto",