Ejecutando un mismo comando en varias máquinas (con fabric)
Os dejo aquí un script que permite ejecutar comandos predefinidos en un conjunto de máquinas. En realidad es un fabfile
, es decir, un script para ejecutar con fabric.
El script que aparece en esta receta lo estoy usando para instalar un mismo paquete (debian) en varios servidores a la vez (lo cual es un latazo hacer una por una). Así que los comandos que tiene definidos son los recurrentes update, install y remove de aptitude. Obviamente se puede utilizar para ejecutar cualquier comando imaginable.
Ingredientes
- fabric
¿Cómo se usa?
Pues muy sencillito, por ejemplo, para instalar el paquete go2
en las máquinas server1
y server2
simplemente:
Se puede ejecutar como un comando gracias al peculiar shebang “#!/usr/bin/fab -f”.
Pide la clave (una única vez) para hacer sudo
en las máquinas remotas. Se asume que el usuario pepe
tiene autenticación por clave pública, es sudoers en ambas máquinas y tiene la misma clave, que no es demasiado descabellado.
Fíjate que el script ha averiguado los nombres canónicos de las máquinas incluyendo nombre de usuario remoto y puerto. Esta información está por supuesto en el ~/.ssh/config
del usuario, pero fabric
no lo soporta. El script r-apt.py
incluye una función que he encontrado (con mínimas modificaciones) y que ofrece esta útil característica.
Lo bueno es que fabric permite ejecutar más de un comando en más de una máquina, de modo que se puede hacer algo tan interesante como:
update e install de “n” paquetes en “n” máquinas poniendo la clave una única vez… no está mal.
El script
Lo pongo aquí para que puedas ver lo sencillito que es, pero lo tienes también en mi repo bitbucket