Introducción a Ansible en Ubuntu para un mejor aprovisionamiento del entorno y gestión de la configuración.

La gestión de la configuración es una etapa crucial en el ciclo de vida de DevOps. Ayuda en la automatización y orquestación de la infraestructura de TI.

Existen varias herramientas para la gestión de la configuración, por ejemplo, Puppet, Ansible, Chef y SaltStack. Y, por supuesto, Ansible es una de las herramientas más populares en DevOps. Puede gestionar miles de servidores y toda su infraestructura de TI con facilidad.

Install and Configure Ansible on Ubuntu

Cubriremos lo siguiente en este artículo.

  • Instalación de Ansible
  • Intercambio de claves SSH
  • Configuración del cliente Ansible
  • Pruebas de Ansible

Instalación de Ansible

YouTube video

Para hacerlo sencillo, vamos a probar a utilizar Ansible en dos servidores. Uno será ansible-server y otro ansible-client con la siguiente IP.

  • ansible-servidor – 10.0.0.1
  • ansible-cliente – 10.0.0.25

La instalación es sencilla… lo siguiente debe hacerse en todos los servidores en los que desee utilizar Ansible. En este caso, en los dos servidores anteriores.

  • Ejecute el siguiente comando para instalar el software necesario para instalar ansible.
root@ansible-server:~# apt install software-properties-common
  • Instale el repositorio con el paquete ansible.
root@ansible-server:~# apt-add-repository --yes --update ppa:ansible/ansible
  • Actualice la herramienta de empaquetado avanzado (apt)
root@ansible-server:~# apt update
  • Y, finalmente – ejecute el siguiente comando para instalar
root@ansible-server:~# apt install ansible

Tardará unos segundos en instalar el paquete necesario.

¿Cómo se asegura de que está instalado y de su versión?

Pues es fácil. Puede utilizar la sintaxis --version con ansible para averiguarlo como se indica a continuación.

root@ansible-server:~# ansible --version
ansible 2.8.1
  archivo de configuración = /etc/ansible/ansible.cfg
  ruta de búsqueda del módulo configurado = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ubicación del módulo python de ansible = /usr/lib/python2.7/dist-packages/ansible
  ubicación del ejecutable = /usr/bin/ansible
  versión de python = 2.7.15 (por defecto, Nov 27 2018, 23:36:35) [GCC 7.3.0]
root@ansible-server:~#

Como puede ver, Ansible 2.8.1 está instalado y proporciona la información necesaria, como la ubicación del archivo de configuración y el módulo python.

A continuación, necesitamos hacer el intercambio de claves SSH para que el servidor y un cliente puedan hablar entre sí.

Intercambio de claves SSH

Ansible se conecta a su cliente a través de SSH (Secure shell).

Primero generaremos una clave pública en el ansible-servidor, que necesita ser copiada al ansible-cliente.

Asegúrese de estar conectado como usuario root.

  • Genere la clave utilizando el comando ssh-keygen como se muestra a continuación
root@ansible-server:~# ssh-keygen
Generar par de claves rsa pública/privada.
Introduzca el archivo en el que desea guardar la clave (/root/.ssh/id_rsa): 
Introduzca la frase de contraseña (vacía si no hay frase de contraseña): 
Introduzca de nuevo la misma frase de contraseña: 
Su identificación ha sido guardada en /root/.ssh/id_rsa.
Su clave pública se ha guardado en /root/.ssh/id_rsa.pub.
La huella digital de la clave es
SHA256:cDapZBESo 8XcbXupbtILkFrklUSpwa70Y1c7yH5K1A root@ansible-server
La imagen randomart de la clave es
 ---[RSA 2048]---- 
| =. oo .      |
| . B.B.= . |
| . o @oE |
| . *oO * .     |
| o .S .    |
| .o o .       |
| .o o 
| ..o o .     |
| .o o .     |
 ----[SHA256]----- 
root@ansible-server:~#

Como habrá observado, ha generado una clave pública en la carpeta .s sh. La ruta completa es /root/.ssh/id_rsa.pub

Nota: asegúrese de que los archivos de las claves privada y pública no son legibles en todo el mundo. Puede listar los archivos para verificarlos.

  • Vaya a la carpeta .ssh
cd /root/.ssh
  • Enumere los archivos
root@ubuntu:~# ls -l 
-rw------- 1 root raíz 1679 jun 19 00:37 id_rsa 
-rw------- 1 raíz root 404 Jun 19 00:37 id_rsa.pub

Si nota que el permiso es incorrecto, entonces puede cambiarlo usando el comando chmod

Ej:

chmod 400 id_rsa
chmod 400 id_rsa.pub

Copiemos la clave pública al host de Ansible cuya dirección IP es 192.168.56.101

root@ansible-server:~/.ssh# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.25
/usr/bin/ssh-copy-id: INFO: Fuente de la(s) clave(s) a instalar: "/root/.ssh/id_rsa.pub"
No se puede establecer la autenticidad del host '10.0.0.25 (10.0.0.25)'.
La huella digital de la clave ECDSA es SHA256:eXduPrfV0mhxUcpsZWg 0oXDim7bHb90caA/Rt79cIs.
¿Está seguro de que desea continuar conectándose (sí/no)? sí
/usr/bin/ssh-copy-id: INFO: intentando conectarse con la(s) nueva(s) clave(s), para filtrar las que ya están instaladas
/usr/bin/ssh-copy-id: INFO: 1 clave(s) queda(n) por instalar -- si se le pregunta ahora es para instalar las nuevas claves
la clave de root@10.0.0.25: 

Número de llave(s) añadida(s): 1

Ahora intente entrar en la máquina, con   "ssh 'root@10.0.0.25'"
y compruebe que sólo se han añadido la(s) llave(s) que quería.

root@ansible-server:~/.ssh#

Puede ver en la salida anterior que se ha añadido 1 clave correctamente. Esto indica que se ha intercambiado la clave SSH.

A continuación, configuraremos un cliente Ansible.

Configuración del cliente Ansible

Asumo que ya ha seguido los pasos de instalación de Ansible en el servidor cliente como se explicó en los pasos anteriores.

La configuración del cliente o host no es más que hacer que el servidor Ansible conozca a los clientes. Y, para ello

  • Inicie sesión en el servidor Ansible
  • Vaya a /etc/ansible
  • Añada lo siguiente en el archivo hosts utilizando su editor favorito
[Cliente] 
node1 ansible_ssh_host=10.0.0.25
  • Guarde el archivo hosts

Prueba de Ansible

Si ha seguido todos los pasos correctamente, obtendrá un mensaje de ÉXITO cuando ejecute el siguiente comando en el ansible-server.

root@ansible-server:~/.ssh# ansible -m ping Cliente
nodo1 | SUCCESS => {
    "ansible_facts": {
        "intérprete_descubierto_python": "/usr/bin/python3"
    }, 
    "changed": falso 
    "ping": "pong"
}
root@ansible-server:~/.ssh#

Laa anterior hace ping al cliente para probar la conectividad y confirmar si es buena o no.

Conclusión

Espero que esto le de una idea para empezar con la instalación y jugar un poco. Manténgase en sintonía para más tutoriales Ansible o también echa un vistazo a este curso Udemy Mastering Ansible.