Know Ansible
Know Ansible
Know Ansible
Ansible
Pablo
Martínez
Schroder
¿Qué es Ansible?
¿Qué es Ansible?
Un sistema de gestión de configuraciones.
Más o menos.
¿Qué es Ansible?
A diferencia de otros gestores de configuración en Ansible se dan una serie de
pasos, no un estado deseado.
¿Qué es Ansible?
En otros C.M. describes el estado En Ansible se especifica cada paso a
deseado y el sistema lo configura. dar y así llegas al estado deseado.
Introducción de 5 minutos
Introducción de 5 minutos
Software libre.
https://www.ansible.com/
https://github.com/ansible/ansible
Introducción de 5 minutos
Acaba de publicar la versión 2.2.
Escrito en Python.
Multiplataforma.
https://www.ansible.com/
https://github.com/ansible/ansible
Introducción de 5 minutos
¡NO USEIS ANSIBLE 1.x!
Introducción de 5 minutos
¡NO USEIS ANSIBLE 1.x!
Introducción de 5 minutos
¡NO USEIS ANSIBLE 1.x!
Es vieja y obsoleta.
(evitad 2.1.x)
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
Introducción de 5 minutos
- name: write the apache config file
Un playbook describe una serie de acciones
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
http_port: 80 handlers:
tasks:
- name: ensure apache is at the latest version
yum: name=httpd state=latest
Introducción de 5 minutos
Aplicando el playbook en el inventario, podemos adivinar qué pasará.
Si no tenemos una ssh key, tenemos que agregarla. Para ello Ansible debe
conocer la host key. Pero la primera vez no lo sabe, así que la agregamos.
Por defecto ansible se conectará con la estrategia lineal: se espera a que todos
los nodos ejecuten una tarea antes de continuar con la siguiente.
Otra estrategia interesante es batch, que permite correr en lotes. Los lotes
pueden especificarse de distintas formas.
También se incluye una estrategia free que hace que cada nodo corra las tareas
tan rápido como pueda, de forma independiente
- 1 Forks
- 5
- 10 En el fichero de configuración puedes
especificar cuántos procesos paralelos. Por
defecto es 5.
Algo más dentro de Ansible - Roles
Los roles son conjuntos de tareas que se organizan de forma que pueden
reutilizarse.
Permiten tener más organización con los playbooks, y pueden ser compartidos.
Algo más dentro de Ansible - Roles
Ansible Galaxy ofrece miles de nodos que puedes utilizar. Puedes instalar un
nodo de un repositorio sencillamente con:
https://galaxy.ansible.com/
Algo más dentro de Ansible - Roles
Es muy fácil crear un role
cd proyecto/roles
ansible-galaxy init miservicio
Luego puedes especificar qué plugin utilizar por defecto para gestionar la salida.
stdout_callback = json
Algo más dentro de Ansible - Facts
Cada vez que corres un plugin, por defecto Ansible ejecutará un módulo llamado
setup que recoge algunos datos, llamados facts.
https://docs.ansible.com/ansible/playbooks_async.html
Algo más dentro de Ansible - Orquestación
delegate_to
hosts: webservers
serial: 5
tasks:
- name: take out of load balancer pool
command: /usr/bin/take_out_of_pool {{ inventory_hostname }}
delegate_to: 127.0.0.1
- wait_for: path=/var/run/server.pid
- wait_for: path=/var/log/server.log search_regex=”Initialization completed”
- wait_for: path=/var/lock/server.lock state=absent
- wait_for: path=/proc/3466/status state=absent
# En lugar de delegate_to podemos usar local_action para esperar a que el nodo esté arriba
- local_action: wait_for port=22 host="{{ ansible_ssh_host | default(inventory_hostname) }}"
search_regex=OpenSSH delay=10
Algo más dentro de Ansible - Orquestación
run_once
# Sólo correrlo en uno de los servidores
- command: /opt/server/scripts/upgrade_db.py
run_once: true
Esto viene a ser igual que
- command: /opt/server/scripts/upgrade_db.py
delegate_to: web1
- command: /opt/server/scripts/upgrade_db.py
when: inventory_hostname == ‘web[0]’
Otra opción interesante de command es “creates”:
- command: yum update -y kernel creates=/tmp/kernel_upgraded
Algo más dentro de Ansible - Recomendaciones
Unas recomendaciones personales. Muy discutibles, por supuesto.
-- proyecto/
+- ansible.cfg
+- playbook-1.yml
+- .known_hosts
+- inventory/
+- facts/
+- group_vars/
| +- all
+- roles/
+-{vars,handlers,defaults,tasks,meta,templates}
Algo más dentro de Ansible - Recomendaciones
ansible.cfg
[defaults]
remote_tmp = /tmp/tmp
roles_path = /path/a/los/roles/compartidos
callback_plugin = /path/a/los/roles/compartidos
library = /parth/a/los/modulos/compartidos
gathering = smart
fact_caching = jsonfile
fact_caching_connection = facts
inventory = inventory/default.txt # or inventory si es dinámico
[ssh_connection]
scp_if_ssh = True
ssh_args = -o ConnectTimeout=60 -o UseRoaming=no -o UserKnownHostsFile=.known_hosts
Ecosistema de Ansible
Ecosistema de Ansible
Ansible Galaxy
Versión de software libre del software que gestiona Ansible Galaxy. Puede servir
para que un grupo comparta de forma limita los roles.
https://github.com/ansible/galaxy
Ecosistema de Ansible
Ansible Tower
https://www.ansible.com/tower
Ecosistema de Ansible
Ansible ARA
Herramienta open source que almacena todas las ejecuciones y sus salidas en
una base de datos, de forma que puede ser accedido por una GUI
https://github.com/dmsimard/ara
Ecosistema de Ansible
Ansible ARA
Ecosistema de Ansible
Ansistrano
http://ansistrano.com/
Ecosistema de Ansible
Gestores de tareas
http://rundeck.org/
http://gunnery.io/
No todo es oro