2016-04-08 15 views
1

In meinem Playbook möchte ich zwei Wörterbücher (oder ein Wörterbuch und eine Liste) durchlaufen. Eine ist eine Liste (oder ein Wörterbuch) von Domains, die andere ist ein Wörterbuch, das die aws-Regionen mit den entsprechenden Server-IPs enthält, die für die DNS-Einträge für latenzbasiertes Routing verwendet werden. Ich möchte für jede Domain einen DNS-Record für jede aws-Region festlegen.Ansible Schleife über mehrere Wörterbücher/Listen

- name: set DNS records for Domains 
    route53: 
    zone: "{{ item[0].key }}" 
    record: "{{ item[0].key }}" 
    value: "{{ item[1].value.server_ip }}" 
    region: "{{ item[1].key }}" 
    identifier: "{{ item[1].key }}" 
    with_nested: 
    - "{{ domain_dict }}" 
    - "{{ aws_dict }}" 

Mit zwei Listen funktioniert das Beispiel gut. Wie kann ich mit mindestens einem Wörterbuch arbeiten?

domain_dict: (könnte eine Liste sein, wie gut)

domain_dict: 
    mytest1.example: 
    mytest2.example: 
    mytest3.example: 

aws_dict:

aws_dict: 
    us-east-1: 
    # some other region-related stuff like ami-id,... 
    server_ip: 1.2.3.4 
    us-west-1: 
    # some other region-related stuff 
    server_ip: 1.2.3.5  
    us-west-2: 
    # some other region-related stuff 
    server_ip: 1.2.3.6 
    #all other aws-regions 
+1

Könnten Sie den Inhalt Ihrer Variablen einschließen: 'domain_dict' und' aws_dict' bitte? –

+1

Ich habe sie hinzugefügt – Philipp

Antwort

1

Eine benutzerdefinierte lookup_plugin ist die beste Wahl. Ansonsten wird es eine hässliche Sequenz von set_fact sein.

PS: Während Sie normalerweise nicht müssen, sollten Sie Ihre eigenen Möglichkeiten zum Schleifen über beliebige Datenstrukturen schreiben möchten, können Sie Developing Plugins für einige Starter-Informationen lesen. Jedes der oben genannten Features sind als Plugins in ansible implementiert, so dass es viele Implementierungen zu referenzieren gibt.