En esta entrada voy a documentar el procedimiento de instalación y configuración básica de Ansible.
Esta aplicación va a tener su propia sección donde pueden encontrar todos las entradas relacionadas en este link.
Ansible es una plataforma de software libre para configurar y administrar ordenadores. Combina instalación multi-nodo (es decir: permite desplegar configuraciones de servidores y servicios por lotes), ejecuciones de tareas ad hoc y administración de configuraciones.
Adicionalmente, Ansible es categorizado como una herramienta de orquestación.1 Gestiona nodos a través de SSH y no requiere ningún software remoto adicional (excepto Python 2.4 o posterior2) para instalarlo. Dispone de módulos que trabajan sobre JSON y la salida estándar puede ser escrita en cualquier lenguaje. Nativamente utiliza YAML para describir configuraciones reusables de los sistemas.3
Instalación de Ansible:
Ansible se encuentra como paquete en la distribución, el procedimiento de instalación es el de siempre, actualizar el sistema primero y después desplegar la nueva herramienta.
Como Ansible en un proyecto en relativamente joven las distribuciones de Linux tienen empaquetadas versiones algo viejas. El conocimiento colectivo recomienda instalarlas desde repositorios alternativos.
sudo apt update sudo apt full-upgrade
En Ubuntu 18.04 / 20.04:
sudo apt install software-properties-common sudo apt-add-repository --yes --update ppa:ansible/ansible
En Raspberry PI OS (Buster):
echo 'deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main' | sudo tee -a /etc/apt/sources.list.d/ppa-ansible.list sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
Todos:
sudo apt install ansible
A continuación vamos a empezar con la configuración inicial de servidor. Esto se hace definiendo los hosts con los que vamos a trabajar. En este ejemplo doy de alta mi servidor «alphaprime.sismonda.local». En mi caso mi equipo resuelve los nombre de los equipos, se pueden poner direcciones ip como está en los ejemplos de la documentación.
sudo vi /etc/ansible/hosts
Ansible depende del ssh para poder ejecutar acciones en los equipos de la infraestructura. Como protocolo voy a crear un usuario para ejecutar estas acciones y voy a permitir que a los clientes solo se conecte con llaves ssh.
En el servidor anfitrión voy a generar el usuario ansible y después voy a generar una llave ssh.
Creo el usuario
sudo addgroup ansible sudo adduser --disabled-password --shell /bin/bash --gecos "Ansible User" --ingroup sudo --ingroup ansible ansible echo 'ansible ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers.d/ansible
Creo la llave SSH RSA para el usuario «ansible».
sudo su - ansible
ssh-keygen
Finalizada la creación de la llave SSH RSA necesitamos copiar el valor de la llave pública. La llave pública es un string de una línea que se muestra en varias por la longitud de la misma.
cat /home/ansible/.ssh/id_rsa.pub
Y el valor que guardo porque tengo que usarlo en los clientes es:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3S0TKsUWDvmyEdz0/YRcOdVKW4wWniYRhEcX+JH1BIn47ovk4mLZmgv7TCS8Bn0wN6JFXL/KQR60pKVnTfe5FG9LYiiLln3EdinGFwuEJv9XSp/w8uR5SeHUpdQQT3PjyV+Zr9SxDTXRMQB16ZJLMQAltrIHlpucvw56qX4HVNLPUcSCh4cGhSZDbRzRg7OXvZ1ASImc2jOAKHS3XLybXKM9ZhMZ8WxGyv0/e0dik6aEyyAP1Ks7pQfFvr7YbdiPd8/3yivs6dQgveMLBOSl0szPr04zvot6VzKMs5sw8oPDIWgZ5fjiHsVaSCVJT80XFUeq7CNUnj3dSqlc51n/r ansible@rbpi3-001
Este dato es único para cada cliente, se los muestro a modo de ejemplo.
Configuración de clientes Ansible:
Ahora en los clientes tenemos que crear el usuario Ansible en el cliente y configurar todo para que pueda recibir y ejecutar las sentencias. Este procedimiento implica la ejecución de varias instrucciones que paso a detallar.
- Crear grupo «ansible».
- Crear usuario «ansible».
- Genero un perfil en el sudoers para que el usuario ansible pueda escalar a root sin pedir contraseña.
- Creo el directorio .ssh dentro del home del usuario «ansible» ( /home/ansible ).
- Copio la llave SSH RSA al archivo /home/ansible/.ssh/authorized_keys para poder autenticar al usuario en ese equipo.
- Le asigno permisos al usuario «ansible» sobre los archivos que se crearon con sudo.
sudo addgroup ansible
sudo adduser --disabled-password --shell /bin/bash --gecos "Ansible User" --ingroup sudo --ingroup ansible ansible
echo 'ansible ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers.d/ansible
sudo mkdir -p /home/ansible/.ssh/
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3S0TKsUWDvmyEdz0/YRcOdVKW4wWniYRhEcX+JH1BIn47ovk4mLZmgv7TCS8Bn0wN6JFXL/KQR60pKVnTfe5FG9LYiiLln3EdinGFwuEJv9XSp/w8uR5SeHUpdQQT3PjyV+Zr9SxDTXRMQB16ZJLMQAltrIHlpucvw56qX4HVNLPUcSCh4cGhSZDbRzRg7OXvZ1ASImc2jOAKHS3XLybXKM9ZhMZ8WxGyv0/e0dik6aEyyAP1Ks7pQfFvr7YbdiPd8/3yivs6dQgveMLBOSl0szPr04zvot6VzKMs5sw8oPDIWgZ5fjiHsVaSCVJT80XFUeq7CNUnj3dSqlc51n/r ansible@rbpi3-001' | sudo tee -a /home/ansible/.ssh/authorized_keys
sudo chown -R ansible.ansible /home/ansible/.ssh
Para facilitar el procedimiento opté por crear un script que se pueda descargar y ejecutar en cada cliente. El link del mío esta acá. Puede adecuarlo con la información de ustedes y después alojarlo en Google Drive, Github, donde gusten. De mínima tiene que adecuar al menos la llave SSH RSA porque sino no les va a servir de nada.
Para ejecutarlo en el servidor cliente, yo tengo que copiar y pegar la siguiente línea.
curl http://www.sismonda.com.ar/wp-content/uploads/2020/06/ansible-client.txt_.gz | gunzip | sudo bash
Verificación de instalación de Ansible:
Para ejecutar una prueba básica y confirmar que ansible puede conectarse y ejecutar comando en el servidor que configuré ‘alphaprime.sismonda.local’, voy a ejecutar la siguiente sentencia.
sudo su - ansible ansible alphaprime.sismonda.local -m ping
Estoy va utilizar un módulo nativo de ansible para verificar el funcionamiento. En la salida debemos obtener el pong a nuestro ping.
Durante la ejecución Ansible nos alerto que la versión de Ubuntu que estoy usando esta usando un alias de python3 para tener compatibilidad con versiones previas pero que va a generar conflicto en futuras implementaciones de ansible.