Ansible
This content is not available in your language yet.
9.2 Automatización con Ansible: Infraestructura como Código
Sección titulada «9.2 Automatización con Ansible: Infraestructura como Código»Introducción
Sección titulada «Introducción»A medida que las infraestructuras crecen en complejidad, los scripts Bash dejan de ser suficientes para gestionar múltiples servidores de forma consistente. Aquí es donde entra Ansible, una herramienta de automatización que permite gestionar configuraciones, despliegues y operaciones mediante Infraestructura como Código (IaC).
Ansible destaca por su simplicidad: no requiere agentes, utiliza SSH como canal de comunicación y define el estado del sistema mediante archivos declarativos en YAML. Para un Sysadmin senior, Ansible permite garantizar consistencia, escalabilidad y repetibilidad en entornos productivos.
Objetivos de aprendizaje
Sección titulada «Objetivos de aprendizaje»Al finalizar este capítulo serás capaz de:
- Comprender la arquitectura y funcionamiento de Ansible.
- Crear inventarios de hosts y gestionarlos.
- Escribir playbooks en YAML para automatización.
- Ejecutar tareas remotas de forma controlada.
- Aplicar buenas prácticas en entornos reales.
Conceptos Teóricos
Sección titulada «Conceptos Teóricos»1. ¿Qué es Ansible?
Sección titulada «1. ¿Qué es Ansible?»Ansible es una herramienta de automatización que permite:
- configuración de sistemas
- despliegue de aplicaciones
- ejecución remota de tareas
- orquestación de infraestructuras
Se basa en tres pilares:
- Agentless → no requiere instalar software en los nodos gestionados
- Declarativo → defines el estado deseado, no los pasos
- Idempotente → múltiples ejecuciones no alteran el resultado final
Ansible no describe cómo ejecutar tareas, sino cómo debe quedar el sistema.
2. Arquitectura de Ansible
Sección titulada «2. Arquitectura de Ansible»Componentes principales:
- Nodo de control: donde se ejecuta Ansible
- Nodos gestionados: servidores destino
- Inventario: listado de hosts
- Playbooks: definiciones de tareas
- Módulos: unidades de trabajo (copy, apt, service, etc.)
Flujo:
- Ansible lee el inventario
- Se conecta por SSH
- Ejecuta módulos en remoto
- Devuelve resultados
3. Inventario de hosts
Sección titulada «3. Inventario de hosts»Archivo que define los sistemas gestionados:
[web]web1 ansible_host=192.168.1.10web2 ansible_host=192.168.1.11
[db]db1 ansible_host=192.168.1.20Parámetros útiles:
ansible_useransible_ssh_private_key_file
4. Playbooks y YAML
Sección titulada «4. Playbooks y YAML»Los playbooks definen tareas de forma declarativa:
- name: Instalar nginx hosts: web become: true
tasks: - name: Instalar paquete apt: name: nginx state: presentElementos:
hosts→ grupo destinobecome→ privilegios elevadostasks→ lista de acciones
5. Módulos
Sección titulada «5. Módulos»Ansible utiliza módulos en lugar de comandos directos:
apt→ gestión de paquetescopy→ copia de archivosservice→ gestión de serviciosfile→ gestión de permisos
No abuses del módulo shell. Prioriza módulos nativos.
Laboratorio Práctico
Sección titulada «Laboratorio Práctico»Escenario
Sección titulada «Escenario»Gestionar dos servidores web:
- instalar nginx
- desplegar contenido web
- asegurar que el servicio está activo
Parte 1: Instalación de Ansible
Sección titulada «Parte 1: Instalación de Ansible»sudo apt updatesudo apt install ansibleVerificación:
ansible --versionParte 2: Crear inventario
Sección titulada «Parte 2: Crear inventario»nano hosts.ini[web]192.168.1.10192.168.1.11Parte 3: Test de conectividad
Sección titulada «Parte 3: Test de conectividad»ansible -i hosts.ini web -m pingOutput esperado:
"ping": "pong"Parte 4: Crear playbook
Sección titulada «Parte 4: Crear playbook»nano install_nginx.ymlContenido:
- name: Configurar servidores web hosts: web become: true
tasks:
- name: Instalar nginx apt: name: nginx state: present update_cache: yes
- name: Copiar página web copy: dest: /var/www/html/index.html content: "Servidor configurado con Ansible"
- name: Asegurar servicio nginx service: name: nginx state: started enabled: trueParte 5: Ejecutar playbook
Sección titulada «Parte 5: Ejecutar playbook»ansible-playbook -i hosts.ini install_nginx.ymlResultado esperado
Sección titulada «Resultado esperado»- Nginx instalado en todos los nodos
- Servicio activo
- Página accesible:
curl http://IPErrores Comunes y Troubleshooting
Sección titulada «Errores Comunes y Troubleshooting»1. Fallos de conexión SSH
Sección titulada «1. Fallos de conexión SSH»UNREACHABLE-Causa:*
- claves SSH no configuradas
-Solución:*
ssh-copy-id user@host2. Permisos insuficientes
Sección titulada «2. Permisos insuficientes»Errores al instalar paquetes.
-Solución:*
become: true3. Inventario incorrecto
Sección titulada «3. Inventario incorrecto»Hosts mal definidos o inaccesibles.
-Solución:*
ansible-inventory -i hosts.ini --list4. Uso incorrecto de YAML
Sección titulada «4. Uso incorrecto de YAML»Errores de indentación.
-Solución:*
- usar espacios (no tabs)
- validar sintaxis
5. Cambios no aplicados
Sección titulada «5. Cambios no aplicados»Ansible no ejecuta tareas si no detecta cambios.
-Causa:*
idempotencia.
Buenas Prácticas (Nivel Senior)
Sección titulada «Buenas Prácticas (Nivel Senior)»1. Estructura de proyecto
Sección titulada «1. Estructura de proyecto»ansible/├── inventory/├── group_vars/├── roles/└── playbooks/2. Uso de roles
Sección titulada «2. Uso de roles»Permite modularidad:
ansible-galaxy init nginx3. Variables
Sección titulada «3. Variables»Separar configuración de lógica:
nginx_port: 804. Vault (secretos)
Sección titulada «4. Vault (secretos)»ansible-vault encrypt vars.yml5. Idempotencia estricta
Sección titulada «5. Idempotencia estricta»Evitar tareas no deterministas.
6. Control de cambios
Sección titulada «6. Control de cambios»Ejecutar en modo check:
ansible-playbook --check7. Limitar impacto
Sección titulada «7. Limitar impacto»--limit web18. Logs y auditoría
Sección titulada «8. Logs y auditoría»Integrar con sistemas de logging centralizado.
9. Evitar snowflake servers
Sección titulada «9. Evitar snowflake servers»Todos los servidores deben ser reproducibles.
Resumen y Siguiente Paso
Sección titulada «Resumen y Siguiente Paso»Has aprendido a utilizar Ansible para automatizar configuraciones y despliegues de forma declarativa, idempotente y escalable. Esta herramienta es esencial para gestionar infraestructuras modernas sin depender de scripts manuales ni configuraciones inconsistentes.
El siguiente paso es completar el ciclo de automatización integrando control de versiones y colaboración:
➡️ 9.3 Git — Gestión de código y versionado para infraestructuras y automatización.
