如何在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
相关产品推荐
相关产品推荐

