5.9 KiB
5.9 KiB
ANSIBLE TUTORIAL | NIC.CZ
Vypracoval: Matěj Kevin Nechodom
BASICS
ClusterSSH
- v PERL
- nejde verzovat
- 4 terminály = 4 servery; příkazy se píší do jednoho terminálu a to se paralelně odesílá na ostatní servery
Vlastní balíčky
- IsMedia posinst
CFEngine
- old AF
- napsaný v C
- lowlevel
Puppet, Chef, Salt
- pull/push model
- mám server, ten obsahuje config jak co má vypadat a klienti si ho natáhnou
- podle nějakého intervalu (default 30 min) se to refreshuje
- Puppet a Chef je napsanej v Ruby a každý klient tím pádem potřebuje interpret Ruby
Ansible
- YAML => Python (2.7/3.5+) => SSH => Python (2.4)
INSTALACE
apt install python3-venv python3-pip
python3 -m venv .muj_venv
source .muj_venv/bin/activate
pip3 install ansible
ansible-inventory --list
- vypíše list všech strojů a jak je chápe
ansible 1-ubuntu -m 'command'
- lze poslat příkaz na různé stroje
ansible "vm:!1_ubuntu' - m 'command'
- lze poslat příkaz na různé stroje
PLAYBOOOKY
ansible-playbook play-1.yml
- spustí playbook play-1.yml
ansible hosts -m setup > /dev/null
- vypíše všechny informace o všech strojích (lze použít i pro jeden stroj)
ansible-playbook play-3.yml --check
- jen checkuje, jestli je to ok; validace konfigurace
ansible-playbook play-3.yml --check --limit server
- lze specifikovat, na jaké servery to spustit, !! pozor !! check nefunguje u všech modulů, ale ansible je týpek a v shellu to nepustí, takže chill
ansible-playbook play-3.yml --check --diff
- hledá rozdíly (--diff)
check_mode: no
-
lze vypnout check mode | ON/OFF
-
shell nechceš používat, protože pak nejsi schopný checkovat, jestli to např. doběhlo, je mnohem lepší použít ten modul toho ansiblu
HANDLERY
- udělej něco, pokud došlo ke změně
- dává se to pod hosts
- name: Install webserver
hosts: 1-ubuntu
handlers:
- name: Reload apache
systemd:
name: "apache2"
state: "reloaded"
- volá se to pomocí
notify: nazev
TAGY
- jsme schopni přeskakovat na dané kroky, nebo je i skipovat
- name: Set hostname on homepage 2
template:
src: ./index.html.j2 # naše šablona, která poté přepisuje soubor v dest podle té šablony
dest: /var/www/html/index8.html
#backup: yes # udělá backup s timestempem; nepřepisuje je, ale vždy vytvoří nový backup
notify: Reload apache
tags: # na toto koukej
- configure
- index8
- ukázka, jak to má vypadat v yml souboru
ROLE
- strukturovaný proces, lepší orientace v souborech, uspořádání
ansible-galaxy role init nazev
vytvoří strukturu pro novou roli
roles/
└── webserver_apache
├── handlers
│ └── main.yml
├── tasks
│ └── main.yml
└── templates
└── index.html.j2
-
struktura složky
-
main.yml se musí zachovat
-
ještě se přidává složka
/files
, kam dáváme soubory typu .txt, .sh, ... -
lze mít více tasků, které lze volat (nejlepší je z mainu zavolat nějaký jiný task, poté se vrátit do mainu a poté znovu zavolat další task, aby to nebyla špageta)
-
Playbook, který volá roli
webserver_apache
- name: Install webserver - Apache2
hosts: 1-ubuntu
roles:
- webserver_apache
#- monitoring_apache
- Lze použít Ansible Galaxy, kde je jakoby "store" s těmi rolemi, které vytvořila komunita. Má to vlastní dokumentaci, verze, ... ODKAZ
KOLEKCE
- velký třest roku 2020, kdy se Ansible rozdělil na komunitní a nekomunitní - ty komunitní věci jsou v "Panos" ZDE
- vlastně nevím, k čemu toje, byla to nuda xdd
PLUGINY
- jsou to vlastně moduly
- rozšiřují funkcionalitu Ansiblu
- máme více typů: -- callback plugin - je zavolán po skončení playbooku (např. mail výstup) -- connection plugin - používá se pro spojení s ovládaným (např. ssh,local,chroot,docker) -- inventory plugin - dynamický inventář (např. aws, nmap, virtualbox) -- shell plugin - umožňuje spouštět shell příkazy (kdo by to čekal, haha)
PŘIBALENÉ NÁSTROJE
- Máme následující typy: -- Vault - bezpečné uchování tajemství ve verzovacím režimu -- Galaxy - sdílení rolí -- Lint - statická analýza kódu -- Inventory - parser inventáře
PŘÍKAZY
ansible-playbook playbook.yml --tags nazev_tagu
takto spustíme jen sekci s tagemnazev_tagu
ansible-playbook playbook.yml --skip-tags nazev_tagu
skipne sekci s tagemnazev_tagu
ansible-galaxy role init nazev
vytvoří strukturu pro novou roliansible doc
- vypíše dokumentaciansible config
generování configuansible-community
verze komunitního pluginuansible-console-all
ssh příkaz na všechny strojeansible-vault edit host_vars/1-ubuntu.yml
zašifruje pomocí AES256, kdyby se to náhodou dostalo do gitu, tak jsou hesla zašifrované
EXTERNÍ NÁSTROJE
- Molecule
POZNÁMKY
- modul
raw
používá pouze SSH - není potřeba mít na vzdáleném serveru nainstalovaný python - nějací daemoni jsou schopni checkovat vlastní config (např. nginx), v Ansiblu lze použít
validate: nginx -t
, který ti provede tu kontrolu a potom až teprve ti udělá ten zbytek - Vagrant společně s Ansiblem dokáže udělat virtualku, kde lze testovat playbooky
- Multiline in yml
- Cool výpis všech serverů se všemi různými daty
- ShellCheck - řekne ti, co si o tvém špageta kódu myslí :)