ansible-skoleni/kevin_cheatsheet.md
2025-03-27 13:54:57 +01:00

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 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
  • 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í :)