¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Ansible: Conceptos fundamentales
Sección perteneciente al curso Ansible Automatización IT
Ansible en entornos virtuales de Python
- Instalar pip3
- Instalar python3 virtualenv
- Crear un entorno virtual
- Activar el entorno virtual
- Lanzar una nueva terminal
- Instalar Ansible
Si estamos en una Debian, para instalar el módulo de Python que nos permite crear entornos virtuales:
apt install python3-venv
Crearemos un directorio para crear nuestro entorno virtual, por ejemplo:
mkdir /home/pepito/test_venv
Ahora creamos el entorno virtual en ese directorio:
python3 -m venv /home/pepito/test_venv
Si ahora miramos el contenido del directorio /home/pepito/test_venv veremos algo como:
bin include lib lib64 pyvenv.cfg
Lo que nos falta es activar este nuevo entorno virtual:
source /home/pepito/test_venv/bin/activate
Sabremos que estamos en el nuevo entorno si en el prompt aparece primero el nombre de dicho entorno:
(test_venv) pepito@box:/home/pepito/test_venv$
Para instalar Ansible solo para este entorno virtual:
pip3 install ansible
Si miramos dónde está este nuevo binario:
which ansible
Cuando ejecutemos ansible, se ejecutará dentro del entorno virtual.
Para salir del entorno virtual, ejecutamos exit.
Si no quisiésemos usar más ese entorno virtual, podemos borrarlo. Al fin y al cabo no es más que un directorio en el sistema:
rm -rf /home/pepito/test_venv
Introducción a los módulos en Ansible
Los módulos son trozos de código escrito en Python que realizan una determinada tarea.
Si no existe ningún módulo que cumpla nuestras necesidades, existen los run commands:
command: ejecuta el comando introducido por el usuario en el equipo destino. Es el más seguro y predecible.shell: ejecuta los comandos en una shell (por ejemplo,/bin/sh) y permite utilizar pipes, etc. Debe usarse con cuidado.script: transfiere un script y lo ejecuta en el equipo destino.raw: ejecuta el comando sin pasar por el control de Ansible
Los módulos ofrecen idempotencia, es decir, da igual las veces que lo ejecutemos, el resultado será el mismo, llegaríamos siempre al estado deseado. Esto con los run commands es más difícil y hay que ser cuidadosos.
Ejecutando módulos de forma standalone
Empezamos con el módulo ping:
ansible localhost -m ping
Podemos ver información sobre un módulo desde línea de comandos: ansible-doc <nombre_modulo>
ansible localhost -m ping -a "data='correcto'"
Poner la salida de los comandos anteriores
Ejemplo con el módulo script:
ansible localhost -m script -a "/home/pepito/miscript.sh"
Contenido de miscript.sh:
#!/bin/bash echo "Hola, mundo!"
Poner ejemplo de salida
Si queremos cambiar la shell a usar:
ansible localhost -m script -a "/home/pepito/miscript.sh executable=/bin/sh"
Preparando las máquinas a gestionar con usuario y contraseña
En la realidad lo que queremos en configurar una o varias máquinas remotas.
Equipo a gestionar
- Crear un usuario para Ansible
- Verificar que el servicio SSH está funcionando
Para crear usuario desde línea de comandos:
adduser ansible
Verificamos si el servicio SSH está corriendo:
systemctl status sshd
Podríamos verificar también si tenemos conectividad a nivel de red entre los equipos a gestionar y el equipo que hace de nodo de gestión:
ping ip.equipo.destino.1 ping ip.equipo.destino.2 ping ip.equipo.destino.X
Nodo de gestión
- Confiar en la clave SSH del equipo destino
- Especificar el usuario y contraseña a utilizar para realizar la gestión
Para usar ansible desde el nodo de gestión:
ansible dir.ip.maquina.destino --user=ansible -k -m ping
-knos pedirá la contraseña en lugar de tener que indicarla como argumento.
De esta manera habríamos validado que Ansible puede conectarse al equipo remoto y recuperar información (en este caso usando el módulo ping).
Preparando las máquinas a gestionar con clave pública
Para evitar dejar las credenciales en algún sitio accesible, usaremos la criptografía de clave pública. La privada nos la quedamos y la pública se la pasamos a los sistemas que queremos gestionar con Ansible.
Esta es la manera recomendable de realizar las conexiones a otros equipos
Equipo a gestionar
- Disponer de un usuario para Ansible
- Verificar que el servicio SSH está funcionando.
- Configurar las claves SSH autorizadas.
Nodo de gestión
- Generar clave SSH para la autenticación
- Configuar en la clave SSH del equipo destino
- Indicar a Ansible la ubicación de la clave
- Especificar el usuario a utilizar para realizar la conexión.
Creamos el par de claves pública y privada:
ssh-keygen -N "" -C "Ansible"
Por defecto, las claves se generan en /home/usuario/.ssh/id_rsa (privada) y /home/usuario/.ssh/id_rsa.pub (pública)
Ahora tendríamos que llevar la clave pública a los equipos a gestionar. Para ello, se puede copiar y pegar el contenido del fichero id_rsa.pub en /home/pepito/.ssh/authorized_keys o realizarlo mediante el comando ssh-copy-id:
ssh-copy-id usuarioremoto@equiporemoto
Finalmente, para probar a conectarnos con claves:
ansible dir.ip.equipo.remoto --user=ansible --key-file /home/pepito/.ssh/id_rsa -m ping
--key-file: permite indicar dónde está la clave privada del nodo de gestión.
