1

Ich muss eine Rolle erstellen, die automatisch Subnetze für VPC basierend auf der definierten AZ-Menge erstellt.So erstellen Sie eine verschachtelte Variable in der Ansible-Rolle

- 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 }} 

Wie automatisch blockieren wie diese erzeugen, wenn ich wie

nur AZ Namen

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

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

So habe ich http://docs.ansible.com/ansible/playbooks_filters.html geprüft. Aber ich habe keine Möglichkeit gefunden, diesen Block dynamisch zu generieren

+0

Ich fühle mich verwirrt mit Frage. Beabsichtigen Sie, eine Listenvariable 'az' im Verzeichnis' aws.vpc' für die Liste der AZs zu haben und dann dynamisch auf diese Liste zuzugreifen und diese Aufgabe über diese Liste auszuführen? Wenn du das nicht meinst, kannst du das näher ausführen? – rk2

Antwort

0

Im Wesentlichen benötigen Sie eine andere Aufgabe, die eine Schleife verwendet, um eine Ansible-Liste in eine Variable zu generieren. Dies kann dann in der Hauptaufgabe verwendet werden:

- subnets: "{{ subnet_list }}" 

Siehe this answer für ein Beispiel unter Verwendung von Hosts. Ihr Fall ist komplexer, da jedes Element in subnet_list selbst ein Wörterbuch ist (cidr, az und resource_tags sind die Schlüssel).

Verwandte Themen