如何在 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 是键)。
我需要构建角色,根据定义的 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 是键)。