Cómo instalar y probar Ansible en Linux
Ansible es una herramienta de gestión de la configuración ampliamente utilizada y escrita en lenguaje Python que ayuda a configurar una o varias máquinas al mismo tiempo. Ansible puede utilizarse para realizar las siguientes tareas
- Configuración desde cero de uno o varios nodos
- Despliegues
- Cambios de configuración
- Parcheado
- Gestión de servicios
- y muchos más
Ansible es muy utilizado debido a su simplicidad. El código de Ansible está escrito en lenguaje YAML, además, no necesita que se instale un agente en una máquina remota. Ansible utiliza el puerto 22 (SSH) para conectarse a una máquina remota y realizar los cambios necesarios.
Cualquier máquina que pueda conectarse a la máquina remota en el puerto 22 puede convertirse en un nodo controlador. Un nodo controlador es el lugar donde puedes instalar Ansible y un nodo gestionado es el que recibe la gestión de los nodos controladores.
Echemos un vistazo a la instalación de Ansible en el nodo controlador.
Instala Ansible en CentOS 7:
Como Python es el único requisito previo para instalar Ansible, vamos a instalar Python ejecutando el siguiente comando.
$sudo yum install python3 -y
Para instalar Ansible en CentOS 7, primero asegúrate de que el repositorio EPEL de CentOS 7 está instalado. Ejecuta el siguiente comando para instalar el repositorio epel.
$sudo yum install epel-release
Actualiza el índice de paquetes del sistema ejecutando el siguiente comando update.
$sudo yum update -y
Una vez instalado el repositorio, instala Ansible con el gestor de paquetes yum. Ejecuta el siguiente comando para instalar Ansible.
$sudo yum install ansible -y
Comprueba si Ansible está instalado correctamente y su versión.
$ansible -v
Instala Ansible en CentOS 8:
Veamos los pasos de instalación para CentOS 8. Vamos a instalar python en CentOS 8.
$sudo dnf install python3
Una vez instalado python, vamos a instalar el repo de EPEL ejecutando el siguiente comando.
$sudo dnf install epel-release -y
Actualiza el índice de paquetes del sistema ejecutando el siguiente comando update.
$sudo dnf update -y
Ahora estamos listos para instalar Ansible. Ejecuta el siguiente comando para instalar Ansible.
$sudo dnf install ansible -y
Comprueba si Ansible está instalado correctamente y su versión.
$ansible -v
Instalar Ansible en Ubuntu:
Python es un paquete por defecto hoy en día en la mayoría de las distribuciones de Linux. Si no tienes python instalado, ejecuta el siguiente comando para instalar el paquete python.
$sudo apt-get install python3
Para instalar Ansible en Ubuntu, vamos a instalar primero el repositorio ejecutando el siguiente comando.
$sudo apt-add-repository ppa:ansible/ansible
Actualiza el índice de paquetes del sistema ejecutando el siguiente comando de actualización.
$sudo apt-get update -y
Ahora, instala Ansible.
$sudo apt-get install -y ansible
Comprueba si Ansible está instalado correctamente y su versión.
$ansible -v
Instala Ansible con Python PIP en CentOS, Debian y Ubuntu:
Independientemente del sistema operativo que utilices, puedes instalar Ansible con el instalador de paquetes de Python. Vamos a ejecutar el siguiente comando para instalar python3-pip.
Para CentOS 7 e inferior:
$sudo yum install python3 python3-pip -y
Para CentOS 8:
$sudo dnf install python3 python3-pip -y
Para Ubuntu y Debian:
$sudo apt-get install python3 python3-pip
Como tenemos python y pip instalados, vamos a ejecutar el siguiente comando en cualquier sistema operativo para instalar Ansible.
$sudo pip3 install ansible
Verifica si Ansible está instalado correctamente y su versión.
$ansible -v
Configurar los hosts del controlador de Ansible:
Primero tenemos que configurar el archivo «hosts» antes de poder empezar a comunicarnos con nuestros otros nodos. Este archivo tendrá todas las IP o nombres de host de los nodos gestionados.
Nota: No siempre es necesario utilizar un archivo de hosts para conectarse a los nodos gestionados. Pero entonces, cada vez, tenemos que utilizar la IP o el nombre de host del servidor del nodo gestionado al ejecutar cada comando.
Crea el archivo (si no está ya ahí) con privilegios de root ejecutando el siguiente comando:
$sudo touch /etc/ansible/hosts
Antes de escribir en el archivo, echemos un vistazo y entendamos un ejemplo de archivo de hosts:
[group_name]
alias ansible_ssh_host=your_node_server_ip
Un archivo de hosts debe seguir la sintaxis anterior. Echemos un vistazo a cada parámetro.
[nombre_del_grupo]: Este parámetro creará un grupo. Todas las direcciones IP o nombres de host de los nodos gestionados bajo el parámetro nombre_grupo entrarán en el mismo grupo. Por ejemplo, si tenemos varios servidores web en nuestra infraestructura, podemos añadir aquí todas las direcciones IP o los nombres de host del nodo gestionado.
alias: Este parámetro se utiliza para dar al servidor del nodo gestionado un alias que lo identifique. Por ejemplo, si tenemos varios servidores web en nuestra infraestructura, podemos dar host1, host2, host3 como alias. La principal ventaja de dar un alias es que cuando vayamos a ejecutar el comando Ansible para cambiar la configuración de un único servidor, podemos utilizar un alias para identificar y realizar la tarea requerida en el servidor.
ansible_ssh_host=tu_nodo_servidor_ip: Este parámetro señalará el alias a una dirección IP o nombre de host del nodo gestionado.
Vamos a utilizar el CentOS 8 como nodo controlado con Ansible. Como ya hemos dicho, Ansible utiliza el puerto 22 del host remoto para conectarse.
Supondremos que las direcciones IP de nuestro nodo controlado CentOS son 192.168.0.2, 192.168.0.3 y 192.168.0.4.
Para permitir que el nodo controlador de Ansible se comunique con los nodos gestionados, debemos confirmar que los nodos gestionados son accesibles en el puerto 22, que es un puerto SSH. Ejecuta el siguiente comando para confirmar la conectividad uno a uno en los tres nodos gestionados desde el controlador.
$ssh root@192.168.0.2
$ssh root@192.168.0.3
$ssh root@192.168.0.4
Se te pedirá la contraseña del usuario root de todos los nodos. Ansible funciona muy bien si tienes configurada la autenticación sin contraseña entre el controlador de Ansible y los nodos gestionados. Con diferentes parámetros en el comando Ansible, la autenticación con contraseña también puede funcionar.
Como hemos configurado la conectividad ssh entre el controlador Ansible y los nodos gestionados, vamos a configurar el archivo hosts para conectarnos a todos los nodos gestionados. Como ya hemos dicho, podemos añadir varios alias de servidores de nodos en un mismo grupo. En este caso, añadamos los tres nodos y asignemos un alias como host1, host2 y host3 respectivamente. Nuestro archivo de hosts debería tener el siguiente aspecto después de añadir todos los detalles del nodo gestionado. Ejecuta el siguiente comando para editar el archivo de hosts que hemos creado antes.
Abre el archivo con privilegios de root ejecutando el siguiente comando:
$sudo vi /etc/ansible/hosts
Vamos a añadir la configuración mencionada abajo en el archivo de hosts.
[node_servers]
host1 ansible_ssh_host=192.168.0.2
host2 ansible_ssh_host=192.168.0.3
host3 ansible_ssh_host=192.168.0.4
Aquí hemos añadido todas las IPs y alias de los nodos gestionados en un grupo llamado node_servers.
Intentemos ahora conectarnos a los nodos gestionados desde el controlador Ansible.
$ansible -m ping node_servers
El comando anterior está utilizando un módulo ping para conectarse al grupo «node_servers» que hemos definido en el archivo hosts anterior.
Es posible que te encuentres con errores por diferentes motivos.
- Por defecto, Ansible intentará conectarse al nodo gestionado utilizando tu nombre de usuario actual si no le has proporcionado uno. Si ese usuario no existe en el servidor del nodo, recibirás el siguiente error.
- Si el puerto ssh 22 no está abierto para la conexión en los nodos gestionados. (Como ya se ha dicho, Ansible se conecta en el puerto ssh)
- Si la IP en el archivo de hosts no es correcta.
Si alguna de las condiciones anteriores falla, te encontrarás con el siguiente error.
host1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host2 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
host3 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
Digamos específicamente a Ansible que debe conectarse a los nodos gestionados en el grupo «node_servers» con el usuario james. Crea el directorio group_vars como se menciona a continuación.
$sudo mkdir /etc/ansible/group_vars
Los archivos de este directorio se utilizan específicamente para configurar las variables que podemos utilizar en nuestros libros de juego de Ansible.
Vamos a crear un archivo de variables para nuestra configuración ejecutando el siguiente comando:
$sudo vim /etc/ansible/group_vars/node_servers.yml
Añade el siguiente código al archivo:
---
ansible_ssh_user: james
El archivo YML siempre comienza con «—» en la primera línea. Guardemos y cerremos este archivo cuando hayamos terminado. Ahora Ansible utilizará siempre el usuario james para el grupo node_servers, independientemente del usuario actual que estés utilizando para ejecutar un comando.
Comprueba la conexión del nodo gestionado:
Ahora que tenemos nuestros hosts configurados y suficientes detalles de configuración que nos permiten conectarnos con éxito a nuestros nodos gestionados, podemos probar el mismo comando que ejecutamos antes.
$ansible -m ping servers
Ansible devolverá una salida como la siguiente
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host3 | SUCCESS => {
«changed»: false,
«ping»: «pong»
}
Esta es una prueba básica para asegurarse de que Ansible tiene conexión con sus nodos gestionados.
Conclusión:
No es necesario utilizar el sistema operativo CentOS para los nodos gestionados. Puedes utilizar la misma configuración de prueba que hemos utilizado anteriormente para CentOS, RedHat, Ubuntu y cualquier otra distribución de Linux.