El inventario en Ansible define los nodos gestionados por el controlador. Los hosts no incluidos no serán administrados por Ansible. Esta configuración es esencial.
- Configuración del Inventario
1.1 Definición de Hosts
Los hosts pueden definirse mediante direcciones IP, nombres o dominios.
$ cat inventario
web01
db-master.prod.local
10.0.1.45
app-server
$ ansible all --list-hosts
hosts (4):
web01
db-master.prod.local
10.0.1.45
app-server
Se pueden especificar rangos de hosts para definir múltiples máquinas simultáneamente.
$ cat inventario
frontend01
172.16.0.[1:4]
backend01
$ ansible all --list-hosts
hosts (6):
frontend01
172.16.0.1
172.16.0.2
172.16.0.3
172.16.0.4
backend01
1.2 Definición de Grupos de Hosts
Agrupar hosts permite ejecutar operaciones en múltiples máquinas de manera eficiente.
$ cat inventario
frontend01
backend01
[aplicaciones]
frontend01
backend01
Para listar los hosts en un grupo específico:
$ ansible aplicaciones --list-hosts
hosts (2):
frontend01
backend01
1.3 Grupos Anidados
Se pueden crear grupos que contengan otros grupos para operaciones amplias.
$ cat inventario
frontend01
frontend02
[webservers]
frontend01
frontend02
[dbservers]
db-primary
db-replica
[produccion:children]
webservers
dbservers
$ ansible produccion --list-hosts
hosts (4):
frontend01
frontend02
db-primary
db-replica
- Gestionar Nodos Controlados
2.1 Listar Hosts y Grupos
$ ansible all --list-hosts
hosts (3):
frontend01
backend01
db-master
$ ansible aplicaciones --list-hosts
hosts (2):
frontend01
backend01
$ ansible frontend01 --list-hosts
hosts (1):
frontend01
Los hosts no asignados a ningún grupo se listan con 'ungrouped'.
$ cat inventario
frontend01
backend01
[aplicaciones]
frontend01
$ ansible ungrouped --list-hosts
hosts (1):
backend01
2.2 Patrones de Selección
Se pueden usar comodines para seleccionar hosts por nombre.
$ ansible 'front*' --list-hosts
hosts (2):
frontend01
frontend02
Operadores lógicos para combinar condiciones.
$ ansible 'front*,!frontend02' --list-hosts
hosts (1):
frontend01
$ ansible 'webservers,&produccion' --list-hosts
hosts (2):
frontend01
frontend02
$ ansible 'webservers,dbservers' --list-hosts
hosts (4):
frontend01
frontend02
db-primary
db-replica
2.3 Expresiones Regulares
Usar '~' seguido de la expresión regular.
$ ansible '~^f' --list-hosts
hosts (2):
frontend01
frontend02
- Comandos Ad-Hoc
Para tareas simples se usan comandos ad-hoc. Para complejas se utilizan playbooks.
3.1 Sintaxis Básica
ansible patrón -m módulo -a "argumentos" [opciones]
El patrón es obligatorio. El módulo 'commend' se asume por defecto si no se especifica.
$ ansible all -m ping -u admin -k
Contraseña SSH:
servidor1 | SUCCEEDED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3.8"
},
"changed": false,
"ping": "pong"
}
servidor2 | SUCCEEDED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3.8"
},
"changed": false,
"ping": "pong"
}
3.2 Opciones Comunes de Ansible
Consultar módulos disponibles:
$ ansible-doc -l | wc -l
3450
$ ansible-doc apt
$ ansible-doc -s apt
Opciones principales:
-k: Solicitar contraseña SSH-K: Solicitar contraseña para sudo-u: Usuario remoto-v: Modo verbose-C: Ejecución en modo prueba (dry-run)-T: Tiempo de espera de conexión--syntax-check: Validar sintaxis de playbook