Ha már tudjuk, hogyan konfiguráljunk Debian VPS-t, és rendszeresen kell is ilyet csinálnunk, felmerül a kérdés, hogyan lehetne automatizálni a folyamatot. A kérdés persze nem új, a válasz pedig: konfigurációmenedzsment szoftverrel.

Az Ansible lehetőséget ad rá, hogy tetszőleges számú távoli gépen parancsokat futtassunk.1 Viszonylag egyszerű és minimalista, és csak SSH-hozzáférésre van szüksége a menedzselt gépeken.

$ # -m 'MODULE_NAME', --module-name 'MODULE_NAME' module name to execute (default=command)
$ # -a 'MODULE_ARGS', --args 'MODULE_ARGS' module arguments
$ ansible -i hosts.ini myservers -a "free -h"
$ # -b, --become
$ # -B 'SECONDS', --background 'SECONDS' run asynchronously, failing after X seconds
$ # -P 'POLL_INTERVAL', --poll 'POLL_INTERVAL' set the poll interval if using -B (default=15)
$ ansible -i hosts.ini myservers -b -B 1800 -P 0 -m apt -a "update_cache=true"

Itt a hosts.ini a készletfájlunk neve, amely a szervereink elérhetőségét tartalmazza:

[myservers]
example.com:2222
123.123.123.123

A gyakorlatban általában nem egyesével adunk ki parancsokat, hanem több műveletet rögzítünk egy YAML-fájlba. Ha a rendelkezésünkre áll egy ilyen “szövegkönyv” (playbook, így nevezi az Ansible), akkor azt így futtatjuk:

$ ansible-playbook -i hosts.ini provision.yml

Itt a provision.yml a playbook neve. Csak példaképp egy működő YAML:

---
- name: Test playbook
  hosts: all
  remote_user: root
  tasks:
  - name: Apt update, upgrade
    apt:
      update_cache: true
      upgrade: safe
  - name: Install packages
    package:
      name: "{{ item }}"
    with_items:
      - htop
      - mc
      - tmux

A playbook több fájlból is állhat, role-okra és task-okra tagolva. A jó playbook idempotens: nincsenek mellékhatásai, újrafuttatható, minden futás ugyanarra az eredményre vezet. Gittel verziózhatjuk, mint minden szoftveres projektet.

A leírt architektúra az alapértelmezett, tehát egy központi helyről toljuk rá (push) a változásokat a gépekre. Létezik ennek az inverze is, amikor a kliens húzza le (pull) és alkalmazza a változásokat egy git repóból. Ekkor a menedzselt gépre telepítjük az ansible-t, és az alábbi parancsot futtathatjuk cronból is.

$ ansible-pull -o -U git://bitbucket.org/myrepo -d /home/myuser/myrepo

E módszer kiválóan alkalmas a munkaállomásunk kezelésére, akkor is, ha csak egy van: dokumentálja a változásokat, az újratelepítés ujjgyakorlattá válik.


  1. Ajánlott olvasmány: Geerling, Jeff: Ansible for DevOps. Server and configuration management for humans. 2nd edition. Leanpub, 2020-08. ↩︎