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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:31:17