Fabric – Automatizar la ejecución de comandos y despliegue en Linux a través de SSH

En el mundo siempre cambiante del desarrollo de software, la gestión eficiente de servidores remotos es crucial. Ya sea que seas un administrador de sistemas, un ingeniero de software o un desarrollador de software, poder ejecutar comandos de Linux en servidores remotos es una tarea común.

Aquí es donde Fabric, una biblioteca de alto nivel de Python diseñada para ejecutar comandos de Linux de forma remota a través de SSH, se convierte en una herramienta indispensable para cualquiera que necesite gestionar sistemas remotos aprovechando el poder de Python.

¿Qué es Fabric?

Fabric es una versátil biblioteca de Python que simplifica el proceso de ejecutar comandos de shell en servidores remotos a través de conexiones SSH. Fue desarrollada inicialmente por Jeff Forcier y más tarde se convirtió en un proyecto de código abierto.

Proporciona una interfaz de alto nivel y pythonica para trabajar con sistemas remotos, permitiéndote automatizar tareas, implementar código y gestionar configuraciones en varios servidores sin esfuerzo.

¿Por qué usar Fabric?

Hay varias razones convincentes para elegir Fabric para tus necesidades de ejecución de comandos remotos:

  • Enfoque Pythonico – Fabric se adhiere a la filosofía de Python, lo que facilita a los desarrolladores y administradores de sistemas escribir scripts en un lenguaje con el que ya están familiarizados.
  • SSH y Paramiko – Fabric se basa en la biblioteca Paramiko para manejar conexiones SSH, lo que proporciona una forma segura y confiable de ejecutar comandos de forma remota.
  • Flujo de trabajo basado en tareas – Fabric fomenta un enfoque orientado a tareas para la ejecución de comandos remotos. Define tareas, que son esencialmente funciones de Python, y Fabric se encarga de ejecutarlas en servidores remotos.
  • Casos de uso – Fabric es una herramienta versátil adecuada para una amplia gama de casos de uso, incluida la implementación de aplicaciones, la gestión de configuraciones de servidores y la ejecución de tareas de mantenimiento del sistema.

En esta guía, cubriremos los pasos para introducir y comenzar a usar Fabric para mejorar la administración de servidores para grupos de servidores.

Cómo instalar la herramienta de automatización Fabric en Linux

Una característica importante de fabric es que las máquinas remotas que necesitas administrar solo necesitan tener instalado el servidor estándar OpenSSH.Solo necesitas ciertos requisitos instalados en el servidor desde el cual estás administrando los servidores remotos antes de poder comenzar.

Solo necesitas ciertos requisitos instalados en el servidor desde el cual estás administrando los servidores remotos antes de que puedas comenzar.

Requisitos:

  • Python 2.5+ con los encabezados de desarrollo
  • Python-setuptools y pip (opcional, pero preferido) gcc

Fabric se instala fácilmente utilizando el gestor de paquetes pip, pero también puedes preferir elegir tu gestor de paquetes predeterminado yum, dnf, o apt/apt-get para instalar el paquete fabric, generalmente llamado fabric o python-fabric.

Instalar Fabric en Sistemas RHEL

En distribuciones basadas en RHEL como CentOS Stream, Rocky Linux y AlmaLinux, debe tener el repositorio EPEL instalado y habilitado en el sistema para instalar el paquete fabric.

sudo dnf install epel-release
sudo dnf install fabric

Instalar Fabric en Sistemas Debian

En distribuciones basadas en Debian como Ubuntu y Linux Mint, los usuarios pueden simplemente hacer apt para instalar el paquete fabric como se muestra:

sudo apt install fabric

Instalar Fabric Usando PiP

Si fabric no está disponible en los repositorios de su sistema, puede usar pip para instalarlo como se muestra.

sudo yum install python3-pip       [On RedHat based systems] 
sudo dnf install python3-pip       [On Fedora 22+ versions]
sudo apt install python3-pip       [On Debian based systems]

Una vez que pip se haya instalado correctamente, puede usar pip para obtener la versión más reciente de fabric como se muestra:

pip3 install fabric

Cómo usar Fabric para automatizar tareas de administración de Linux

Comencemos a aprender cómo usar Fabric. Como parte del proceso de instalación, se ha agregado un script de Python llamado 'fab' a un directorio en el PATH de su sistema. El script 'fab' maneja todas las tareas al usar Fabric.

Ejecutar Comandos de Linux Localmente

Por convención, debes comenzar creando un archivo de Python llamado fabfile.py usando tu editor de texto favorito. Recuerda que puedes darle un nombre diferente a este archivo si lo deseas, pero necesitarás especificar la ruta del archivo de la siguiente manera:

fab --fabfile /path/to/the/file.py

Fabric utiliza 'fabfile.py' para ejecutar tareas, el 'fabfile' debe estar ubicado en el mismo directorio donde ejecutas la herramienta Fabric.

Ejemplo 1: Vamos a crear un Hola Mundo básico primero.

# vi fabfile.py

Agrega estas líneas de código al archivo.

def hello():
       print('Hello world, Tecmint community')

Guarda el archivo y ejecuta el comando a continuación.

# fab hello
Fabric Tool Usage

Veamos ahora un ejemplo de un fabfile.py para ejecutar el comando uptime en la máquina local.

Ejemplo 2: Abre un nuevo archivo fabfile.py de la siguiente manera:

# vi fabfile.py

Y pega las siguientes líneas de código en el archivo.

#!  /usr/bin/env python
from fabric.api import local
def uptime():
  local('uptime')

Luego guarda el archivo y ejecuta el siguiente comando:

# fab uptime
Fabric: Check System Uptime

Ejecutar Comandos de Linux de Forma Remota a Través de SSH

La API de Fabric utiliza un diccionario de configuración que es el equivalente de Python de una matriz asociativa conocida como env, que almacena valores que controlan lo que Fabric hace.

El env.hosts es una lista de servidores en los que deseas ejecutar tareas de Fabric. Si tu red es 192.168.0.0 y deseas administrar hosts 192.168.0.2 y 192.168.0.6 con tu fabfile, puedes configurar el env.hosts de la siguiente manera:

#!/usr/bin/env python
from  fabric.api import env
env.hosts = [ '192.168.0.2', '192.168.0.6' ]

La línea de código anterior solo especifica los hosts en los que ejecutarás tareas de Fabric pero no hace nada más. Por lo tanto, puedes definir algunas tareas, Fabric proporciona un conjunto de funciones que puedes usar para interactuar con tus máquinas remotas.

Aunque hay muchas funciones, las más comúnmente utilizadas son:

  • run – que ejecuta un comando de shell en una máquina remota.
  • local – que ejecuta el comando en la máquina local.
  • sudo – que ejecuta un comando de shell en una máquina remota, con privilegios de root.
  • Get – que descarga uno o más archivos de una máquina remota.
  • Put – que sube uno o más archivos a una máquina remota.

Ejemplo 3: Para mostrar un mensaje en múltiples máquinas, crea un fabfile.py como el siguiente.

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def echo():
      run("echo -n 'Hello, you are tuned to Tecmint ' ")

Para ejecutar las tareas, ejecuta el siguiente comando:

# fab echo
Fabric: Automate Linux Tasks on Remote Linux

Ejemplo 4: Puedes mejorar el fabfile.py que creaste anteriormente para ejecutar el comando de uptime en la máquina local de modo que ejecute el comando uptime y también verifique el uso del disco utilizando el comando df en múltiples máquinas de la siguiente manera:

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def uptime():
      run('uptime')
def disk_space():
     run('df -h')

Guarda el archivo y ejecuta el siguiente comando:

# fab uptime
# fab disk_space
Fabric: Automate Tasks on Multiple Linux Systems

Instalar automáticamente la pila LAMP en el servidor Linux remoto

Ejemplo 4: Veamos un ejemplo de implementación de un LAMP (Linux, Apache, MySQL/MariaDB y PHP) en un servidor Linux remoto.

Escribiremos una función que permita instalar LAMP de forma remota utilizando privilegios de root.

Para RHEL/CentOS y Fedora
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
  run ("yum install -y httpd mariadb-server php php-mysql")
Para Debian/Ubuntu y Linux Mint
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
  sudo("apt-get install -q apache2 mysql-server libapache2-mod-php php-mysql")

Guarda el archivo y ejecuta el siguiente comando:

# fab deploy_lamp

Nota: Debido a la gran cantidad de salida, no podemos crear una grabación en pantalla (gif animado) para este ejemplo.

Ahora puedes automatizar tareas de administración de servidores Linux utilizando Fabric y sus características y ejemplos mencionados anteriormente…

Opciones útiles de Fabric

  • Puede ejecutar fab --help para ver información útil y una larga lista de opciones disponibles en la línea de comandos.
  • Una opción importante --fabfile=PATH que le ayuda a especificar un archivo de módulo Python diferente para importar que no sea fabfile.py.
  • Para especificar un nombre de usuario para usar al conectarse a hosts remotos, use la opción --user=USER.
  • Para usar una contraseña para la autenticación y/o sudo, use la opción --password=PASSWORD.
  • Para imprimir información detallada sobre el comando NOMBRE, use la opción --display=NAME.
  • Para ver los formatos, use la opción --list, opciones: corto, normal, anidado, use la opción --list-format=FORMAT.
  • Para imprimir una lista de comandos posibles y salir, incluya la opción --list.
  • Puede especificar la ubicación del archivo de configuración a usar utilizando la opción --config=PATH.
  • Para mostrar una salida de error en color, use --colorize-errors.
  • Para ver el número de versión del programa y salir, use la opción --version.
Resumen

Fabric es una poderosa biblioteca de Python que simplifica la ejecución de comandos remotos a través de SSH, proporcionando un enfoque amigable para el usuario en Python. Su capacidad para simplificar tareas complejas y automatizar la administración de sistemas lo convierte en una herramienta valiosa para administradores de sistemas, desarrolladores y profesionales de DevOps.

Ya sea que estés administrando un solo servidor o orquestando una implementación a gran escala, Fabric puede ayudarte a hacerlo de manera eficiente y efectiva.

Source:
https://www.tecmint.com/automating-linux-system-administration-tasks/