Advertisement
  1. Code
  2. Python

Empezando con la biblioteca Fabric de Python

Scroll to top
Read Time: 5 min

Spanish (Español) translation by Carlos (you can also view the original English article)

Fabric es una biblioteca de Python y una herramienta de línea de comandos para facilitar el uso de SSH para el despliegue de aplicaciones o tareas de administración de sistemas. Fabric es muy simple y potente y puede ayudar a automatizar tareas repetitivas de línea de comandos. Este enfoque puede ahorrar tiempo al automatizar todo tu flujo de trabajo.

Este tutorial tratará cómo utilizar Fabric para integrarse con SSH y automatizar tareas.

Instalación

Fabric se instala mejor mediante pip:

1
$ pip install fabric

Empezando con Fabric

Uso

A continuación hay una función simple que demuestra cómo usar Fabric.

1
def welcome():
2
    print("Welcome to getting started with Fabric!")

El programa anterior se guarda como fabfile.py en tu directorio de trabajo actual. La función de bienvenida se puede ejecutar con la herramienta fab de la siguiente forma:

1
$ fab welcome
2
Welcome to getting started with Fabric

Fabric proporciona el comando fab que lee su configuración desde un archivo, fabfile.py. El archivo debe estar en el directorio desde el que se ejecuta el comando. Un fabfile estándar contiene las funciones que se ejecutarán en un host remoto o en un grupo de hosts remotos.

Funciones

Fabric implementa funciones que se pueden usar para comunicarse con hosts remotos:

fabric.operations.run()

Esta operación se utiliza para ejecutar un comando de shell en un host remoto.

Ejemplos

1
run("ls /var/www/")
2
run("ls /home/userx", shell=False)
3
output = run('ls /var/www/mysites'

fabric.operations.get()

Esta función se utiliza para descargar archivos de un host remoto. El siguiente ejemplo muestra cómo descargar una copia de seguridad de un servidor remoto.

1
# Downloading  a back-up
2
get("/backup/db.bak", "./db.bak")
3

fabric.operations.put()

Esta función sube archivo(s) a un host remoto. Por ejemplo:

1
with cd('/tmp'):
2
    put('/path/to/local/test.txt', 'files')

fabric.operations.reboot()

Como el nombre indica, esta función reinicia un servidor del sistema.

1
# Reboot the remote system

2
reboot()

fabric.operations.sudo()

Esta función se utiliza para ejecutar comandos en un host remoto con privilegios de superusuario. Asimismo, también puede pasar un argumento de un usuario adicional que te permite ejecutar comandos como otro usuario que no sea root.

Ejemplo

1
# Create a directory
2
sudo("mkdir /var/www")

fabric.operations.local()

Esta función se utiliza para ejecutar un comando en el sistema local. Un ejemplo sería:

1
# Extract the contents of a tar archive
2
local("tar xzvf /tmp/trunk/app.tar.gz")
3
4
# Remove a file
5
local("rm /tmp/trunk/app.tar.gz")

fabric.operations.prompt()

La función le indica al usuario con texto y le devuelve la entrada.

Ejemplos

1
# Simplest form:

2
environment = prompt('Please specify target environment: ')
3
4
# specify host

5
env_host = prompt('Please specify host:')
6

fabric.operations.require()

Esta función se utiliza para comprobar las claves dadas en un entorno compartido dict. Si no se encuentran, la operación se aborta.

Integración de SSH

Una de las maneras en que los desarrolladores interactúan con los servidores remotos además de los clientes FTP es a través de SSH. SSH se utiliza para conectarse a servidores remotos y hacer todo, desde la configuración básica hasta ejecutar Git o iniciar un servidor web.

Con Fabric, puedes realizar actividades de SSH desde tu computadora local.

En el ejemplo siguiente se definen funciones que muestran cómo revisar el espacio libre en el disco y el tipo de host. También define qué host ejecutará el comando:

1
# Import Fabric's API module

2
from fabric.api import run
3
4
env.hosts = '159.89.39.54'
5
6
# Set the username

7
env.user = "root"
8
9
10
def host_type():
11
    run('uname -s')
12
13
14
def diskspace():
15
    run('df')
16
17
18
def check():
19
20
    # check host type

21
    host_type()
22
23
    # Check diskspace

24
    diskspace()

Para ejecutar este código, tendrás que ejecutar el siguiente comando en la terminal:

1
fab check

Salida

1
fab check[159.89.39.54] Executing task 'check'
2
[159.89.39.54] run: uname -s
3
[159.89.39.54] Login password for 'root': 
4
[159.89.39.54] out: Linux
5
[159.89.39.54] out: 
6
7
[159.89.39.54] run: df
8
[159.89.39.54] out: Filesystem     1K-blocks    Used Available Use% Mounted on
9
[159.89.39.54] out: udev              242936       0    242936   0% /dev
10
[159.89.39.54] out: tmpfs              50004    6020     43984  13% /run
11
[159.89.39.54] out: /dev/vda1       20145768 4398716  15730668  22% /
12
[159.89.39.54] out: tmpfs             250012    1004    249008   1% /dev/shm
13
[159.89.39.54] out: tmpfs               5120       0      5120   0% /run/lock
14
[159.89.39.54] out: tmpfs             250012       0    250012   0% /sys/fs/cgroup
15
[159.89.39.54] out: /dev/vda15        106858    3426    103433   4% /boot/efi
16
[159.89.39.54] out: tmpfs              50004       0     50004   0% /run/user/0
17
[159.89.39.54] out: none            20145768 4398716  15730668  22% /var/lib/docker/aufs/mnt/781d1ce30963c0fa8af93b5679bf96425a0a10039d10be8e745e1a22a9909105
18
[159.89.39.54] out: shm                65536       0     65536   0% /var/lib/docker/containers/036b6bcd5344f13fdb1fc738752a0850219c7364b1a3386182fead0dd8b7460b/shm
19
[159.89.39.54] out: none            20145768 4398716  15730668  22% /var/lib/docker/aufs/mnt/17934c0fe3ba83e54291c1aebb267a2762ce9de9f70303a65b12f808444dee80
20
[159.89.39.54] out: shm                65536       0     65536   0% /var/lib/docker/containers/fd90146ad4bcc0407fced5e5fbcede5cdd3cff3e96ae951a88f0779ec9c2e42d/shm
21
[159.89.39.54] out: none            20145768 4398716  15730668  22% /var/lib/docker/aufs/mnt/ba628f525b9f959664980a73d94826907b7df31d54c69554992b3758f4ea2473
22
[159.89.39.54] out: shm                65536       0     65536   0% /var/lib/docker/containers/dbf34128cafb1a1ee975f56eb7637b1da0bfd3648e64973e8187ec1838e0ea44/shm
23
[159.89.39.54] out: 
24
25
26
Done.
27
Disconnecting from 159.89.39.54... done.

Automatización de tareas

Fabric te permite ejecutar comandos en un servidor remoto sin necesidad de iniciar sesión en el servidor remoto.

La ejecución remota con Fabric puede generar amenazas de seguridad, pues requiere un puerto SSH abierto, especialmente en máquinas Linux.

Por ejemplo, supongamos que deseas actualizar las bibliotecas del sistema en tu servidor remoto. No es necesario que ejecutes las tareas constantemente. Simplemente tienes que escribir un simple archivo fab que ejecutarás cada vez que quieras ejecutar las tareas.

En este caso, primero importarás el módulo de la API de Fabric:

1
from fabric.api import *

Define el host remoto que deseas actualizar:

1
env.hosts = '159.89.39.54'

Establece el nombre de usuario del host remoto:

1
env.user = "root"

Aunque no es recomendable, quizá necesites especificar la contraseña del host remoto.

Finalmente, define la función que actualiza las bibliotecas de tu host remoto.

1
def update_libs():
2
    """

3
        Update the default OS installation's

4
        basic default tools.

5
                                            """
6
    run("apt-get    update")

Ahora que tu archivo fab está listo, todo lo que tienes que hacer es ejecutarlo de la siguiente forma:

1
$ fab update

Deberías ver el siguiente resultado:

1
$ fab update
2
[159.89.39.54] Executing task 'update'
3
[159.89.39.54] run: apt-get    update
4
[159.89.39.54] Login password for 'root':

Si no has definido la contraseña, se te pedirá hacerlo.

Después de que el programa haya terminado de ejecutar los comandos definidos, obtendrás la siguiente respuesta, si no se producen errores:

1
$ fab update
2
............
3
4
Disconnecting from 159.89.39.54... done. 

Conclusión

En este tutorial se ha tratado lo que se necesita para comenzar con Fabric localmente y en hosts remotos. Ahora puedes empezar a escribir con confianza tus propios scripts para crear, monitorizar o mantener servidores remotos.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.