Ansible je kompletní automatizační řešení pro vaše IT prostředí. Ansible můžete použít k automatizaci konfigurace serverů Linux a Windows, k organizování poskytování služeb, nasazení cloudových prostředí a dokonce ke konfiguraci síťových zařízení.
Ansible moduly abstraktní akce ve vašem systému, takže se nemusíte starat o detaily implementace. Jednoduše popíšete požadovaný stav a Ansible zajistí, aby se s ním cílový systém shodoval.
Dostupnost tohoto modulu je jednou z hlavních výhod Ansible a často se o něm mluví jako o Ansible s „bateriemi součástí“. Opravdu můžete najít moduly pro velké množství úkolů, a i když je to skvělé, od začátečníků často slýchám, že nevědí, kde začít.
Ačkoli váš výběr modulů bude záviset výhradně na vašich požadavcích a na tom, co se snažíte automatizovat pomocí Ansible, zde je deset nejlepších modulů, které potřebujete, abyste mohli začít s automatizací systému Ansible pro Linux.
1. kopírovat
Kopírovací modul umožňuje zkopírovat soubor z řídicího uzlu Ansible na cílové hostitele. Kromě kopírování souboru umožňuje nastavit vlastnictví, oprávnění a štítky SELinux pro cílový soubor. Zde je příklad použití kopírovacího modulu ke zkopírování konfiguračního souboru „zprávy dne“ na cílové hostitele:
- name:Ujistěte se, že je soubor MOTD na svém místě
copy:
src:files/motd
dest:/etc/motd
vlastník:root
skupina:root
režim:0644
U méně složitého obsahu můžete obsah zkopírovat přímo do cílového souboru, aniž byste museli mít místní soubor, jako je tento:
- name:Ujistěte se, že je soubor MOTD na svém místě
copy:
content:„Vítejte v tomto systému.“
dest:/etc/motd
vlastník:root
skupina:root
režim:0644
Tento modul funguje idempotentně, což znamená, že zkopíruje soubor pouze v případě, že stejný soubor již není na místě se stejným obsahem a oprávněními.
Kopírovací modul je skvělou volbou pro kopírování malého počtu souborů se statickým obsahem. Pokud potřebujete zkopírovat velké množství souborů, podívejte se na modul synchronizace. Chcete-li kopírovat soubory s dynamickým obsahem, podívejte se na template
další modul.
2. šablona
Modul šablony funguje podobně jako copy
modul, ale zpracovává obsah dynamicky pomocí šablonovacího jazyka Jinja2, než jej zkopíruje do cílových hostitelů.
Definujte například šablonu „zpráva dne“, která zobrazuje název cílového systému, takto:
$ vi templates/motd.j2
Vítejte v {{ inventář_hostname }}.
Poté vytvořte instanci této šablony pomocí template
modul, jako je tento:
- name:Ujistěte se, že je soubor MOTD na svém místě
šablona:
src:templates/motd.j2
dest:/etc/motd
vlastník:root
skupina:root
režim:0644
Před zkopírováním souboru Ansible zpracuje šablonu a interpoluje proměnnou a nahradí ji názvem cílového hostitelského systému. Pokud je například název cílového systému rh8-vm03
, výsledný soubor je:
Vítejte v rh8-vm03.
Zatímco copy
modul může také interpolovat proměnné při použití content
parametr, template
modul umožňuje další flexibilitu vytvářením souborů šablon, které umožňují definovat složitější obsah, včetně for
smyčky, if
podmínky a další. Úplnou referenci naleznete v dokumentaci Jinja2.
Tento modul je také idempotentní a nezkopíruje soubor, pokud obsah v cílovém systému již odpovídá obsahu šablony.
3. uživatel
Uživatelský modul vám umožňuje vytvářet a spravovat uživatele Linuxu ve vašem cílovém systému. Tento modul má mnoho různých parametrů, ale ve své nejzákladnější podobě jej můžete použít k vytvoření nového uživatele.
Chcete-li například vytvořit uživatele ricardo
s UID 2001, část skupin users
a wheel
a heslo mypassword
, použijte user
modul s těmito parametry:
- name:Ujistěte se, že uživatel ricardo existuje
user:
jméno:ricardo
group:users
groups:wheel
uid:2001
heslo:"{{ 'mypassword' | password_hash('sha512') }}"
stav:přítomný
Všimněte si, že tento modul se snaží být idempotentní, ale nemůže to zaručit u všech svých možností. Pokud například znovu spustíte předchozí příklad modulu, obnoví se heslo na definovanou hodnotu a při každém spuštění se změní uživatel v systému. Aby byl tento příklad idempotentní, použijte parametr update_password: on_create
, což zajistí, že Ansible nastaví heslo pouze při vytváření uživatele a nikoli při dalších spuštěních.
Tento modul můžete také použít k odstranění uživatele nastavením parametru state: absent
.
user
modul má mnoho možností pro správu více uživatelských aspektů. Ujistěte se, že jste se podívali do dokumentace modulu, kde najdete další informace.
4. balíček
Modul balíčku vám umožňuje instalovat, aktualizovat nebo odstraňovat softwarové balíčky z vašeho cílového systému pomocí standardního správce balíčků operačního systému.
Chcete-li například nainstalovat webový server Apache na počítač Red Hat Linux, použijte modul takto:
- name:Ujistěte se, že je nainstalován balíček Apache
package:
name:httpd
stav:přítomný
Více o Ansible
- Rychlý průvodce Ansible
- Cheat sheet Ansible
- Bezplatný online kurz:Základy Ansible
- Stáhněte si a nainstalujte Ansible
- eKniha:Automatizovaný podnik
- eKniha:Ansible pro DevOps
- Bezplatné elektronické knihy Ansible
- Nejnovější články Ansible
Tento modul je agnostik distribuce a funguje pomocí základního správce balíčků, jako je yum/dnf
pro distribuce založené na Red Hatu a apt
pro Debian. Z tohoto důvodu provádí pouze základní úkoly, jako je instalace a odstranění balíčků. Pokud potřebujete větší kontrolu nad možnostmi správce balíčků, použijte specifický modul pro cílovou distribuci.
Také mějte na paměti, že i když samotný modul funguje na různých distribucích, název balíčku pro každou se může lišit. Například v distribuci založené na Red Hat je název balíčku webového serveru Apache httpd
, zatímco v Debianu je to apache2
. Ujistěte se, že vaše příručky se tím zabývají.
Tento modul je idempotentní a nebude fungovat, pokud aktuální stav systému odpovídá požadovanému stavu.
5. služba
Použijte servisní modul ke správě cílových systémových služeb pomocí požadovaného init systému; například systemd.
V nejzákladnější podobě stačí zadat název služby a požadovaný stav. Například ke spuštění sshd
službu, použijte modul takto:
- name:Ujistěte se, že je spuštěno SSHD
služba:
name:sshd
stav:spuštěno
Můžete také zajistit, aby se služba spouštěla automaticky při startu cílového systému, zadáním parametru enabled: yes
.
Stejně jako u package
modul, service
modul je flexibilní a funguje napříč různými distribucemi. Pokud potřebujete doladit specifický cílový init systém, použijte odpovídající modul; například modul systemd
.
Podobně jako u ostatních modulů, které jste dosud viděli, je service
modul je také idempotentní.
6. firewalld
Pomocí modulu firewalld ovládejte systémový firewall pomocí firewalld
démona na systémech, které jej podporují, jako jsou distribuce založené na Red Hatu.
Chcete-li například otevřít službu HTTP na portu 80, použijte ji takto:
- name:Ujistěte se, že je otevřený port 80 (http)
firewalld:
služba:http
stav:povoleno
trvalé:ano
okamžité:anoMůžete také zadat vlastní porty místo názvů služeb pomocí
port
parametr. V tomto případě nezapomeňte zadat také protokol. Chcete-li například otevřít port TCP 3000, použijte toto:- name:Ujistěte se, že je otevřený port 3000/TCP
firewalld:
port:3000/tcp
stav:povoleno
trvalé:ano
okamžité:anoTento modul můžete také použít k ovládání dalších
firewalld
aspekty, jako jsou zóny nebo složitá pravidla. Ujistěte se, že si v dokumentaci modulu najdete úplný seznam možností.7. soubor
Souborový modul vám umožňuje ovládat stav souborů a adresářů – nastavení oprávnění, vlastnictví a štítků SELinux.
Použijte například
file
modulu k vytvoření adresáře/app
ve vlastnictví uživatelericardo
, s oprávněními ke čtení, zápisu a spouštění pro vlastníka a skupinuusers
:- name:Ujistěte se, že adresář /app existuje
soubor:
cesta:/app
stav:adresář
vlastník:ricardo
skupina:uživatelé
režim:0770Tento modul můžete také použít k rekurzivnímu nastavení vlastností souborů v adresářích pomocí parametru
recurse: yes
nebo smažte soubory a adresáře s parametremstate: absent
.Tento modul pracuje s idempotenci pro většinu svých parametrů, ale některé z nich mohou způsobit, že pokaždé změní cílovou cestu. Další podrobnosti naleznete v dokumentaci.
8. lineinfile
Modul lineinfile umožňuje spravovat jednotlivé řádky na existujících souborech. Je užitečné aktualizovat cílenou konfiguraci na stávajících souborech, aniž byste museli měnit zbytek souboru nebo kopírovat celý konfigurační soubor.
Například do souboru hostitelů přidejte novou položku takto:
- name:Zajistěte hostitele rh8-vm03 v souboru hostitelů
lineinfile:
cesta:/etc/hosts
řádek:192.168.122.236 rh8-vm03
stav:přítomnýTento modul můžete také použít ke změně existujícího řádku použitím parametru
regexp
hledat existující linku k nahrazení. Aktualizujte napříkladsshd_config
souboru zabránit přihlášení root úpravou řádkuPermitRootLogin yes
naPermitRootLogin no
:- name:Ujistěte se, že se root nemůže přihlásit přes ssh
lineinfile:
cesta:/etc/ssh/sshd_config
regexp:'^PermitRootLogin'
řádek:PermitRootLogin no
stav:přítomnýPoznámka:Chcete-li tuto změnu povolit, použijte servisní modul k restartování služby SSHD.
Tento modul je také idempotentní, ale v případě úpravy řádku se ujistěte, že regulární výraz odpovídá původnímu i aktualizovanému stavu, abyste se vyhnuli zbytečným změnám.
9. zrušit archiv
Pomocí modulu unarchive extrahujte obsah archivních souborů, jako je
tar
nebozip
soubory. Ve výchozím nastavení zkopíruje archivní soubor z řídicího uzlu do cílového počítače, než jej rozbalí. Toto chování změňte zadáním parametruremote_src: yes
.Například extrahujte obsah
.tar.gz
soubor, který již byl stažen do cílového hostitele s touto syntaxí:- name:Extrahujte obsah app.tar.gz
unarchive:
src:/tmp/app.tar.gz
dest:/app
remote_src:yesNěkteré archivační technologie vyžadují, aby byly v cílovém systému k dispozici další balíčky; například balíček
unzip
extrahovat.zip
soubory.V závislosti na použitém formátu archivu může nebo nemusí tento modul fungovat idempotentně. Abyste předešli zbytečným změnám, můžete použít parametr
creates
určit soubor nebo adresář, který by tento modul vytvořil při extrahování obsahu archivu. Pokud tento soubor nebo adresář již existuje, modul znovu nerozbalí obsah.10. příkaz
Příkazový modul je flexibilní modul, který vám umožňuje provádět libovolné příkazy na cílovém systému. Pomocí tohoto modulu můžete na cílovém systému dělat téměř cokoli, pokud pro to existuje příkaz.
I když
command
modul je flexibilní a výkonný, měl by být používán opatrně. Vyhněte se použití příkazového modulu k provedení úlohy, pokud je pro to k dispozici jiný vhodný modul. Například můžete vytvořte uživatele pomocícommand
modul pro spuštěníuseradd
příkaz, ale měli byste použijteuser
modul místo toho, protože od vás abstrahuje mnoho detailů, stará se o rohové skříně a zajišťuje, že se konfigurace mění pouze v případě potřeby.V případech, kdy nejsou k dispozici žádné moduly nebo pro spouštění vlastních skriptů nebo programů, použijte
command
modul je stále skvělým zdrojem. Tento modul použijte například ke spuštění skriptu, který je již přítomen v cílovém počítači:- name:Spusťte instalační program aplikace
příkaz:"/app/install.sh"Ve výchozím nastavení není tento modul idempotentní, protože Ansible provede příkaz pokaždé. Chcete-li vytvořit
command
modul idempotent, můžete použítwhen
podmínky pro provedení příkazu pouze v případě, že příslušná podmínka existuje nebocreates
argument, podobně jako v příkladu modulu pro rozbalení.Co bude dál?
Pomocí těchto modulů můžete konfigurovat celé linuxové systémy kopírováním, vytvářením šablon nebo úpravou konfiguračních souborů, vytvářením uživatelů, instalací balíčků, spouštěním systémových služeb, aktualizací firewallu a dalšími.
Pokud jste v Ansible noví, ujistěte se, že jste si prohlédli dokumentaci o tom, jak vytvořit playbooky pro kombinování těchto modulů pro automatizaci vašeho systému. Některé z těchto úloh vyžadují spuštění se zvýšenými oprávněními. Další podrobnosti naleznete v dokumentaci eskalace oprávnění.
Od Ansible 2.10 jsou moduly organizovány v kolekcích. Většina modulů v tomto seznamu je součástí
ansible.builtin
kolekce a jsou standardně dostupné s Ansible, ale některé z nich jsou součástí jiných kolekcí. Seznam kolekcí naleznete v dokumentaci Ansible.
Linux