【问题标题】:How to build nested variable in Ansible role如何在 Ansible 角色中构建嵌套变量
【发布时间】:2016-10-14 17:32:04
【问题描述】:

我需要构建角色,根据定义的可用区数量自动为 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。但是我没有找到动态生成这个块的方法

【问题讨论】:

  • 我对问题感到困惑。您是否打算在字典aws.vpc 中为可用区列表创建一个列表变量az,然后您想动态访问该列表并在该列表上执行此任务?如果这不是你的意思,你能详细说明吗?

标签: amazon-web-services ansible jinja2 ansible-playbook amazon-vpc


【解决方案1】:

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

- subnets: "{{ subnet_list }}"

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

【讨论】:

    猜你喜欢
    • 2023-01-10
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2020-12-09
    • 2015-07-31
    • 2020-09-22
    相关资源
    最近更新 更多