如何使用Ansible遍历字典?

时间:2019-01-21 19:05:22

标签: ansible

我有一个艰巨的任务,要从yaml中读取字典变量,即子网[0](在group_vars的all.yml中)。如果我想遍历整个字典怎么办?

- name: Create and/or update the subnet
      azure_rm_subnet:
        name: "{{ subnets[0].name }}"
        address_prefix_cidr: "{{ subnets[0].prefix }}"
        route_table: "{{ subnets[0].udr }}"    

我尝试了 with_dict:“ {{subnets}}” ,然后尝试了 item.value.name item.name ,但剧本失败并显示错误。如果不是所有对象都具有所有属性,也就是缺少子网[1] .udr,又可以检查任务中是否存在属性,该怎么办?我的all.yml文件如下:

subnets:
  - 
    name: subnet1
    prefix: 10.2.1.0/24
    udr: rt1
    nsg: sg1

  -
    name: subnet2
    prefix: 10.2.1.0/24
    nsg: sg1

1 个答案:

答案 0 :(得分:1)

与with_dict相比,它更接近with_itemswith_subelements

您将像这样使用它:

- name: Create and/or update the subnet
  azure_rm_subnet:
    name: "{{ item.name }}"
    address_prefix_cidr: "{{ item.prefix }}"
    route_table: "{{ item.udr }}"
  with_items:
    - "{{ subnets }}"

子元素是您曾经拥有过此类项目的子元素的情况。检查文档以了解Ansbile中循环控制功能的更多用法。