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

如何在Ansible中查询web_svr1主机所属的所有主机组?

解决Ansible查询主机所属组的问题

问题描述

需要查询web_svr1主机在Ansible中所属的所有主机组,预期结果为all_servers和web_servers,现有hosts文件内容如下:

[web_servers]
web_svr1
web_svr2

[app_servers]
app_svr1

[all_servers:children]
web_servers
app_servers

尝试的debug任务无法正常输出组名:

- name: Debug task to print group names
    ansible.builtin.debug:
      msg: "Host belongs to group:"
    loop: "{{ group_names }}"

问题分析

你的debug任务存在两个核心问题:

  1. msg字段未引用循环变量,导致循环执行时仅输出固定文本,无法显示实际组名
  2. 若未指定目标主机web_svr1执行任务,group_names变量会对应当前执行的主机(比如localhost),无法获取web_svr1的组信息

修复后的任务代码

方式1:直接针对web_svr1执行任务

通过指定任务的目标主机为web_svr1,直接获取该主机的组信息:

- name: 查看web_svr1所属的所有组
  hosts: web_svr1
  tasks:
    - name: 输出主机所属组名
      ansible.builtin.debug:
        msg: "Host belongs to group: {{ item }}"
      loop: "{{ group_names }}"

方式2:离线查询web_svr1的组信息(无需连接目标主机)

如果不想实际连接web_svr1,可以通过hostvars变量直接读取目标主机的组信息:

- name: 离线查询web_svr1所属的所有组
  hosts: localhost
  gather_facts: no
  tasks:
    - name: 输出web_svr1的所属组名
      ansible.builtin.debug:
        msg: "web_svr1 belongs to group: {{ item }}"
      loop: "{{ hostvars['web_svr1']['group_names'] }}"

执行结果说明

执行修复后的任务后,会输出符合预期的内容:

ok: [web_svr1] => (item=web_servers) => {
    "msg": "Host belongs to group: web_servers"
}
ok: [web_svr1] => (item=all_servers) => {
    "msg": "Host belongs to group: all_servers"
}

内容的提问来源于stack exchange,提问作者code.coderpy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:07:17