Este documento presenta Ansible, una herramienta de automatización de sistemas que permite la administración remota y la configuración de sistemas de forma sencilla y sin agentes. Ansible usa autenticación SSH existente y permite ejecutar tareas en máquinas remotas mediante playbooks que contienen una serie de pasos. Los módulos de Ansible recogen información de las máquinas, como los hechos, que pueden usarse luego en las plantillas.
2. Mi evolucion
cambios manuales + libro de notas
at + .bat (si, Windows)
{telnet, rsh, ssh} + for loops + shell
programas en shells/perl/python + cssh/pssh
Herramientas de configuración y
aprovisionamiento (cfengine, cobbler, puppet, chef, …)
3. Lo que no quería
agentes/demonios (mas cosas para configurar)
puertos (cambiar cortafuegos/redes)
ssl/pki (administrar certificados!!!)
cualquier tipo de pre configuración (soy vago)
múltiples herramientas (provisionar, ad-hoc,...)
4. Presentando Ansible
● Impacto mínimo (mi definición: sólo Python*)
● Usa aut{entificación,orización} existente
o SSH por defecto
o Puede usar su/sudo o root
● Reuso de tus comandos habituales
● Fácil instalación (git/rpm/deb/pip/ports/etc)
● Predecible, portable y expandible
● Aspira a ser idempotente*
5. ________________
/ Ejecuta una
| tarea en una |
máquina /
----------------
^__^
(oo)_______
(__) )/
||----w |
|| ||
¿Que es Ansible?
● ¿Configurador de sistemas?
● ¿Plataforma de automatización?
● ¿Instalación de aplicaciones?
● ¿Orquestación de sistemas?
8. Terminología
Inventory: (inventario) la lista de máquinas, grupos y variables asociadas
Modules: los que trabajan, el código detrás de las tareas (tasks)
Plugins: (módulos) allback, action and y otros (incluye Modules)
Facts: (hechos) datos recogidos de las máquinas elegidas
Playbook: (libro de jugadas) colección de jugadas (plays)
Play: (jugada) itera sobre la lista de tareas asociandola a la lista de máquinas
Task: (tarea) invocación de un módulo para trabajo
9. Inventario (máquinas y grupos)
Estático:
[web] #definición de grupo
web0 #definición de máquina
web1.example.com ansible_ssh_port=1234 #variables
para conexion
web[02:15] # puedes definir rangos
[db]
mysql[1:3] mysql_port=6666 #variables en general
mysqlbackup ansible_ssh_host=10.10.1.23
[web:children] # jerarquías
app1
app2Puede ser dinámico (+x)”
- ec2.py
- cobbler
- devuelve JSON (fácil de crear)
- directorio: usa los ficheros contenidos
12. Módulos (plugins)
● callback:
reciben datos de las tareas (terminal)
se puede re enviar (email, xmpp, irc)
● connection (conexion):
ssh, local, chroot, jail, winrm, etc
● inventario, lookup(buscadores), variables,
filtros,... proveen o transforman datos
13. Hechos (facts)
Funcionan por defecto (gather_facts: False inhabilita)
Puede utilizar ohai/facter or crear otros
Soporta BSD, Solaris, AIX y otros
Para uso en jugadas y tareas
Muy útil para plantillas (template)
20. Muchas mas cosas interesantes:
● delegate_to, tags, roles
● local, jail, accelerate: conexiones
● ansible-doc: documentación
● fork y serial: control de procesos
● when y notify: condicionales
● cowsay
● --check, --diff, --limit, --list-+, --step, ...
● lookup(‘pipe’, ‘password’ ….)
● y más … que no me caben
21. Ejemplos:
#!/usr/bin/env ansible-playbook -K
---
- name: Limpia la lista de usuarios
hosts: all
gather_facts: False
sudo: True
vars:
departed: [ alan, bcoca, isaac, mathew, mike, venizio, willy ]
tasks:
- name: Usuarios que no deben existir
user: name={{item}} state=absent remove=yes
with_items: “{{departed}}”
bin/departed