Ansible - Quickstart
Ansible es una herramienta de automatización de IT de código abierto que permite gestionar configuraciones, implementar aplicaciones, orquestar tareas y automatizar procesos repetitivos de forma sencilla y eficiente.
¿Qué es Ansible?
- Herramienta de automatización open source.
- Simple de instalar, eficiente y fácil de aprender.
- Escrita en Python, usa módulos.
- No usa agentes.
- No requiere conocimientos de programación.
Conceptos Básicos
Control Node
- Nodo desde donde se ejecuta Ansible (no Windows).
- Requiere Python.
Managed Node / Hosts
- Equipos administrados sin Ansible instalado.
Inventory
- Listado de hosts a administrar.
- Puede ser estático o dinámico.
Modules
- Pequeños programas con funciones específicas.
- Ej:
win_user,yum,user,mysql_db.
Tasks
- name: Crear usuario MI_NOMBRE
user:
name: MI_NOMBRE
state: present
Play
- Lista ordenada de tareas ejecutadas en un grupo de hosts.
Playbook
- Archivo YAML con varios plays.
- Define tareas, archivos, variables, roles.
Roles
- Organización estructurada de configuraciones reutilizables.
Collection
- Paquetes modulares: roles, módulos, plugins, playbooks.
Ansible Galaxy
ansible-galaxy collection install <nombre>
ansible-galaxy collection list
ansible-doc -l
¿Cómo Funciona?
- Lee archivos YAML → identifica plays, tareas, hosts.
- Copia módulo al equipo, lo ejecuta y luego elimina.
- Para equipos de red, los módulos se ejecutan en el controlador.
- Métodos de conexión: ssh, winrm, docker, kubectl, etc.
Diferencias Notables
- No necesita agente.
- Infraestructura mínima.
- Escrito en Python.
Casos de Uso
- Provisionamiento
- Configuración
- Despliegue de aplicaciones
- Orquestación
- Seguridad
- Entrega continua
Instalación en Red Hat Enterprise Linux
dnf install ansible-core
Ejemplo Inventory (INI)
localhost ansible_connection=local
[webservers]
webserver1 ansible_host=192.168.10.1
webserver2.lab.example.com
webserver[3:9].lab.example.com ansible_user=webadmin
[dbservers]
dbserver1 ansible_host=192.168.10.2 ansible_port=2222
dbserver2.lab.example.com
[crm:children]
webservers
dbservers
[all:vars]
ntp_server=time1.google.com
[dbservers:vars]
db_pkg=mariadb-server
db_max_connections=500
[crm:vars]
stage=testing
[webservers]
secure=false
Comandos Ad-Hoc
ansible -m <module> -a "<args>" -i <inventory> -u <usuario> -b --ask-sudo-pass
ansible-doc -l