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

Ansible如何在当前主机组访问另一主机组的host_vars变量值

解决方案

错误原因

你之前的写法存在两个问题:

  1. 混淆了Ansible两个内置顶级变量的作用域:groups是直接存放所有inventory主机组信息的顶级变量,无需从hostvars中读取;hostvars是字典结构,只能以主机名为key读取对应主机的所有定义变量
  2. debug模块的var参数直接填变量名即可,不需要用{{ }}包裹,只有msg参数里的变量需要用双大括号包裹

正确取值写法

如果你要读取iperf_servers组第一台主机的data_ip,写法如下:

{{ hostvars[groups['iperf_servers'][0]].nodes[0].data_ip }}

逻辑是:先从groups中取出iperf_servers组的第一台主机名,再将该主机名作为key,从hostvars中读取对应主机的nodes[0].data_ip变量。

注意事项

如果运行时提示变量未定义,是因为Ansible默认只会加载当前play目标主机的变量,你可以在playbook最开头添加一个空play预加载所有需要用到的主机变量:

- hosts: iperf_servers,iperf_clients
  gather_facts: yes
  tasks: []

完整示例(修改后的第二个play)

- hosts: iperf_clients
  remote_user: root
  tasks: 
  - name: 打印第一台iperf服务器的data_ip
    debug:
      msg: "第一台iperf服务器的data_ip为 {{ hostvars[groups['iperf_servers'][0]].nodes[0].data_ip }}"
  # 如需遍历所有iperf服务器的ip可以用循环
  - name: 遍历打印所有iperf服务器的data_ip
    debug:
      msg: "服务器 {{ item }} 的data_ip为 {{ hostvars[item].nodes[0].data_ip }}"
    loop: "{{ groups['iperf_servers'] }}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:36:05