Według dokumentacji Ansible, Playbook to:
... podstawa naprawdę prostego systemu zarządzania konfiguracją i wdrażania na wielu maszynach, w przeciwieństwie do innych, które już istnieją, a także bardzo dobrze dostosowanego do wdrażania złożonych aplikacji.
I znowu, zgodnie z tymi samymi dokumentami, role to:
... sposoby automatycznego ładowania niektórych vars_files, zadań i handlerów w oparciu o znaną strukturę plików. Grupowanie treści według ról umożliwia również łatwe udostępnianie ról innym użytkownikom.
Jednak rozróżnienie między nimi a ich różnymi przypadkami użycia nie jest dla mnie od razu oczywiste. Na przykład, jeśli skonfiguruję mój /etc/ansible/hosts
plik tak, aby wyglądał następująco:
[databases]
mydb01.example.org
mydb02.example.org
[mail_servers]
mymail01.example.org
mymail_dr.example.org
... więc co to za [databases]
wpis ... rola ? A może nazwa pliku YAML playbooka? Albo coś innego?!?
Gdyby ktoś mógł mi wyjaśnić różnice w tych kwestiach, moje zrozumienie Ansible znacznie by się poprawiło!
- Playbook vs Role vs
[databases]
i podobne wpisy w/etc/ansible/hosts
- Jeśli Playbooks są zdefiniowane w plikach YAML, to gdzie są zdefiniowane role?
- Oprócz
ansible.cfg
życia na serwerze Ansible, w jaki sposób mogę dodać / skonfigurować Ansible z dostępnymi Playbookami / Rólami? Na przykład, kiedy uruchamiamansible-playbook someplaybook.yaml
, skąd Ansible wie, gdzie znaleźć ten poradnik?
źródło
tasks
robić coś.playbooks
organizować i uruchamiać zadania.roles
organizuj grupy zadań, opiekunów itp., które pełnią określoną funkcję. Niektóreplaybook
są potrzebne do uruchomieniarole
(ów). Jak nazwałbyś zbiórroles
iplaybooks
? Załóżmy na przykład taki, który zarządza konfiguracją wszystkich hostów w Twojej witrynie?Odpowiedzi:
[databases]
to pojedyncza nazwa grupy hostów. Umożliwia odwoływanie się do wielu hostów za pomocą jednej nazwy.Rola to zestaw zadań i dodatkowych plików umożliwiających skonfigurowanie hosta do pełnienia określonej roli .
Playbook to mapowanie między hostami i rolami.
Przykład z dokumentacji opisuje przykładowy projekt. Zawiera dwie rzeczy:
site.yml
,webservers.yml
,fooservers.yml
Są playbooks.roles/common/
iroles/webservers/
zawierają odpowiednie definicjecommon
iwebservers
role.Wewnątrz playbook (
webservers.yml
) masz coś takiego:Są zdefiniowane w
roles/*
katalogach. Role są definiowane głównie za pomocą plików YAML, ale mogą również zawierać zasoby dowolnego typu (files/
,templates/
). Zgodnie z dokumentacją definicja roli ma następującą strukturę:Najważniejszy plik to
roles/x/tasks/main.yml
tutaj definiujesz zadania, które zostaną wykonane po wykonaniu roli.Poszuka playbooka w bieżącym katalogu.
Poszuka playbooka w
somedir/somedir/
katalogu.Twoim obowiązkiem jest umieszczenie projektu ze wszystkimi playbookami i rolami na serwerze. Ansible nie ma z tym nic wspólnego.
źródło
webservers.yml
podręcznik odwzorowuje[webservers]
hosty na rolęcommon
iwebservers
. Ale co dokładnie obejmuje tacommon
rola? Nie ma sposobu, aby to zdefiniować w katalogach, więc czy zazwyczaj w tych „katalogach ról” znajdują się pliki YAML? Dzięki jeszcze raz!Role to sposób na grupowanie zadań w jednym kontenerze. Możesz mieć rolę do skonfigurowania MySQL, inną do skonfigurowania Postfix itp.
Playbook określa, co się dzieje i gdzie . Jest to miejsce, w którym definiujesz hosty (grupy hostów, patrz poniżej) i role, które zostaną przypisane do tych hostów.
[databases]
a inne wpisy w twoim ekwipunku to grupy hostów. Grupy hostów definiują zestaw hostów, na których będzie działać gra.Zabawa to zestaw zadań lub ról (lub obu) w playbooku. W większości przypadków (i przykładów) podręcznik zawiera tylko jedną grę. Ale możesz mieć tyle, ile chcesz. Oznacza to, że możesz mieć playbook, który będzie pełnił rolę
postfix
w grupie hostówmail_servers
i rolęmysql
w grupie hostówdatabases
:W Ansible prawie wszystko jest zdefiniowane w YAML, co dotyczy ról i scenariuszy.
AFAIK, musisz podać ścieżkę do playbooka podczas wywoływania
ansible-playbook
.ansible-playbook someplaybook.yaml
Spodziewałbymsomeplaybook.yaml
się więc , że będzie w twoim bieżącym katalogu. Ale możesz podać pełną ścieżkę:ansible-playbook /path/to/someplaybook.yaml
źródło
To kwestia terminologiczno-semantyczna. Może być subiektywne, mimo że istnieje podstawowa definicja.
Mój pogląd jest następujący:
Każdy system zarządzania / wdrażania konfiguracji ma:
source data
- dane użyte do stworzenia konfiguracji hosta docelowegotarget data
- dane używane do identyfikacji docelowych hostówconfig changes
- lista / zestaw reguł / działań, które stosujemy zsource data
hostem docelowym na podstawietarget data
W kategoriach Ansible:
source data
- to różne miejsca, możemy umieścić dane -group_vars
,playbook
Vars,role
Vars, itd., Miejsca te wpływają pierwszeństwo (jeśli zmienna nazwana tak samo jest ponowne zdefiniowane w różnych miejscach, są bardzo specyficzne zasady jaka byłaby wartość materiałów zmienna podczasansible
/ansible-playbook
wykonywaniatarget data
- to ekwipunek (możliwe jest również zdefiniowanie zmiennych inwentarza / grupy hostów w ekwipunku!)config changes
- ansibl ma 4 poziomy abstrakcji:role
s /task
s / zadań (i zadań specjalnych, takich jakhandlers
)Z punktu widzenia „oprogramowania” - rola powinna być na tyle ogólna, aby można ją było ponownie wykorzystać .
Również w niektórych (raczej dużych) organizacjach `` role '' są przypisywane przez grupę A, podczas gdy są używane w podręcznikach utrzymywanych przez grupę B.
Podsumowanie
Wszystko to pozwala na grupowanie podobnych konfiguracji - w plik
role
. grupowanie powiązanych podsystemów / komponentów w jedenplaybook
. Ponadto, warto wspomnieć, 1 YAML pozycja w playbook (w tymhosts:
i albo albotasks
,pre_tasks
,post_tasks
,roles
) nazywamyplay
A teraz pytanie:
Tak, na początku jest to zagmatwane.
Zwykle łączysz się
source data
z semantyką swojej roli, więc kiedy widzisz, że ta rolasetup_db
jest stosowana w grze na powiązanej grupie hostów (np.db_hosts
) Aleplay
może przebiegać przez sumę kilku grup hostów. To tylko kwestia konwencji kontra elastyczności.PS
Proszę o odpowiedź, czy to zwiększyło zamieszanie, czy też wyjaśniło. Dzięki.
źródło
Należy również pamiętać, że podręcznik może przywołać więcej niż jedną rolę, jeśli używany jest metaplik, który ma wpływać na różne role.
Przykładowy podręcznik: dual_role-playbook.yml
Folder ról i schemat plików będzie wyglądał następująco:
źródło
Mówiąc najprościej:
Playbook jest jak główny program, zawiera kompletne instrukcje, jak zakończyć pracę. Jednak w przypadku dużych projektów nie jest pożądane umieszczanie w nich każdego szczegółu. Więc potrzebujesz roli.
Rola jest podprogramem i zwykle osiąga jeden cel, np. Konfigurację serwera bazy danych. Możesz umieścić go w
roles/
katalogu lub pobrać role stron trzecich, dostarczając identyfikatory URIrolesfile.yml
i poprosić ansible-galaxy o pobranie ich za Ciebie.Jest
[database]
to grupa hostów zdefiniowana w pliku spisu, która zawiera listę hostów należących do tejdatabase
grupy. Możesz także określić grupę serwerów internetowych, określając coś takiego jakGrupa
web
lubdatabase
może być następnie używana w playbookach lub rolach, aby określić hosty do zastosowania.Grupy mogą być również używane w poleceniu
ansible
do uruchamiania poleceń ad-hoc.źródło