Ansible Jinja模板遍历注册变量提示未定义变量如何解决
Ansible Jinja模板遍历loop注册变量报错解决
错误原因
你的循环存在两个核心问题:
- Jinja的
for循环不会像Ansible任务层的loop关键字那样,自动把当前迭代元素赋值给默认的item变量,必须使用你在for声明里自定义的迭代变量名访问元素 - 你在循环声明
{% 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
相关产品推荐
相关产品推荐

