Samouczek dla początkujących — podręczniki, zmienne i inwentarz Ansible

Beginner S Tutorial Ansible Playbooks



Playbooki Ansible to pliki zawierające zadania uruchamiane w celu skonfigurowania hostów za pomocą Ansible. Playbooki Ansible są napisane w formacie YAML. YAML to bardzo prosty format pliku, podobnie jak JSON. W dalszej części tego artykułu pokażę, jak wyglądają poradniki Ansible YAML.

Pliki Ansible Inventory zawierają listę hostów, które chcesz skonfigurować lub którymi chcesz zarządzać za pomocą Ansible. Możesz także pogrupować te hosty i zarządzać nimi według grup. Możesz także przekazać różne zmienne dla każdego hosta lub dla grupy hostów.







W tym artykule pokażę, jak pracować z podręcznikami, zmiennymi, plikami ekwipunku i niektórymi popularnymi modułami Ansible z praktycznymi przykładami. Zacznijmy więc!



Warunki wstępne

Jeśli chcesz wypróbować przykłady z tego artykułu,



1) Musisz mieć zainstalowany Ansible na swoim komputerze.
2) Musisz mieć co najmniej host Ubuntu/Debian i host CentOS/RHEL 8 skonfigurowany do automatyzacji Ansible.





Istnieje wiele artykułów na LinuxHint poświęconych instalowaniu Ansible i konfigurowaniu hostów do automatyzacji Ansible. Możesz sprawdzić te artykuły, jeśli potrzebujesz więcej informacji.

Tworzenie katalogu projektów

Najpierw utwórz katalog projektu ~/projekt/ za pomocą następującego polecenia:

$mkdir -pv~/projekt/podręczniki

Przejdź do ~/projekt/ katalog w następujący sposób:

$Płyta CD~/projekt

Podstawowy plik inwentarzowy:

Utwórz plik inwentaryzacji Ansible zastępy niebieskie w katalogu projektu za pomocą następującego polecenia:

$nanozastępy niebieskie

Możesz wpisać adresy IP hostów, które chcesz skonfigurować/zautomatyzować za pomocą Ansible w zastępy niebieskie plik inwentarzowy.

192.168.20.167
192.168.20.168
192.168.20.169
192.168.20.170

Po zakończeniu tego kroku zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Jeśli chcesz używać nazw DNS zamiast adresów IP w pliku inwentarza, możesz to zrobić również.

Jeśli nie masz działającego serwera DNS, możesz użyć /etc/hosty na komputerze do lokalnego rozpoznawania nazw DNS.

Aby uzyskać lokalne rozpoznawanie DNS, otwórz /etc/hosty plik z edytorem tekstu ( nano , w moim przypadku) w następujący sposób:

$sudo nano /itp/zastępy niebieskie

Wpisz adresy IP i żądane nazwy DNS w następujący sposób:

192.168.20.167 vm1.nodekite.com
192.168.20.168 vm2.nodekite.com
192.168.20.169 vm3.nodekite.com
192.168.20.170 vm4.nodekite.com

Po zakończeniu tego kroku naciśnij + x śledzony przez ORAZ oraz .

Otwórz plik inwentarza Ansible zastępy niebieskie następująco:

$nanozastępy niebieskie

Możesz teraz wpisać nazwy DNS hostów, które chcesz skonfigurować/zautomatyzować za pomocą Ansible w zastępy niebieskie plik inwentarzowy.

vm1.nodekite.com
vm2.nodekite.com
vm3.nodekite.com
vm4.nodekite.com

Po zakończeniu zapisz plik inwentaryzacji hostów, naciskając + x śledzony przez ORAZ oraz .

Testowanie łączności ze wszystkimi hostami

Teraz możesz spróbować pingować wszystkie hosty w pliku ekwipunku w następujący sposób:

$ansibl-igospodarze wszystkich-uansibl-m świst

Jak widać, wszystkie hosty w pliku inwentarza są osiągalne. Jesteśmy więc gotowi, aby przejść do następnej części tego artykułu.

Twój pierwszy podręcznik Ansible

Stwórzmy prosty podręcznik Ansible ping_all_hosts.yaml w podręczniki/ informator. Ta czynność spowoduje wysłanie pinga do wszystkich hostów w sieci zastępy niebieskie plik inwentarzowy, jak poprzednio.

$nanopodręczniki/ping_all_hosts.yaml

Wpisz następujące wiersze w ping_all_hosts.yaml Plik Playbooka Ansible:

- gospodarze: wszyscy
użytkownik: ansible
zadania:
- nazwa: Ping do wszystkich hostów
świst:

Tutaj,

gospodarze: wszyscy – wybiera wszystkie hosty z pliku inwentarza zastępy niebieskie .
użytkownik: ansible – mówi Ansible do SSH do hostów w pliku ekwipunku jako ansibl użytkownik.
zadania – tutaj wymienione są wszystkie zadania, które Ansible wykona na hostach. Każde z zadań ma zwykle Nazwa oraz jedną lub więcej opcji specyficznych dla modułu.

Poradnik ping_all_hosts.yaml ma tylko jedno zadanie, pinguje wszystkie hosty w pliku ekwipunku zastępy niebieskie . Nazwa zadania to Wyślij ping do wszystkich hostów i używa świst moduł.

ten świst moduł nie wymaga żadnych innych opcji. Więc zostawiłem puste (po dwukropku nic nie ma, : )

Po zakończeniu tego kroku zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Możesz uruchomić ping_all_hosts.yaml Poradnik Ansible w następujący sposób:

$ansible-poradnik-igospodarze podręczników/ping_all_hosts.yaml

Jak widać, zadanie ping zakończyło się pomyślnie na wszystkich hostach w pliku ekwipunku.

Prosty plik konfiguracyjny Ansible

We wcześniejszym przykładzie musiałeś użyć -i możliwość poinformowania Ansible, którego pliku inwentaryzacji użyć. W moim przypadku jest to zastępy niebieskie plik inwentarzowy.

$ansible-poradnik-igospodarze podręczników/ping_all_hosts.yaml

Jeśli nie chcesz przekazać pliku inwentaryzacji z -i za każdym razem, gdy uruchamiasz podręcznik Ansible, wszystko, co musisz zrobić, to ustawić domyślny plik inwentarza dla swojego projektu.

Aby to zrobić, utwórz nowy plik konfiguracyjny Ansible ansible.cfg w katalogu głównym projektu w następujący sposób:

$nanoansible.cfg

Wpisz następujące wiersze w ansible.cfg plik:

[domyślne]
inwentarz = ./zastępy niebieskie

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Możesz uruchomić ten sam podręcznik Ansible w następujący sposób:

$ansible-playbook playbooks/ping_all_hosts.yaml

Jak widać, w playbooku używa się zastępy niebieskie domyślnie plik inwentarzowy. Nadal możesz korzystać z -i możliwość określenia innego pliku inwentaryzacji, jeśli chcesz. Ansible jest bardzo elastyczny.

Grupowanie hostów w pliku ekwipunku

Do tej pory pokazałem, jak uruchomić zestaw zadań (playbook) na wszystkich hostach w pliku ekwipunku. Ale co, jeśli chcesz uruchomić zestaw zadań na niektórych hostach i inny zestaw zadań na innych hostach? Możesz pogrupować hosty w pliku inwentarza i uruchomić różne zadania w grupach hostów.

W tej sekcji pokażę, jak grupować hosty w pliku inwentarza i jak pracować z grupami hostów.

Najpierw otwórz plik inwentarza zastępy niebieskie następująco:

$nanozastępy niebieskie

Wpisz następujące wiersze w zastępy niebieskie plik inwentarzowy:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[centos8]
vm3.nodekite.com
vm4.nodekite.com

Tutaj utworzyłem dwie grupy hostów: debian10 oraz centos8 .

w debian10 grupy, mam dwóch hostów: vm1.nodekite.com oraz vm2.nodekite.com

w centos8 grupy, mam dwóch hostów: vm3.nodekite.com oraz vm4.nodekite.com

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Utworzymy teraz nowy podręcznik ping_debian10_hosts.yaml , który będzie pingował hosty jak poprzednio, ale tylko hosty w debian10 grupa hostów.

Utwórz poradnik ping_debian10_hosts.yaml w podręczniki/ katalog w następujący sposób:

$nanopodręczniki/ping_debian10_hosts.yaml

Wpisz następujące wiersze w ping_debian10_hosts.yaml Poradnik Ansible:

- gospodarze: debian10
użytkownik: ansible
zadania:
- nazwa: Ping do wszystkich Debiana10zastępy niebieskie
świst:

Zamiast gospodarze: wszyscy , Dodałem gospodarze: debian10 tutaj. debian10 to grupa hostów. Ten poradnik będzie działał tylko na gospodarzach w debian10 grupa hostów.

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Uruchom poradnik w następujący sposób:

$ansible-playbook playbooks/ping_debian10_hosts.yaml

Jak widać tylko gospodarze w debian10 pingowane są grupy hostów.

W ten sam sposób utwórz kolejny podręcznik ping_centos8_hosts.yaml następująco:

$nanopodręczniki/ping_centos8_hosts.yaml

Wpisz następujące wiersze w ping_centos8_hosts.yaml Poradnik Ansible:

- gospodarze: centos8
użytkownik: ansible
zadania:
- nazwa: Pinguj wszystkie CentOS8zastępy niebieskie
świst:

W ten sam sposób dodałem gospodarze: centos8 tutaj. centos8 to grupa hostów. Ten poradnik będzie działał tylko na gospodarzach w centos8 grupa hostów.

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Uruchom poradnik w następujący sposób:

$ansible-playbook playbooks/ping_centos8_hosts.yaml

Jak widać tylko gospodarze w centos8 pingowane są grupy hostów.

Typy zmiennych ansible

W Ansible istnieją różne typy zmiennych. Główne typy zmiennych to Ansible Facts zmienne oraz Zmienne zdefiniowane przez użytkownika .

Zmienne Ansible Facts: W zależności od hosta, na którym pracuje Ansible, Ansible generuje zmienne faktów Ansible. Zmienne faktów Ansible zawierają informacje o hoście, takie jak adresy IP, nazwa hosta, nazwa domeny, data, godzina, zmienne środowiskowe powłoki i inne.

Zmienne zdefiniowane przez użytkownika: Są to zmienne niestandardowe zdefiniowane przez użytkownika. Zmienne zdefiniowane przez użytkownika można przekazać z wiersza poleceń lub za pomocą pliku inwentarza.

Głównie zmienne definiowane przez użytkownika są dwojakiego rodzaju: Zmienne grupowe oraz Zmienne hosta .

Pierwszeństwo zmiennej ansible

Zmienny priorytet Ansible to : Zmienne wiersza poleceń > Zmienne hosta > Zmienne grupowe

Jeśli ustawisz tę samą zmienną, co zmienna hosta i zmienna grupy, zmienna hosta zostanie zastosowana.

Podobnie zmienne ustawione w wierszu poleceń podczas uruchamiania podręcznika zastąpią zarówno zmienne hosta, jak i grupy.

Praca ze zmiennymi faktów Ansible

W tej sekcji pokażę, jak pracować ze zmiennymi faktów Ansible. Zacznijmy więc!

Możesz wymienić wszystkie zmienne Ansible Facts hostów w twoim zastępy niebieskie plik inwentarzowy w następujący sposób:

$ansibl wszystko-uansibl-mUstawiać

Jak widać, wszystkie zmienne Ansible Facts są wymienione w formacie JSON. To bardzo długa lista.

Ponieważ lista jest dość długa, możesz ją otworzyć za pomocą programu pagera, takiego jak mniej następująco:

$ansibl wszystko-uansibl-mUstawiać| mniej

Teraz możesz przewijać dane wyjściowe w górę, w dół, w lewo i w prawo zgodnie z wymaganiami.

Możesz także wyszukiwać nazwy zmiennych z pagera. Aby to zrobić, naciśnij / klawisz na klawiaturze. Następnie wpisz ciąg wyszukiwania ( nazwa hosta w moim przypadku) i naciśnij .

Jak widać, zmienna faktów Ansible pasująca do szukanego ciągu to ansible_nazwa hosta . Możesz nacisnąć n przejść do następnego meczu i P aby przejść do poprzedniego dopasowania z pagera. W ten sposób znajdziesz zmienną faktów Ansible, której potrzebujesz w swoim projekcie Ansible.

Zobaczmy teraz, jak uzyskać dostęp do zmiennych faktów Ansible.

Utwórz nowy poradnik print_variable1.yaml następująco:

$nanopodręczniki/print_variable1.yaml

Wpisz następujące wiersze w print_variable1.yaml plik:

- gospodarze: wszyscy
użytkownik: ansible
zadania:
- Nazwa drukunazwa hostawszystkich gospodarzy
odpluskwić:
wiadomość:'{{ nazwa_hosta ansible }}'

Tutaj dodałem jedno zadanie Wydrukuj nazwę hosta wszystkich hostów . To zadanie wykorzystuje Ansible odpluskwić moduł do drukowania wiadomości po uruchomieniu playbooka.

msg jest jedynym wymaganym parametrem odpluskwić moduł. ten msg parametr przyjmuje ciąg znaków w cudzysłowie, czyli komunikat, który zostanie wyświetlony na konsoli.

Tutaj, {{ nazwa_zmiennej }} format jest używany do uzyskania dostępu do zmiennej. W tym przypadku, {{ nazwa_hosta ansible }} służy do drukowania ansible_nazwa hosta zmienna każdego z hostów w pliku inwentarza.

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Możesz również uzyskać dostęp do zmiennej faktów Ansible jako ansible_facts[nazwa_zmiennej] . Więc ansible_nazwa hosta zmienna stanie się ansible_facts[nazwa hosta] .

Możemy przepisać print_variable1.yaml Poradnik taki jak ten. Otrzymamy to samo wyjście.

- gospodarze: wszyscy
użytkownik: ansible
zadania:
- Nazwa drukunazwa hostawszystkich gospodarzy
odpluskwić:
wiadomość:'{{ ansible_facts['variable_name'] }}'

Uruchom poradnik print_variable1.yaml następująco:

$ansible-playbook playbooks/print_variable1.yaml

Jak widać, nazwa hosta każdego z hostów w pliku ekwipunku jest wydrukowana na konsoli.

Wydrukujmy teraz domyślny adres IPv4 każdego hosta wraz z nazwą hosta. Jak widać, domyślny adres IPv4 hosta można uzyskać za pomocą adres własność ansible_default_ipv4 obiekt.

Utwórz nowy poradnik print_variable2.yaml następująco:

$nanopodręczniki/print_variable2.yaml

Wpisz następujące wiersze w print_variable2.yaml plik:

- gospodarze: wszyscy
użytkownik: ansible
zadania:
- Nazwa drukunazwa hostawszystkich gospodarzy
odpluskwić:
wiadomość:'{{ ansible_hostname }} - {{ ansible_default_ipv4.address }}'

Ten podręcznik jest taki sam jak wcześniej. Jedyna różnica to nowa zmienna {{ ansible_default_ipv4.adres }} w msg opcja odpluskwić moduł.

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Uruchom print_variable2.yaml Playbook w następujący sposób:

$ansible-playbook playbooks/print_variable2.yaml

Jak widać, domyślny adres IPv4 i nazwa hosta hostów są drukowane na konsoli.

Tak więc pracujesz ze zmiennymi Ansible Facts.

Ustawianie zmiennych zdefiniowanych przez użytkownika z wiersza poleceń:

W tej sekcji pokażę, jak ustawić zmienne zdefiniowane przez użytkownika z wiersza poleceń podczas uruchamiania podręczników Ansible.

Najpierw utwórz nowy podręcznik print_variable3.yaml następująco:

$nanopodręczniki/print_variable3.yaml

Wpisz następujące wiersze w print_variable3.yaml plik:

- gospodarze: wszyscy
użytkownik: ansible
zadania:
- Nazwa drukuKomendazmienna linii
odpluskwić:
wiadomość:„Witaj {{ nazwa użytkownika }}”

Tutaj użyłem odpluskwić moduł do drukowania wiadomości Witamy {{ nazwa użytkownika }} . Nazwa Użytkownika to zmienna, która zostanie podstawiona, gdy uruchomimy playbook.

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Uruchom poradnik print_variable3.yaml następująco:

$ansible-poradnik-I 'nazwa użytkownika=Bob'podręczniki/print_variable3.yaml

NOTATKA: Tutaj, -I opcja służy do przekazania a Nazwa Użytkownika zmienna o wartości Pion do podręcznika print_variable3.yaml z wiersza poleceń.

Jak widać, wiadomość Witaj Bob jest wydrukowany na konsoli.

Odkryjmy teraz, jak przekazać wiele zmiennych z wiersza poleceń.

Utwórz nowy poradnik print_variable4.yaml następująco:

$nanopodręczniki/print_variable4.yaml

Wpisz następujące wiersze w print_variable4.yaml plik:

- gospodarze: wszyscy
użytkownik: ansible
zadania:
- nazwa: Wydrukuj zmienne zdefiniowane przez użytkownika
odpluskwić:
wiadomość:'nazwa użytkownika={{ nazwa użytkownika }} http_port={{ http_port }}'

Poradnik powinien być ci teraz bardzo znajomy. Wszystko, co robi, to drukowanie 2 zmiennych Nazwa Użytkownika oraz http_port na konsoli.

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Możesz teraz zdać Nazwa Użytkownika oraz http_port zmienna do podręcznika przy użyciu dwóch różnych -I opcja w następujący sposób:

$ ansible-poradnik-I 'nazwa użytkownika=Bob' -I 'http_port=8080'
podręczniki/print_variable4.yaml

Możesz też po prostu oddzielić zmienne spacją w następujący sposób:

$ ansible-poradnik-I 'nazwa użytkownika=Bob http_port=8080'
podręczniki/print_variable4.yaml

Jak widać, Nazwa Użytkownika oraz http_port zmienne są drukowane na konsoli.

Praca ze zmiennymi grupowymi zdefiniowanymi przez użytkownika

Powiedzmy, że chcesz dodać kilka zmiennych do grupy hostów. Ta czynność jest bardzo łatwa do wykonania w Ansible.

Najpierw otwórz swój zastępy niebieskie plik inwentarzowy w następujący sposób:

$nanozastępy niebieskie

Wpisz następujące wiersze w swoim zastępy niebieskie plik inwentarzowy:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[debian10:vars]
nazwa użytkownika = Lily
http_port =4343
[centos8]
vm3.nodekite.com
vm4.nodekite.com
[centos8: vars]
nazwa użytkownika = Bob
http_port =7878

Jak widzisz stworzyłem nowy dział [debian10:zmienne] dla debian10 hosta i dodał zmienne ( Nazwa Użytkownika oraz http_port ) dla debian10 jest tam grupa gospodarzy.

W ten sam sposób stworzyłem nową sekcję [centos8: vars] dla centos8 hosta i dodał zmienne ( Nazwa Użytkownika oraz http_port ) dla centos8 jest tam grupa gospodarzy.

Po zakończeniu zapisz zastępy niebieskie plik inwentarzowy, naciskając + x śledzony przez ORAZ oraz .

Uruchom print_variable4.yaml Playbooki w następujący sposób:

$ansible-playbook playbooks/print_variable4.yaml

Jak widać, prawidłowe zmienne są przekazywane do każdego hosta w zależności od jego grupy hostów.

Praca ze zmiennymi hosta zdefiniowanymi przez użytkownika

W tej sekcji pokażę, jak ustawić zmienne dla konkretnych hostów w pliku ekwipunku.

Najpierw otwórz zastępy niebieskie plik inwentarzowy w następujący sposób:

$nanozastępy niebieskie

Aby dodać zmienne do określonego hosta (powiedzmy vm1.nodekite.com ), po prostu dodaj spację/tabulator po nazwie IP/DNS hosta i wpisz swoje zmienne, jak pokazano na poniższym zrzucie ekranu.

Możesz również dodać wiele zmiennych. Po prostu oddziel wszystkie zmienne spacją.

Po zakończeniu zapisz plik ekwipunku, naciskając + x śledzony przez ORAZ oraz .

Uruchom print_variable4.yaml Playbooki w następujący sposób:

$ansible-playbook playbooks/print_variable4.yaml

Jak widać, zmienne są ustawione tylko dla vm1.nodekite.com gospodarz. Do pozostałych hostów zastosowano zmienne grupowe.

Szybkie generowanie plików inwentaryzacyjnych za pomocą zakresów

Możesz użyć zakresów, aby szybko wygenerować pliki inwentaryzacji Ansible, jeśli adresy IP hostów lub nazwy DNS są spójne (tj. mają określony format).

We wcześniejszych przykładach korzystałem z hostów vm1.nodekite.com , vm2.nodekite.com , vm3.nodekite.com oraz vm4.nodekite.com . Zamiast wpisywać 4 linie, mogłem po prostu wpisać vm[1:4].nodekite.com w pliku inwentarzowym.

Aby poeksperymentować z zakresami, otwórz zastępy niebieskie plik inwentarzowy w następujący sposób:

$nanozastępy niebieskie

Usuń wszystkie hosty i zmienne z plików inwentaryzacji.

Możemy teraz wymienić vm1.nodekite.com oraz vm2.nodekite.com z vm[1:2].nodekite.com dla debian10 grupę hostów w następujący sposób.

W ten sam sposób możemy wymienić vm3.nodekite.com oraz vm4.nodekite.com z vm[3:4].nodekite.com dla centos8 grupa hostów.

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Uruchom ping_all_hosts.yaml następująco:

$ansible-playbook playbooks/ping_all_hosts.yaml

Jak widać, zakresy hostów zostały rozszerzone, gdy uruchomiłem podręcznik.

Przechowywanie zmiennych w różnych plikach

Przechowywanie zmiennych grupowych i zmiennych hosta w tym samym pliku inwentarza jest bardzo łatwe. Ale możesz szukać większej elastyczności. Zwłaszcza, gdy chcesz używać zakresów w pliku inwentarza, ponieważ nie możesz już ustawiać zmiennych hosta, jeśli używasz zakresów. Cóż, możesz przechowywać zmienne grupowe i zmienne hosta w różnych plikach. W tej sekcji pokażę, jak to się robi.

Ansible domyślnie szuka zmiennych grupowych w zmienne_grupy / zmienne katalogowe i hosta w host_vars / informator.

Więc stwórz zmienne_grupy / oraz host_vars / katalog w następujący sposób:

$mkdir -pv {host, grupa}_którego

Aby ustawić zmienne grupowe dla debian10 grupa hostów, utwórz plik debian10 (taka sama jak nazwa grupy) w zmienne_grupy / katalog w następujący sposób:

$nanogroup_vars/debian10

Wpisz swoje zmienne w następujący sposób:

nazwa użytkownika: Lily
http_port: 4343

Po zakończeniu zapisz plik, naciskając + x następnie Y i .

W ten sam sposób, aby ustawić zmienne grupowe dla centos8 grupa hostów, utwórz plik centos8 (taka sama jak nazwa grupy) w zmienne_grupy / katalog w następujący sposób:

$nanogroup_vars/centos8

Wpisz swoje zmienne w następujący sposób:

nazwa użytkownika: Bob
http_port: 7878

Po zakończeniu zapisz plik, naciskając + x następnie Y i .

Uruchom print_variable4.yaml Playbook w następujący sposób:

$ansible-playbook playbooks/print_variable4.yaml

Jak widać, zmienne grupy są poprawnie ustawione dla każdej grupy hostów.

Aby ustawić zmienne hosta dla hosta vm1.nodekite.com , utwórz plik vm1.nodekite.com (taka sama jak nazwa hosta lub adres IP) w host_vars / katalog w następujący sposób:

$nanovm1.nodekite.com

Wpisz zmienne hosta w następujący sposób:

nazwa użytkownika: Alex
http_port: 7788

Po zakończeniu zapisz plik, naciskając + x następnie Y i .

Uruchom print_variable4.yaml Playbook w następujący sposób:

$ ansible-playbook playbooks/print_variable4.yaml
[

Jak widać, zmienne hosta są poprawnie ustawione dla hosta vm1.nodekite.com .

Praca z pętlami w Ansible

W tej sekcji pokażę, jak używać pętli w Ansible.

Najpierw utwórz nowy podręcznik loop1.yaml w podręczniki/ katalog w następujący sposób:

$nanopodręczniki/loop1.yaml

Wpisz następujące wiersze w loop1.yaml poradnik:

- gospodarze: wszyscy
użytkownik: ansible
zadania:
- nazwa: Drukuj listę użytkowników
odpluskwić:
wiadomość:'Użytkownik: {{ element }}'
with_items:
- Alex
- Bob
- Lily

Tutaj mam 1 zadanie, które wyświetla listę użytkowników korzystających z pętli.

Aby ustawić wartości iteracji dla zadania, użyj with_items moduł. Następnie dodajesz wartości jedna po drugiej.

with_items:
- Alex
- Bob
- Lily

Dostęp do wartości bieżącej iteracji uzyskuje się za pomocą przedmiot zmienny.

odpluskwić:
wiadomość:'Użytkownik: {{ element }}'

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Uruchom loop1.yaml Playbook w następujący sposób:

$ansible-playbook playbooks/loop1.yaml

Jak widać, to samo zadanie zostało uruchomione dla każdego elementu na każdym hoście. Tak więc pętla działa.

Praca z warunkami w Ansible

Jeśli chcesz uruchamiać zadania w oparciu o określone warunki, ta sekcja jest dla Ciebie.

Aby uruchomić zadania na podstawie warunków, możesz użyć gdy moduł Ansible. Zobaczmy przykład tego modułu. Najpierw utwórz nowy podręcznik warunek1.yaml następująco:

$nanopodręczniki/warunek1.yaml

Wpisz następujące wiersze w warunek1.yaml poradnik:

- gospodarze: wszyscy
użytkownik: ansible
zadania:
- nazwa: Uruchom to zadanie tylko na Debianie
odpluskwić:
wiadomość:'to zadanie działa na Debianie'
kiedy: ansible_facts['dystrybucja']=='Debian'

Tutaj,

ansible_facts['dystrybucja'] == 'Debian' służy do sprawdzania, czy dystrybucja jest Debiana . Zadanie zostanie uruchomione tylko wtedy, gdy dystrybucją jest Debian.

ten ansible_facts['dystrybucja'] służy do uzyskiwania dostępu do zmiennej Ansible Facts ansible_distribution . Możesz również sprawdzić wersję dystrybucji za pomocą ansible_distribution_major_version zmienny.

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Uruchom warunek1.yaml Playbook w następujący sposób:

$ansible-playbook playbooks/warunek1.yaml

Jak widać, zadanie działało tylko na hostach Debiana. Zadanie nie zostało uruchomione na hostach CentOS.

Możesz również sprawdzić wiele warunków jednocześnie i uruchomić zadanie tylko wtedy, gdy wszystkie warunki są spełnione. Zobaczmy przykład.

Utwórz nowy poradnik warunek2.yaml następująco:

$nanopodręczniki/warunek2.yaml

Wpisz następujące wiersze w warunek2.yaml plik:

- gospodarze: wszyscy
użytkownik: ansible
zadania:
- nazwa: Uruchom to zadanie tylko na Debianie10
odpluskwić:
wiadomość:'to zadanie działa na Debianie 10'
kiedy: ansible_facts['dystrybucja']=='Debian'
i ansible_facts[„distribution_major_version”]==„10”

Tutaj zadanie zostanie uruchomione tylko wtedy, gdy dystrybucją jest Debian ( ansible_facts['dystrybucja'] == 'Debian' ), a wersja to 10 ( ansible_facts[‘distribution_major_version’] == ’10’ ). Jeśli oba warunki są spełnione, zadanie zostanie uruchomione. W przeciwnym razie zadanie nie zostanie uruchomione.

użyłem oraz słowo kluczowe, aby sprawdzić, czy oba warunki są tutaj spełnione. Jeśli chcesz sprawdzić, czy którykolwiek z warunków jest spełniony, możesz użyć lub zamiast tego słowa kluczowego.

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Uruchom poradnik warunek2.yaml następująco:

$ansible-playbook playbooks/warunek2.yaml

Jak widać, zadanie działało tylko na hostach Debiana 10.

Zmieńmy zasady gry warunek2.yaml uruchomić zadanie tylko na hostach Debiana 8 w następujący sposób.

Jak widać, wszystkie hosty zostały pominięte, ponieważ nie mam żadnych hostów Debiana 8 w pliku ekwipunku.

Praca z modułem Ansible apt

ten trafny Moduł Ansible służy do instalacji określonego pakietu oprogramowania na hostach Ubuntu/Debian. Zobaczmy, jak korzystać z tego modułu.

Najpierw utwórz nowy podręcznik apt1.yaml w podręczniki/ katalog w następujący sposób:

$nanopodręczniki/apt1.yaml

Wpisz następujące wiersze w apt1.yaml poradnik:

- gospodarze: debian10
użytkownik: ansible
stać się prawdziwym
zadania:
- nazwa: Zainstaluj Apache2
trafny:
nazwa: Apache2
stan: najnowszy

ten trafny moduł wymaga tylko Nazwa pakietu, który chcesz zainstalować/uaktualnić/usunąć, a stan pakietu.

Tutaj próbuję zainstalować Apache2 pakiet ( nazwa: Apache2 ) na moich hostach Debiana 10. Ponieważ próbuję zainstalować pakiet, a także zaktualizować go, jeśli dostępna jest nowa wersja, stan Powinien być najnowszy .

stan akceptuje również następujące opcje:

- nieobecny – Pakiet zostanie usunięty, jeśli jest już zainstalowany.
- najnowszy – Pakiet zostanie zaktualizowany, jeśli aktualizacja jest dostępna. Jeśli pakiet nie jest jeszcze zainstalowany, zostanie zainstalowany.
- obecny – Pakiet zostanie zainstalowany, jeśli jeszcze nie został zainstalowany. Ale pakiet nie zostanie zaktualizowany, jeśli aktualizacja jest dostępna.

Zauważ, że dodałem stać się prawdziwym w podręczniku. To da ansibl uprawnienia użytkownika sudo do modyfikowania struktury systemu plików (tj. instalowania/aktualizowania/usuwania pakietów). Z pominięciem stać się prawdziwym , ten trafny moduł nie będzie mógł zainstalować Apache2 pakiet.

Po zakończeniu zapisz podręcznik, naciskając + x śledzony przez ORAZ oraz .

Uruchom apt1.yaml Playbook w następujący sposób:

$ansible-playbook playbooks/apt1.yaml

Jak widać, playbook z powodzeniem działał na hostach Debiana 10.

Jak widać, Apache2 pakiet jest zainstalowany na moich hostach Debiana 10.

Praca z modułem Ansible dnf/yum

ten dnf oraz mniam Moduł Ansible służy do instalacji określonego pakietu oprogramowania na hostach CentOS/RHEL. Możesz używać tego modułu w taki sam sposób, jak to zrobiłeś trafny we wcześniejszej części tego artykułu.

Oboje dnf oraz mniam moduły akceptują te same parametry. Możesz użyć dnf moduł na hostach CentOS/RHEL 8 oraz mniam na CentOS/RHEL 7 lub starszym.

Spójrzmy teraz na przykład tego modułu.

Najpierw utwórz nowy podręcznik dnf1.yaml w podręczniki/ katalog w następujący sposób:

$nanopodręczniki/dnf1.yaml

Wpisz następujące wiersze w dnf1.yaml poradnik:

- gospodarze: centos8
użytkownik: ansible
stać się prawdziwym
zadania:
- nazwa: Zainstaluj pakiet httpd
dnf:
nazwa: httpd
stan: najnowszy

ten dnf oraz mniam moduł wymaga tylko Nazwa pakietu, który chcesz zainstalować/uaktualnić/usunąć oraz stan pakietu.

Tutaj próbuję zainstalować httpd pakiet ( nazwa: httpd ) na moich hostach CentOS 8. Ponieważ próbuję zainstalować pakiet i chciałbym go również zaktualizować, jeśli dostępna jest nowa wersja, stan Powinien być najnowszy .

stan akceptuje następujące opcje:

- nieobecny – Pakiet zostanie usunięty, jeśli jest już zainstalowany.
- najnowszy – Pakiet zostanie zaktualizowany, jeśli aktualizacja jest dostępna. Jeśli pakiet nie jest jeszcze zainstalowany, zostanie zainstalowany.
- obecny – Pakiet zostanie zainstalowany, jeśli jeszcze nie został zainstalowany. Ale pakiet nie zostanie zaktualizowany, jeśli aktualizacja jest dostępna.

Zauważ, że dodałem stać się prawdziwym w podręczniku. To daje ansibl uprawnienia użytkownika sudo do modyfikowania struktury systemu plików (tj. instalowania/aktualizowania/usuwania pakietów). Z pominięciem stać się prawdziwym , ten trafny moduł nie będzie mógł zainstalować httpd pakiet.

Po zakończeniu zapisz podręcznik, naciskając + x śledzony przez ORAZ oraz .

Uruchom dnf1.yaml Playbook w następujący sposób:

$ansible-playbook playbooks/dnf1.yaml

Jak widać, playbook z powodzeniem działał na hoście CentOS 8.

Praca z modułem usługi Ansible

ten usługa Moduł Ansible służy do uruchamiania, zatrzymywania, restartowania, włączania (dodawania usługi do startu) i wyłączania (usuwania usługi z startu) usług na twoich hostach.

We wcześniejszych rozdziałach pokazałem, jak zainstalować pakiet serwera Apache HTTP za pomocą Ansible trafny , dnf oraz mniam moduły. Upewnijmy się teraz, że usługa serwera Apache HTTP jest uruchomiona i została dodana do uruchamiania systemu.

Będę pracował z moimi hostami Debiana 10. Ale możesz pracować z hostami CentOS 8, jeśli chcesz. Po prostu dostosuj odpowiednio podręcznik.

Najpierw utwórz nowy podręcznik Ansible apt2.yaml następująco:

$nanopodręczniki/apt2.yaml

Wpisz następujące wiersze w apt2.yaml poradnik:

- gospodarze: debian10
użytkownik: ansible
stać się prawdziwym
zadania:
- nazwa: Zainstaluj Apache2
trafny:
nazwa: Apache2
stan: najnowszy
- nazwa: Uruchom usługę Apache2
usługa:
nazwa: Apache2
stan: rozpoczęty
włączone: Prawda

Tutaj dodałem nowe zadanie, Uruchom usługę Apache2 .

nazwa: Apache2 – usługa, nad którą pracuję to Apache2 .

stan: rozpoczęty – usługa musi być uruchomiona.

włączone: Prawda – usługa musi zostać dodana do startu systemu.

ten stan parametr przyjmuje inne wartości.

- przeładowany – Usługa musi ponownie załadować pliki konfiguracyjne.
- uruchomiony ponownie – Usługa musi zostać zrestartowana.
- zaczęła się – Usługa musi być uruchomiona. Jeśli usługa nie działa, uruchom usługę.
- zatrzymany – Usługa musi zostać zatrzymana. Jeśli usługa jest uruchomiona, zatrzymaj usługę.

Uruchom poradnik apt2.yaml następująco:

$ansible-playbook playbooks/apt2.yaml

Jak widać, poradnik przebiegł pomyślnie.

Jak widać, Apache2 usługa działa na moich hostach Debiana 10.

Praca z modułem kopiowania Ansible

Ansibl Kopiuj Moduł służy głównie do kopiowania plików z Twojego komputera na zdalne hosty.

We wcześniejszej części zainstalowałem serwer WWW Apache 2 na moich hostach Debiana 10. Skopiujmy teraz index.html plik do webroot hostów Debiana 10.

Najpierw utwórz nowy katalog pliki/ następująco:

$mkdir -vpliki

Utwórz nowy plik index.html w pliki/ katalog w następujący sposób:

$nanopliki/index.html

Wpisz następujące wiersze w index.html plik:


< html >
< głowa >
< tytuł >Serwer WWW firmy Ansible</ tytuł >
</ głowa >
< ciało >
< h1 >Witamy w LinuxHint</ h1 >
< P >Ten serwer sieciowy został wdrożony z Ansible.</ P >
</ ciało >
</ html >

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Utwórz nowy podręcznik Ansible apt3.yaml następująco:

$nanopodręczniki/apt3.yaml

Wpisz następujące wiersze w apt3.yaml plik:

- gospodarze: debian10
użytkownik: ansible
stać się prawdziwym
zadania:
- nazwa: Zainstaluj Apache2
trafny:
nazwa: Apache2
stan: najnowszy
- nazwa: Skopiuj index.html na serwer
Kopiuj:
źródło: ../pliki/index.html
cel:/gdzie/www/html/index.html
tryb: 0644
właściciel: www-data
grupa: www-dane
- nazwa: Uruchom usługę Apache2
usługa:
nazwa: Apache2
stan: rozpoczęty
włączone: Prawda

Tutaj zadanie Skopiuj index.html na serwer kopiuje index.html od pliki/ katalog do / var / www / html / katalog hostów Debiana 10.

źródło: ../files/index.html – Ścieżka do pliku źródłowego.
miejsce docelowe: /var/www/html/index.html – Docelowa ścieżka pliku.
tryb: 0644 – Uprawnienia dla użytkownika pliku (6 – odczyt i zapis), grupy (4 – odczyt) i pozostałych (4 – odczyt).
właściciel: www-data – Ustaw właściciela pliku na www-dane .
grupa: www-dane – Ustaw grupę pliku na www-dane .

Po zakończeniu zapisz plik, naciskając + x śledzony przez ORAZ oraz .

Uruchom apt3.yaml Playbook w następujący sposób:

$ansible-playbook playbooks/apt3.yaml

Jak widać, zadanie Skopiuj index.html na serwer zakończony powodzeniem.

Jak widać, index.html plik został skopiowany na hosty Debiana 10.

Jak widać, serwer sieciowy Debian 10 obsługuje te index.html stronę, którą właśnie skopiowałem na hosty Debiana 10.

Oto podstawy Ansible. Możesz dowiedzieć się więcej o Ansible, czytając oficjalną dokumentację Ansible. Dziękuję za przeczytanie tego artykułu.