Ansible setup
模块
一、简介
- 功能:
setup
模块用于收集远程主机的“Facts”,即系统信息。这些信息包括操作系统、网络配置、硬件规格、环境变量等,Ansible 在执行任务时可以利用这些信息进行条件判断和决策。 - 使用场景:常用于获取目标主机的详细信息,以便在 Playbook 中根据主机的特性执行不同的任务。例如,可以根据主机的操作系统类型选择安装不同的软件包。
二、基本用法
2.1 语法
ansible <pattern> -m setup [options]
<pattern>
:指定要操作的主机或主机组,例如all
、webservers
。-m setup
:指定使用setup
模块。
2.2 示例
- 收集所有主机的系统信息:
ansible all -m setup
- 解释:该命令会在所有主机上执行
setup
模块,返回主机的详细系统信息,包括操作系统版本、内核、网络接口、IP 地址、CPU 和内存等。
2.3 过滤特定信息
- 只获取网络接口信息:
ansible all -m setup -a 'filter=ansible_interfaces'
-
解释:该命令仅返回所有主机的网络接口信息,如
eth0
、lo
等接口的名称。 -
获取主机名和 IP 地址信息:
ansible all -m setup -a 'filter=ansible_hostname,ansible_default_ipv4.address'
- 解释:该命令返回每个主机的主机名和默认 IPv4 地址。
2.4 获取特定子集的 Facts
- 获取特定类型的 Facts:
ansible all -m setup -a 'gather_subset=!all,network'
-
解释:该命令仅收集网络相关的 Facts(如 IP 地址、网络接口配置等),而不收集所有其他信息。
-
排除特定 Facts:
ansible all -m setup -a 'gather_subset=!hardware'
- 解释:该命令收集除硬件相关信息以外的所有 Facts。
三、常用选项
3.1 filter
- 功能:用于过滤并仅返回特定的 Facts。可以使用单个或多个逗号分隔的 Fact 名称或正则表达式。
- 用法:
ansible all -m setup -a 'filter=ansible_os_family'
- 解释:仅返回所有主机的操作系统家族信息(如
RedHat
、Debian
等)。
- 解释:仅返回所有主机的操作系统家族信息(如
3.2 gather_subset
-
功能:指定要收集的 Facts 子集。可以通过指定一个或多个子集来收集特定类别的系统信息。
-
常用值:
all
:收集所有可用的 Facts(默认)。min
:仅收集最小化的 Facts(如基本的操作系统信息)。hardware
:仅收集硬件相关的 Facts。network
:仅收集网络相关的 Facts。virtual
:仅收集虚拟化相关的 Facts。
-
用法:
ansible all -m setup -a 'gather_subset=network'
- 解释:仅收集网络相关的 Facts,如 IP 地址和网络接口信息。
3.3 gather_timeout
- 功能:指定收集 Facts 的超时时间,默认是 10 秒。
- 用法:
ansible all -m setup -a 'gather_timeout=15'
- 解释:将收集 Facts 的超时时间设置为 15 秒,适用于较慢的网络连接或性能较差的主机。
3.4 gather_network_resources
- 功能:指定是否收集有关网络资源(如 IP 地址、路由等)的 Facts。
- 用法:
ansible all -m setup -a 'gather_network_resources=yes'
- 解释:在收集 Facts 时包含网络资源的信息。
四、应用场景
4.1 条件判断
- 根据操作系统类型执行不同的任务:
在 Playbook 中可以使用收集到的 Facts 来做条件判断,例如:
- hosts: all
tasks:
- name: Install package on RedHat
yum:
name: httpd
state: present
when: ansible_os_family == "RedHat"
- name: Install package on Debian
apt:
name: apache2
state: present
when: ansible_os_family == "Debian"
- 解释:根据主机的操作系统类型(RedHat 或 Debian),选择安装不同的软件包。
4.2 动态配置
- 根据主机的内存大小配置服务:
- hosts: all
tasks:
- name: Configure service based on memory
command: /path/to/configure_service.sh
when: ansible_memtotal_mb > 2048
- 解释:如果主机的内存大于 2GB,则执行特定的服务配置脚本。
五、注意事项
- 收集性能:收集所有 Facts 可能会增加任务的执行时间,尤其是在资源受限的系统上。使用
filter
或gather_subset
来限制收集的信息,可以提高效率。 - 事实准确性:
setup
模块返回的信息来自远程主机,因此其准确性取决于远程系统的状态和配置。如果系统信息有变化,建议重新运行setup
模块以获取最新的 Facts。