SSH vs Ansible: 38 szerveren miért maradtunk a saját wrapper-nél
Ansible-t próbáltunk, aztán visszatértünk az egyszerű SSH parancsokhoz egy vékony TypeScript wrapper-rel.
Az eszköz, amit megértesz, mindig legyőzi az eszközt, ami mindent tud.
Ansible-t használtunk 2 évig. Szép, deklaratív, "legjobb gyakorlat". De amikor egy playbook idle-on is 38 másodpercig "gather facts" állapotban volt, és egy szimpla docker restart 4 percig ment — átgondoltuk. Az SSH parancsok azonnal futnak. A wrapper-ünk 300 sor TypeScript, kezeli a connection pool-t, a retry-t, az output parsing-ot. Minden servicenek van egy "commandService", ami ennek az SSH wrapper-nek a tetején ül.
Amit nyertünk
- Sebesség: VM restart 6 mp, nem 4 perc
- Debuggolhatóság: a parancsok TypeScript kódban vannak, breakpoint-ot tehetünk
- Integráció: a command kimenete azonnal TypeScript objektummá parse-olódik
- Audit: minden parancs log-olva van, ki és mikor futtatta
- Nincs tanulási görbe: mindenki tud bash-t, nem kell Ansible DSL-t tanulni
Ansible akkor jó, ha a konfiguráció az elsődleges cél (pl. 200+ szerver kezdeti provisionja). Nálunk a szerverek már provisionálva vannak — nekünk a menedzsment és a valós idejű műveletek fontosak. A saját wrapper 300 sor, és pontosan annyit tud, amennyit kell.