Ansible `setup` 模块

Ansible setup 模块

一、简介

  • 功能setup 模块用于收集远程主机的“Facts”,即系统信息。这些信息包括操作系统、网络配置、硬件规格、环境变量等,Ansible 在执行任务时可以利用这些信息进行条件判断和决策。
  • 使用场景:常用于获取目标主机的详细信息,以便在 Playbook 中根据主机的特性执行不同的任务。例如,可以根据主机的操作系统类型选择安装不同的软件包。

二、基本用法

2.1 语法

ansible <pattern> -m setup [options]
  • <pattern>:指定要操作的主机或主机组,例如 allwebservers
  • -m setup:指定使用 setup 模块。

2.2 示例

  • 收集所有主机的系统信息
ansible all -m setup
  • 解释:该命令会在所有主机上执行 setup 模块,返回主机的详细系统信息,包括操作系统版本、内核、网络接口、IP 地址、CPU 和内存等。

2.3 过滤特定信息

  • 只获取网络接口信息
ansible all -m setup -a 'filter=ansible_interfaces'
  • 解释:该命令仅返回所有主机的网络接口信息,如 eth0lo 等接口的名称。

  • 获取主机名和 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'
    
    • 解释:仅返回所有主机的操作系统家族信息(如 RedHatDebian 等)。

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 可能会增加任务的执行时间,尤其是在资源受限的系统上。使用 filtergather_subset 来限制收集的信息,可以提高效率。
  • 事实准确性setup 模块返回的信息来自远程主机,因此其准确性取决于远程系统的状态和配置。如果系统信息有变化,建议重新运行 setup 模块以获取最新的 Facts。
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟生啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值