To jest część:
vars_files:
- vars/vars.default.yml
- vars/vars.yml
Jeśli plik vars/vars.yml
nie istnieje - występuje błąd.
ERROR: file could not read: /.../vars/vars.yml
Jak mogę załadować dodatkowe zmienne z tego pliku, tylko jeśli istnieje? (bez błędów)
Według ansibl twórców The właściwy sposób na rozwiązanie tego problemu jest użycie coś takiego:
Ponadto mówią :
źródło
include_vars
w zadaniu da wysoki priorytet zmiennym w porównaniu do rolidefaults
lubvars
Napotkałem ten problem w konfiguracji, w której musiałem utworzyć wiele środowisk wdrażania (na żywo, demo, piaskownicy) na tym samym serwerze fizycznym (tutaj niedozwolone maszyny wirtualne), a następnie skrypt do wdrożenia dowolnych repozytoriów svn
Wymagało to drzewa katalogów (opcjonalnych) plików zmiennych.yml, które połączyłyby się jeden na drugim i nie zgłaszałyby wyjątku, jeśli go brakuje
Zacznij od umożliwienia łączenia zmiennych w ansible - zwróć uwagę, że powoduje to płytkie scalanie skrótów (głębokość 1 poziomu) i niepełne rekurencyjne scalanie głębokie
ansible.cfg
Układ katalogu Ansible
role / deploy / tasks / obejmuje.yml
Jest to główna logika drzewa katalogów opcjonalnych plików zmiennych.
group_vars / all.yml
Skonfiguruj zmienne domyślne dla projektu oraz różnych użytkowników i środowisk
roles / deploy / vars / main.yml
ustawienia domyślne projektu
role / deploy / vars / project_1.yml
domyślne dla projektu_1
roles / deploy / vars / live / main.yml
wartości domyślne dla środowiska na żywo, przesłania wartości domyślne projektu
role / deploy / vars / live / project_1.yml
końcowe przesłonięcia projektu_1 w środowisku na żywo
podręczniki / demo.yml
Skonfiguruj osobne podręczniki dla każdego środowiska
OSTRZEŻENIE: Ponieważ wszystkie środowiska działają na jednym hoście, wszystkie podręczniki muszą być uruchamiane indywidualnie, w przeciwnym razie Ansible zepsuje próbę uruchomienia wszystkich skryptów jako pierwszy użytkownik logowania ssh i użyje zmiennych tylko dla pierwszego użytkownika. Jeśli musisz uruchomić wszystkie skrypty sekwencyjnie, użyj xargs, aby uruchomić je osobno.
źródło
Uwaga: Testy ścieżek (plik, istnieje, ...) działają tylko z bezwzględnymi ścieżkami lub ścieżkami względem bieżącego katalogu roboczego podczas uruchamiania polecenia ansible-playbook. To jest powód, dla którego użyliśmy wyszukiwania. wyszukiwanie akceptuje ścieżki względem katalogu podręcznika i zwraca bezwzględną ścieżkę, gdy plik istnieje.
źródło
Lub w bardziej yamlowy sposób:
Oznacza to, że zamiast pisać tablicę w jednym wierszu za pomocą nawiasów kwadratowych, na przykład:
Użyj yamlowego sposobu zapisywania wartości tablic w wielu wierszach, takich jak:
Jak wspomniano, szuka pliku vars o nazwie
{{ ansible_hostname }}.yml
, a jeśli nie istnieje, używadefault.yml
źródło
{{ ansible_hostname }}.yml
nazwa pliku zamiast../path/to/file1
. Jaki jest sens? Można dodać nieograniczoną liczbę nazw plików wejściowych.Składanie różnych elementów razem ... include_vars z klauzulą when, która jest prawdziwa, gdy plik istnieje. to znaczy
źródło
Nowa odpowiedź oparta na najnowszych wersjach Ansible - w zasadzie powinieneś użyć
with_first_found
wraz z,skip: true
aby pominąć zadanie, jeśli nie znaleziono pliku.To sprawia, że nie musisz mieć pliku rezerwowego na tej liście.
Zobacz powiązane: /programming//a/39544405/100134
źródło