如何在 Ansible 角色中构建嵌套变量

How to build nested variable in Ansible role

我需要构建角色,根据定义的 AZ 数量自动为 VPC 创建子网。

- name: Setup "{{ aws.vpc.name }}" VPC
  ec2_vpc:
    state: present
    cidr_block: 172.20.0.0/16
    resource_tags: { "Name": "{{aws.vpc.name}}" }
    subnets:
      - cidr: 172.20.1.0/24
        az: us-east-1d
        resource_tags: { "Name": "{{aws.vpc.name}}-1d" }
      - cidr: 172.20.2.0/24
        az: us-east-1c
        resource_tags: { "Name": "{{aws.vpc.name}}-1c" }
    internet_gateway: True
    route_tables:
      - subnets:
          - 172.20.1.0/24
          - 172.20.2.0/24
        routes:
          - dest: 0.0.0.0/0
            gw: igw
    region: {{ aws.vpc.region }}

如果我只有

这样的 AZ 名称,如何自动生成这样的块

aws.vpc.az = ['a', 'c', 'e']

      - cidr: 172.20.1.0/24
        az: us-east-1d
        resource_tags: { "Name": "{{aws.vpc.name}}-1d" }

所以,我检查过http://docs.ansible.com/ansible/playbooks_filters.html。但是我没有找到动态生成这个块的方法

本质上,您需要另一个任务,该任务使用循环将 Ansible 列表生成到变量中。然后可以在主要任务中使用它:

- subnets: "{{ subnet_list }}"

有关使用主机的示例,请参阅 。你的情况更复杂,因为 subnet_list 中的每个项目本身就是一个字典(cidr、az 和 resource_tags 是键)。