Samouczek Ansible dla początkujących: podręcznik, polecenia i przykłady

Co to jest Ansible?

Wiarygodne to narzędzie do automatyzacji i orkiestracji typu open source służące do dostarczania oprogramowania, zarządzania konfiguracją i wdrażania oprogramowania. Ansible może z łatwością uruchamiać i konfigurować systemy typu Unix Windows systemy zapewniające infrastrukturę w postaci kodu. Zawiera własny deklaratywny język programowania do konfiguracji i zarządzania systemem.

Ansible jest popularny ze względu na prostotę instalacji, łatwość użycia w zakresie łączności z klientami, brak agenta dla klientów Ansible i mnogość umiejętności. Działa poprzez połączenie poprzez SSH do klientów, więc nie potrzebuje specjalnego agenta po stronie klienta, a wypychając moduły do ​​klientów, moduły są następnie wykonywane lokalnie po stronie klienta, a dane wyjściowe są wypychane z powrotem do serwera Ansible.

Ponieważ używa SSH, może bardzo łatwo łączyć się z klientami za pomocą kluczy SSH, upraszczając cały proces. Szczegóły klienta, takie jak nazwy hostów lub adresy IP i porty SSH, są przechowywane w plikach zwanych plikami inwentarzowymi. Po utworzeniu pliku inwentarzowego i wypełnieniu go, ansible może go użyć.

Dlaczego warto używać Ansible?

Oto kilka ważnych zalet/korzyści korzystania z Ansible

  • Jedną z najważniejszych zalet Ansible jest to, że każdy może z niego korzystać bezpłatnie.
  • Aby zainstalować i używać Ansible, nie potrzeba żadnych specjalnych umiejętności administratora systemu, a oficjalna dokumentacja jest bardzo obszerna.
  • Jego modułowość dotycząca wtyczek, modułów, inwentarzy i podręczników sprawia, że ​​Ansible jest idealnym towarzyszem do orkiestrowania dużych środowisk.
  • Ansible jest bardzo lekki i spójny, nie ma w nim żadnych ograniczeń związanych z systemem operacyjnym lub sprzętem.
  • Jest również bardzo bezpieczny ze względu na możliwości bezagentowe i dzięki zastosowaniu funkcji bezpieczeństwa OpenSSH.
  • Kolejną zaletą zachęcającą do przyjęcia Ansible jest płynna krzywa uczenia się wynikająca z obszernej dokumentacji oraz łatwa do nauczenia się struktura i konfiguracja.

Historia Ansible’a

Oto ważne punkty orientacyjne z historii ansibla:

  • W lutym 2012 roku rozpoczął się projekt Ansible. Został po raz pierwszy opracowany przez Michaela DeHaana, twórcę Cobbler i Func, Fedora Unified Network Controller.
  • Firma, która pierwotnie nazywała się AnsibleWorks Inc., finansująca narzędzie Ansible, została przejęta w 2015 r. przez RedHat, a później wraz z RedHatem przeszła pod skrzydła IBM.
  • Obecnie Ansible jest dostępny w dystrybucjach takich jak Fedora Linux, RHEL, Centos i Oracle Linux.

Ważne terminy używane w Ansible

  • Serwer Ansible

    Maszyna, na której zainstalowany jest Ansible i z której będą uruchamiane wszystkie zadania i podręczniki

  • Moduł

    Zasadniczo moduł to polecenie lub zestaw podobnych poleceń Ansible, które mają być wykonywane po stronie klienta

  • Zadanie

    Zadanie to sekcja składająca się z pojedynczej procedury do wykonania

  • Rola

    Sposób organizacji zadań i powiązanych plików, które mają być później wywoływane w podręczniku

  • Fakt

    Informacje pobrane z systemu klienta ze zmiennych globalnych za pomocą operacji zbierania faktów

  • Magazyn

    Plik zawierający dane o serwerach klienckich ansible. Zdefiniowany w późniejszych przykładach jako plik hosts

  • Graj

    Wykonanie podręcznika

  • Treser

    Zadanie wywoływane tylko wtedy, gdy obecny jest powiadamiający

  • Powiadamiający

    Sekcja przypisana do zadania, które wywołuje procedurę obsługi w przypadku zmiany danych wyjściowych

  • etykieta

    Ustaw nazwę zadania, która może być później użyta do zlecenia tylko tego konkretnego zadania lub grupy zadań.

Instalacja Ansible w systemie Linux

Kiedy już porównałeś i rozważyłeś dostępne opcje i zdecydowałeś się na Ansible, następnym krokiem jest zainstalowanie go w systemie. Przejdziemy przez kolejne etapy instalacji w różny sposób Linux dystrybucje, te najpopularniejsze, w następnym małym samouczku.

Zainstaluj Ansible na systemach Centos/RedHat

Krok 1) Zainstaluj repozytorium EPEL

[root@ansible-server ~]# sudo yum install epel-release

Krok 2) Zainstaluj pakiet anible

[root@ansible-server ~]# sudo  yum install -y ansible

Zainstaluj Ansible na systemach Centos/RedHat

Zainstaluj anible na Ubuntu/Systemy Debian

Krok 1) Wykonaj aktualizację pakietów

$ sudo apt update

Krok 2) Zainstaluj pakiet Software-Properties-Common

$ sudo apt install software-properties-common

Krok 3) Zainstaluj archiwum pakietów osobistych Ansible

$ sudo apt-add-repository ppa:ansible/ansible

Krok 4) Zainstaluj ansibla

$ sudo apt update
$ sudo apt install ansible

Polecenia doraźne Ansible

Jednym z najprostszych sposobów wykorzystania Ansible jest użycie poleceń ad hoc. Można ich użyć, gdy chcesz wydać jakieś polecenia na serwerze lub grupie serwerów. Polecenia ad-hoc nie są przechowywane do wykorzystania w przyszłości, ale stanowią szybki sposób interakcji z wybranymi serwerami.

Na potrzeby tego samouczka Ansible zostanie skonfigurowany prosty plik hostów dwóch serwerów, zawierający host1 i host2.

Możesz upewnić się, że hosty są dostępne z serwera ansible, wydając polecenie ping na wszystkich hostach.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Polecenia doraźne Ansible

Wyjaśnienie:

  1. Status polecenia, w tym przypadku SUKCES
  2. Host, na którym uruchomiono polecenie
  3. Polecenie wydane za pomocą parametru -m, w tym przypadku ping
  4. Za pomocą parametru -i możesz wskazać plik hosts.


W razie potrzeby możesz wydać to samo polecenie tylko na określonym hoście.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Polecenia doraźne Ansible

Wyjaśnienie:

  1. Parametr Limit może być używany do wydawania poleceń tylko na określonych hostach w pliku hosta
  2. Nazwa hosta zdefiniowana w pliku inwentarza

Jeśli chcesz szybko skopiować plik do wielu miejsc docelowych, możesz użyć modułu kopiowania w ansible, który używa SCP. Zatem polecenie i jego dane wyjściowe wyglądają jak poniżej:

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
host1 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source",
    "state": "file",
    "uid": 0
}
host2 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source",
    "state": "file",
    "uid": 0
}

Polecenia doraźne Ansible

Wyjaśnienie:

  1. Zdefiniowano moduł kopiowania
  2. Argumentami modułu są w tym przypadku bezwzględna ścieżka źródłowa i bezwzględna ścieżka docelowa.
  3. Wyjście polecenia Ansible odzwierciedlające powodzenie polecenia copy i inne szczegóły, takie jak sumy kontrolne sha1 lub md5 do sprawdzania integralności pliku i metadane, takie jak właściciel, rozmiar lub uprawnienia. Łatwo jest zainstalować pakiet na wielu serwerach. Ansible ma kilka modułów, które współpracują z używanymi instalatorami, takimi jak yum, apt, dnf itp.

W następnym przykładzie dowiesz się, jak zainstalować pakiet za pomocą modułu yum na dwóch hostach Centos.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [


"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Polecenia doraźne Ansible

Wyjaśnienie:

  1. W tym przykładzie użyto modułu Yum
  2. Definiuje argumenty modułu i w tym przypadku to Ty wybierasz nazwę pakietu i jego stan. Jeśli na przykład nie ma stanu, paczka zostanie przeszukana i jeśli zostanie znaleziona, usunięta
  3. Pokolorowane na żółto zobaczysz wynik polecenia ansible ze zmienionym stanem, co w tym przypadku oznacza, że ​​pakiet został znaleziony i zainstalowany.
  4. Status polecenia instalacji yum wydanego przez ansible. W tym przypadku został zainstalowany pakiet ncdu.x86_64 0:1.14-1.el7.

Oczywiście ze wszystkich opcji instalatora yum można skorzystać za pośrednictwem ansible, włączając w to aktualizację, instalację, najnowszą wersję lub usunięcie.

W poniższym przykładzie wydano to samo polecenie, aby usunąć wcześniej zainstalowany pakiet ncdu.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Polecenia doraźne Ansible

Wyjaśnienie:

  1. Dane wyjściowe polecenia yum pokazują, że pakiet został usunięty.

Inną przydatną i niezbędną funkcją, której ansible używa do interakcji z serwerem klienta, jest zbieranie pewnych faktów o systemie. Pobiera więc informacje o sprzęcie, oprogramowaniu i wersjonowaniu z systemu i przechowuje każdą wartość w zmiennej, która może być później użyta.

Jeśli potrzebujesz szczegółowych informacji o systemach, które mają być modyfikowane za pomocą ansible, możesz użyć następnego polecenia. Moduł instalacyjny zbiera fakty ze zmiennych systemowych.

Polecenia doraźne Ansible

Podręczniki Ansible

Podręczniki Ansible są sposobem wysyłania poleceń do zdalnych systemów za pomocą skryptów. Playbooki Ansible służą do konfigurowania złożonych środowisk systemowych w celu zwiększenia elastyczności poprzez wykonywanie skryptu w jednym lub większej liczbie systemów. Playbooki Ansible są raczej językiem konfiguracji niż językiem programowania.

Polecenia podręcznika Ansible korzystają z formatu YAML, więc nie jest wymagana duża składnia, ale należy przestrzegać wcięć. Jak sama nazwa wskazuje, podręcznik jest zbiorem sztuk teatralnych. Za pomocą podręcznika możesz przypisać określone role niektórym hostom i inne role innym hostom. W ten sposób możesz koordynować wiele serwerów w bardzo różnych scenariuszach, a wszystko to w jednym podręczniku.

Aby mieć wszystkie szczegóły precyzyjne przed kontynuowaniem przykładów playbooków Ansible, musimy najpierw zdefiniować zadanie. Są to interfejsy do modułów Ansible dla ról i playbooków.

Teraz nauczmy się podręcznika Ansible na przykładzie jednego podręcznika z jedną grą, zawierającego wiele zadań, jak poniżej:

---

- hosts: group1
  tasks:
  - name: Install lldpad package
    yum:
      name: lldpad
      state: latest
  - name: check lldpad service status
    service:
      name: lldpad
      state: started

Podręczniki Ansible

W powyższym przykładzie podręcznika Ansible grupa 1 hostów w pliku hosta jest przeznaczona do instalacji pakietu lldpad przy użyciu modułu yum, a następnie usługa lldpad utworzona po instalacji jest uruchamiana przy użyciu modułu usługi używanego głównie do interakcji z zespołem systemowym.

Wyjaśnienie:

  1. Grupa hostów, na których będzie działać podręcznik
  2. Moduł Yum jest używany w tym zadaniu do instalacji lldpad
  3. Moduł serwisowy służy do sprawdzania, czy usługa działa po instalacji

Każdy ansible playbook działa z plikiem inwentarza. Plik inwentarza zawiera listę serwerów podzieloną na grupy w celu lepszej kontroli szczegółów, takich jak Adres IP i port SSH dla każdego hosta.

Plik ekwipunku, którego możesz użyć w tym przykładzie podręcznika Ansible, wygląda jak poniżej. Istnieją dwie grupy, nazwane grupa1 i grupa2, każda zawierająca odpowiednio host1 i host2.

[group1]
host1 ansible_host=192.168.100.2 ansible_ssh_port=22
[group2]
host2 ansible_host=192.168.100.3 ansible_ssh_port=22

Podręczniki Ansible

Wyjaśnienie:

  1. Nazwa grupy
  2. Nazwa hosta z adresem IP i portem ssh, w tym przypadku domyślnym, 22.

Kolejnym przydatnym przykładem podręcznika Ansible, który tym razem zawiera dwie gry dla dwóch hostów, jest następny. Dla pierwszej grupy hostów, grupy 1, zostanie włączony selinux. Jeśli jest włączona, na ekranie hosta pojawi się komunikat.

Dla drugiej grupy hostów pakiet httpd zostanie zainstalowany tylko wtedy, gdy ansible_os_family to RedHat, a ansible_system_vendor to HP.

Ansible_os_family i ansible_system_vendor to zmienne zbierane za pomocą opcji zbierania_faktów i można ich używać jak w tym przykładzie warunkowym.

---

- hosts: group1
  tasks:
  - name: Enable SELinux
    selinux:
      state: enabled
    when: ansible_os_family == 'Debian'
    register: enable_selinux

  - debug:
      Imsg: "Selinux Enabled. Please restart the server to apply changes."
    when: enable_selinux.changed == true

- hosts: group2
  tasks:
  - name: Install apache
    yum:
      name: httpd
      state: present
    when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'

Podręczniki Ansible

Wyjaśnienie:

  1. Przykład klauzuli When. W tym przypadku, gdy typem systemu operacyjnego jest Debian. Zmienna ansible_os_family jest zbierana za pomocą funkcji zbierania faktów.
  2. Dane wyjściowe zadania są rejestrowane do wykorzystania w przyszłości pod nazwą Enable_selinux
  3. Inny przykład klauzuli when. W tym przypadku wiadomość zostanie wyświetlona dla użytkownika hosta, jeśli SELinux był rzeczywiście włączony wcześniej.
  4. Inny przykład klauzuli When składającej się z dwóch reguł

Oprócz zadań istnieją również pewne szczególne zadania zwane procedurami obsługi. Programy obsługi muszą mieć unikalną nazwę w całym podręczniku. Działają one w taki sam sposób, jak zwykłe zadanie, ale osoba obsługująca może zostać powiadomiona za pośrednictwem powiadamiacza.

Jeśli program obsługi nie zostanie powiadomiony podczas uruchamiania podręcznika, nie zostanie on uruchomiony. Jeśli jednak więcej niż jedno zadanie powiadomi moduł obsługi, zostanie ono uruchomione tylko raz po zakończeniu wszystkich zadań.

W przykładzie pokazanym poniżej możesz zobaczyć, że określone zadanie ma sekcję powiadomień, która wywołuje inne zadanie. Jeśli dane wyjściowe pierwszego zadania zostaną zmienione, zostanie wywołane zadanie obsługi. Najlepszym przykładem jest zmiana pliku konfiguracyjnego, a następnie ponowne uruchomienie tej konkretnej usługi.

---

- hosts: group2
  tasks:
  - name: sshd config file modify port
    lineinfile:
     path: /etc/ssh/sshd_config
     regexp: 'Port 28675'
     line: '#Port 22'
    notify:
       - restart sshd
handlers
    - name: restart sshd
      service: sshd
        name: sshd
        state: restarted

W tym przypadku, jeśli pierwsze zadanie „sshd config file modyfikacji port” zostanie zmienione, co oznacza, że ​​jeśli port nie jest 28675, to zostanie zmodyfikowany, a zadanie powiadomi procedurę obsługi o tej samej nazwie do uruchomienia i ponownie uruchomi usługę sshd.

Podręczniki Ansible

Wyjaśnienie:

  1. Przykład powiadamiającego
  2. Przykład handlera

Role Ansibla

Mając do czynienia z rozbudowanymi podręcznikami, łatwiej jest podzielić zadania na role. Pomaga to również w ponownym wykorzystaniu ról w przyszłości. Role to zbiór zadań, które można przenosić z jednego podręcznika do drugiego, które można uruchamiać niezależnie, ale tylko za pośrednictwem pliku scenariusza.

Role są przechowywane w oddzielnych katalogach i mają określoną strukturę katalogów.

[root@ansible-server test2]# tree
.
`-- role1
    |-- defaults
    |   `-- main.yml
    |-- handlers
    |   `-- main.yml
    |-- meta
    |   `-- main.yml
    |-- README.md
    |-- tasks
    |   `-- main.yml
    |-- tests
    |   |-- inventory
    |   `-- test.yml
    `-- vars
        `-- main.yml

7 directories, 8 files

Plik yaml w katalogu defaults zawiera listę domyślnych zmiennych, które mają być używane wraz z podręcznikiem. Katalog handlers służy do przechowywania procedur obsługi. Metakatalog powinien zawierać informacje o autorze i zależnościach ról. W katalogu zadań znajduje się główny plik YAML dla tej roli.

Katalog testów zawiera przykładowy plik podręcznika YAML i przykładowy plik inwentarza i jest używany głównie do celów testowych przed utworzeniem rzeczywistej roli.

Katalog vars zawiera plik yaml, w którym zostaną zdefiniowane wszystkie zmienne używane przez rolę. Szablony katalogów i pliki katalogów powinny zawierać pliki i szablony, które będą używane przez zadania w roli.

Aby utworzyć drzewo katalogów dla roli, należy użyć następującego polecenia z ostatnim parametrem, nazwą roli:

[root@ansible-server test2]# ansible-galaxy init role1

Ansible działa również dobrze z szablonami. Jako język szablonów używa Jinja2.

W następnym przykładzie dowiesz się jak wygląda podstawowy szablon jinja2 i wykorzystasz go w roli.

W czasie wykonywania, w zależności od, powiedzmy, w którym centrum danych znajduje się Twój serwer, możesz wybrać jeden z więcej niż jednego serwera nazw, każdy odpowiadający centrum danych, używając zmiennej „resolver_ip_addresses”.

{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}

options timeout:1
options attempts:5
options rotate

W tym przykładzie w katalogu playbook zdefiniowano kilka zmiennych, w tym zmienną o nazwie resolr_ip_addresses o różnych wartościach w zależności od centrum danych.

- name: Set resolver for server
  template:
    src: dns.j2
    dest: /etc/resolv.conf
    group: root
    owner: root
    mode: "0644"
    tag: resolver	

Role Ansibla

Wyjaśnienie:

  1. Nazwa szablonu, który ma zostać użyty. Szablon znajduje się w katalogu szablonów w ścieżce roli
  2. Ścieżka docelowa nazwy pliku, który ma zostać zastąpiony szablonem, po stronie klienta.
  3. Uprawnienia pliku docelowego

Zadania ról mogą również posiadać pole znacznika, któremu przypisana jest nazwa. Więcej niż jedno zadanie może mieć ten sam tag. Uruchamiając podręcznik ansible, możesz również określić znacznik, aby te zadania zostały wykonane.

Studium przypadku Ansible

W tej sekcji przeanalizujemy studium przypadku niezbędnego podręcznika ansible, który spełnia trzy role. Celem tego jest przedstawienie praktycznego przykładu tego, o czym mówiliśmy wcześniej. Niektóre przykłady użyte wcześniej w tym samouczku dotyczącym podręcznika Ansible zostaną zaadaptowane i wykorzystane w tym podręczniku.

Poniżej znajduje się struktura katalogów podręcznika. Plik Yaml, który będzie używany, będzie p4.yml.

[root@ansible-server test_ansible]# ls -lrth
total 16K
-rw-r--r--. 1 root root   0 Jul  3 10:13 testfile
-rw-r--r--. 1 root root 203 Jul  3 13:30 p1.yml
-rw-r--r--. 1 root root 125 Jul  3 15:00 hosts
-rw-r--r--. 1 root root 488 Jul  3 16:40 p2.yml
-rw-r--r--. 1 root root 188 Jul  4 17:33 p4.yml
drwxr-xr-x. 5 root root  47 Jul  4 17:35 roles
[root@ansible-server test_ansible]# cd roles
[root@ansible-server roles]# ls -lrth
total 12K
drwxr-xr-x. 9 root root 4.0K Jul  4 12:52 httpd
drwxr-xr-x. 9 root root 4.0K Jul  4 13:55 selinux
drwxr-xr-x. 9 root root 4.0K Jul  4 16:54 resolver

Podręcznik ma trzy role, jedną zwaną funkcją rozpoznawania nazw, która ustawia określony serwer nazw na serwerach, kopiując plik z serwera do miejsca docelowego /etc/resolv.conf. Kolejny nazywa się httpd i instaluje pakiet httpd z modułem yum, a trzeci włącza SELinux i powiadamia zalogowanego użytkownika o konieczności ponownego uruchomienia systemu. Każda rola została utworzona za pomocą polecenia ansible-galaxy.

Rola tłumacza, zadanie main.yml:

Studium przypadku Ansible

Rola Httpd, zadanie main.yml:

Studium przypadku Ansible

Rola Selinuksa, zadanie main.yml:

Studium przypadku Ansible

Poniżej znajduje się zdefiniowany playbook p4.yml. Będzie on działał na wszystkich hostach, jeśli nie określono inaczej w wierszu poleceń, będzie działał jako użytkownik root na porcie 22 (SSH), będzie zbierał fakty przed uruchomieniem ról i będzie uruchamiał wszystkie trzy role wymienione wcześniej. Każdą rolę można uruchomić niezależnie, określając tag w wierszu poleceń ansible-playbook za pomocą parametru –t.

---

- hosts: all
  user: root
  port: 22
  gather_facts: True
  roles:
    - { role: selinux, tags: selinux }
    - { role: httpd, tags: httpd }
    - { role: resolver, tags: resolver }

Uruchamianie podręcznika p4.yml na dwóch hostach i interpretowanie danych wyjściowych. To samo polecenie można uruchomić z parametrem –check w przypadku uruchomienia próbnego. Jeśli chcesz użyć uwierzytelniania hasłem, użyj parametru -k.

Studium przypadku Ansible

Wyjaśnienie:

  1. Polecenie Ansible-playbook uruchamiające plik p4.yml
  2. Playbook pomija rolę SELinux, ponieważ jest już włączona.
  3. Ansible odkrył, że pakiet httpd jest już zainstalowany, więc zwraca komunikat OK.
  4. Ustawiono narzędzie do rozpoznawania nazw, a status narzędzia do rozpoznawania ról uległ zmianie.

Ściągawka dotycząca poleceń Ansible

Zainstaluj repozytorium EPEL w systemach Centos/RHEL

[root@ansible-server ~]# sudo yum install epel-release

Zainstaluj pakiet ansible w systemach Centos/RHEL

[root@ansible-server ~]# sudo  yum install -y ansible

Wykonaj aktualizację pakietów w Debianie/Ubuntu systemy

$ sudo apt update

Zainstaluj pakiet software-properties-common na Debianie/Ubuntu systemy

$ sudo apt install software-properties-common

Zainstaluj archiwum pakietów osobistych Ansible na Debianie/Ubuntu systemy

$ sudo apt-add-repository ppa:ansible/ansible

Zainstaluj anible na Debianie/Ubuntu systemy

$ sudo apt update
$ sudo apt install ansible

Wydaj polecenie ping na wszystkich serwerach zdefiniowanych w pliku inwentarza o nazwie hosts

 
[root@ansible-server test_ansible]# ansible -i hosts all -m ping

Wydaj polecenie ping tylko na hoście2

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2

Skopiuj plik „testfile” na wszystkie hosty w pliku ekwipunku

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"

Zainstaluj pakiet ncdu na wszystkich hostach

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'

Usuń pakiet ncdu na wszystkich hostach

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'

Zbuduj strukturę katalogów dla roli o nazwie role1.

[root@ansible-server test2]# ansible-galaxy init role1

Podręcznik próbny p4.yml

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check

Uruchom podręcznik p4.yml z uwierzytelnianiem hasłem dla wszystkich hostów

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k

Podsumowanie

W świecie, w którym technologia zmienia się nieustannie i błyskawicznie, a jednocześnie rozwija się niezwykle szybko, administratorzy systemów i inżynierowie DevOps muszą szukać różnych podejść do automatyzacji rutynowych zadań i koordynowania dużych pul serwerów.

Chociaż jest ich wiele alternatywa dla Ansible (Chef, Puppet), które robią to samo, z pewnymi różnicami, Ansible zdołał wznieść się ponad nich dzięki swojej prostocie, ulepszonemu bezpieczeństwu i, co najważniejsze, płynnej krzywej uczenia się. Ze względu na te cechy i szybkie przyjęcie Ansible, stworzyliśmy samouczek pełen przykładów, dzięki którym możesz mieć jeszcze bardziej płynne pierwsze doświadczenia z pracą z Ansible.

W tym samouczku dotyczącym podstaw Ansible opisaliśmy Ansible i trochę opowiedzieliśmy o jego historii. Wspomnieliśmy o mocnych stronach Ansible i zaletach, jakie Ansible może wnieść do automatyzacji i orkiestracji infrastruktur o różnych rozmiarach. Zdefiniowaliśmy podstawowe terminy używane w Ansible i zdefiniowaliśmy strukturę podręczników Ansible. Dokładne przykłady towarzyszyły wszystkim informacjom ze szczegółowymi wyjaśnieniami.