Jak używać pętli w Ansible

Jak używać pętli w Ansible
Podczas pracy z kodem może być konieczne wielokrotne wykonanie bloku kodu. Wielokrotnie pisanie tego samego bloku kodu jest zbędne i uważane za zły projekt. Tutaj pojawiają się pętle.

Pętle to zestawy poleceń lub instrukcji, które są ustawione na powtarzanie określonej liczby razy według wymagań użytkownika. Pętle pozwalają na lepszy przepływ sterowania w skryptach i usunąć z nich ogólną redundancję.

Ansible ma również wiele metod zapętlania bloków kodu. Ten przewodnik ma pomóc Ci dowiedzieć się o pętlach w Ansible. Omówimy podstawy zapętlania w Ansible, wraz z składnią i odpowiednimi przykładami.

To powiedziawszy, spójrzmy na pętle w Ansible.

Słowa kluczowe dla pętli w Ansible

Ansible używa następujących słów kluczowych dla swoich struktur pętli:

  • "pętla"
  • "z_"
  • "dopóki"

Jak sama nazwa wskazuje, „pętla” jest poleceniem do wdrażania pętli w blokach kodu.

Podobnie jak „pętla”, masz „z_”. To polecenie wymaga podania wtyczki wyszukiwania. Zaleca się użycie z_* zamiast pętli, gdy zaangażowane są wtyczki wyszukiwania.

„Dopóki” pozwala na wykonywanie zadania, dopóki nie zostanie spełniony wymagany warunek. Jest to najbliżej warunku „while” w przepływie kontrolnym.

Teraz, gdy masz pomysł słów kluczowych dla pętli, możesz uczyć się, jak je zaimplementować w kodzie.

Standardowe pętle w Ansible

Zaczniemy od omówienia, jak wdrożyć standardowe pętle w Ansible. Do standardowych pętli użyjemy słowa kluczowego „with_”.

Ten przykład pokazuje, w jaki sposób możemy używać pętli, aby dodać użytkowników.

- Nazwa: Dodaj wielu użytkowników
użytkownik:
Nazwa: "item"
Stan: obecny
Grupy: „Koło”
Z_ITEMS:
- VM1
- VM2

Teraz następnym krokiem byłoby uruchomienie podręcznika. Możesz to zrobić za pomocą następującego polecenia w terminalu Linux:

Ansible-Playbook Testbook.yml

Tutaj „pozycja” to termin wyszukiwania. „With_Item” ma odpowiednio dwa hosty, odpowiednio VM1 i VM2. Pętla robi to samo, co poniższy kod:

- Nazwa: Dodaj użytkownika VM1
użytkownik:
Nazwa: „VM1”
Stan: obecny
Grupy: „Koło”
- Nazwa: Dodaj użytkownika VM2
użytkownik:
Nazwa: „VM2”
Stan: obecny
Grupy: „Koło”

Jak widać, za pomocą „with_item” jesteśmy w stanie usunąć redundancję z naszego kodu. Dodając więcej użytkowników w „with_Items:”, możemy dodać wielu użytkowników zgodnie z potrzebami.

Następny przykład obejmie sposób wykonania zagnieżdżonych pętli w Ansible.

Zagnieżdżone pętle w Ansible

Ansible pozwala wdrożyć zagnieżdżone pętle w swoich skryptach. Przykład takiej pętli podano poniżej.

- Nazwa: zapewnia użytkownikom dostęp do baz danych
mysql_user:
Nazwa: "item [0]"
priv: "item [1].*:WSZYSTKO"
append_privs: Tak
Hasło: „FOO”
Z_NESTEST:
- [„Linuxuser1”, „Linuxuser2”]
- [„klient”, „pracownik”, „dostawca”]

Alternatywnie możesz napisać ten sam kod z „Loop” w następujący sposób:

- Nazwa: zapewnia użytkownikom dostęp do baz danych
wspólnota.Mysql.mysql_user:
Nazwa: "item [0]"
priv: "item [1].*:WSZYSTKO"
append_privs: Tak
Hasło: „FOO”
LOOP: "'Linuxuser1',„ Linuxuser2 '] | Product ([„Client”, „Employee”, „Provider”]) | List ”

Użytkownicy otrzymają dostęp do wszystkich baz danych jeden po drugim. Jak wspomniano wcześniej, łatwiej jest zrozumieć, że „with_” jest lepsze z wtyczkami wyszukiwania niż „pętli” jako składni.

Rzućmy okiem na inne przykłady podkreślające zdolność Ansible.

Używanie ansible do iteracji przez skrótów

Ansible pozwala zapętlić się listy skrótów. Można to zobaczyć z podanego poniżej przykładu.

Załóżmy, że zadeklarowałeś listę użytkowników w następujący sposób.

Użytkownicy:
VM1:
Nazwa: maszyna wirtualna 1
Serial: 00000001
VM2:
Nazwa: maszyna wirtualna 2
Serial: 00000002

Aby wydrukować wszystkie nazwy i seriale, wykonaj skrypt poniżej.

Zadania:
- Nazwa: Drukuj informacje o użytkowniku
odpluskwić:
MSG: „Użytkownik item.klucz to item.wartość.nazwa (item.wartość.seryjny )"
with_dict: „Users”

To wydrukuje odpowiednio nazwy użytkowników i seriale. Dodając więcej użytkowników w panelu „Użytkownicy:”, możesz wydrukować więcej użytkowników bez konieczności pisania kodu.

Korzystanie z pętli dla równoległych zestawów danych

Możesz także użyć pętli do równoległych zestawów danych. Pokazano to w poniższym przykładzie:

Załóżmy, że masz następujące dane:

Alfabety: [„A”, „B”, „C”, „D”]

NUM: [2, 4, 6, 8]

Możesz zapętlić te polecenia w następujący sposób:

Zadania:
- odpluskwić:
MSG: "item.0 i item.1 "
razem:
- „alfabety”
- „num”

Powyższy kod zapętli oba zestawy danych razem jako (a, 2), (b, 4) itp.

Losowe pętle wyboru

Jedną z funkcji, które są wyposażone w pętle „with_”, jest „Random_Choice”.

Jak sama nazwa wskazuje, funkcja losowego wyboru służy do losowego wyboru elementów z danego zestawu instrukcji.

Ten przykład ilustruje, jak zrobić pętle do wyboru akcji z danej listy ciągów.

- odpluskwić:
MSG: "item"
with_random_choice:
- „Wykonaj akcję 1”
- „Wykonaj akcję 2”
- „Wykonaj akcję 3”
- „Wykonaj akcję 4”

Tutaj ciąg „Wykonaj działanie” jest dowolny i można go zastąpić wszystkim. Polecenie with_random_choice wybrałoby z losowej listy akcji.

Przykłady pętli „aż do”

Ta sekcja przewodnika będzie dotyczyła składni pętli „do”.

Jak wspomniano wcześniej, polecenie „do” powtórzy określony zestaw instrukcji, dopóki nie spełni określonego warunku.

Oto przykład pętli „do” w akcji.

Shell:/usr/bin/foo

Zarejestruj się: wynik

TO: wynik.Stdout.Znajdź („Wszystkie systemy gotowe”) != -1

PONOWNIE: 10

Opóźnienie: 7

To jest przykład pętli rekurencyjnej. Powyższy blok kodu będzie nadal działał, dopóki powłoka odbędzie „wszystkie systemy gotowe” jako wyjście tekstowe. Jeśli tak nie jest, zatrzyma się po 10 razy, ponieważ określone ponownie wynoszą „10”.

Opóźnienie odpowiada opóźnieniu w sekundach. Domyślnie jest ustawiony na 5.

Wniosek

To był przewodnik o tym, jak możesz używać pętli w Ansible. Omówiliśmy podstawy pętli i ich składni w Ansible i wykazaliśmy ich zastosowanie za pomocą różnych przykładów. Mamy nadzieję, że jesteś o krok bliżej automatyzacji procesów za pomocą Ansible.