CyberseguridadLinuxProgramaciónServidoresWeb

Automatizando con Ansible: del localhost al servidor de producción.

Ansible es una plataforma de software libre para configurar y administrar ordenadores. Combina instalación multi-nodo, ejecuciones de tareas ad hoc y administración de configuraciones. Adicionalmente, Ansible es categorizado como la herramienta de orquestación mas utilizada al dia de hoy.​

Para su instalación, que no es complicada, y su configuración, se deben seguir los lineamientos de la documentación según sea la distro sobre la cual se ha instalado.

Para realizar una instalación en Ubuntu se pueden utilizar los siguientes comandos:

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible

Luego de su descarga y su instalaciónm Ansible se ubica en el directorio /etc/ansible donde encontrarás el archivo de configuración ansible.cfg el cual albergará los plugins que instales con posterioridad, y el archivo hosts define los hosts y grupos de hosts en los que funcionan los comandos, módulos y tareas de un manual. Para comprender más sencillamente los hosts hacen referencia a los dominios y direcciones IP de tus servidores. Incluso a modo de prueba puedes agregar tu equipo como localhost para agregarlo a las configuraciones automatizadas.

De previo a agregar un servidor al archivo hosts es recomendable que tengas autorizado el acceso al servidor que vayas a agregar como hosts mediante ssh-keygen. En todo caso, también puedes configurar el acceso a tu servidor mediante la definición de ansible_user y ansible_password en dicho archivo, aunque no es lo mas recomendable.

Un ejemplo de configuración del archivo hosts puede contener una dirección IP o un dominio, ambos referidos al servidor que se va a automatizar, o bien ambos., como el siguiente:

[webservers]
107.175.219.151
localhost

Si no has configurado las claves ssh puedes agregar las credenciales así:

[webservers]
107.175.219.151 ansible_user=root ansible_password=password
localhost ansible_user=root ansible_password=password 

Esta configuración incluye tanto acciones sobre un servidor que se accesa mediante la dirección IP 107.175.219.151 y tu propio equipo, pero puedes agregar mas direciones IP o dominios que apunten a otros servidores.

Ahora intentaremos conectar a los hosts con el comando ping, verificar que haya un python utilizable y esperar el regreso de pong en caso de éxito.

Si tenemos una respuesta satisfactoria leeremos success y la leyenda en verde, en caso contrario que exista algún problema de configuración, credenciales o conexión nos dará el aviso de fallo con la leyenda en rojo.

Comandos ad hoc

Un comando ad hoc de Ansible utiliza la herramienta de línea de comandos /usr/bin/ansible para automatizar una sola tarea en uno o más nodos administrados. los comandos ad hoc son rápidos y fáciles, pero no son reutilizables. Su importancia radica en que se utilizarán o transferirán directamente a los archivos playbook que los verdaderos protagnistas de Ansible, y que los veremos de seguido.

De rigor es importante remitirse a la documentación, para comprender su uso, que siguie esta regla:

$ ansible [pattern] -m [module] -a "[module options]"

El siguiente ejemplo verifica que el editor vim este instalado en su equipo y de no estarlo procede a su descarga y configuración.

Es importante notar que una vez que se ha cumplido con la instalación, en el siguiente llamado del módulo simplemente indicará que ya se ha cumplido con este proceso.

Aquí es donde entra la automatización e inicia la utilidad de Ansible pues puedes definir muchas tareas como:

Para esto es donde ocupamos los archivos playbook cuya extensión es .yml y se crean en el mismo directorio /etc/ansible.

Esta página proporciona una descripción general básica de la sintaxis YAML correcta, que es cómo se expresan los playbooks de Ansible (el lenguaje de gestión de configuración).

Se utiliza YAML porque es más fácil de leer y escribir para los humanos que otros formatos de datos comunes como XML o JSON. Además, hay bibliotecas disponibles en la mayoría de los lenguajes de programación para trabajar con YAML.

Un ejemplo sencillo que utiliza los hosts que hemos defindo como ejemplo anteriormente puede ser:

---
- hosts: webservers
  tasks:
     - name: Actualizar cache de paquetes
       apt: 
         update_cache: yes
         become: true
     - name: Instalar nmap
       apt: 
         name: nmap
         state: latest
         become: true
       

Este archivo define el grupo webservers (localhost y remoto) como el destino del script, define dos tareas a realizar que es la actualización del caché de paquetes y la instalación de la libreria nmap en ambos servidores a través del módulo apt.

Cómo el módulo apt requiere permisos de superusuario administrador eventualmente se debe agregar become: true al script y el parámetro -K para que se nos solicite la respectiva contraseña en caso que el acceso SSH no sea con el administrador. En caso contrario no habrà ningun problema en correr el script tal y como se ha definido.

Finalmente, en este repositorio encontrarás mas ejemplos de playbooks sencillos con los cuales puedes iniciar tus configuraciones de servidores con Ansible.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *