Skip to content

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»

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.


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.

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.


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:

  1. Ansible lee el inventario
  2. Se conecta por SSH
  3. Ejecuta módulos en remoto
  4. Devuelve resultados

Archivo que define los sistemas gestionados:

[web]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11
[db]
db1 ansible_host=192.168.1.20

Parámetros útiles:

  • ansible_user
  • ansible_ssh_private_key_file

Los playbooks definen tareas de forma declarativa:

- name: Instalar nginx
hosts: web
become: true
tasks:
- name: Instalar paquete
apt:
name: nginx
state: present

Elementos:

  • hosts → grupo destino
  • become → privilegios elevados
  • tasks → lista de acciones

Ansible utiliza módulos en lugar de comandos directos:

  • apt → gestión de paquetes
  • copy → copia de archivos
  • service → gestión de servicios
  • file → gestión de permisos

No abuses del módulo shell. Prioriza módulos nativos.


Gestionar dos servidores web:

  • instalar nginx
  • desplegar contenido web
  • asegurar que el servicio está activo

Ventana de terminal
sudo apt update
sudo apt install ansible

Verificación:

Ventana de terminal
ansible --version

Ventana de terminal
nano hosts.ini
[web]
192.168.1.10
192.168.1.11

Ventana de terminal
ansible -i hosts.ini web -m ping

Output esperado:

"ping": "pong"

Ventana de terminal
nano install_nginx.yml

Contenido:

- 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: true

Ventana de terminal
ansible-playbook -i hosts.ini install_nginx.yml

  • Nginx instalado en todos los nodos
  • Servicio activo
  • Página accesible:
Ventana de terminal
curl http://IP

UNREACHABLE

-Causa:*

  • claves SSH no configuradas

-Solución:*

Ventana de terminal
ssh-copy-id user@host

Errores al instalar paquetes.

-Solución:*

become: true

Hosts mal definidos o inaccesibles.

-Solución:*

Ventana de terminal
ansible-inventory -i hosts.ini --list

Errores de indentación.

-Solución:*

  • usar espacios (no tabs)
  • validar sintaxis

Ansible no ejecuta tareas si no detecta cambios.

-Causa:*

idempotencia.


ansible/
├── inventory/
├── group_vars/
├── roles/
└── playbooks/

Permite modularidad:

Ventana de terminal
ansible-galaxy init nginx

Separar configuración de lógica:

nginx_port: 80

Ventana de terminal
ansible-vault encrypt vars.yml

Evitar tareas no deterministas.


Ejecutar en modo check:

Ventana de terminal
ansible-playbook --check

Ventana de terminal
--limit web1

Integrar con sistemas de logging centralizado.


Todos los servidores deben ser reproducibles.


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.