如何在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任务存在两个核心问题:
msg字段未引用循环变量,导致循环执行时仅输出固定文本,无法显示实际组名- 若未指定目标主机
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
相关产品推荐
相关产品推荐

