如何在Ansible中访问含点字符"."的字典键值?
解决Ansible中含点号的字典键访问问题
你的Playbook里,因为字典键包含点号(b.test),用.的属性访问方式会被Ansible错误解析成先找item里的b属性、再找test属性,自然会触发“找不到b”的报错。下面是两种可行的解决办法:
方法一:用下标访问含特殊字符的键
直接修改第二个debug任务的变量引用逻辑,用方括号加引号包裹完整键名,让Ansible将其当作整体识别:
- debug: msg: "{{ item['b.test'] }}" loop: "{{ variable }}"
方法二:修改变量定义(推荐)
如果变量定义可调整,把键名里的点号替换成下划线等无特殊含义的字符,比如改成b_test:
vars: variable: [{ "b_test": "test1", "host": "host1" }, { "b_test": "test2", "host": "host2" }]
之后就能用.的常规方式访问:
- debug: msg: "{{ item.b_test }}" loop: "{{ variable }}"
原问题场景
你的Playbook代码:
vars: variable: [{ "b.test": "test1", "host": "host1" }, { "b.test": "test2", "host": "host2" }] tasks: - debug: msg: "{{item.host}}" loop: "{{variable}}" - debug: msg: "{{item.b.test}}" loop: "{{variable}}"
第一个debug任务可正常返回host值,但第二个任务报错:
fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'b'\n\nThe error appears to be in '/home/ansible/cmdb/playbooks/dot.yml': line 25, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - debug:\n ^ here\n"}
内容的提问来源于stack exchange,提问作者Prab
相关产品推荐
相关产品推荐

