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

Ansible Jinja模板遍历注册变量提示未定义变量如何解决

Ansible Jinja模板遍历loop注册变量报错解决

错误原因

你的循环存在两个核心问题:

  1. Jinja的for循环不会像Ansible任务层的loop关键字那样,自动把当前迭代元素赋值给默认的item变量,必须使用你在for声明里自定义的迭代变量名访问元素
  2. 你在循环声明{% for results in server_port_check.results %}中,已经将每次遍历到的单条检测结果赋值给了变量results,但循环内部完全没有使用这个变量,反而直接引用了未定义的item、port、state,因此触发未定义变量报错。

正确写法

参考你debug单条结果时的字段路径,循环时所有字段都要从你定义的迭代变量下取值即可(迭代变量名可以自定义,只要和循环内引用的前缀保持一致即可):

{% for check_result in server_port_check.results %}
Host:   {{ check_result.item.name }}
Port:   {{ check_result.port }}
Status: {{ check_result.state }}
{% endfor %}

扩展优化(可选)

由于你配置了ignore_errors: true,端口检测失败时任务不会中断,你可以通过结果中的failed字段明确标记端口连通状态:

{% for check_result in server_port_check.results %}
Host:   {{ check_result.item.name }}
Port:   {{ check_result.item.port }}
Status: {{ '端口开放' if not check_result.failed else '端口不可达' }}
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 14:42:33