2014-11-18 14 views
11

Zmagam się ze wzorem wciągającym spisy zapasów w szablonach Ansaly, proszę o pomoc. :)Pętla z pytaniami przez zmienne grupowe w szablonie

Instaluję serwer monitorowania i chcę móc automatycznie dostarczać serwery za pomocą Ansible. Walczę z pętlami w szablonie, aby mi to umożliwić.

Moja soluition semi-working tej pory jest w playbook który wywołuje zadanie szablon mam:

monitoringserver.yml

vars: 
     servers_to_monitor: 
     - {cname: web1, ip_address: 192.168.33.111} 
     - {cname: web2, ip_address: 192.168.33.112} 
     - {cname: db1, ip_address: 192.168.33.211} 
     - {cname: db2, ip_address: 192.168.33.212} 

template.yml

all_hosts += [ 
      {% for host in servers_to_monitor %} 
        "{{ host.cname }}{{ host.ip }}|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/", 
      {% endfor %} 
] 

Ale to ISN To idealne rozwiązanie, ponieważ nie mogę zdefiniować innego adresu IP dla różnych monitorowanych serwerów. Jak zrobili to inni ludzie? Jestem pewien, że to musi być trywialne, ale mój mózg zmaga się ze składnią.

Dzięki

Alan

EDIT: Do wyjaśnienia powstałej szablon wygląda mniej więcej tak:

all_hosts += [ 
         "web1|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/", 
         "web2|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/", 
         "db1|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/", 
         "db2|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/", 
] 

Chciałbym Czy wartości web1/web2/DB1/db2 być różne w zależności od tego, czy używam pliku inwentaryzacji produkcji, czy pliku inwentaryzacji rozwoju.

+1

mógłbyś dodać co chcesz rzeczywisty wynik to być? –

+0

Dzięki Ramon, dodano edycję w celu wyjaśnienia :) –

+0

W pewnym sensie udało mi się obejść to teraz tworząc dwa group_var dirs monitor-dev i monitor-pub, a następnie używając książki gry wykorzystuję rolę all oraz plik inwentaryzacji dla produkcja wywołująca konkretne grupy vars. Nie wydaje się jednak całkiem odpowiedni :) –

Odpowiedz

18

Idealnie byłoby używać różnych plików inwentarza do produkcji i przemieszczania, co pozwoliłoby zachować tę samą wartość {{ inventory_hostname }}, ale kierować je na różne komputery.

Można również pętla przez różne grupy ...

gospodarze:

[web] 
web1 
web2 

[db] 
db1 
db2 

PlayBook:

- name: play that sets a group to loop over 
    vars: 
    servers_to_monitor: "{{ groups['db'] }}" 

    tasks: 
    - template: 
     src: set-vars.j2 
     dest: set-vars.js 

szablon:

all_hosts += [ 
{% for host in servers_to_monitor %} 
    "{{ hostvars[host].inventory_hostname }}{{ hostvars[host].ansible_default_ipv4.address }}|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/", 
{% endfor %} 
]