Ansible Tutorial pro začátečníky: Příručka, příkazy a příklad

Co je Ansible?

Možná je open source nástroj pro automatizaci a orchestraci pro poskytování softwaru, správu konfigurace a nasazení softwaru. Ansible může snadno spouštět a konfigurovat systémy podobné Unixu Windows systémy poskytující infrastrukturu jako kód. Obsahuje vlastní deklarativní programovací jazyk pro konfiguraci a správu systému.

Ansible je oblíbený pro svou jednoduchost instalace, snadné použití v oblasti připojení ke klientům, nedostatek agenta pro klienty Ansible a množství dovedností. Funguje připojením přes SSH ke klientům, takže nepotřebuje speciálního agenta na straně klienta a odesláním modulů klientům se moduly spouštějí lokálně na straně klienta a výstup se posílá zpět na server Ansible.

Protože používá SSH, může se velmi snadno připojit ke klientům pomocí SSH-Keys, což celý proces zjednodušuje. Podrobnosti klienta, jako jsou názvy hostitelů nebo IP adresy a porty SSH, jsou uloženy v souborech nazývaných inventární soubory. Jakmile vytvoříte soubor inventáře a naplníte jej, může jej ansible použít.

Proč používat Ansible?

Zde jsou některé důležité výhody/výhody používání Ansible

  • Jednou z nejvýznamnějších výhod Ansible je, že jej může používat každý zdarma.
  • K instalaci a používání Ansible nepotřebuje žádné speciální schopnosti správce systému a oficiální dokumentace je velmi obsáhlá.
  • Jeho modularita týkající se zásuvných modulů, modulů, inventářů a playbooků činí z Ansible perfektního společníka pro organizaci velkých prostředí.
  • Ansible je velmi lehký a konzistentní a neexistují žádná omezení týkající se operačního systému nebo základního hardwaru.
  • Je také velmi bezpečný díky svým schopnostem bez agenta a díky použití bezpečnostních funkcí OpenSSH.
  • Další výhodou, která podporuje přijetí Ansible, je jeho plynulá křivka učení určená komplexní dokumentací a snadnou strukturou a konfigurací.

Historie Ansible

Zde jsou důležité orientační body z historie ansible:

  • V únoru 2012 začal projekt Ansible. Poprvé jej vyvinul Michael DeHaan, tvůrce Cobbler a Func, Fedora Unified Network Controller.
  • Původně se jmenovala AnsibleWorks Inc, společnost financující nástroj ansible získala v roce 2015 RedHat a později spolu s RedHat přešla pod záštitu IBM.
  • V současnosti je Ansible součástí distribucí jako Fedora Linux, RHEL, Centos a Oracle Linux.

Důležité termíny používané v Ansible

  • Ansible server

    Počítač, na kterém je nainstalován Ansible a ze kterého budou spouštěny všechny úlohy a playbooky

  • Modul

    Modul je v podstatě příkaz nebo sada podobných příkazů Ansible, které mají být provedeny na straně klienta

  • Úkol

    Úloha je část, která se skládá z jediného postupu, který má být dokončen

  • Role

    Způsob organizace úkolů a souvisejících souborů, které budou později vyvolány v playbooku

  • Skutečnost

    Informace načtené z klientského systému z globálních proměnných pomocí operace shromáždit fakta

  • Inventář

    Soubor obsahující data o dostupných klientských serverech. Definováno v pozdějších příkladech jako soubor hostitelů

  • Hrát

    Provedení playbooku

  • Psovod

    Úloha, která je volána pouze v případě, že je přítomen oznamovatel

  • Oznamovatel

    Sekce přiřazená úloze, která volá handler, pokud se výstup změní

  • štítek

    Název nastavený na úkol, který lze později použít k zadání pouze tohoto konkrétního úkolu nebo skupiny úkolů.

Možnost instalace v Linuxu

Jakmile porovnáte a zvážíte své možnosti a rozhodnete se pro Ansible, dalším krokem je nainstalovat ji do vašeho systému. Projdeme si jednotlivé kroky instalace Linux distribuce, nejoblíbenější, v dalším malém tutoriálu.

Nainstalujte Ansible na systémy Centos/RedHat

Krok 1) Nainstalujte EPEL repo

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

Krok 2) Nainstalujte balíček ansible

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

Nainstalujte Ansible na systémy Centos/RedHat

Nainstalujte ansible na Ubuntu/systémy Debian

Krok 1) Proveďte aktualizaci balíčků

$ sudo apt update

Krok 2) Nainstalujte balíček software-properties-common

$ sudo apt install software-properties-common

Krok 3) Nainstalujte archiv osobních balíčků ansible

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

Krok 4) Nainstalujte ansible

$ sudo apt update
$ sudo apt install ansible

Povolené ad-hoc příkazy

Jedním z nejjednodušších způsobů použití Ansible je použití ad-hoc příkazů. Ty lze použít, když chcete zadat nějaké příkazy na serveru nebo na více serverech. Příkazy ad-hoc se neukládají pro budoucí použití, ale představují rychlý způsob interakce s požadovanými servery.

Pro tento výukový program Ansible bude nakonfigurován jednoduchý soubor hostitelů se dvěma servery, který bude obsahovat hostitel1 a hostitel2.

Můžete se ujistit, že hostitelé jsou přístupní ze serveru ansible zadáním příkazu ping na všech hostitelích.

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

Ansible ad-hoc příkazy

Vysvětlení:

  1. Stav příkazu, v tomto případě SUCCESS
  2. Hostitel, na kterém byl příkaz spuštěn
  3. Příkaz zadaný prostřednictvím parametru -m, v tomto případě ping
  4. Pomocí parametru -i můžete ukázat na soubor hosts.


V případě potřeby můžete zadat stejný příkaz pouze na konkrétním hostiteli.

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

Ansible ad-hoc příkazy

Vysvětlení:

  1. Parametr Limit lze použít k zadávání příkazů pouze na konkrétních hostitelích v souboru hostitele
  2. Název hostitele definovaný v souboru inventáře

Pokud potřebujete rychle zkopírovat soubor na více cílů, můžete použít kopírovací modul v ansible, který používá SCP. Takže příkaz a jeho výstup vypadají níže:

[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
}

Ansible ad-hoc příkazy

Vysvětlení:

  1. Kopírovat modul definován
  2. Argumenty modulu jsou v tomto případě zdrojová absolutní cesta a cílová absolutní cesta.
  3. Výstup příkazu Ansible odrážející úspěšnost příkazu kopírování a další podrobnosti, jako jsou kontrolní součty sha1 nebo md5 pro kontrolu integrity souboru a metadata, jako je vlastník, velikost nebo oprávnění. Mít balíček nainstalovaný na hromadě serverů je snadné. Ansible má několik modulů, které komunikují s použitými instalačními programy, jako je yum, apt, dnf atd.

V dalším příkladu zjistíte, jak nainstalovat balíček prostřednictvím modulu yum na dva hostitele 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"
    ]
}

Ansible ad-hoc příkazy

Vysvětlení:

  1. V tomto příkladu je použit modul Yum
  2. Definuje argumenty modulu a v tomto případě zvolíte název balíčku a jeho stav. Pokud například stav chybí, bude balíček prohledán a pokud bude nalezen, bude odstraněn
  3. Při žluté barvě uvidíte výstup příkazu ansible se změněným stavem, což v tomto případě znamená, že balíček byl nalezen a nainstalován.
  4. Stav instalačního příkazu yum vydaného přes ansible. V tomto případě byl nainstalován balíček ncdu.x86_64 0:1.14-1.el7.

Všechny možnosti yum instalačního programu lze samozřejmě použít prostřednictvím ansible, včetně aktualizace, instalace, nejnovější verze nebo odstranění.

V níže uvedeném příkladu byl vydán stejný příkaz k odstranění dříve nainstalovaného balíčku 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"
    ]
}

Ansible ad-hoc příkazy

Vysvětlení:

  1. Výstup příkazu yum ukazuje, že balíček byl odstraněn.

Další užitečnou a základní funkcí, kterou ansible používá k interakci se serverem klienta, je shromažďování některých faktů o systému. Stahuje tedy informace o hardwaru, softwaru a verzích ze systému a každou hodnotu ukládá do proměnné, kterou lze později použít.

Pokud potřebujete podrobné informace o systémech, které mají být upraveny pomocí ansible, lze použít následující příkaz. Modul nastavení shromažďuje fakta ze systémových proměnných.

Ansible ad-hoc příkazy

Ansible Playbooks

Ansible Playbooks jsou způsob odesílání příkazů vzdáleným systémům prostřednictvím skriptů. Ansible playbooky se používají ke konfiguraci složitých systémových prostředí pro zvýšení flexibility spuštěním skriptu na jednom nebo více systémech. Ansible playbooky bývají spíše konfiguračním jazykem než programovacím jazykem.

Příkazy Ansible playbook používají formát YAML, takže není potřeba mnoho syntaxe, ale musí být respektováno odsazení. Jak už název napovídá, playbook je sbírka her. Prostřednictvím playbooku můžete některým hostitelům určit konkrétní role a jiným hostitelům jiné role. Tímto způsobem můžete organizovat více serverů ve velmi rozmanitých scénářích, vše v jedné příručce.

Abychom měli všechny podrobnosti přesné, než budeme pokračovat s příklady Ansible playbooku, musíme nejprve definovat úkol. Jedná se o rozhraní k ansible modulům pro role a playbooky.

Nyní se pojďme naučit hru Ansible prostřednictvím příkladu s jednou hrou s jednou hrou, která obsahuje více úkolů, jak je uvedeno níže:

---

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

Ansible Playbooks

Ve výše uvedeném příkladu Ansible playbooku je skupina hostitelů v souboru hostitele zaměřena na instalaci balíčku lldpad pomocí modulu yum a poté je spuštěn servisní modul lldpad vytvořený po instalaci pomocí servisního modulu používaného většinou k interakci se souborem systemd.

Vysvětlení:

  1. Skupina hostitelů, na kterých poběží playbook
  2. Modul Yum se v této úloze používá pro instalaci lldpad
  3. Servisní modul slouží ke kontrole, zda je služba po instalaci spuštěna

Každý ansible playbook pracuje se souborem inventáře. Soubor inventáře obsahuje seznam serverů rozdělených do skupin pro lepší kontrolu podrobností jako IP adresa a SSH port pro každého hostitele.

Soubor inventáře, který můžete použít pro tento příklad Ansible playbooku, vypadá níže. Existují dvě skupiny, pojmenované skupina1 a skupina2, z nichž každá obsahuje hostitel1 a hostitel2.

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

Ansible Playbooks

Vysvětlení:

  1. Název skupiny
  2. Název hostitele s IP adresou a portem ssh, v tomto případě výchozí, 22.

Další užitečný příklad Ansible playbooku obsahující tentokrát dvě hry pro dva hostitele je další. Pro první skupinu hostitelů, group1, bude selinux povolen. Pokud je povolena, na obrazovce hostitele se zobrazí zpráva.

U druhé skupiny hostitelů bude balíček httpd nainstalován pouze v případě, že ansible_os_family je RedHat a ansible_system_vendor je HP.

Ansible_os_family a ansible_system_vendor jsou proměnné shromážděné pomocí volby collect_facts a lze je použít jako v tomto podmíněném příkladu.

---

- 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'

Ansible Playbooks

Vysvětlení:

  1. Příklad klauzule when, V tomto případě, kdy je typ OS Debian. Proměnná ansible_os_family se shromažďuje pomocí funkce collect_facts.
  2. Výstup úlohy je registrován pro budoucí použití pod názvem enable_selinux
  3. Další příklad klauzule when. V tomto případě se uživateli hostitele zobrazí zpráva, pokud byl SELinux skutečně povolen dříve.
  4. Další příklad klauzule when sestávající ze dvou pravidel

Kromě úkolů existují také některé konkrétní úkoly nazývané handlery. Obslužné rutiny musí mít v celé knize jedinečné jméno. Ty fungují stejně jako běžný úkol, ale obsluha může být upozorněna prostřednictvím oznamovatele.

Pokud není handler během běhu playbooku upozorněn, nespustí se. Pokud však obsluhu upozorní více než jedna úloha, spustí se pouze jednou po dokončení všech úloh.

V níže uvedeném příkladu můžete vidět, jak má konkrétní úkol sekci oznámení, která vyzývá k jinému úkolu. Pokud se změní výstup první úlohy, bude zavolána úloha handleru. Nejlepším příkladem je změnit konfigurační soubor a poté tuto konkrétní službu restartovat.

---

- 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

V tomto případě, pokud se změní první úloha, „sshd config file Modify port“, což znamená, že pokud port není 28675 na prvním místě, pak bude upraven a úloha upozorní obsluhu se stejným názvem, aby byla spuštěna. a restartuje službu sshd.

Ansible Playbooks

Vysvětlení:

  1. Příklad oznamovatele
  2. Příklad psovoda

Ansible role

Při práci s rozsáhlými učebnicemi je jednodušší rozdělit úkoly do rolí. To také pomáhá při opětovném použití rolí v budoucnu. Role jsou sbírkou úloh, které lze přesouvat z jedné příručky do druhé, lze ji spouštět nezávisle, ale pouze prostřednictvím souboru příručky.

Role jsou uloženy v samostatných adresářích a mají konkrétní adresářovou strukturu.

[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

Soubor yaml v adresáři defaults obsahuje seznam výchozích proměnných, které mají být použity spolu s playbookem. Adresář handlerů se používá k ukládání handlerů. Meta-adresář má obsahovat informace o autorovi a závislostech rolí. V adresáři úloh je hlavní soubor yaml pro roli.

Adresář testy obsahuje ukázkový soubor yaml playbook a ukázkový soubor inventáře a většinou se používá pro účely testování před vytvořením skutečné role.

Adresář vars obsahuje soubor yaml, ve kterém budou definovány všechny proměnné používané rolí. Šablony adresářů a soubory adresářů by měly obsahovat soubory a šablony, které budou použity úkoly v roli.

Chcete-li vytvořit strom adresářů pro roli, měli byste použít následující příkaz s posledním parametrem, názvem role:

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

Ansible také dobře funguje se šablonami. Jako jazyk pro šablonování používá Jinja2.

V dalším příkladu zjistíte, jak vypadá základní šablona jinja2 a použijete ji v roli.

Za běhu, řekněme, v jakém datovém centru se váš server nachází, můžete pomocí proměnné „resolver_ip_addresses“ vybrat z více než jednoho jmenného serveru, z nichž každý odpovídá datovému centru.

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

options timeout:1
options attempts:5
options rotate

V tomto příkladu jsou v adresáři playbook definovány některé proměnné, včetně proměnné s názvem resolver_ip_addresses s různými hodnotami v závislosti na datovém centru.

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

Ansible role

Vysvětlení:

  1. Název šablony, která se má použít. Šablona se nachází v adresáři šablon v cestě role
  2. Cílová cesta názvu souboru, který má být nahrazen šablonou, na straně klienta.
  3. Oprávnění cílového souboru

Úlohy rolí mohou mít také pole značky, které má přiřazený název. Více než jeden úkol může sdílet stejnou značku. Při spuštění ansible playbooku můžete také zadat značku, takže tyto úlohy budou provedeny.

Případová studie Ansible

V této části budeme analyzovat případovou studii základní příručky ansible, která má tři role. Účelem toho je uvést praktický příklad toho, o čem jsme hovořili dříve. Některé příklady použité dříve v této příručce Ansible budou upraveny a použity v této příručce.

Níže je uvedena adresářová struktura playbooku. Soubor Yaml, který bude použit, bude 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

Příručka má tři role, jedna se nazývá resolver, která nastavuje konkrétní jmenný server na serverech zkopírováním souboru ze serveru do cíle /etc/resolv.conf. Další se nazývá httpd a nainstaluje balíček httpd s modulem yum a třetí povolí SELinux a upozorní přihlášeného uživatele, aby restartoval systém. Každá role byla vytvořena pomocí příkazu ansible-galaxy.

Role řešitele, úkol main.yml:

Případová studie Ansible

Httpd role, main.yml úkol:

Případová studie Ansible

Role Selinuxu, úkol main.yml:

Případová studie Ansible

Níže je definována příručka p4.yml. Poběží na všech hostitelích, pokud není v příkazovém řádku uvedeno jinak, poběží jako uživatel root na portu 22 (SSH), před spuštěním rolí shromáždí fakta a poběží všechny tři výše uvedené role. Každou roli lze spustit nezávisle zadáním značky v příkazovém řádku ansible-playbook s parametrem –t.

---

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

Spuštění playbooku p4.yml na dvou hostitelích a interpretace výstupu. Stejný příkaz lze spustit s parametrem –check pro chod nasucho. V případě, že chcete použít ověřování heslem, použijte parametr -k.

Případová studie Ansible

Vysvětlení:

  1. Příkaz Ansible-playbook, který spouští p4.yml
  2. Příručka přeskočí roli SELinux, protože je již povolena.
  3. Ansible zjistil, že balíček httpd je již nainstalován, takže se vrátí ok.
  4. Překladač byl nastaven a stav překladače rolí se změnil.

Ansible Commands Cheat Sheet

Nainstalujte EPEL repo na systémy Centos/RHEL

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

Nainstalujte balíček ansible na systémy Centos/RHEL

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

Proveďte aktualizaci balíčků na Debian/Ubuntu systémy

$ sudo apt update

Nainstalujte balíček software-properties-common na Debian/Ubuntu systémy

$ sudo apt install software-properties-common

Nainstalujte ansible osobní archiv balíčků na Debian/Ubuntu systémy

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

Nainstalujte ansible na Debian/Ubuntu systémy

$ sudo apt update
$ sudo apt install ansible

Zadejte příkaz ping na všech serverech definovaných v souboru inventáře s názvem hosts

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

Zadejte příkaz ping pouze na hostiteli2

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

Zkopírujte soubor „testfile“ na všechny hostitele v souboru inventáře

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

Nainstalujte balíček ncdu na všechny hostitele

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

Odeberte balíček ncdu ze všech hostitelů

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

Vytvořte adresářovou strukturu pro roli s názvem role1.

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

Dry-run p4.yml playbook

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

Spusťte p4.yml playbook s ověřením hesla pro všechny hostitele

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

Shrnutí

Ve světě s technologií, která se neustále mění rychlým tempem a zároveň neuvěřitelně rychle roste, musí správci systému a vývojoví inženýři přemýšlet o různých přístupech, jak automatizovat rutinní úlohy a organizovat velké skupiny serverů.

Zatímco je mnoho alternativa k Ansible (Chef, Puppet) tam venku, které dělají totéž s určitými rozdíly, se Ansible dokázal povznést nad všechny z nich svou jednoduchostí, vylepšeným zabezpečením a především svou hladkou křivkou učení. Díky těmto kvalitám a rychlému přijetí Ansible jsme vytvořili tutoriál plný příkladů, abyste mohli mít ještě hladší první zkušenost s prací s Ansible.

V tomto tutoriálu základy Ansible jsme popsali ansible a mluvili trochu o jeho historii. Zmínili jsme silné stránky Ansible a výhody, které ansible může přinést automatizaci a orchestraci infrastruktur různých velikostí. Definovali jsme základní ansible používané termíny a definovali strukturu Ansible playbooků. Důkladné příklady doprovázely všechny informace s podrobným vysvětlením.