【网络运维】Playbook进阶: FACTS变量
管理 FACTS
FACTS 介绍
FACTS 是 Ansible 在受管主机上自动检测到的变量,默认保存在内容中,只存在于本次playbook执行期间。
FACTS含有主机相关的信息,可以像play中的常规变量一样使用。
受管主机的 facts 包括:
• 主机名称 • 内核版本 • 网络接口 • IP地址 • 操作系统版本 • 各种环境变量
• CPU数量 • 提供的或可用的内存 • 可用磁盘空间
借助 facts,可以方便地检索受管主机的状态,并根据该状态确定要执行的操作。
例如:
- 可以根据当前内核版本的FACTS运行条件任务,以此来重新启动服务器。
- 可以根据通过FACTS报告的可用内存来自定义 MySQL 配置文件。
- 可以根据FACTS的值设置配置文件中使用的 IPv4 地址。
通常,每个play在执行第一个任务之前会先自动收集FACTS。
查看 FACTS 内容
示例1:查看所有变量
---
- name: Dump factshosts: node1tasks:- name: Print all factsdebug:var: ansible_facts
示例2:查看单个变量
---
- hosts: node1tasks:- name: Print Ansible factsdebug: msg: >The default IPv4 address of {{ ansible_fqdn }}is {{ ansible_default_ipv4.address }}
部分 FACTS
FACT | VARIABLE |
---|---|
短主机名 | ansible_facts[‘hostname’] |
完全限定的域名 | ansible_facts[‘fqdn’] |
主要IPv4地址(基于路由) | ansible_facts[‘default_ipv4’][‘address’] |
所有网络接口的名称列表 | ansible_facts[‘interfaces’] |
/dev/vdal磁盘分区的大小 | ansible_facts[‘devices’][‘vda’][‘partitions’]['vda1][‘size’] |
DNS服务器列表 | ansible_facts[‘dns’][‘nameservers’] |
当前运行的内核的版本 | ansible_facts[‘kernel’] |
setup 和 gather_facts 模块
setup 和 gather_facts 模块都可以用来收集facts:
-
gather_facts 模块,只能用来收集facts。
-
setup 模块,除了用来收集facts,还提供额外选项:
-
filter 选项,用于查看特定facts值。
-
gather_subset 选项,用于控制收集facts范围。
-
[furongwang@controller web]$ ansible -m setup node1 -a 'filter=ansible_default_ipv4'
node1 | SUCCESS => {"ansible_facts": {"ansible_default_ipv4": {"address": "172.25.250.10","alias": "enp1s0","broadcast": "172.25.250.255","gateway": "172.25.250.254","interface": "enp1s0","macaddress": "52:54:00:00:fa:0a","mtu": 1500,"netmask": "255.255.255.0","network": "172.25.250.0","type": "ether"},"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false
}
关闭 FACTS 收集
关闭 FACTS 收集部分原因:
- 不使用任何FACTS
- 希望加快play速度或减小play在受管主机上造成的负载
- 受管主机因为某种原因而无法运行setup模块
- 需要安装一些必备软件后再收集FACTS
Ansible配置文件设置
[defaults]
gathering = explicit
playbook中设置
---
- name: Fact dumphosts: node1gather_facts: no
即使关闭以后,也可以随时使用setup模块收集facts。