Jak používat Ansible Playbooks k automatizaci složitých úloh na více vzdálených serverech – část 2
V předchozím článku této série Ansible jsme vysvětlili, že Ansible je nástroj bez agenta, který vám umožňuje rychle a efektivně spravovat více počítačů (známých také jako uzly – a také na nich provádět nasazení) z jednoho systému.
Po instalaci softwaru do řídicího počítače, vytvoření klíčů pro přihlášení bez hesla a jejich zkopírování do uzlů je čas naučit se optimalizovat proces správy takových vzdálených systémů pomocí Ansible.
V celém tomto článku, stejně jako v dalším, budeme používat následující testovací prostředí. Všichni hostitelé jsou boxy CentOS 7:
Controller machine (where Ansible is installed): 192.168.0.19
Node1: 192.168.0.29
Node2: 192.168.0.30
Kromě toho mějte na paměti, že oba uzly byly přidány do sekce webových serverů v místním souboru /etc/ansible/hosts:
To znamená, že začněme s aktuálním tématem.
Představujeme Ansible Playbooks
Jak je popsáno v předchozí příručce, pomocí nástroje ansible můžete spouštět příkazy ve vzdálených uzlech následujícím způsobem:
ansible -a "/bin/hostnamectl --static" webservers
Ve výše uvedeném příkladu jsme spustili hostnamectl --static
na node1 a node2. Netrvá dlouho, než si uvědomíte, že tento způsob spouštění úloh na vzdálených počítačích funguje dobře pro krátké příkazy, ale může se rychle stát zatěžujícím nebo chaotickým u složitějších úloh, které vyžadují další dobře strukturované konfigurační parametry nebo interakce s jinými službami.
Například nastavení a konfigurace WordPress na více hostitelích – čemuž se budeme věnovat v dalším článku této série). Zde přicházejí na scénu Příručky.
Jednoduše řečeno, Příručky jsou soubory ve formátu prostého textu napsané ve formátu YAML a obsahují seznam položek s jedním nebo více páry klíč/hodnota (známé také jako „hash “ nebo „slovník “).
Uvnitř každé Playbooku najdete jednu nebo více skupin hostitelů (každá z těchto skupin se také nazývá hra), kde mají být provedeny požadované úkoly.
Pro ilustraci nám pomůže příklad z oficiálních dokumentů:
1. hostitelé: toto je seznam počítačů (podle /etc/ansible/hosts), na kterých budou provedeny následující úlohy.
2. remote_user: vzdálený účet, který bude použit k provádění úkolů.
3. vars: proměnné používané k úpravě chování vzdáleného systému(ů).
4. úlohy jsou prováděny v pořadí, jedna po druhé, na všech počítačích, které odpovídají hostitelům. V rámci hry dostanou všichni hostitelé stejné příkazy k úkolu.
Pokud potřebujete provést jinou sadu přidružených úkolů pro konkrétního hostitele, vytvořte další hru v aktuální Příručce (jinými slovy, účelem hry je zmapovat konkrétní výběr hostitelů -definované úkoly).
V takovém případě začněte novou hru přidáním direktivy hosts na konec a začněte znovu:
---
- hosts: webservers
remote_user: root
vars:
variable1: value1
variable2: value2
remote_user: root
tasks:
- name: description for task1
task1: parameter1=value_for_parameter1 parameter2=value_for_parameter2
- name: description for task1
task2: parameter1=value_for_parameter1 parameter2=value_for_parameter2
handlers:
- name: description for handler 1
service: name=name_of_service state=service_status
- hosts: dbservers
remote_user: root
vars:
variable1: value1
variable2: value2
…
5. handlery jsou akce, které se spouštějí na konci sekce úloh v každé hře a většinou se používají k restartování služeb nebo ke spuštění restartu ve vzdálených systémech.
mkdir /etc/ansible/playbooks
A uvnitř soubor s názvem apache.yml s následujícím obsahem:
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: replace default index.html file
copy: src=/static_files/index.html dest=/var/www/html/ mode=0644
notify:
- restart apache
- name: ensure apache is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
- name: restart apache
service: name=httpd state=restarted
Za druhé vytvořte adresář /static_files:
mkdir /static_files
kam uložíte vlastní soubor index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
</script>
</head>
<body>
<h1>Apache was started in this host via Ansible</h1><br>
<h2>Brought to you by linux-console.net</h2>
</body>
</html>
To znamená, že nyní je čas použít tuto příručku k provádění výše zmíněných úkolů. Všimněte si, že Ansible bude procházet každý úkol podle hostitele, jeden po druhém, a bude hlásit stav těchto úkolů:
ansible-playbook /etc/ansible/playbooks/apache.yml
Nyní se podívejme, co se stane, když otevřeme prohlížeč a nasměrujeme jej na 192.168.0.29 a 192.168.0.30:
Pojďme o krok dále a ručně zastavíme a deaktivujeme Apache na node1 a node2:
systemctl stop httpd
systemctl disable httpd
systemctl is-active httpd
systemctl is-enabled httpd
Pak zase běž,
ansible-playbook /etc/ansible/playbooks/apache.yml
Tentokrát úloha hlásí, že webový server Apache byl spuštěn a povolen na každém hostiteli:
Vezměte prosím výše uvedený příklad jako záblesk síly Ansible. I když se jedná o relativně snadné úkoly při provádění na malém počtu serverů, může to být velmi zdlouhavé a časově náročné, pokud potřebujete udělat totéž na několika (možná stovkách) strojů.
souhrn
V tomto článku jsme popsali, jak spouštět příkazy a provádět složité úlohy na několika vzdálených hostitelích současně pomocí Ansible. Oficiální dokumentace a úložiště GitHub poskytují spoustu příkladů a návodů, jak používat Ansible k dosažení téměř jakéhokoli představitelného úkolu.
Když se začnete učit, jak automatizovat úlohy na vzdálených hostitelích Linuxu pomocí Ansible, rádi bychom slyšeli vaše myšlenky. Dotazy, komentáře a návrhy jsou také vždy vítány, takže nás můžete kdykoli kontaktovat pomocí níže uvedeného formuláře.