Ansible模板解析问题:无法通过变量访问字典属性求助
解决Ansible变量作为字典键无法识别的问题
问题根源
在Jinja2模板语法中,.点语法用于访问字典的字面量键或对象属性;当需要通过变量的值作为键访问字典元素时,必须使用方括号[]的索引语法,否则Ansible会将变量名当作字面量键去查找,导致出现dict object has no attribute 'xxx'的错误。
场景1:循环中使用变量访问字典键
你的第一个测试任务中,switch_vars[0].why.node_id的写法错误,因为why是循环变量,需要用方括号索引来引用变量值作为键,同时循环列表里要引用变量的实际值,而非变量名本身:
修正后的代码
- name: a test set_fact: test_var: "{{ switch_vars[0][why].node_id }}" loop: - "{{ first_leaf }}" - "{{ second_leaf }}" loop_control: loop_var: why
场景2:转换字典后用变量访问属性
你转换得到test_var字典后,test_var.first_leaf.node_id的写法错误,因为first_leaf是变量,需要改用方括号索引:
修正后的代码
- debug: msg: - "{{ test_var[first_leaf].node_id }}"
补充规则
区分两种字典访问方式的适用场景:
- 当键是固定字符串时,用点语法:
test_var.leaf101.node_id - 当键是变量时,用方括号语法:
test_var[var_name].node_id
内容的提问来源于stack exchange,提问作者O.K.
相关产品推荐
相关产品推荐

