Ansible遍历含字母数字键的字典时遇RepresenterError求助
问题解决方法
你的错误根源是动态字典键的访问方式错误。当字典的键是循环变量(比如item)时,不能用点语法(.)直接访问,必须改用方括号[]来引用动态键名。
修正后的代码
将原代码中的点语法访问改为方括号引用item,即可正确获取对应键的值:
- debug: msg="{{ abccontent.json.nodes[item].jvm.mem.heap_used | to_nice_yaml }}" with_items: - RAV1MMn1TwKuxl229TbDFFQ - ZJeljFpTQXWl4dnlYDS4Ygw - _z9213e2uQJWT4rS3H_-QPw - KmNwadKddS_-rZZIK5TO3yQ
额外优化建议
- 如果
heap_used是数值或简单字符串类型,可去掉to_nice_yaml过滤器,直接输出更简洁:- debug: msg="{{ abccontent.json.nodes[item].jvm.mem.heap_used }}" with_items: - RAV1MMn1TwKuxl229TbDFFQ - ZJeljFpTQXWl4dnlYDS4Ygw - _z9213e2uQJWT4rS3H_-QPw - KmNwadKddS_-rZZIK5TO3yQ - Ansible 2.5及以上版本推荐用
loop替代with_items,语法更清晰:- debug: msg="{{ abccontent.json.nodes[item].jvm.mem.heap_used | to_nice_yaml }}" loop: - RAV1MMn1TwKuxl229TbDFFQ - ZJeljFpTQXWl4dnlYDS4Ygw - _z9213e2uQJWT4rS3H_-QPw - KmNwadKddS_-rZZIK5TO3yQ
错误原因说明
原代码中abccontent.json.nodes.item.jvm.mem.heap_used会被Ansible解析为访问nodes字典下名为item的固定键,而非循环变量item的实际值,导致找不到对应键值返回AnsibleUndefined,最终触发YAML序列化错误。
内容的提问来源于stack exchange,提问作者nonoob
相关产品推荐
相关产品推荐

