Introducción, Fundamentos e Instalación 🚀
Bienvenido al curso de Ansible. Este primer capítulo cubre el bloque de fundamentos: qué es Ansible, cómo está construido por dentro y cómo dejarlo listo para empezar a automatizar. Tres temas que originalmente eran tres entradas separadas y que ahora viven juntas porque, en la práctica, se aprenden de un tirón antes de tocar un solo playbook.
📋 Contenido del capítulo
- Introducción: ¿Qué es Ansible? — Definición, casos de uso y por qué se ha vuelto omnipresente en DevOps.
- Fundamentos y arquitectura — Push vs pull, control node y managed nodes, idempotencia, IaC.
- Instalación y configuración — Requisitos, instalación paso a paso, primer ping,
ansible.cfg.
Este capítulo se corresponde con un único vídeo del canal de YouTube. Si prefieres aprender en formato vídeo, búscalo en la lista de reproducción del curso.
Introducción: ¿Qué es Ansible? 🚀
Bienvenido al curso de Ansible. En esta introducción descubrirás qué es Ansible, por qué es una de las herramientas de automatización más populares del mundo DevOps, y cómo puede transformar la forma en que gestionas tu infraestructura.
Video pendiente de grabación. Suscríbete al canal de YouTube para recibir la notificación.
🎯 ¿Qué es Ansible?
Definición
Ansible es una plataforma de automatización IT open-source que permite:
- Gestión de configuraciones: Mantener servidores en un estado deseado
- Despliegue de aplicaciones: Automatizar el deployment de software
- Orquestación: Coordinar tareas complejas entre múltiples sistemas
- Aprovisionamiento: Configurar infraestructura desde cero
La Filosofía: Simplicidad y Potencia
Complejidad tradicional → Ansible → Simplicidad radical
↓ ↓ ↓
Scripts caóticos YAML legible Infraestructura predecible
Ansible fue creado en 2012 por Michael DeHaan con un objetivo claro: hacer la automatización IT accesible para todos, no solo para expertos en programación. En 2015 fue adquirido por Red Hat (ahora IBM), consolidándose como estándar de la industria.
🌟 Casos de Uso Principales
1. Gestión de Configuración
Mantén la coherencia en todos tus servidores. Si tienes 100 servidores web, asegúrate de que todos tengan la misma configuración de Nginx, los mismos certificados SSL y las mismas políticas de seguridad.
Ejemplo práctico:
- name: Configurar servidores web uniformemente
hosts: webservers
tasks:
- name: Instalar Nginx
apt:
name: nginx
state: present
- name: Configurar firewall
ufw:
rule: allow
port: '80,443'
proto: tcp
2. Despliegue Continuo (CI/CD)
Integra Ansible en tus pipelines de Jenkins, GitLab CI o GitHub Actions para desplegar aplicaciones de forma automatizada y consistente.
3. Orquestación Multi-Tier
Coordina despliegues complejos que involucran bases de datos, load balancers, servidores de aplicación y más, en el orden correcto.
4. Gestión de la Nube
Aprovisiona y gestiona recursos en AWS, Azure, Google Cloud, OpenStack y otras plataformas cloud.
5. Cumplimiento y Auditoría
Garantiza que tu infraestructura cumple con estándares de seguridad (PCI-DSS, HIPAA, SOC2) aplicando configuraciones de forma automática y auditable.
6. Disaster Recovery
Automatiza la reconstrucción completa de tu infraestructura en minutos, convirtiendo un desastre en un inconveniente menor.
⚔️ Ansible vs Otras Herramientas (Chef, Puppet, SaltStack)
Comparativa Rápida
| Característica | Ansible | Chef | Puppet | SaltStack |
|---|---|---|---|---|
| Agentes | ❌ No (Agentless) | ✅ Sí | ✅ Sí | ✅ Sí |
| Lenguaje | YAML (Declarativo) | Ruby (Imperativo) | DSL propio | YAML + Python |
| Curva de aprendizaje | 🟢 Baja | 🔴 Alta | 🟡 Media | 🟡 Media |
| Modelo | Push | Pull | Pull | Push/Pull |
| SSH nativo | ✅ Sí | ❌ No | ❌ No | ✅ Opcional |
| Velocidad inicial | 🚀 Muy rápida | 🐌 Lenta | 🐌 Lenta | 🏃 Rápida |
Ventajas de Ansible
1. Sin Agentes (Agentless)
Beneficios:
- No necesitas instalar/mantener software adicional en tus servidores
- Menor superficie de ataque (seguridad)
- Arranque inmediato: si tiene SSH, puedes gestionarlo
Chef/Puppet:
Inconvenientes:
- Debes instalar y mantener agentes en cada servidor
- Los agentes consumen recursos (CPU, RAM)
- Si el agente falla, pierdes control del servidor
2. YAML Legible
Ansible usa YAML, un formato de datos human-readable que puedes entender aunque no sepas programar.
Ansible (YAML):
- name: Asegurar que Apache está corriendo
service:
name: apache2
state: started
enabled: yes
Chef (Ruby DSL):
service 'apache2' do
action [:enable, :start]
supports :restart => true, :reload => true
end
Puppet (DSL propio):
service { 'apache2':
ensure => 'running',
enable => true,
}
3. Modelo Push vs Pull
Ansible (Push):
- TÚ decides cuándo se ejecutan los cambios
- Control total del timing
- Ideal para CI/CD y despliegues bajo demanda
Chef/Puppet (Pull):
- Los agentes consultan periódicamente al master
- Cambios eventuales (cada 30min por defecto)
- Mejor para mantener estado a largo plazo
¿Cuándo es mejor cada uno?
- Push (Ansible): Despliegues puntuales, CI/CD, cambios críticos inmediatos
- Pull (Chef/Puppet): Infraestructura masiva que debe autocurarse continuamente
4. Curva de Aprendizaje
Tiempo para ser productivo:
- Ansible: 🟢 1-2 días (si sabes SSH y YAML básico)
- SaltStack: 🟡 1-2 semanas
- Chef: 🔴 2-4 semanas (requiere conocimientos de Ruby)
- Puppet: 🔴 2-4 semanas (requiere aprender su DSL)
Cuándo NO usar Ansible
Ansible no siempre es la mejor opción:
❌ Infraestructura gigante (10,000+ nodos) con cambios frecuentes: SaltStack es más rápido en ejecución masiva paralela.
❌ Necesitas un agente siempre monitorizando: Puppet/Chef tienen agentes que pueden detectar drift (desviación) y autocorregir sin intervención manual.
❌ Lógica de negocio compleja en Ruby: Si tu equipo ya es experto en Ruby y Chef, migrar puede no aportar valor.
✅ La mayoría de los demás casos: Ansible es la opción más pragmática.
🏗️ Arquitectura de Ansible: Visión General
Componentes Principales
1. Control Node (Nodo de Control)
Es donde instalas y ejecutas Ansible. Puede ser:
- Tu portátil local
- Un servidor bastión/jump host
- Un runner de CI/CD (Jenkins, GitHub Actions, GitLab Runner)
Requisitos:
- Sistema operativo: Linux, macOS, WSL (no Windows nativo)
- Python 3.8+
- Ansible instalado (
pip install ansible)
2. Managed Nodes (Nodos Gestionados)
Los sistemas que automatizas. No necesitan Ansible instalado, solo:
- Linux/Unix: SSH habilitado + Python 2.7 o 3.5+
- Windows: WinRM habilitado + PowerShell 3.0+
- Dispositivos de red: API REST o SSH
3. Inventario (Inventory)
Un archivo (INI, YAML o script dinámico) que lista tus hosts y los agrupa.
Ejemplo (hosts.ini):
[webservers]
web1.ejemplo.com
web2.ejemplo.com
[databases]
db.ejemplo.com
[production:children]
webservers
databases
4. Módulos (Modules)
Unidades de código reutilizable que ejecutan tareas específicas:
apt,yum: Gestión de paquetesservice: Gestión de serviciosfile,copy,template: Gestión de archivosuser,group: Gestión de usuariosdocker_container,k8s: Contenedores- Más de 3,000 módulos incluidos + colecciones comunitarias
5. Playbooks
Archivos YAML que definen el estado deseado de tu infraestructura. Son como "recetas" o "partituras" que Ansible ejecuta.
6. Plugins
Extensiones que amplían las capacidades de Ansible:
- Connection plugins: SSH, WinRM, Docker, kubectl
- Inventory plugins: AWS EC2, Azure, GCP, VMware
- Filter plugins: Transformaciones de datos (Jinja2)
Flujo de Ejecución
📋 Prerrequisitos para este Curso
Conocimientos Recomendados
Esenciales (Debes tener)
- ✅ Linux básico: Navegación por terminal, comandos básicos (ls, cd, cat, vim/nano)
- ✅ SSH: Saber conectarte a un servidor remoto (
ssh user@host) - ✅ YAML básico: Entender la sintaxis (o aprender en el curso)
Útiles (Ayudan mucho)
- 🟡 Git: Control de versiones para tus playbooks
- 🟡 Docker: Para practicar sin romper nada
- 🟡 Cloud básico: AWS/Azure/GCP conceptos generales
No Necesarios (Los aprenderás aquí)
- ❌ Programación avanzada
- ❌ Experiencia previa con IaC
- ❌ Certificaciones
Entorno de Práctica
Para seguir el curso necesitarás:
-
Un sistema de control (tu PC)
- Linux, macOS o Windows con WSL
- Python 3.8+ instalado
- Editor de texto (VS Code recomendado con extensión YAML)
-
Nodos de práctica (al menos uno):
Opción A: Máquinas virtuales locales
- VirtualBox/VMware + Ubuntu Server
- Vagrant para automatizar VMs
Opción B: Contenedores Docker
- Más ligero y rápido
- Ideal para experimentar
Opción C: VPS en la nube
- AWS EC2 free tier
- DigitalOcean Droplet ($5/mes)
- Linode, Vultr, etc.
-
Configuración SSH
- Claves SSH generadas (
ssh-keygen) - Acceso sin contraseña configurado (ssh-copy-id)
- Claves SSH generadas (
Verificación de Prerrequisitos
Antes de empezar, verifica que tienes todo listo:
# ¿Tienes Python 3?
python3 --version # Debe ser 3.8 o superior
# ¿Tienes SSH?
ssh -V # OpenSSH debe estar instalado
# ¿Tienes un servidor accesible? (ejemplo)
ssh usuario@ip_servidor # Debe conectar sin errores
# ¿Puedes crear archivos YAML?
echo "clave: valor" > test.yml && cat test.yml
Si todos estos comandos funcionan, ¡estás listo! 🎉
🎓 Qué Aprenderás en este Curso
Este curso está estructurado en módulos progresivos:
Fundamentos (Módulos 1-6)
- ✅ Arquitectura y conceptos core
- ✅ Instalación en diferentes sistemas
- ✅ Inventarios y comandos ad-hoc
- ✅ Escribir playbooks efectivos
- ✅ Variables, facts y templating
- ✅ Condicionales, bucles y manejo de errores
Avanzado (Módulos 7-9)
- ✅ Roles y estructura modular
- ✅ Ansible Vault (secretos seguros)
- ✅ Jinja2 templates avanzados
- ✅ Ansible Tower/AWX (GUI empresarial)
- ✅ Integración con CI/CD
- ✅ Futuro de Ansible y tendencias
Proyectos Prácticos
- 🛠️ Configurar un cluster web completo (Nginx + PHP-FPM)
- 🛠️ Desplegar una aplicación Dockerizada
- 🛠️ Hardening de servidores (seguridad)
- 🛠️ Backup automático multi-servidor
🚀 ¿Por qué Aprender Ansible en 2026?
Demanda Laboral
- +40% de ofertas DevOps mencionan Ansible (Stack Overflow 2025)
- Salarios: DevOps Engineers con Ansible ganan 15-25% más que sin automatización
- Empresas: Usado por Red Hat, NASA, Apple, Cisco, Bloomberg
Comunidad y Ecosistema
- 100,000+ Ansible roles en Ansible Galaxy
- 3,000+ módulos oficiales + miles de colecciones comunitarias
- Documentación exhaustiva y comunidad activa en GitHub
Futuro-Proof
- Ansible Automation Platform 2.x (Red Hat) con soporte empresarial
- Event-Driven Ansible: Reacciona automáticamente a eventos (próxima generación)
- Integración con Kubernetes: Ansible Operator para gestionar apps cloud-native
Fundamentos y arquitectura de Ansible 🏗️
Suscríbete al canal de YouTube para recibir la notificación.
1.1. ¿qué es ansible? iac y evolución
🎻 La analogía: el director de orquesta
Imagina que tienes que dirigir una orquesta de 100 músicos.
- Método Manual (SysAdmin tradicional): Vas músico por músico diciéndole qué nota tocar en cada momento. Te vuelves loco y la música suena fatal.
- Scripts (Bash/Python): Les das una partitura, pero si uno se pierde, la canción se rompe.
- Ansible (IaC): Eres el director. Tienes una partitura maestra (Playbook). Tú marcas el ritmo y el estado deseado ("¡Más fuerte los violines!"). Si un músico desafina, Ansible se encarga de corregirlo automáticamente para que coincida con la partitura.
🧠 Concepto visual
📘 Explicación Técnica
Ansible es una herramienta de Infraestructura como Código (IaC) open-source que automatiza el aprovisionamiento de software, la gestión de configuraciones y el despliegue de aplicaciones.
A diferencia de los scripts tradicionales que son imperativos (haz esto, luego esto, luego esto), Ansible tiende a ser declarativo. Tú defines el estado final deseado (quiero que Nginx esté instalado y corriendo) y Ansible se encarga de los pasos necesarios para llegar ahí.
💻 Código: Script vs Ansible
El método antiguo (Bash Script - Imperativo):
# script_instalar.sh
# Si ejecutas esto dos veces, apt podría quejarse o fallar
apt-get update
apt-get install -y nginx
service nginx start
El método Ansible (YAML - Declarativo):
# playbook.yml
- name: Asegurar que Nginx está presente
apt:
name: nginx
state: present # <-- ESTADO DESEADO
- name: Asegurar que Nginx está corriendo
service:
name: nginx
state: started
enabled: yes
📝 Resumen
- Ansible permite definir tu infraestructura como código (IaC).
- Es declarativo: te centras en el "qué" (estado final), no en el "cómo".
- Escala masivamente: gestiona 1 o 1000 servidores con el mismo esfuerzo.
1.2. Arquitectura "Agentless"
🕵️ La Analogía: La Llave Maestra
Imagina que eres un consultor que visita oficinas.
- Con Agente (Puppet/Chef): Tienes que instalar un robot en cada oficina antes de poder trabajar. Si el robot se rompe, no puedes hacer nada.
- Agentless (Ansible): Usas la puerta estándar (SSH) que ya tienen todas las oficinas. Solo necesitas la llave (credenciales) para entrar, hacer tu trabajo y salir sin dejar rastro.
🧠 Concepto Visual
📘 Explicación Técnica
Ansible es Agentless. No requiere instalar ningún software adicional en los nodos que vas a gestionar (ni demonios, ni bases de datos).
Utiliza protocolos estándar existentes:
- Linux/Unix: SSH (Secure Shell).
- Windows: WinRM (Windows Remote Management).
Esto reduce drásticamente la carga administrativa y los agujeros de seguridad, ya que no hay un "agente de Ansible" escuchando en un puerto extraño que debas parchear.
💻 Requisitos Técnicos
En el Nodo de Control (Tu PC):
- Python instalado.
- Ansible instalado.
En los Nodos Gestionados (Servidores):
- Python instalado (para ejecutar los módulos que envía Ansible).
- Acceso SSH habilitado.
📝 Resumen
- Ansible no instala agentes en los servidores destino.
- Usa SSH para Linux y WinRM para Windows.
- Es más seguro y ligero al no dejar procesos corriendo en segundo plano.
1.3. Idempotencia
💡 La Analogía: El Interruptor de la Luz
Entras en una habitación y quieres luz.
- Si el interruptor está apagado, lo pulsas -> Cambio de estado (Luz ON).
- Si el interruptor ya está encendido, lo miras y no haces nada -> Estado mantenido (Luz ON).
- Si pulsas el interruptor 50 veces hacia la posición "ON", el resultado es el mismo: la luz está encendida y no explota la bombilla. Eso es idempotencia.
🧠 Concepto Visual
📘 Explicación Técnica
La idempotencia es la propiedad de realizar una operación varias veces sin cambiar el resultado más allá de la aplicación inicial.
En Ansible, la mayoría de los módulos son idempotentes. Si ejecutas un playbook 100 veces, Ansible solo realizará cambios la primera vez. Las 99 veces restantes verificará que el estado es correcto y reportará "OK" (sin cambios). Esto es vital para la estabilidad.
💻 Caso Práctico
Supongamos que queremos crear un usuario 'deployer'.
Ejecución 1 (El usuario no existe):
TASK [Crear usuario deployer] **************************************************
changed: [servidor1] <-- Ansible lo crea. Estado: CHANGED (Amarillo)
Ejecución 2 (El usuario YA existe):
TASK [Crear usuario deployer] **************************************************
ok: [servidor1] <-- Ansible verifica y no hace nada. Estado: OK (Verde)
📝 Resumen
- Idempotencia significa que puedes ejecutar el mismo código múltiples veces sin efectos secundarios negativos.
- Garantiza la consistencia: el resultado final siempre es el estado deseado.
- Ansible te informa si hubo cambios (
changed) o si ya estaba todo correcto (ok).
1.4. Nodo de Control vs Nodos Gestionados
🎮 La Analogía: La Consola y el Personaje
- Nodo de Control: Es tu mando de la consola. Desde aquí envías las órdenes. Es donde está tu inteligencia.
- Nodos Gestionados: Son los personajes del videojuego. Reciben las órdenes y actúan. Pueden ser guerreros (Linux), magos (Windows) o incluso el entorno (Routers).
🧠 Concepto Visual
📘 Explicación Técnica
-
Nodo de Control (Control Node):
- Es la máquina donde instalas y ejecutas Ansible.
- Puede ser tu portátil, un servidor bastión o un runner de CI/CD (Jenkins/GitHub Actions).
- Limitación: No soporta Windows nativo como nodo de control (debes usar WSL).
-
Nodos Gestionados (Managed Nodes):
- Son los dispositivos que automatizas (Servidores, Nube, Redes).
- No necesitan Ansible instalado.
- Se organizan en un Inventario.
💻 Configuración Típica
Inventario (hosts.ini):
[webservers]
192.168.1.10
192.168.1.11
[dbservers]
db.produccion.local
Comando desde el Nodo de Control:
# Hacemos ping a todos los nodos del inventario
ansible all -i hosts.ini -m ping
📝 Resumen
- Control Node: Donde ejecutas los comandos. Solo Linux/Unix (o WSL).
- Managed Node: Donde se aplican los cambios. Cualquier sistema con SSH/WinRM y Python.
- La relación es 1 a N: Un nodo de control puede gestionar miles de nodos gestionados.
Instalación y configuración ⚙️
Prepara tu entorno de trabajo para empezar a automatizar.
2.1. requisitos previos (python)
⛽ La analogía: el combustible
Imagina que Ansible es un Ferrari 🏎️. Es rápido, potente y rojo (bueno, el logo es negro y blanco, pero ya me entiendes). Para que ese Ferrari arranque, necesita gasolina. En el mundo de Ansible, esa gasolina es Python.
Sin Python, Ansible es solo un montón de código bonito que no hace nada.
🐍 ¿Por qué Python?
Ansible está escrito en Python. Cuando ejecutas un comando, Ansible:
- Convierte tus instrucciones (YAML) en pequeños programas de Python (módulos).
- Envía esos programas al servidor destino.
- Necesita un intérprete de Python en el destino para ejecutarlos.
📋 Requisitos técnicos
1. En el nodo de control (tu ordenador)
Es donde instalas Ansible.
- Sistema Operativo: Linux, macOS, o WSL (Windows Subsystem for Linux). No soporta Windows nativo.
- Python: Versión 3.8 o superior recomendada.
2. En los nodos gestionados (tus servidores)
Son las máquinas que vas a controlar.
- Python: Necesitan tener Python instalado (versión 2.7+ o 3.5+).
- SSH: Acceso vía SSH y credenciales válidas.
Aunque Ansible soporta Python 2.7 en los nodos gestionados, es una versión obsoleta (End of Life). Siempre que puedas, asegúrate de que tus servidores tengan Python 3.
🔍 Cómo verificar tu versión
Abre tu terminal y comprueba si tienes "gasolina":
python3 --version
# O si usas python 2
python --version
Si ves un número, ¡estás listo para repostar e instalar el Ferrari!
2.2. Instalación (Ubuntu/RHEL/macOS)
Vamos a instalar Ansible en tu Nodo de Control. Recuerda que NO necesitas instalar nada en los servidores que vas a gestionar (agentless, ¿recuerdas?).
📦 Guía de Instalación por S.O.
Elige tu sistema operativo y sigue los pasos.
- Ubuntu/Debian
- RHEL/CentOS/Fedora
- macOS
- Python (Pip)
En Ubuntu, lo ideal es usar el PPA oficial para tener la última versión, ya que los repositorios por defecto suelen traer versiones antiguas.
# 1. Actualizar índices
sudo apt update
# 2. Instalar software-properties-common
sudo apt install -y software-properties-common
# 3. Añadir el repositorio oficial de Ansible (PPA)
sudo add-apt-repository --yes --update ppa:ansible/ansible
# 4. Instalar Ansible
sudo apt install -y ansible
En la familia Red Hat, Ansible se encuentra en el repositorio EPEL (Extra Packages for Enterprise Linux).
# 1. Instalar el repositorio EPEL
sudo dnf install epel-release
# 2. Instalar Ansible
sudo dnf install ansible
Si usas Mac, la forma más sencilla y limpia es usar Homebrew.
# Instalar Ansible con Brew
brew install ansible
Esta es una opción universal si tienes Python instalado. Es útil para entornos virtuales o si tu distro no tiene paquetes actualizados.
# 1. Asegúrate de tener pip
python3 -m ensurepip --default-pip
# 2. Instalar Ansible
python3 -m pip install --user ansible
# 3. Añadir al PATH (si no lo está)
# Añade esto a tu .bashrc o .zshrc si ansible no se encuentra
export PATH=$PATH:$HOME/.local/bin
✅ Verificación
Una vez termine la instalación, verifica que todo ha ido bien preguntándole a Ansible su versión:
ansible --version
Deberías ver una salida similar a esta:
ansible [core 2.14.x]
config file = /etc/ansible/ansible.cfg
configured module search path = ...
ansible python module location = ...
python version = 3.10.x
¡Listo! Ya tienes el poder de la automatización en tus manos.
2.3. Archivo ansible.cfg
Ansible funciona "out of the box", pero para trabajar como un profesional, necesitas configurarlo a tu gusto.
🧠 Precedencia de Configuración
Ansible es muy flexible buscando su configuración. No hay un solo sitio, busca en varios lugares en un orden específico. El primero que encuentra, gana.
💡 Best Practice
La mejor práctica es tener un archivo ansible.cfg en la carpeta de tu proyecto.
- Así, la configuración viaja con tu código (Git).
- Tus compañeros tendrán la misma configuración que tú.
- Evitas romper otros proyectos si cambias la configuración global.
📝 Ejemplo de ansible.cfg Básico
Crea un archivo llamado ansible.cfg en tu carpeta de proyecto con este contenido recomendado para empezar:
[defaults]
# Dónde está tu lista de servidores por defecto
inventory = ./hosts
# Usuario con el que te conectas a los servidores remotos
remote_user = pabpereza
# Desactiva la comprobación de huellas SSH (útil para laboratorios, CUIDADO en prod)
host_key_checking = False
# Número de procesos paralelos (por defecto es 5, súbelo si tienes muchos hosts)
forks = 5
[privilege_escalation]
# Activar sudo automáticamente
become = True
# Método de elevación
become_method = sudo
# Usuario al que elevar (root)
become_user = root
# Pedir contraseña de sudo (False si tienes SSH keys configuradas sin pass)
become_ask_pass = False
Con esto, Ansible sabrá dónde mirar y cómo comportarse sin que tengas que pasarle mil parámetros por línea de comandos.
2.4. Laboratorio Práctico
Para aprender Ansible necesitas romper cosas. Y mejor romper un entorno de pruebas que el servidor de producción de tu empresa (créeme, no quieres esa llamada un viernes por la tarde).
Vamos a montar un entorno local usando Docker. Es rápido, ligero y gratis.
🐳 Opción: Docker Compose (Recomendada)
Simularemos 3 máquinas:
- Control Node: Tu máquina con Ansible (o un contenedor con Ansible).
- Web: Un servidor Ubuntu que gestionaremos.
- Db: Otro servidor Ubuntu que gestionaremos.
1. Estructura de archivos
Crea una carpeta ansible-lab y dentro este archivo docker-compose.yml:
version: '3'
services:
# Simulamos el servidor WEB
ubuntu-web:
image: paramrod/ubuntu-ssh-enabled:latest # Imagen con SSH server listo
container_name: ubuntu-web
hostname: webserver
ports:
- "2222:22" # Exponemos SSH en puerto 2222
networks:
- ansible-net
# Simulamos el servidor DB
ubuntu-db:
image: paramrod/ubuntu-ssh-enabled:latest
container_name: ubuntu-db
hostname: dbserver
ports:
- "2223:22" # Exponemos SSH en puerto 2223
networks:
- ansible-net
networks:
ansible-net:
driver: bridge
2. Levantar el laboratorio
docker compose up -d
3. Crear tu inventario
Crea un archivo llamado hosts (o inventory) en la misma carpeta:
[webservers]
# Conectamos a localhost puerto 2222 que redirige al contenedor
ubuntu-web ansible_host=localhost ansible_port=2222 ansible_user=ansible ansible_ssh_pass=password
[dbservers]
ubuntu-db ansible_host=localhost ansible_port=2223 ansible_user=ansible ansible_ssh_pass=password
La imagen paramrod/ubuntu-ssh-enabled es una imagen pública preparada para labs con usuario ansible y contraseña password. ¡No usar en producción!
4. ¡Prueba de fuego! 🔥
Ejecuta tu primer comando ad-hoc para ver si hay conexión (ping):
ansible all -i hosts -m ping
Si ves algo verde que dice "ping": "pong", ¡felicidades! 🎉 Tienes tu laboratorio de Ansible funcionando.
🧹 Limpieza
Cuando termines de jugar, apaga todo para liberar recursos:
docker compose down