You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询Ansible变量对应的gather_subset分组?

如何查询Ansible变量所属的gather_subset分组

要确定某个Ansible变量(比如ansible_hostname)属于哪个gather_subset分组,以及找到包含它的最小子集,你可以用以下几种方法:

1. 查看setup模块的源码定义

Ansible内置的setup模块源码里,明确划分了各个gather_subset对应的变量集合。以ansible_hostname为例:

  • 它直接归属system子集,该子集负责收集主机名、内核版本、操作系统类型等基础系统信息。
  • min子集是默认的最小核心集合,包含system、user等基础子集,因此ansible_hostname也会被min子集间接包含。
  • all子集包含所有可用的子集,自然也涵盖system。

2. 通过ansible-doc查看子集说明

执行命令ansible-doc ansible.builtin.setup,在gather_subset参数的详细说明里,会列出每个子集涵盖的内容范围。比如其中会明确提到system子集包含主机标识类信息,min子集包含最基础的系统、用户等核心事实。

3. 测试验证最小子集

你可以通过逐步调整gather_subset的范围,验证哪个是包含目标变量的最小子集:

- name: 验证system子集包含ansible_hostname
  hosts: all
  gather_facts: true
  gather_subset: ["system", "!all", "!min"]
  tasks:
    - name: 输出ansible_hostname
      ansible.builtin.debug:
        var: ansible_hostname

- name: 验证无system子集时无法获取ansible_hostname
  hosts: all
  gather_facts: true
  gather_subset: ["!system", "min"]
  tasks:
    - name: 尝试输出ansible_hostname(会提示未定义)
      ansible.builtin.debug:
        var: ansible_hostname
      ignore_errors: true

第一个playbook会正常输出ansible_hostname,第二个则会提示变量未定义,这就确认了system是包含该变量的最小子集。

另外需要注意:如果你想全局配置只收集必要的子集,直接在play或ansible.cfg里设置gather_subset: system即可,无需单独执行setup任务。

内容的提问来源于stack exchange,提问作者Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:52:22