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

如何在Ansible中循环遍历主机组的hostname变量?

解决Ansible遍历主机组hostname变量的问题

你的问题在于groups['addnode']返回的是主机组内的主机标识(这里是IP地址),而非主机的hostname变量值。要获取每个主机对应的hostname,需要借助Ansible的hostvars全局变量来访问单台主机的变量。

方法一:直接在任务中通过hostvars调用变量

修改现有任务,在shell模块中通过hostvars[item]['hostname']获取对应主机的hostname值:

tasks:
  - name: drain node
    shell: kubectl drain "{{ hostvars[item]['hostname'] }}" --delete-local-data --force --ignore-daemonsets
    with_items: "{{ groups['addnode'] }}"

方法二:预生成hostname列表再遍历

使用map和extract过滤器,从hostvars中提取所有主机的hostname生成列表,再传递给with_items:

tasks:
  - name: drain node
    shell: kubectl drain "{{ item }}" --delete-local-data --force --ignore-daemonsets
    with_items: "{{ groups['addnode'] | map('extract', hostvars, 'hostname') | list }}"

原理说明

  • groups['addnode']:仅返回主机组内的主机标识集合(这里是10.102.26.53)
  • hostvars:Ansible的全局变量,存储所有已加载主机的变量信息,通过hostvars[主机标识]可以访问对应主机的所有自定义或内置变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:45:36