Conceptos clave de Ansible
Ansible es una herramienta de automatización y gestión de configuración que opera sin agentes, utilizando SSH para comunicarse con los nodos controlados. Escrito en Python, simplifica tareas como la implementación de aplicaciones y la configuración de sistemas a través de módulos modulares.
La arquitectura de Ansible se basa en un nodo de control que ejecuta comandos o playbooks, enviando módulos a los hosts remotos mediante SSH. Estos módulos se eliminan automáticamente después de la ejecución, garantizando un estado limpio. Una característica importante es la idempotencia, donde múltiples ejecuciones producen el mismo resultado sin efectos secundarios.
Instalación y configuración
Para implementar Ansible, se requiere un nodo de control con Python y acceso SSH a los hosts gestionados. Los pasos típicos incluyen:
- Instalar Ansible en el sistema de control usando el gestor de paquetes, por ejemplo, con
apt-get install ansibleen distribuciones basadas en Debian. - Configurar el invnetario en
/etc/ansible/hosts, donde se definen grupos de hosts. Ejemplo:
[servidores_web]
192.168.1.101
192.168.1.102
[servidores_bd]
192.168.1.201
- Establecer autenticación por clave SSH entre el nodo de control y los hosts, usando
ssh-keygenyssh-copy-id.
Módulos esenciales de línea de comandos
Ansible utiliza módulos para ejecutra tareas específicas. El formato básico es ansible <grupo> -m <módulo> -a <parámetros>. A continuación, se describen módulos clave con ejemplos modificados.
Módulo command
Ejecuta comandos en hosts remotos sin procesamiento de shell, lo que limita el uso de redirecciones o tuberías.
# Ejecutar el comando 'whoami' en todos los hosts
ansible all -m command -a 'whoami'
# Cambiar al directorio /tmp antes de listar archivos
ansible servidores_web -m command -a 'chdir=/tmp ls'
Módulo shell
Permite comandos complejos con características de shell, como tuberías y variables.
# Crear un usuario y asignar contraseña usando tuberías
ansible servidores_bd -m shell -a 'echo "nuevo_usuario" | useradd -m -s /bin/bash'
# Extraer información de red y redirigir a un archivo
ansible servidores_web -m shell -a 'ip addr show | grep inet > /tmp/red_info.txt'
Módulo copy
Copia archivos desde el nodo de control a los hosts remotos.
# Copiar un archivo de configuración con permisos específicos
ansible servidores_web -m copy -a 'src=~/config_local.cfg dest=/etc/app/config.cfg mode=0644 owner=app_user'
# Insertar contenido directamente en un archivo remoto
ansible servidores_bd -m copy -a 'content="Configuración nueva" dest=/opt/settings.txt'
Módulo service
Gestiona servicios en hosts remotos, permitiendo iniciar, detener o reiniciar.
# Reiniciar el servicio nginx y habilitarlo al inicio
ansible servidores_web -m service -a 'name=nginx state=restarted enabled=yes'
# Verificar el estado de un servicio sin modificarlo
ansible servidores_bd -m command -a 'systemctl is-active postgresql'
Módulo setup
Recopila información detallada del sistema (facts) de los hosts.
# Obtener facts filtrados por dirección IP
ansible all -m setup -a 'filter=ansible_default_ipv4'
# Listar todos los facts de un grupo específico
ansible servidores_web -m setup
Variables en el inventario
El inventario soporta variables para personalizar el comportameinto de Ansible:
- Variables de host: Definidas por host, como
ansible_portpara cambiar el puerto SSH. - Variables de grupo: Aplicables a todos los hosts en un grupo, usando la sección
[grupo:vars]. - Grupos anidados: Permiten combinar grupos con
[grupo_principal:children].
# Ejemplo de inventario con variables y grupos anidados
[aplicaciones_web]
srv-web-01 ansible_host=192.168.1.50 ansible_user=admin
srv-web-02 ansible_host=192.168.1.51
[aplicaciones_web:vars]
ansible_python_interpreter=/usr/bin/python3
[infraestructura:children]
aplicaciones_web
aplicaciones_bd