Instalación y Configuración de Ansible en Linux
Es un gusto saludar a todos los que gustan de leer este blog, en esta ocasión les vengo a hablar de como podemos usar Ansible, esta herramienta que nos permite administrar las configuraciones de nuestros servidores Linux de forma automatizada. Mostraremos como crear el código de ansible, mejor conocido como playbooks, para poder automatizar diferentes tareas que son comunes después de instalar el sistema operativo, en este caso pondremos a Debian 10 (buster) como sistema operativo base, usaremos una Raspberry Pi 3 B+ con Raspberry Pi OS (antes Rasbpian) para hacer la configuración del servidor de red casero.
Esta es la primer de tres publicaciones sobre Ansible para automatizar las configuraciones en una Raspberry Pi.
Introducción Link to heading
Es normal que después de instalar el sistema operativo en un servidor, debamos realizar una serie de actividades de configuración que son de rutina, estas tareas post instalación son repetitivas y por lo tanto debemos automatizarlas para que podamos crear un procedimiento repetible y ganar consistencia en las configuraciones de los sistemas que están a nuestro cargo y a los que les damos soporte en la red de casa. En este caso vamos a preparar un servidor pequeñito basado en la arquitectura ARM que es muy eficiente, al principio realizaremos las configuraciones iniciales, luego configuraremos los parámetros generales del sistema, el servicio ntp y el servicio SSH que son esenciales para todo servidor, y en una siguiente publicación mostraremos como pondremos un servidor DHCP y DNS para la red casera basada en pi-hole.
Objetivo Link to heading
Empezaremos desde lo básico, es decir, desde la definición de los requisitos de instalación, hasta la ejecución, estás son las actividades especificas:
- Definición de requisitos
- Instalación de Ansible
- Configuración de Ansible
- Pruebas de conexión ansible
Requisitos Link to heading
Para poder seguir está guía es importante tener por lo menos dos servidores disponibles con Debian 10, una máquina será la máquina de control y la otra la máquina controlada. En este ejercicio usaremos estos sistemas:
- Servidor control: node01
- Servidor controlado: rpi
Los dos servidores deben tener correctamente configurada la red, es decir, debe tener una dirección IP asignada, de preferencia una IP fija, se deben permitir las conexiones al puerto TCP/22 para las conexiones SSH, esto es un requisito obligatorio para usar ansible.
En cada servidor necesitamos acceso vía SSH con una cuenta de usuario que tenga permisos para escalar privilegios usando sudo. Esta cuenta de usuario ya debe de tener configurada la llave SSH autorizada.
Los dos servidores deben tener conexión a Internet para poder descargar algunos paquetes desde diferentes repositorios públicos.
Instalación de Ansible Link to heading
Para instalar ansible en un servidor con debian suelo usar un script que le llamo bootstrap.sh, veamos que hace:
mkdir bin
vim bin/bootstsrap.sh
El contenido del script es este:

Este script realiza las siguientes tareas:
- Instala requisitos básicos: vim, curl, git
- Instala repositorio epel y actualiza repos
- Instalación de ansible y dependencias
- Configuración de directorios de ansible
Ejecutamos el script para realizar la instalación:
sudo bash bin/bootstsrap.sh
El resultado lo podemos probar validando la existencia del binario ansible y los directorios:

Ansible usa usa el protocolo SSH para establecer las conexiones con los nodos que vamos a administrar. En la máquina node01 debemos generar un par de llaves RSA, usaremos el script bin/generate-ssh-keys.sh.
sudo vim bin/generate-ssh-keys.sh
El contenido del script es:

Ejecutamos el script generador de llaves ssh:
sudo bash bin/generate-ssh-keys.sh
Ahora copiamos la llave a la otra máquina usando el comando ssh-copy-id:

Configuración de Ansible Link to heading
Ansible se configura a través de su archivo de configuración /etc/ansible/ansible.cfg y a través de parámetros en tiempo de ejecución.
Editamos el archivo de configuración /etc/ansible/ansible.cfg y definimos la ruta al archivo de inventario.
sudo vim /etc/ansible/ansible.cfg
Cambiamos estos parámetros:

Ahora vamos a configurar el inventario, es decir, vamos a agregar los nodos que vamos a administrar, editamos el archivo del inventario y agregamos las siguientes líneas:
sudo vim /etc/ansible/inventory/hosts

En este inventario hasta arriba definimos el bloque de variables globales [all:vars], que aplican a todos los hosts, aquí definimos la llave y el nombre de usuario para la conexión ssh hacía las otras máquinas que administraremos, también definimos algunas otras variables que son especificas para algunos playbooks.
Después definimos el bloque de hosts general [all], aquí definimos la lista de nodos que vamos a administrar, básicamente usamos dos campos, uno par definir el nombre del host y otro para definir su dirección IP.
En este caso estamos agregando lo siguiente:
- nodo administrado: rpi
- Dirección IP del host SSH: 192.168.3.10
Ahora ejecutemos ansible en modo ad-hoc y hagamos uso del módulo ping:

Ahora que ya hemos configurado ansible a través de su archivo de configuración y del inventario terminamos esta sección y que hemos validado la conectividad vía SSH entre las dos máquina, en las siguientes publicaciones mostraremos como creamos los diferentes roles para configuraciones generales del sistema, el servicio SSH, Docker y Pi-hole.
El código de ejemplo lo pueden descargar de Gitlab en el siguiente URL: https://gitlab.com/jorge.medina/ansible-pihole.
El segundo articulo de la serie lo puedes encontrar acá.