SaltStack#2: Központosított telepítések

Három részes sorozatom második részében az "állapotokkal" ismerkedünk meg, és elkezdünk összerakni egy webkiszolgálóhoz szükséges alap rendszert. – írta: stopperos, 10 éve

Salt States

Előző írásomban elkészítettem egy alap SaltStack telepítést, és a távoli parancsfuttatásra néztem pár példát. Ma egy szinttel tovább lépek és elkészítünk közösen pár újrahasznosítható "állapotot", amivel egy üzemeltető feltöltheti az eszköztárát. Elnézést hogy megcsúsztam a folytatással, de végeznem kellett az egyetemi tanulmányaimmal és mellette még kiengedni az internetre a saltból összerakott szolgáltatás csomagunkat (érintett technológiák: apache, nginx, mysql, postgres, jboss, gluster, postfix, monit, munin, rhq, haproxy, iptables, openfire ...)

Az elmúlt 5-6 év alatt több mappát is megtöltöttem kis eszközeimmel. Volt amelyik csak csomagokat telepített fel, központi tárhelyről konfigurációs fájlokat másolt. Nyomtatóhoz generálta le a felhasználókat. Firefoxot drótozott be proxy szerverre. Backupokat végzett... Illetve ezeknek ubuntu/debian/fedora verzióik. Annyi közös volt csak bennük, hogy karbantartást és néha sok gondolkodást igényeltek, hogy biztos működőképesek legyenek. A SaltStack-et ide is beengedtem, és nagyon sok minden megváltozott.

A korábbi cikkem rendszereit használom ebben az írásban is, és feltételezem az ubuntu (esetleg debian) alapot. Végig a salt-master gépen dolgozunk, a minionökhöz nem nyúlunk hozzá.

A SaltStack a gépek leírását State-nek (magyarul Állapotnak) nevezi. Ha kiküldünk egy állapot frissítést, akkor a kihelyezett minionök igyekeznek a megadott állapotra állítani a gépet. Gyors példa: a 'kívánt' állapotban a Midnight Commander telepítve van, de a gépen nincs, akkor az 'állapotra hozás' során feltelepül.
Az állapotok tárolására alaból a /srv/salt mappa szolgál. Az előbbi példát megvalósítva, hozzunk létre egy packages.sls fájlt a következő tartalommal:

mc:
pkg.installed

Magyarázat: YAML szintaxist használunk. Az első sor a függvény elnevezése kettősponttal a végén. Következő sor két space-szel kezdődik, majd a state-modul és annak függvénye található. pkg dokumentációja.
Írhattam volna ezt is:

csomagok:
pkg.installed:
- name: mc

Futtassuk a következő parancsot:
sudo salt \* state.sls packages
sysadmin-remote:
----------
ID: mc
Function: pkg.installed
Result: True
Comment: The following packages were installed/updated: mc.
Changes:
----------
mc:
----------
new:
3:4.8.11-1
old:

mcedit:
----------
new:
1
old:

Summary
------------
Succeeded: 1
Failed: 0
------------
Total: 1

Ami történt: feltelepült a csomag és annak függőségei. Ha még egyszer ráfuttatom, akkor is az eredmény a teljesült lesz, hiszen a csomag már jelen van a rendszeren.
Én szeretem magam otthon érezni a rendszereken, amiket én kezelek, ezért van egy alap eszköztáram, amit fel szoktam telepíteni. Ha van saját jó kis eszközötök, amit ti használtok és nincs benne a listában, a hozzászólásokban lehet kiabálni. Szeretek új dolgokat megismerni. Ez a saját packages.sls fájl tartalmam parancssorhoz:

terminal-tools:
pkg.installed:
- names:
- mc
- htop
- screen
- ssh
- xz-utils
- iptraf
- iftop
- iotop
- fail2ban
- molly-guard
- elinks
- wget
- git
- p7zip-full
- python-software-properties
- finger
- lvm2
{% if grains['osrelease'] == '14.04' %}
- glances
{% endif %}


Futtatás végén kiírja az eredményt.

Amire nagyon figyelni kell, és mi jó párszor rászaladtunk:
* sorok végén kettős pont, ami alatt van valami
* 0-2-4-6 space a karakterek előtt. Nem TAB, space.
* Lehetőleg nevezzük el a függvényeket, és használjuk a "name" opciót.

Az if endit részre hívnám fel a figyelmet. Ez a jinja template nyelv része. Sok ilyennel lehet találkozni, és sok ilyen kell ha bonyolult rendszerekre kell szabni a szabályokat. Ez a rész akkor kerül leküldésre a salt-minon részére, ha az megfelel annak a szabálynak, hogy az egy trusty legyen. Ezt az információdarabkát pedig a salt grains szolgáltatja, ez magáról a salt hálózatról van. Hogy mi érhető el, a következő paranccsal lehet megnézni:

sudo salt \* grains.items

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

Előzmények