Ansible es una herramienta de gestión de configuración ampliamente utilizada y escrita en lenguaje Python que ayuda a configurar una o varias máquinas al mismo tiempo. Ansible se puede utilizar para realizar las siguientes tareas
- Configuración desde cero de uno o varios nodos
- Despliegues
- Cambios de configuración
- Patching
- Gestión de servicios
- y muchas más
Ansible es ampliamente 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 hacer 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 de control es donde se puede instalar Ansible y un nodo administrado está siendo administrado por los nodos de control.
Vamos a ver la instalación de Ansible en el nodo controlador.
- Instalar Ansible en CentOS 7:
- Instalar Ansible en CentOS 8:
- Instalar Ansible en Ubuntu:
- Instalar Ansible con Python PIP en CentOS, Debian y Ubuntu:
- Configurar los Hosts del Controlador de Ansible:
- Comprueba la conexión del nodo gestionado:
- host3 | SUCCESS => { «changed»: false, «ping»: «pong»}
- Conclusión:
Instalar Ansible en CentOS 7:
Como Python es el único prerrequisito para instalar Ansible, vamos a instalar Python ejecutando el siguiente comando.
$sudo yum install python3 -y
Para instalar Ansible en CentOS 7, primero asegúrese de que el repositorio EPEL de CentOS 7 está instalado. Ejecute el siguiente comando para instalar el repositorio epel.
$sudo yum install epel-release
Actualice el índice de paquetes del sistema ejecutando el siguiente comando update.
$sudo yum update -y
Una vez instalado el repositorio, instale Ansible con el gestor de paquetes yum. Ejecute el siguiente comando para instalar Ansible.
$sudo yum install ansible -y
Verifique si Ansible está instalado correctamente y su versión.
$ansible -v
Instalar Ansible en CentOS 8:
Veamos los pasos de instalación para CentOS 8. Instalemos python en CentOS 8.
$sudo dnf install python3
Una vez instalado python, instalemos el repo de EPEL ejecutando el siguiente comando.
$sudo dnf install epel-release -y
Actualicemos el índice de paquetes del sistema ejecutando el siguiente comando update.
$sudo dnf update -y
Ya estamos listos para instalar Ansible. Ejecute el siguiente comando para instalar Ansible.
$sudo dnf install ansible -y
Verifique 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 update.
$sudo apt-get update -y
Ahora, instala Ansible.
$sudo apt-get install -y ansible
Verifica si Ansible está instalado correctamente y su versión.
$ansible -v
Instalar Ansible con Python PIP en CentOS, Debian y Ubuntu:
Independientemente del sistema operativo que utilices, puedes instalar Ansible con el instalador de paquetes python. Vamos a ejecutar el siguiente comando para instalar python3-pip.
Para CentOS 7 e inferiores:
$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
Verificar si Ansible está instalado correctamente y su versión.
$ansible -v
Configurar los Hosts del Controlador de Ansible:
Necesitamos configurar primero el fichero «hosts» antes de poder empezar a comunicarnos con nuestros otros nodos. Este archivo tendrá todas las IP o nombres de host de los nodos administrados.
Nota: No siempre es necesario utilizar un archivo de hosts para conectarse a los nodos administrados. Pero entonces cada vez, tenemos que utilizar el servidor de nodos gestionados IP o nombre de host al ejecutar cada comando.
Crear el archivo (si no está allí ya) con privilegios de root mediante la ejecución del siguiente comando:
$sudo touch /etc/ansible/hosts
Antes de escribir en el archivo, vamos a echar un vistazo y entender archivo de hosts de ejemplo:
alias ansible_ssh_host=your_node_server_ip
Un archivo de hosts debe seguir la sintaxis anterior. Echemos un vistazo a cada parámetro.
: Este parámetro creará un grupo. Todas las direcciones IP o nombres de host de los nodos gestionados bajo el parámetro group_name caerán en el mismo grupo. Por ejemplo, si tenemos múltiples 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 para identificar el servidor del nodo gestionado. 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 vamos a ejecutar el comando Ansible para cambiar la configuración de un solo servidor, podemos utilizar un alias para identificar y realizar la tarea requerida en el servidor.
ansible_ssh_host=su_servidor_de_nodos: Este parámetro apuntará 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 se mencionó anteriormente, Ansible utiliza el puerto 22 del host remoto para conectarse.
Supondremos que las direcciones IP de nuestro servidor de nodos controlados 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 controlados, debemos confirmar que los nodos controlados son accesibles en el puerto 22 que es un puerto SSH. Ejecute el siguiente comando para confirmar la conectividad uno por uno en los tres nodos gestionados desde el controlador.
$ssh [email protected]
$ssh [email protected]
$ssh [email protected]
Se le pedirá la contraseña del usuario root de todos los nodos. Ansible funciona muy bien si tiene 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 puede funcionar también.
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 se mencionó anteriormente, podemos agregar múltiples alias de servidores de nodos en un solo grupo. En este caso, vamos a añadir los tres nodos y asignar 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. Ejecute el siguiente comando para editar el archivo de hosts que hemos creado antes.
Abra el archivo con privilegios de root ejecutando el siguiente comando:
$sudo vi /etc/ansible/hosts
Agreguemos la configuración mencionada abajo en el archivo hosts.
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 agregado todas las IPs y aliases de los nodos administrados en un grupo llamado node_servers.
Intentemos ahora conectarnos a los nodos gestionados desde el controlador de Ansible.
$ansible -m ping node_servers
El comando anterior está utilizando un módulo ping para conectarse al grupo «node_servers» que definimos en el archivo hosts anteriormente.
Puede encontrar errores por diferentes razones.
- Ansible, por defecto, intentará conectarse al nodo gestionado utilizando su nombre de usuario actual si no le ha proporcionado uno. Si ese usuario no existe en el servidor del nodo, recibirá el siguiente error.
- Si el puerto ssh 22 no está abierto para la conexión en los nodos gestionados. (Como se mencionó anteriormente, 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, se encontrará 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. Crear el directorio group_vars como se menciona a continuación.
$sudo mkdir /etc/ansible/group_vars
Los archivos en este directorio se utilizan específicamente para configurar las variables que podemos utilizar en nuestros playbooks de Ansible.
Creemos un archivo de variables para nuestra configuración ejecutando el siguiente comando:
$sudo vim /etc/ansible/group_vars/node_servers.yml
Agrega 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 siempre utilizará el usuario james para el grupo node_servers, independientemente del usuario actual que esté utilizando para ejecutar un comando.
Comprueba la conexión del nodo gestionado:
Ahora que tenemos nuestros hosts configurados y suficientes detalles de configuración para permitirnos conectar con éxito a nuestros nodos gestionados, podemos probar el mismo comando que ejecutamos antes.
$ansible -m ping servers
Ansible devolverá una salida como esta:
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 una conexión con sus nodos administrados.
Conclusión:
No es necesario utilizar el sistema operativo CentOS para los nodos gestionados. Puede utilizar la misma configuración de prueba que hemos utilizado anteriormente para CentOS, RedHat, Ubuntu y cualquier otra distribución de Linux.