Added: cheatsheet
This commit is contained in:
parent
1c9ecd847f
commit
ee37d23483
184
kevin_cheatsheet.md
Normal file
184
kevin_cheatsheet.md
Normal file
@ -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í :)
|
BIN
kevin_cheatsheet.pdf
Normal file
BIN
kevin_cheatsheet.pdf
Normal file
Binary file not shown.
218
kevin_cheatsheet_fixed.md
Normal file
218
kevin_cheatsheet_fixed.md
Normal file
@ -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ů
|
||||
|
Loading…
x
Reference in New Issue
Block a user