Před několika dny jsme diskutovali o tom, jak nastavit tříuzlovou laboratoř Ansible pomocí Vagrant v Linuxu. V tomto článku se podrobně seznámíme se základními koncepty Ansible, jako je inventář Ansible a konfigurační soubory.
Základní struktura Ansible
Když začnete pracovat s ansible, měli byste porozumět dvěma důležitým souborům. Jedním z nich je Ansible inventář a druhý je Konfigurace Ansible soubor.
Konfigurace obsahuje všechny konfigurace, které ansible použije během běhu. Když nainstalujete ansible pomocí správce balíčků OS, můžete vidět, že existuje výchozí konfigurační soubor s názvem "ansible.cfg
" vytvořeno v /etc/ansible
adresář.
Soubor inventáře obsahuje IP adresu nebo DNS informace o seznamu spravovaných hostitelů, se kterými chceme pracovat. Ansible přečte názvy hostitelů ze souboru inventáře a na těchto uzlech se provedou úlohy/přehrání. Soubory inventáře lze vytvářet v ini
, yaml
a json
formátů.
Níže je struktura mého projektu. Mám ansible.cfg
konfigurační soubor, soubor hostitelů a playbook, který je napsán v yaml
formát.
Když spustím playbook, ansible načte konfiguraci z ansible.cfg
a podrobnosti o hostiteli ze souboru hostitelů pro spuštění přehrávání.
[email protected]:~/ansible_project$ tree . . ├── ansible.cfg ├── hosts └── playbook.yml 0 directories, 3 files
Promluvme si podrobně o těchto dvou souborech a konečně spustíme nějaké adhoc příkazy.
Konfigurační soubor Ansible
Ansible používá konfigurační soubor k načtení parametrů, které jsou nutné ke spuštění úlohy ansible. Pokud jste nainstalovali ansible pomocí správce balíčků , budete mít ansible.cfg
soubor v /etc/ansible
adresář.
Níže je ukázka ansible.cfg
soubor.
Ansible vyhledá konfigurační soubor v následujícím pořadí.
ANSIBLE_CONFIG
- proměnná prostředíansible.cfg
- Aktuální adresář, ze kterého příkaz spouštíte.ansible.cfg
- Domovský adresář uživatelů/etc/ansible/ansible.cfg
- V/etc/ansible
adresář
Spusťte ansible --version
příkaz, abyste viděli, který konfigurační soubor ansible vybírá.
$ ansible --version ansible [core 2.12.3] config file = /home/vagrant/ansible_project/ansible.cfg configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible ansible collection location = /home/vagrant/.ansible/collections:/usr/share/ansible/collections executable location = /usr/local/bin/ansible python version = 3.8.10 (default, Nov 26 2021, 20:14:08) [GCC 9.3.0] jinja version = 2.10.1 libyaml = True
Vytvořil jsem vlastní adresář projektu a vytvořil ansible.cfg
soubor. Můj konfigurační soubor obsahuje pouze dvě vlastnosti, umístění inventáře a zakázanou kontrolu hostitelského klíče.
[defaults] inventory = /home/karthick/ansible_project/hosts host_key_checking = False
Existuje spousta dalších nemovitostí, ale v tuto chvíli je můžete začít používat pouze přidáním vlastnosti „inventář“.
Ansible Inventory File
V souboru inventáře uvedeme IP adresu nebo DNS názvů serverů, síťových zařízení, cloudových služeb nebo čehokoli, s čím dokáže pracovat.
Zásoby lze zapisovat v ini
, json
a yaml
a máte také skripty pro převod jednoho formátu inventáře na jiné formáty.
Ve výchozím nastavení najdete soubor inventáře (hosts) v /etc/ansible
adresář, pokud jste nainstalovali ansible pomocí správce balíčků OS. Vždy se doporučuje vytvořit samostatný adresář projektu a vytvořit inventář a konfigurační soubor.
Níže uvedená tabulka ukazuje, jak je moje ansible laboratoř nastavena. Vytvořím soubor inventáře pro toto nastavení laboratoře a spustím modul ping, abych předvedl, jak věci v souboru inventáře fungují.
TYP UZLU | NÁZEV UZLU | IP ADRESA | OS FLAVOR |
Řídicí uzel | controller.anslab.com | 192.168.10.3 | ubuntu/focal64 |
Spravovaný uzel | managed1.anslab.com | 192.168.10.4 | ubuntu/focal64 |
Spravovaný uzel | managed2.anslab.com | 192.168.10.5 | ubuntu/focal64 |
Soubor inventáře bez explicitního seskupení
Soubor inventáře má koncept zvaný seskupování, kde budete seskupovat své zdroje a spouštět úkoly proti této skupině. Bude v následující struktuře.
[group-name] Resource1 Resource2 .... Resource N
Soubor inventáře můžete vytvořit bez použití skupin. V tomto případě Ansible použije dvě výchozí skupiny "vše" a "neseskupeno" .
- VŠECHNY SKUPINA – Všechny zdroje, které jsou ve výchozím nastavení dostupné v souboru inventáře, budou přiřazeny do všech skupin .
- NESKUPENO - Zdroje, které nejsou součástí žádné uživatelsky definované skupiny, budou automaticky přiřazeny do neseskupené skupiny .
Vytvořil jsem soubor inventáře bez skupin. Nyní budou tyto dva uzly spadat pod všechny skupiny i do neseskupené skupiny.
$ cat hosts
managed1.anslab.com
managed2.anslab.com
Chcete-li zkontrolovat seznam hostitelů ve všech a neseskupených skupinách, můžete spustit následující příkaz ansible.
$ ansible all --list-hosts hosts (2): managed1.anslab.com managed2.anslab.com
$ ansible ungrouped --list-hosts hosts (2): managed1.anslab.com managed2.anslab.com
Soubor inventáře se seskupením
Jak bylo předpovězeno, seskupování je skvělý způsob, jak organizovat své zdroje, takže pro vás bude snadné spustit úlohu proti konkrétní skupině. Mám dva spravované uzly a běží na nich Ubuntu 20.04LTS.
Řekněme, že chci seskupit soubor inventáře podle typu operačního systému, pak bude soubor inventáře vypadat níže. Zde ubuntu je název skupiny.
[ubuntu]
managed1.anslab.com
managed2.anslab.com
Proti této skupině lze spouštět úkoly.
$ ansible ubuntu -m ping -o managed1.anslab.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"} managed2.anslab.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
Pokud nyní zkontroluji skupinu „ungrouped“, žádný hostitel tam nebude.
$ ansible ungrouped --list-hosts
[WARNING]: No hosts matched, nothing to do
hosts (0):
V souboru inventáře můžete vytvořit libovolný počet skupin a používat stejné názvy zdrojů.
[ubuntu] managed1.anslab.com managed2.anslab.com [dev] managed1.anslab.com [test] managed2.anslab.com
$ ansible ubuntu -m ping -o $ ansible dev -m ping -o $ ansible test -m ping -o
Soubor inventáře s rozsahy
Pokud máte společný vzor pojmenování pro své prostředky, můžete použít rozsahy. Podívejte se na níže uvedený příklad, kde jsem místo opakování DNS použil rozsah k jeho zkrácení.
[ubuntu]
managed[1:2].anslab.com
Soubor inventáře s podřízenými skupinami
Můžete vytvořit skupinu a pod ní používat další názvy skupin. Podívejte se na níže uvedený příklad, mám skupinu ubuntu, která má názvy mých serverů. Vytvořil jsem další skupinu s názvem server, která obsahuje skupinu ubuntu.
Je důležité, abyste přidali :children k názvu skupiny, jinak bude skupina serverů zacházet s "ubuntu " jako název serveru namísto názvu skupiny.
[ubuntu] managed[1:2].anslab.com [server:children] ubuntu
Soubor inventáře s proměnnými hostitele a proměnnými skupiny
Soubor inventáře podporuje hostitelské a skupinové proměnné. Hostitelské proměnné nejsou nic jiného než proměnné a jejich hodnoty předané hostiteli v souboru inventáře. V níže uvedené konfiguraci říkám ansible použít ostechnix jako můj uživatel a místo standardního portu ssh použijte port 2222 .
[ubuntu]
managed1.anslab.com ansible_user=ostechnix ansible_port=2222
managed2.anslab.com ansible_user=ostechnix ansible_port=2222
Proměnné skupiny jsou stejné jako proměnné hostitele, ale proměnné budou aplikovány na celou skupinu namísto jednoho hostitele. Z výše uvedené konfigurace můžete vidět, že ansible_user a ansible_port jsou pro oba uzly stejné. Můžete tedy vytvořit skupinový var, kde budou proměnné zděděny všemi uzly ve skupině. Musíte přidat :vars aby se skupina vytvořila jako proměnná skupiny.
[ubuntu] managed1.anslab.com managed2.anslab.com [ubuntu:vars] ansible_user=ostechnix ansible_port=2222
Pozor: Pokud máte pro stejný uzel jak skupinovou proměnnou, tak hostitelskou proměnnou, pak má hostitelská proměnná vysokou prioritu.
Existuje mnoho parametrů inventáře, které můžete použít, a seznam můžete získat z oficiálního dokumentu .
Soubor inventáře s aliasem
Pro zdroj můžete vytvořit alias, jak je uvedeno níže. Zde jsou m1 a m2 aliasy.
[ubuntu] m1 ansible_host=managed1.anslab.com m2 ansible_host=managed2.anslab.com
Nyní lze tento alias použít ke spouštění některých úloh.
$ ansible m1 -m ping -o m1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"} $ ansible m2 -m ping -o m2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
Soubor inventáře ve formátu YAML
Soubory inventáře lze také zapisovat ve formátu YAML. Vše, co jsme probrali v předchozích částech, je napsáno ve formátu YAML.
Níže uvedený obrázek představuje dva uzly s několika hostitelskými proměnnými.
Níže uvedený obrázek představuje dva uzly se skupinovými proměnnými.
Příkaz Ansible Inventory
Ansible má příkaz inventarizace, který bude velmi užitečný pro zobrazení informací o souborech inventáře.
Chcete-li získat seznam podporovaných možností, spusťte příkaz help.
$ ansible-inventory --help
Chcete-li získat podrobnosti o inventáři ve formátu grafu, použijte --graph
vlajka. Pokud máte různé soubory inventáře, můžete použít -i
flag explicitně odkazovat na soubor inventáře.
$ ansible-inventory --graph
Informace o hostiteli a skupině var můžete vytisknout předáním --vars
flag spolu s --graph
vlajka.
$ ansible-inventory --graph --vars
Když použijete --list
flag, výstup bude ve formátu JSON.
$ ansible-inventory -list
Informace o konkrétním uzlu můžete získat pomocí --host
vlajka.
$ ansible-inventory --host managed1.anslab.com
Závěr
V tomto článku jsme viděli důležitý koncept, který tvoří jádro ansible architektury. Pokud jste začátečník, zaměřte se na vytváření inventáře ve formátu ini a postupně se dozvíte více o osvědčených postupech, když začnete pracovat na produkčních projektech.
Další informace:
- Ansible SSH autentizace a eskalace oprávnění
- Začínáme s příkazy Ansible Ad Hoc