diff --git a/kevin_cheatsheet.md b/kevin_cheatsheet.md new file mode 100644 index 0000000..b94e80f --- /dev/null +++ b/kevin_cheatsheet.md @@ -0,0 +1,184 @@ +# 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 +```bash +apt install python3-venv python3-pip +python3 -m venv .muj_venv +source .muj_venv/bin/activate +pip3 install ansible +``` + +```bash +ansible-inventory --list +``` +- vypíše list všech strojů a jak je chápe + +```bash +ansible 1-ubuntu -m 'command' +``` +- lze poslat příkaz na různé stroje + +```bash +ansible "vm:!1_ubuntu' - m 'command' +``` +- lze poslat příkaz na různé stroje + +### PLAYBOOOKY +```bash +ansible-playbook play-1.yml +``` +- spustí playbook play-1.yml + +```bash +ansible hosts -m setup > /dev/null +``` + +- vypíše všechny informace o všech strojích (lze použít i pro jeden stroj) + +```bash +ansible-playbook play-3.yml --check +``` +- jen checkuje, jestli je to ok; validace konfigurace + +```bash +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 + +```bash +ansible-playbook play-3.yml --check --diff +``` +- hledá rozdíly (--diff) + +```yml +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 +```bash +- 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 + +```yml + - 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 + +```txt +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``` +```bash +- 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](https://galaxy.ansible.com/ui/standalone/roles/) + +### KOLEKCE +- velký třest roku 2020, kdy se Ansible rozdělil na komunitní a nekomunitní - ty komunitní věci jsou v "Panos" [ZDE](https://galaxy.ansible.com/ui/repo/published/paloaltonetworks/panos/) +- 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 tagem ```nazev_tagu``` +- ```ansible-playbook playbook.yml --skip-tags nazev_tagu``` skipne sekci s tagem ```nazev_tagu``` +- ```ansible-galaxy role init nazev``` vytvoří strukturu pro novou roli +- ```ansible doc``` - vypíše dokumentaci +- ```ansible config``` generování configu +- ```ansible-community``` verze komunitního pluginu +- ```ansible-console-all``` ssh příkaz na všechny stroje +- ```ansible-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](https://stackoverflow.com/questions/3790454/how-do-i-break-a-string-in-yaml-over-multiple-lines) +- [Cool výpis všech serverů se všemi různými daty](https://github.com/fboender/ansible-cmdb) +- [ShellCheck](https://www.shellcheck.net/) - řekne ti, co si o tvém špageta kódu myslí :) diff --git a/kevin_cheatsheet.pdf b/kevin_cheatsheet.pdf new file mode 100644 index 0000000..cc2a2e9 Binary files /dev/null and b/kevin_cheatsheet.pdf differ diff --git a/kevin_cheatsheet_fixed.md b/kevin_cheatsheet_fixed.md new file mode 100644 index 0000000..a4a9501 --- /dev/null +++ b/kevin_cheatsheet_fixed.md @@ -0,0 +1,218 @@ +# Ansible Tutorial | NIC.CZ + +## Vypracoval: Matěj Kevin Nechodom + +--- + +## Basics + +### ClusterSSH +- napsané v PERL +- nejde verzovat +- 4 terminály = 4 servery; příkazy se píší do jednoho terminálu a paralelně se odesílají na ostatní servery + +### Vlastní balíčky +- IsMedia posinst + +### CFEngine +- zastaralé +- napsané v C +- low-level + +### Puppet, Chef, Salt +- pull/push model +- server obsahuje konfiguraci, kterou si klienti stahují +- podle intervalu (defaultně 30 min) se konfigurace refreshuje +- Puppet a Chef jsou napsané v Ruby, což znamená, že každý klient potřebuje Ruby interpret + +### Ansible +- YAML => Python (2.7/3.5+) => SSH => Python (2.4) + +## Instalace + +```bash +apt install python3-venv python3-pip +python3 -m venv .muj_venv +source .muj_venv/bin/activate +pip3 install ansible +``` + +```bash +ansible-inventory --list +``` +- vypíše seznam všech strojů a jejich konfiguraci + +```bash +ansible 1-ubuntu -m 'command' +``` +- posílá příkaz na různé stroje + +```bash +ansible "vm:!1_ubuntu" -m 'command' +``` +- posílá příkaz na různé stroje + +## Playbooky + +```bash +ansible-playbook play-1.yml +``` +- spustí playbook `play-1.yml` + +```bash +ansible hosts -m setup > /dev/null +``` +- vypíše všechny informace o všech strojích (lze použít i pro jeden stroj) + +```bash +ansible-playbook play-3.yml --check +``` +- pouze ověřuje konfiguraci bez aplikace změn + +```bash +ansible-playbook play-3.yml --check --limit server +``` +- kontrola konfigurace na vybraných serverech + +```bash +ansible-playbook play-3.yml --check --diff +``` +- zobrazí rozdíly v konfiguraci + +```yml +check_mode: no +``` +- vypne `check_mode` + +> **Poznámka:** Použití shellu není ideální, protože neumožňuje ověřit úspěšné dokončení operace. Raději používej moduly Ansible. + +## Handlery + +- Handler se spustí pouze v případě změny + +```yml +- name: Install webserver + hosts: 1-ubuntu + handlers: + - name: Reload apache + systemd: + name: "apache2" + state: "reloaded" +``` +- Volání handleru se provádí pomocí `notify: nazev` + +## Tagy + +- Možnost přeskakovat a filtrovat kroky v playbooku + +```yml + - name: Set hostname on homepage 2 + template: + src: ./index.html.j2 + dest: /var/www/html/index8.html + notify: Reload apache + tags: + - configure + - index8 +``` + +## Role + +- Strukturovaný proces, lepší přehlednost souborů +- `ansible-galaxy role init nazev` vytvoří novou roli + +```txt +roles/ +└── webserver_apache + ├── handlers + │ └── main.yml + ├── tasks + │ └── main.yml + └── templates + └── index.html.j2 +``` + +- Playbook volající roli `webserver_apache`: + +```yml +- name: Install webserver - Apache2 + hosts: 1-ubuntu + roles: + - webserver_apache + #- monitoring_apache +``` + +- **Ansible Galaxy** nabízí komunitní role s dokumentací: [Ansible Galaxy](https://galaxy.ansible.com/ui/standalone/roles/) + +## Kolekce + +- V roce 2020 došlo k rozdělení Ansiblu na komunitní a nekomunitní verze +- Komunitní kolekce jsou dostupné např. zde: [Panos Collection](https://galaxy.ansible.com/ui/repo/published/paloaltonetworks/panos/) + +## Pluginy + +- Rozšiřují funkcionalitu Ansiblu +- Typy pluginů: + - **Callback plugin** – zavolán po dokončení playbooku (např. výstup do e-mailu) + - **Connection plugin** – způsob připojení (`ssh`, `local`, `chroot`, `docker`) + - **Inventory plugin** – dynamické inventáře (`aws`, `nmap`, `virtualbox`) + - **Shell plugin** – umožňuje spouštění shell příkazů + +## Přibalené nástroje + +- **Vault** – bezpečné uchování hesel +- **Galaxy** – sdílení rolí +- **Lint** – statická analýza kódu +- **Inventory** – parser inventáře + +## Příkazy + +- Spuštění pouze sekce s konkrétním tagem: + ```bash + ansible-playbook playbook.yml --tags nazev_tagu + ``` +- Přeskočení sekce s tagem: + ```bash + ansible-playbook playbook.yml --skip-tags nazev_tagu + ``` +- Vytvoření nové role: + ```bash + ansible-galaxy role init nazev + ``` +- Zobrazení dokumentace: + ```bash + ansible doc + ``` +- Generování konfigurace: + ```bash + ansible config + ``` +- Komunitní verze pluginů: + ```bash + ansible-community + ``` +- SSH příkaz na všechny stroje: + ```bash + ansible-console-all + ``` +- Šifrování hesel pomocí AES256: + ```bash + ansible-vault edit host_vars/1-ubuntu.yml + ``` + +## Externí nástroje + +- **Molecule** – testování ansible playbooků + +## Poznámky + +- Modul `raw` používá pouze SSH – není nutné mít Python na cílovém serveru +- Některé služby (např. nginx) mají vlastní validátory: + ```yml + validate: nginx -t + ``` +- **Vagrant** umožňuje testování playbooků ve virtualizovaném prostředí +- [Multiline v YAML](https://stackoverflow.com/questions/3790454/how-do-i-break-a-string-in-yaml-over-multiple-lines) +- [Výpis všech serverů a jejich dat](https://github.com/fboender/ansible-cmdb) +- [ShellCheck](https://www.shellcheck.net/) – kontrola shell skriptů +