Tutoriál Ansible pro začátečníky: Příručka a příkazy

⚡ Chytré shrnutí

Ansible je open source automatizační engine bez agentů, který konfiguruje servery přes SSH, spouští ad-hoc příkazy a orchestruje komplexní nasazení pomocí playbooků YAML, rolí a opakovaně použitelných šablon napříč Linuxem a... Windows infrastruktura.

  • 🧩 Bez agenta Archistruktura: Ansible se připojuje ke klientům přes SSH a odesílá moduly, takže na spravovaných uzlech není nutné instalovat žádný agentský software.
  • 📥 Instalace: Nastavte Ansible na řídicím uzlu pomocí yum a EPEL na CentOS nebo RHEL, nebo pomocí apt a PPA na Ubuntu nebo Debian.
  • Příkazy ad-hoc: Spouštět jednorázové úkoly, jako např. ping, kopírování nebo yum v rámci inventáře pomocí syntaxe modulu ansible -m.
  • 📜 Příručky: Popište požadovaný stav v playbookech YAML, které seskupují playe, úlohy a moduly pro konzistentní konfiguraci mnoha serverů.
  • 🧱 Role a šablony: Rozdělte velké playbooky do opakovaně použitelných rolí vytvořených pomocí ansible-galaxy a vykreslete konfigurační soubory pomocí šablon Jinja2.
  • 🔁 Psovodi a fakta: Spouštějte obslužné rutiny pomocí notifikátorů při změně a proměnné gather_facts používejte pro podmíněnou a opakovatelnou automatizaci.
  • 🎯 Případová studie: Jeden playbook p4.yml může spouštět role selinux, httpd a resolver na všech hostitelích, přičemž každý z nich je řízen tagem.

Tutoriál Ansible pro začátečníky, který zahrnuje instalaci, ad-hoc příkazy, playbooky, role a šablony.

Ansible je jedním z nejrozšířenějších open source automatizačních nástrojů v moderním devops, ceněný pro svůj bezagentový design a jednoduché a čitelné konfigurační soubory. Tento tutoriál Ansible pro začátečníky vysvětluje, co je Ansible, jak ho nainstalovat a jak používat ad-hoc příkazy, playbooky, role a šablony, a to prostřednictvím praktických příkladů.

Co je Ansible?

Možná je open source automatizační a orchestrační nástroj pro poskytování softwaru, správu konfigurace a nasazení softwaru. Konfiguruje unixové systémy a Windows systémy podobné, poskytující infrastrukturu jako kód prostřednictvím vlastního deklarativního jazyka. Ansible je často srovnáván s nástroji založenými na agentech, jako je Loutka.

Ansible je oblíbený pro svou jednoduchou instalaci, snadné připojení klientů a bezagentový design. Připojuje se ke klientům přes SSH, takže na straně klienta není potřeba žádný speciální agent. Ansible odesílá moduly každému klientovi, moduly běží lokálně a jejich výstup se vrací na server Ansible.

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

Proč používat Ansible?

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

  • Jednou z nejvýznamnějších výhod Ansible je, že je zdarma pro každého.
  • K instalaci a používání nejsou nutné žádné speciální dovednosti správce systému a oficiální dokumentace je velmi komplexní.
  • Díky modularitě napříč pluginy, moduly, inventáři a playbooky je Ansible vynikajícím společníkem pro orchestraci rozsáhlých prostředí.
  • Ansible je lehký a konzistentní, bez omezení operačního systému nebo podkladového hardwaru.
  • Je velmi bezpečný díky svému bezagentovému designu a použití bezpečnostních funkcí OpenSSH.
  • Ansible má hladkou křivku učení, podpořenou důkladnou dokumentací a snadno se učící strukturou a konfigurací.

Tyto silné stránky, zejména ve srovnání s jinými alternativy k Ansible, vysvětlují jeho rychlé přijetí. Před instalací je dobré pochopit, jak se projekt vyvíjel.

Historie Ansible

Zde jsou důležité mezníky v historii Ansible:

  • Projekt Ansible začal v únoru 2012. Poprvé ho vyvinul Michael DeHaan, tvůrce Cobbleru a Func (Fedora Unified Network Controller).
  • Společnost financující Ansible, původně s názvem AnsibleWorks Inc, byla v roce 2015 odkoupena společností RedHat a později spolu s ní přešla pod... IBM deštník.
  • Dnes je Ansible součástí distribucí jako Fedora Linux, RHEL, CentOS a… Oracle Linux.

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

V tomto tutoriálu k Ansible se objevují následující pojmy, které je dobré znát před zahájením:

Ansible server

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

Modul

Modul je příkaz nebo sada podobných příkazů Ansible, určený ke spuštění na straně klienta.

Úkol

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

Role

Způsob organizace úloh a souvisejících souborů tak, aby je bylo možné později volat v playbooku.

Skutečnost

Informace načtené z globálních proměnných klientského systému prostřednictvím operace gather_facts.

Inventář

Soubor obsahující data o klientských serverech Ansible. V dalších příkladech je definován jako soubor hosts.

Hra

Provedení scénáře.

Psovod

Úloha, která je volána pouze tehdy, když je přítomen oznamovatel.

Oznamovatel

Sekce přiřazená úloze, která volá obslužnou rutinu, pokud se výstup změní.

štítek

Název nastavený pro úlohu, který lze později použít ke spuštění pouze této konkrétní úlohy nebo skupiny úloh.

Možnost instalace v Linuxu

Jakmile zvážíte své možnosti a rozhodnete se pro Ansible, dalším krokem je jeho instalace do vašeho systému. Následující krátký návod zahrnuje instalaci na nejoblíbenějších... Linux distribuce.

Nainstalujte Ansible na systémy Centos/RedHat

Krok 1) Nainstalujte si repozitář EPEL.

[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 si osobní archiv balíčků Ansible.

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

Krok 4) Nainstalujte si Ansible.

$ sudo apt update
$ sudo apt install ansible

Povolené ad-hoc příkazy

Jedním z nejjednodušších způsobů používání Ansible jsou ad-hoc příkazy. Ty jsou užitečné, když chcete zadat příkaz na jednom serveru nebo na skupině serverů. Ad-hoc příkazy se neukládají pro budoucí použití, ale představují rychlý způsob interakce se servery, které si vyberete.

Pro tento tutoriál Ansible je nakonfigurován jednoduchý soubor hosts pro dva servery, který obsahuje host1 a host2.

Dosažitelnost hostitelů ze serveru Ansible můžete ověřit vydáním příkazu ping příkaz 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 vydaný pomocí parametru -m, v tomto případě ping
  4. Pomocí parametru -i můžete ukázat na soubor hosts.

Stejný příkaz můžete v případě potřeby vydat i na jednom 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 do více cílů, použijte modul copy, který se spoléhá na SCP. Příkaz a jeho výstup vypadají takto:

[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 nainstalujete balíček s modulem 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.

Samozřejmě lze prostřednictvím Ansible použít všechny možnosti instalačního programu yum, včetně aktualizace, instalace, nejnovější verze a odebrání.

V níže uvedeném příkladu je stejný příkaz vydán 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ší zásadní funkcí Ansible je jeho schopnost shromažďovat fakta o systému. Shromažďuje informace o hardwaru, softwaru a verzi a každou hodnotu ukládá do proměnné, kterou můžete později znovu použít.

Pokud potřebujete podrobné informace o systémech, které Ansible upraví, modul nastavení tyto údaje shromáždí ze systémových proměnných.

Ansible ad-hoc příkazy

Ansible Playbooks

Ansible Playbooks jsou způsob, jak odesílat příkazy do vzdálených systémů pomocí skriptů. Playbooky konfigurují složitá systémová prostředí a zvyšují flexibilitu spuštěním jednoho skriptu na jednom nebo více systémech. Chovají se spíše jako konfigurační jazyk než jako programovací jazyk.

Příkazy playbooku používají formát YAML, takže je potřeba jen málo syntaxe, ale je nutné respektovat odsazení. Jak název napovídá, playbook je kolekce her. Prostřednictvím playbooku můžete některým hostitelům přiřadit specifické role a jiným hostitelům různé role, čímž orchestrujete mnoho serverů v jednom souboru.

Než budeme pokračovat s příklady playbooků, je dobré definovat úlohu. Úlohy jsou rozhraním k modulům Ansible pro role a playbooky.

Nyní si představte Ansible playbook s jednou hrou, která obsahuje více úkolů, jak je znázorněno 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 playbooku jsou hostitelé skupiny group1 v souboru hosts určeni pro instalaci balíčku lldpad pomocí modulu yum. Služba lldpad vytvořená po instalaci se poté spustí pomocí modulu service, který většinou interaguje 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, což poskytuje lepší kontrolu nad detaily, jako je IP adresa a SSH port pro každý hostitel.

Soubor inventáře pro tento příklad playbooku vypadá takto. Existují dvě skupiny, skupina1 a skupina2, z nichž každá obsahuje hostitele hostitele1 a hostitele2.

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

Následující příklad playbooku Ansible obsahuje dvě přehrávání pro dvě skupiny hostitelů. Pro první skupinu, group1, je SELinux povolen a po jeho povolení se na obrazovce hostitele zobrazí zpráva.

Pro druhou skupinu se balíček httpd nainstaluje 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é získané pomocí volby gather_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ě úloh existují také speciální úlohy nazývané obslužné rutiny. Obslužná rutina musí mít v celém playbooku jedinečný název. Obslužné rutiny fungují jako běžné úlohy, ale lze je upozornit prostřednictvím notifikátoru.

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

V níže uvedeném příkladu má konkrétní úloha sekci notify, která volá jinou úlohu. Pokud se změní výstup první úlohy, je volána úloha obslužné rutiny. Běžným příkladem je změna konfiguračního souboru a následné restartování dotčené služby.

---

- 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 první úloha „sshd config file modify port“ změní, což znamená, že port již není 28675, port se změní a úloha upozorní obslužnou rutinu se stejným názvem, která 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 playbooky je snazší rozdělit úlohy do rolí. Role také usnadňují pozdější opětovné použití práce. Role je soubor úloh, které lze přesouvat z jednoho playbooku do druhého a spouštět nezávisle, i když pouze prostřednictvím souboru playbooku.

Role jsou uloženy v samostatných adresářích a řídí se specifickou adresářovou strukturou.

[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 výchozí proměnné používané s playbookem. Adresář handlers ukládá obslužné rutiny a adresář meta obsahuje informace o závislostech autora a role. Adresář tasks obsahuje hlavní soubor YAML pro roli.

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

Adresář vars obsahuje soubor YAML, kde jsou definovány všechny proměnné používané rolí. Adresáře templates a files obsahují šablony a soubory používané úlohami v roli.

Chcete-li vytvořit adresářový strom pro roli, použijte následující příkaz s názvem role jako posledním parametrem:

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

Ansible také dobře funguje se šablonami a jako šablonovací jazyk používá Jinja2.

Následující příklad ukazuje, jak vypadá základní šablona Jinja2 a jak ji použít v roli.

Za běhu si můžete například v závislosti na tom, ve kterém datovém centru se váš server nachází, vybrat z několika nameserverů, z nichž každý odpovídá jednomu datovému centru, a to pomocí proměnné resolver_ip_addresses.

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

options timeout:1
options attempts:5
options rotate

V tomto příkladu adresář playbooku definuje několik proměnných, včetně 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 s tagem s přiřazeným názvem. Stejný tag může sdílet více úloh a při spuštění playbooku můžete zadat tag tak, aby se provedly pouze úlohy s tagy.

Případová studie Ansible

V této části analyzujeme případovou studii základního postupu pro Ansible, který má tři role. Cílem je poskytnout praktický příklad dosud probraných konceptů. Některé dřívější příklady z tohoto tutoriálu jsou v tomto postupu upraveny a znovu použity.

Níže je uvedena struktura adresářů playbooku. Použitý soubor YAML je 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

Playbook má tři role. Role resolver nastavuje konkrétní nameserver na serverech zkopírováním souboru do cílového adresáře /etc/resolv.conf. Role httpd instaluje balíček httpd s modulem yum a třetí role povoluje SELinux a upozorňuje přihlášeného uživatele na restart systému. Každá role byla vytvořena příkazem 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 uveden playbook p4.yml. Spouští se na všech hostitelích, pokud není na příkazovém řádku uvedeno jinak, spouští se jako uživatel root na portu 22 (SSH), před spuštěním rolí shromažďuje informace a spouští všechny tři role. Každou roli lze spustit nezávisle zadáním jejího tagu na 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 }

Pak můžete na obou hostitelích spustit playbook p4.yml a interpretovat výstup. Stejný příkaz lze spustit s parametrem –check pro zkušební spuštění a s parametrem -k, pokud chcete použít ověřování heslem.

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

Vydání a ping příkaz 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

Vydání a ping příkaz 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

Nejčastější dotazy

Ano. Ansible je bezagentový, takže na spravovaných uzlech neběží žádný software. Připojuje se přes SSH nebo WinRM pro… Windowsa odesílá malé moduly, které se spustí na cíli a poté jsou odstraněny. Pouze řídicí uzel potřebuje Ansible a Python nainstalován.

Ansible playbooky jsou psány v YAML, který je čitelný pro člověka a závisí na odsazení spíše než na závorkách. Šablony používají šablonovací jazyk Jinja2, zatímco fakta a proměnné umožňují, aby se jeden playbook přizpůsobil mnoha hostitelům. Pro začátek není potřeba žádné znalosti programování pro obecné účely.

Ansible je bezagentový a založený na push protokolech, odesílá změny přes SSH, zatímco Loutka a Chef jsou obvykle založené na agentech a pull-based. Ansible používá YAML, zatímco Chef používá Ruby a Puppet používá vlastní DSL. Mnoho týmů volí Ansible pro jeho rychlejší učební křivku.

Ano. Ansible je bezplatný a open source systém pod licencí GNU GPL, spravovaný společností Red Hat a velkou komunitou. Jádro enginu a tisíce modulů nestojí nic. Red Hat také prodává Ansible Automation Platform, placený produkt, který přidává grafické uživatelské rozhraní, přístup založený na rolích a podporu.

Ano. Kromě Linuxových a Unixových hostitelů dostupných přes SSH spravuje Ansible Windows uzly prostřednictvím WinRM s využitím vyhrazeného Windows moduly. Může instalovat balíčky, upravovat registr, spravovat služby a spouštět PowerShell, takže smíšené Linux a Windows Vozové parky jsou automatizovány z jednoho řídicího uzlu.

Ansible Galaxy je veřejné centrum pro sdílení a stahování komunitních rolí a kolekcí. Příkaz ansible-galaxy vytvoří strukturu adresářů role a nainstaluje publikované role, takže můžete znovu použít otestovanou automatizaci namísto psaní každého playbooku od nuly.

Asistenti umělé inteligence mohou vytvářet playbooky YAML z požadavků v otevřeném jazyce, vysvětlovat neznámé moduly a navrhovat opravy neúspěšných úloh nebo syntaktických chyb. Mohou také převádět shellové skripty na idempotentní úlohy. Před spuštěním vygenerovaných playbooků vždy zkontrolujte jejich správné názvy a idempotenci.

Ano. GitHub Copilot automaticky dokončuje úlohy playbooku, položky inventáře a šablony Jinja2 z krátkého komentáře nebo názvu souboru. Výstup považujte za výchozí bod a zkontrolujte odsazení, parametry modulů a názvy proměnných, protože vygenerovaný YAML může odkazovat na zastaralou syntaxi nebo neexistující moduly.

Shrňte tento příspěvek takto: