Pytanie Odpowiadanie przez pętle grupowe w szablonie


Zmagam się ze wzorcem, który wyciąga spisy zapasów w szablonach Ansaly, proszę o pomoc. :)

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 pół-robocza wersja do tej pory znajduje się w książeczce, która wywołuje zadanie szablonu, które 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 nie jest idealne, ponieważ nie mogę zdefiniować innego adresu IP dla różnych serwerów do monitorowania. 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: Aby wyjaśnić powstały 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, żeby wartości web1 / web2 / db1 / db2 były różne w zależności od tego, czy używam pliku inwentaryzacji produkcji czy pliku inwentaryzacji rozwoju.


14
2017-11-18 08:12


pochodzenie


Czy możesz dodać rzeczywisty wynik, jaki chcesz osiągnąć? - Ramon de la Fuente
Dzięki Ramon, dodano edycję, aby wyjaśnić :) - Alan Hollis
W pewnym sensie udało mi się obejść to teraz, tworząc dwa group_var dirs monitor-dev i monitor-pub, a następnie książkę z grami wykorzystują rolę all oraz plik inwentaryzacji dla produkcji wywołujący konkretne warianty grup. Nie wydaje się to jednak w porządku :) - Alan Hollis
Czy mógłbyś trochę wyjaśnić? Mówisz "konfiguruję serwer monitorowania", a następnie "inny adres IP dla różnych serwerów monitorowania" Chociaż może to nie mieć większego znaczenia, ile serwerów konfigurujesz? Ponadto nie widzę adresów IP w wynikowej składni, którą przedstawiasz. To trochę zagmatwane. Gdzie potrzebujesz adresów IP? - leucos
Przepraszam, jestem idiotą :) Zaktualizowałem pytanie - Alan Hollis


Odpowiedzi:


Idealnie byłoby używać różnych plików inwentaryzacyjnych do produkcji i postoju, które pozwoliłyby zachować to samo {{ inventory_hostname }} wartości, ale kieruj reklamy na różne komputery.

Możesz także przeglądać różne grupy ...

zastępy niebieskie:

[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 %}
] 

23
2017-07-30 17:08