lunes, 17 de junio de 2019

Playbooks de Ansible y actualizar nuestra distribución GNU/Linux

Ando con muy poco tiempo libre porque, entre otras cosas, tengo mucho trabajo acumulado. Pero como de momento no quiero faltar a mi cita diario de escribir un artículo cada día, os dejo en este artículo algo en lo que estoy trabajando actualmente. Actualizar todos los servidores que tenemos.


Esta tarea, que en principio parece simple, puede convertirse en una pesadilla si tenemos que hacerla en 50 servidores ¿Vamos actualizando cada máquina una a una? Es una opción, pero tardaríamos mucho.

Antes vamos con cómo se actualizaría la distribución de una máquina y después veremos cómo hacerlo en varias "a la vez".

Lo primero que tenemos que hacer es saber qué versión de nuestra distribución tenemos en nuestra máquina. Esto es una tarea bastante simple para un sysadmin.

lsb_release -a

Esto nos dará algo como la salida siguiente:

No LSB modules are available. 
Distributor ID: Debian 
Description: Debian GNU/Linux 9.4 (stretch) 
Release: 9.4 
Codename: stretch 

Vemos que tenemos la versión 9.4 de Debian. No está mal ya que está dentro del proyecto stretch que pertenece a la versión 9.X de Debian, pero no es la última (la última es la 9.9). La vamos a actualizar, aunque para eso primero tenemos que actualizar los repositorios.

sudo apt-get update

Cuando termine de actualizar los repositorios, actualizaremos, ahora sí, nuestra distribución con el siguiente comando:

sudo apt-get dist-upgrade

Este proceso tardará un poco y también puede que, por terminal, nos salgan algunos mensajes en los que tengamos que escoger alguna de las opciones que nos marquen, pero por lo demás, no requiere mucho más y debería salir todo bien.  Ahora lo que veremos será lo siguiente si todo ha ido bien.

$ lsb_release -a 
No LSB modules are available. 
Distributor ID: Debian 
Description: Debian GNU/Linux 9.9 (stretch) 
Release: 9.9 
Codename: stretch

Ya tendríamos la versión 9.9 (más actual hasta el momento) de Debian en nuestro servidor. Ahora volvamos al caso de nuestros 50 servidores, de momento lo tenemos actualizado solamente en 1, quedan 49 ¿Hacemos lo mismo una a una? Podría ser, pero tardaríamos mucho.

Recuperemos a Ansible. Podríamos, como ya hemos visto, montar nuestros propios comandos de Ansible para hacer esto en todos nuestros servidores, pero tendríamos que montar un comando por cada comando que queramos ejecutar (2 en total -podría ser uno pero a mí me gusta ejecutarlos por separado). Hemos reducido mucho el trabajo, sí, pero podríamos reducirlo aún más con los playbooks.

Un playbook es un "libro" donde añadiremos los comandos a ejecutar, guardaremos, y después ejecutamos "damos al play" a ese libro y se ejecutará en los hosts que especifiquemos. Estos playbooks son archivos yaml que deberemos ejecutar como hemos dicho. Pongamos un ejemplo de un playbook que se llame dist_upgrade.yaml con el siguiente contenido:


- hosts: all
  sudo: true
  remote_user: manu 
  tasks:
   - name: updates a server
     apt: update_cache=yes
   - name: upgrade a server
     apt: upgrade=dist


Lo que estamos diciendo con este playbook es, en esencia, que aplique los comandos que le especifiquemos a todos los hosts, que permita sudo en el usuario remoto "manu". Después le especificamos las tareas, la primera la de actualizar los paquetes y, posteriormente, actualizar la distribución. Así de fácil es crear un playbook. Ahora lo guardaremos y ejecutaremos el playbook con el siguiente comando.

ansible-playbook dist_upgrade.yaml --ask-sudo-pass

Al ejecutar esto, nos pedirá la contraseña de sudo (lo que le hemos especificado con --ask-sudo-pass) para que pueda ejecutar comandos como superusuario y ejecutará el dist-upgrade en todos los servidores que tengamos en el archivo hosts de Ansible. 

Todo debería salir bien, aunque a veces, por distintas cuestiones como que no todos los servidores partiesen de la misma versión de distribución o que no tuviesen si quiera la misma distribución, puede llevar a algún fallo en algún servidor. No pasa nada, entramos en dicho servidor y lo miramos, mejor ejecutar comandos a mano en 3-4 de 50 que hayan fallado que en todos y cada uno de los 50 servidores.

Con esto ahorraremos bastante tiempo a la hora de actualizar nuestros sistemas y de, en general, realizar cualquier tarea en un entorno con varios varios servidores. Una vez más, se demuestra el enorme potencial de GNU/Linux y del software libre.

¿Hackeamos el Mundo?

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...

Entrada destacada

El server me sabe a poco.

Soy un fanático del Rock y de Debian . (Creo que voy a inventar Rockbian, que suena bien y todo xD) Llevaba tiempo queriendo unir estos 2 c...