Ansible es una herramienta de automatización de TI desarrollada por Red Hat que permite gestionar configuraciones, desplegar aplicaciones y orquestar tareas complejas de infraestructura de forma declarativa. A diferencia de otras herramientas como Puppet, Chef o SaltStack, Ansible es agentless: no requiere instalar ningún agente en los nodos gestionados. Se comunica exclusivamente por SSH (Linux/Unix) o WinRM (Windows), lo que simplifica enormemente el despliegue inicial y la seguridad del entorno.

¿Qué es Ansible y por qué es agentless?

Ansible utiliza un modelo push: desde el nodo controlador (control node) se ejecutan módulos que se transfieren temporalmente a los nodos gestionados, se ejecutan y luego se eliminan. Esto contrasta con herramientas agent-based como Puppet o Chef, donde cada nodo ejecuta un agente que consulta periódicamente a un servidor central. Las ventajas del modelo agentless incluyen: menor consumo de recursos en los nodos gestionados, curva de aprendizaje más baja, y ausencia de puertos adicionales que abrir en los firewalls (solo necesita SSH saliente desde el controlador).

Instalación de Ansible

La instalación en sistemas basados en Debian/Ubuntu es directa usando el gestor de paquetes APT. También se puede instalar vía pip para obtener la versión más reciente.

«`
# Instalación vía APT (recomendada para estabilidad)
sudo apt update
sudo apt install ansible -y

# Verificar la instalación
ansible --version```


Si prefieres la versión más reciente o trabajas en un entorno aislado, puedes usar pip:

```
# Instalación vía pip (versión más actualizada)
python3 -m pip install --user ansible

# Verificar
ansible --version | head -1```


Configuración del inventario

El inventario define los nodos que Ansible gestionará. Puede ser un archivo estático (INI o YAML) o dinámico (script que consulta AWS, DigitalOcean, etc.). El archivo por defecto es /etc/ansible/hosts, pero se recomienda usar archivos de inventario específicos por proyecto.

```
# hosts.ini — Inventario estático en formato INI
[webservers]
web1.example.com
web2.example.com ansible_user=deploy ansible_port=2222

[database]
db1.example.com ansible_user=admin

[all:vars]
ansible_python_interpreter=/usr/bin/python3```


También puedes crear inventarios en formato YAML, más legible para proyectos complejos:

```
# hosts.yml — Inventario en YAML
all:
  children:
    webservers:
      hosts:
        web1.example.com:
        web2.example.com:
          ansible_user: deploy
          ansible_port: 2222
    database:
      hosts:
        db1.example.com:
          ansible_user: admin
  vars:
    ansible_python_interpreter: /usr/bin/python3```


Módulos básicos y comandos ad-hoc

Los módulos son las unidades ejecutables de Ansible. Cada módulo cumple una función específica. Los comandos ad-hoc permiten ejecutar módulos directamente desde la terminal sin necesidad de un playbook, ideales para tareas rápidas o exploración.

```
# Probar conectividad con el módulo ping
ansible all -i hosts.ini -m ping

# Ejecutar comandos con el módulo command
ansible webservers -i hosts.ini -m command -a "uptime"

# Usar el módulo shell (permite pipes y redirección)
ansible all -i hosts.ini -m shell -a "free -h | grep Mem"

# Instalar un paquete con el módulo apt
ansible webservers -i hosts.ini -m apt -a "name=nginx state=present" --become```


Con estos fundamentos ya tienes las bases para empezar a automatizar con Ansible. En el próximo artículo veremos cómo estructurar automatizaciones más complejas usando playbooks, tasks, handlers y variables.