如何使用另一个变量声明字典

时间:2019-04-01 12:30:42

标签: ansible

我需要根据明显的事实声明一个字典。问题是我需要传递一个字符串值来创建此字典。但是当我尝试传递此变量时,它将创建一个字符串而不是一个字典。

我也尝试使用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"
}

但是当我只是硬编码设备名称时,我就会得到字典。我只需要纠正语法,以便可以通过将键作为变量传递来获取字典。

1 个答案:

答案 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 }}"