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

基于其他主机变量构建Ansible模板的逻辑实现方案咨询

实现方案说明

这个逻辑直接在模板阶段实现即可,而且是最简洁的方式——因为你需要跨主机匹配变量,Ansible默认会加载inventory里所有主机的host_vars,在模板中可以通过全局变量hostvars直接访问其他主机的变量,不需要额外提前共享事实的步骤。

具体模板代码示例

# for {{ inventory_hostname }}
{% for item in my.info %}
{{ item.name }} {{ inventory_hostname }} {% for host in groups['all'] if host != inventory_hostname and item.name in (hostvars[host].my.info | default([]) | map(attribute='name') | list) %}{{ host }} {% endfor %}
{% endfor %}

逻辑解释

  1. 外层循环遍历当前主机的my.info列表,逐个处理每个name项
  2. 对每个name,先输出名称和当前主机名
  3. 内层循环遍历inventory里的所有其他主机,判断该主机的my.info中是否包含当前name,如果包含就输出该主机名
  4. 加default([])是为了避免某些主机没有my.info变量时报错,保证模板健壮性

为什么不需要提前预处理

Ansible在运行playbook时,默认会加载所有inventory主机的变量到hostvars中,模板可以直接调用这些数据。把逻辑写在模板里,不需要额外的playbook任务来收集或整理数据,配置更简洁,逻辑也更集中,便于维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:37:09