如何解决如何在Ansible中访问包含连字符的变量名称
我有一个简单的vlan配置文件,我希望它具有与JunOS语法匹配的键(这样,如果需要,我可以将它们作为agrogate传递给我),所以我使用的是vlan-id
键,例如此示例变量文件。
# vlans.yaml
vlans:
- name: general
description: "General"
vlan-id: 100
- name: hotline
description: "Accounting"
vlan-id: 110
但是由于连字符,我无法访问vlan-id密钥
- debug:
msg: "{{ item.vlan-id }}"
loop: "{{ vlans }}"
tags: debug
"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'vlan'
如果我直接输出商品,我会看到钥匙
- debug:
msg: "{{ item }}"
loop: "{{ vlans }}
ok: [SW02] => (item={'name': 'external','description': 'External','vlan-id': 209}) => {
"msg": {
"description": "External","name": "external","vlan-id": 209
}
}
ok: [SW01] => (item={'name': 'external',"vlan-id": 209
}
}
有什么办法解决这个问题吗?
解决方法
将属性放入方括号“ []”,也称为数组符号。例如
msg: "{{ item['vlan-id'] }}"
引用Ansible allows dot notation and array notation for variables. Which notation should I use?
如果变量包含点(。),冒号(:)或破折号(-),键的开头和结尾都带有两个下划线,或者键使用任何已知的公共属性,则使用起来更安全数组符号。
Q:“这不是变量,是关键。”
A:对。唯一的限制是键是唯一的。引用YAML 1.2
映射。映射节点的内容是一组无序的键:值节点对,但每个键都是唯一的。 YAML对节点没有进一步的限制。特别是,键可以是任意节点,同一节点可以用作几个键:值对的值,并且映射甚至可以包含自身作为键或值(直接或间接)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。