我需要根据明显的事实声明一个字典。问题是我需要传递一个字符串值来创建此字典。但是当我尝试传递此变量时,它将创建一个字符串而不是一个字典。
我也尝试使用set_facts创建仍无法找到解决方案的变量。
- name: get part name
set_fact:
device_name: "nvme1n1"
- setup:
filter:
ansible_devices
register: detail
- set_fact:
part_dict: "{{detail.ansible_facts.ansible_devices.{{device_name}}.partitions}}"
- debug:
var: part_dict
当我使用上述代码时,输出为字符串
TASK [debug] *******************************************************************************************************************************
ok: [10.95.198.103] => {
"part_dict": "detail.ansible_facts.ansible_devices.\"nvme1n1\".partitions"
}
但是当我只是硬编码设备名称时,我就会得到字典。我只需要纠正语法,以便可以通过将键作为变量传递来获取字典。
答案 0 :(得分:0)
可以通过不同的语法访问地图元素:
选项1:
variable.element1.element2
选项2:
variable['element1']['element2']
混合:
variable['element1'].element2
在您的情况下,您只需要稍微更改语法即可避免ansible混淆(甚至在我用ansible 2.7.8 + Jinja 2.10进行的测试中引发错误)
part_dict: "{{ detail.ansible_facts.ansible_devices[device_name].partitions }}"