Wszystkie moje playbooki / role Ansible są rejestrowane w moim repozytorium git.
Jednak w przypadku ról Ansible Galaxy zawsze muszę jawnie pobierać je pojedynczo na każdy komputer, z którego chcę uruchomić Ansible.
Trudno nawet z góry dokładnie wiedzieć, które role Ansible Galaxy są potrzebne, dopóki Ansible nie narzeknie na brakującą rolę w czasie wykonywania.
Jak należy zarządzać zależnościami ról w Ansible Galaxy? Chciałbym, aby zostały one wpisane do mojego repozytorium git wraz z resztą kodu ansible lub aby były automatycznie identyfikowane i pobierane podczas uruchamiania Ansible na nowym komputerze.
Odpowiedzi:
Powinieneś użyć
requirements.yml
pliku dla tego przypadku użycia. Opisz wymagane role, korzystając z różnych metod instalacji:Następnie zainstaluj je:
Oto działający przykład (instalacja OpenDaylight przy użyciu Ansible jako dostawcy Vagrant). Więcej informacji można znaleźć w odpowiednich dokumentach Ansible .
źródło
Jak zasugerowano, do tego celu możesz użyć galaktyki ansible.
Ansible ma funkcję, w której możesz utworzyć
requirements.yml
plik zawierający listę wszystkich Twoich ról. Możesz dowiedzieć się o tym tutaj: http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-fileNa przykład (Requirements.yml):
Wtedy uciekasz
ansible-galaxy install -r requirements.yml
ten plik, aby pobrać wszystkie wymienione tam role.Jeśli chcesz jeszcze bardziej zautomatyzować to, możesz utworzyć prosty skrypt powłoki, który uruchomi dwie komendy.
Na przykład (ansible.sh):
./ansible.sh
źródło
2.2.1
Często zdarza mi się instalować pakiet Java JDK. Korzystanie z roli ułatwia ten dotyk. Wypróbowałem kilka różnych sposobów (w tym wiele .gitmodules i submodule ... Muszę używać wielu systemów git do pracy i wszystko robi się brzydkie). Moim największym wymaganiem jest to, że nie sprawdzam kodu ról w projekcie podręcznika, głównie po to, aby wszystko trzymać w jednym miejscu.
Zawartość mojego pliku „Requirements.yml”:
Prowadzę osobny podręcznik, install-roles.yml:
Uruchamiam ten pierwszy podręcznik, a następnie normalnie uruchamiam role w dowolnym podręczniku. Dla mnie sekret polega na tym, aby upewnić się, że jest ignorowany przez gita, więc nie sprawdzam przez pomyłkę ról. Ponieważ za każdym razem usuwam folder, zapewniam, że nie muszę wymuszać ani ignorować błędów.
źródło
Innym rozwiązaniem jest użycie podmodułów git. W końcu Ansible Galaxy to tylko katalog repozytoriów github ...
Używam tego polecenia, aby automatycznie dodać dowolną rolę Galaxy jako moduł podrzędny:
Następnie zatwierdź zmiany w swoim repozytorium git. Podczas klonowania repozytorium w przyszłości pamiętaj, aby sklonować je za pomocą modułów podrzędnych, np
git clone ... --recursive
Zaletą tego jest to, że podmoduł git zawsze odwołuje się do określonej wersji (git commit-hash). Uniemożliwi to uruchamianie nieprzetestowanych aktualizacji w środowisku produkcyjnym. Nowa wersja roli Galaxy może zawierać błędy lub działać zupełnie inaczej niż wcześniej. Za pomocą modułu podrzędnego git decydujesz, czy i kiedy aktualizujesz rolę do nowej wersji.
Ponadto nie będziesz musiał dodatkowo zajmować się umieszczaniem ról galaktyk na czarnej liście w swoim,
.gitignore
aby zapobiec wysyłaniu ich kodu do repozytorium.źródło
--force
flagą nieudokumentowaną , nie pokaże Ci, czy lub co faktycznie się zmieniło. To czarna skrzynka, którą możesz kontrolować tylko wtedy, gdy zachowasz pobrane role galaktyk w SCM. Z innych powodów to i tak dobry pomysł. Podczas wyciągania podmodułów widzisz przynajmniej, które role się zmieniły.Możesz użyć roli Ansible, aby zainstalować potrzebne role za pomocą modułu poleceń .
Oto bardzo podstawowy przykład, który działa
ansible-galaxy install
:ansible_roles_list
Mogą być dostarczane jako zmienna lub jako parametr do naśladowania.Jeśli zrobisz to w roli, musisz to zastosować przed innymi rolami, które chcesz zainstalować przy jej użyciu, w osobnym poradniku. Dzieje się tak, ponieważ Ansible sprawdza, czy wszystkie role są dostępne przed uruchomieniem podręcznika, w którym się do nich odwołujesz.
źródło
W tej chwili, o ile wiem, nie ma automatycznego sposobu pobierania ról w czasie wykonywania. Najlepszym rozwiązaniem jest umieszczenie ich we własnym repozytorium lub posiadanie odpowiedniej dokumentacji zawierającej wszystkie wymagania. Możesz nawet utworzyć podręcznik przed lotem, który zainstaluje Twoje role. :)
źródło
Tutaj moje wymagania dotyczą roli i są używane w install.yml
main.yml
źródło
Jeśli require.yml znajduje się w katalogu ról twojego projektu, Tower / AWX instaluje role automatycznie.
źródło