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

Ansible技术问询:获取playbook的hosts键值及执行主机组名

Ansible 常见问题解答

1. 如何从Ansible Play/Playbook中获取"hosts"键的值?

你可以直接用Ansible内置的上下文变量 ansible_play.hosts,它会返回当前Play里hosts字段定义的原始内容。比如你的Play写的是hosts: my-host-group,这个变量就会返回字符串my-host-group。

另外还有个变量ansible_play_pattern,作用和它类似,也能拿到Play中指定的主机匹配模式。

给你个实际使用的任务示例:

- name: 打印当前Play的hosts配置
  debug:
    msg: "当前Play指定的主机/组是: {{ ansible_play.hosts }}"

2. 在Ansible 2.3.2.0中,如何通过ansible_play_hosts获取对应的实际组名?

已知ansible_play_hosts是当前Play执行的所有主机列表,要找出包含这些主机的组名,可以借助Ansible的groups变量(它存储了所有主机组与对应主机的映射关系)来实现。

因为Ansible 2.3还没有dict2items这类过滤器,我们可以用with_dict循环所有组,对比组内主机列表和ansible_play_hosts(统一排序避免顺序影响匹配),找到完全匹配的组:

- name: 找出包含所有执行主机的目标组
  set_fact:
    target_group: "{{ item.key }}"
  when: "item.value | sort == ansible_play_hosts | sort"
  with_dict: "{{ groups }}"

- name: 打印目标组名
  debug:
    msg: "包含所有执行主机的组是: {{ target_group }}"

如果你的Play里hosts字段直接指定了单个组(就像你示例里的my-host-group),其实也可以直接用第一个问题里的ansible_play.hosts变量,一步就能拿到组名,更省事:

- name: 直接获取Play指定的组名
  debug:
    msg: "Play指定的组名是: {{ ansible_play.hosts }}"

不过上面的遍历方法更通用,哪怕Play的hosts是多个组的组合或者复杂匹配模式,也能找出包含所有执行主机的组。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:49:48