SlideShare una empresa de Scribd logo
Ansible
Administración Simplificada
Brian Coca
Mayo 2015
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, …)
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,...)
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*
________________
/ 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?
Filosofía UNIX
El diagrama
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
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
Library/Action - Mayo 2013 (72)
add_host,debug,get_url,mount,postgresql_user,slurp,apt,dj
ango_manage,git,mysql_db,rabbitmq_parameter,subversio
n,apt_key,easy_install,group,mysql_user,rabbitmq_plugin,s
upervisorctl,apt_repository,ec2,group_by,nagios,rabbitmq_
user,svr4pkg,assemble,ec2_facts,hg,ohai,rabbitmq_vhost,s
ysctl,async_status,ec2_vol,ini_file,opkg,raw,template,async
_wrapper,facter,libr,pacman,script,uri,authorized_key,fail,lin
einfile,pause,seboolean,user,cloudformation,fetch,lvol,ping,
selinux,virt,command,file,macports,pip,service,wait_for,cop
y,fireball,mail,pkgin,setup,yum,cron,gem,mongodb_user,po
stgresql_db,shell,zfs
Library/Action - Feb 2015 (259)
a10_server,a10_service_group,a10_virtual_server,acl,add_host,airbrake_deployment,alternatives,apa
che2_module,apt,apt_key,apt_repository,apt_rpm,assemble,assert,at,authorized_key,azure,bigip_fact
s,bigip_monitor_http,bigip_monitor_tcp,bigip_node,bigip_pool,bigip_pool_member,bigpanda,boundary
_meter,bower,bzr,campfire,capabilities,cloudformation,command,composer,copy,cpanm,cron,crypttab,
datadog_event,debconf,debug,digital_ocean,digital_ocean_domain,digital_ocean_sshkey,django_man
age,dnf,dnsimple,dnsmadeeasy,docker,docker_image,easy_install,ec2,ec2_ami,ec2_ami_search,ec2
_asg,ec2_eip,ec2_elb,ec2_elb_lb,ec2_facts,ec2_group,ec2_key,ec2_lc,ec2_metric_alarm,ec2_scaling
_policy,ec2_snapshot,ec2_tag,ec2_vol,ec2_vpc,ejabberd_user,elasticache,facter,fail,fetch,file,filesyste
m,fireball,firewalld,flowdock,gc_storage,gce,gce_img,gce_lb,gce_net,gce_pd,gem,get_url,getent,git,git
hub_hooks,glance_image,gluster_volume,group,group_by,grove,haproxy,hg,hipchat,homebrew,home
brew_cask,homebrew_tap,hostname,htpasswd,include_vars,ini_file,irc,jabber,jboss,jira,kernel_blacklis
t,keystone_user,layman,librato_annotation,lineinfile,linode,lldp,locale_gen,logentries,lvg,lvol,lxc_contai
ner,macports,mail,modprobe,mongodb_user,monit,mount,mqtt,mysql_db,mysql_replication,mysql_use
r,mysql_variables,nagios,netscaler,newrelic_deployment,nexmo,nova_compute,nova_keypair,npm,oh
ai,open_iscsi,openbsd_pkg,openvswitch_bridge,openvswitch_port,opkg,osx_say,ovirt,pacman,pagerd
uty,patch,pause,ping,pingdom,pip,pkg5,pkg5_publisher,pkgin,pkgng,pkgutil,portage,portinstall,postgre
sql_db,postgresql_ext,postgresql_lang,postgresql_privs,postgresql_user,quantum_floating_ip,quantu
m_floating_ip_associate,quantum_network,quantum_router,quantum_router_gateway,quantum_router
_interface,quantum_subnet,rabbitmq_parameter,rabbitmq_plugin,rabbitmq_policy,rabbitmq_user,rabbi
tmq_vhost,raw,rax,rax_cbs,rax_cbs_attachments,rax_cdb,rax_cdb_database,rax_cdb_user,rax_clb,ra
x_clb_nodes,rax_dns,rax_dns_record,rax_facts,rax_files,rax_files_objects,rax_identity,rax_keypair,rax
_meta,rax_network,rax_queue,rax_scaling_group,rax_scaling_policy,rds,rds_param_group,rds_subne
t_group,redhat_subscription,redis,replace,rhn_channel,rhn_register,riak,rollbar_deployment,route53,rp
m_key,s3,script,seboolean,selinux,service,set_fact,setup,shell,slack,slurp,snmp_facts,sns,stackdriver,
stat,subversion,supervisorctl,svc,svr4pkg,swdepot,synchronize,sysctl,template,twilio,typetalk,ufw,unar
chive,uptimerobot,uri,urpmi,user,vb_vm,virt,vsphere_guest,wait_for,win_chocolatey,win_feature,win_g
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
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)
Hechos
#>ansible -m setup testmachine|head -n 10
testmachine | success >> {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"10.1.1.4"
],
"ansible_all_ipv6_addresses": [],
"ansible_architecture": "amd64",
"ansible_machine": "amd64",
"ansible_memfree_mb": 1161,
"ansible_memtotal_mb": 15850,
Jugadas y Tareas (playbooks, tasks)
nginx.yml
---
- hosts: web
sudo: True
vars:
domain: ejemplo.com
tasks:
- name: Instalar nginx
apt: name=nginx state=present
- name: configura nginx
template: src=templates/nginx.conf.j2 dest=//etc/nginx.conf
notify: nginx-reinicia
handlers:
- name: nginx-reinicia
service: name=nginx state=restarted
#> ansible-playbook -K nginx.yml
(cont)
Ejemplo
users/
users/app.yml
users/admins.yml
users/departed.yml
users/devs.ym
users/user_actions.yml
users/files
users/files/keys
users/files/keys/user1.keys
users/files/keys/user2.keys
users/var_files
users/var_files/users.yml
users/var_files/app.yml
- name: Configura Administradores
hosts: all
gather_facts: False
sudo: True
vars_files : [ var_files/users.yml ]
vars:
- active: [ bcoca, eoot, dog ]
- user_groups: “{{admin_group}}”
tasks:
- include: user_actions.yml
with_items: “{{active}}”
admins.yml
Plays and Tasks (user_actions.yml)
- name: Asugra que los usuarios existen
user: >
name={{item.name}}
uid={{item.id}}
password={{item.pass}}
comment={{item.longname}}
groups="{{user_groups}}
shell={{ansible_bash_interpreter}}
append=true
state=present
with_items: “{{users}}”
- name: Asseugra .ssh existe correctamente
file: dest=/home/{{item.name}}/.ssh state=directory owner={{item.name}}
group={{item}} mode=0700
with_items: “{{users}}”
- name: Llaves del usuario
authorized_key: key="{{lookup(‘file’, ‘files/keys’ . item.name + ‘.keys)" user={{item.name}}
with_items: “{{users}}”
...
ficheros de Variables (users.yml)
users:
- name: alan
id: 1069
longname: Alan Parsons
pass: '$1$UxoGyasdfX$kOj0MgisMK.eYtgRuP7R0'
- name: bcoca
id: 1056
longname: Brian Coca
pass: '$2a$04$ra3LpTMihRH5v6/YASDF/33Fyhe8SWk/RZuJiN5wK'
- name: brian
id: 1096
longname: Brian May
pass: '$2a$04$Sx.lL2ejqe6bxOeNSCAh/f8nd1.q9rO/ER2gW'
ad-hoc
#>ansible webservers -m shell -a "awk '{print $9}'
/var/log/nginx/access.log|sort |uniq -c |sort -k1,1nr
2>/dev/null|column -t"
web1 | success | rc=0 >>
204417 200
48108 304
8550 302
6541 301
1696 404
269 206
web2 | success | rc=0 >>
205807 200
43762 304
ad-hoc
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
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
Instalación Interactiva (release.yml):
---
- hosts: localhost
sudo: False
gather_facts: False
vars_prompt:
- name: "branch"
prompt: "Elije version"
private: False
tasks:
- pause: prompt="Pulsa 'Enter' para empezar la instalcion"
- debug: msg="deploying $repo/{{branch}} a {{target}}"
- include: mainapp/prep.yml
- include: secondaryapp/prep.yml
- hosts: “{{target}}”
sudo: true
gather_facts: true
vars:
monitor: mynagiosserver
tasks:
- include: mainapp/deploy.yml
- include: services/nuke.yml
- include: mainapp/update.yml
- include: dbhost/update.yml
when: dbhost is defined
- include: services/unnuke.yml
cont .. (services/nuke.yml):
- pause: "Queries parar todos los servicios?"
# Saca de circulación y para los servicios
- name: callate nagios!
nagios: action=silence host={{inventory_hostname}} service=app1
delegate_to: “{{monitor}}”
tags: [ mon ]
- name: parar nginx
service: name=nginx state=stopped
tags: [ stop ]
- name: parar applicacion
svc: name=app1 state=stopped
- name: copiar archivo
copy: src=archivos/app1_{{branch}}.tgz dest=/tmp/
- name: copiar archivo
unarchive: path=/tmp/archivos/app1_{{branch}}.tgz dest=/applicaciones/app1/
…
Para más información:
http://docs.ansible.com
http://groups.google.com/group/ansible-project
#Ansible irc.freenode.net
Para contribuir:
http://groups.google.com/group/ansible-devel
http://github.com/ansible/ansible
http://github.com/ansible/ansible-modules-core
http://github.com/ansible/asnbile-modules-extra

Más contenido relacionado

PPTX
Ansible DevOps Day Peru 2016
PPTX
Ansible + tacos at dev hangout
PDF
PostgreSQL À la Debian
PDF
Gulp js php sevilla 28 septiembre 2016
PDF
Deployer PHP. Presentación para #PHPSevilla
PPTX
Introduccion a Ansible
PDF
Jvmmx docker jvm
PDF
Introducción a Ansible
Ansible DevOps Day Peru 2016
Ansible + tacos at dev hangout
PostgreSQL À la Debian
Gulp js php sevilla 28 septiembre 2016
Deployer PHP. Presentación para #PHPSevilla
Introduccion a Ansible
Jvmmx docker jvm
Introducción a Ansible

La actualidad más candente (13)

PDF
RabbitMQ y Symfony
ODP
Gestionando tu infraestructura con Ansible
ODP
Taller de Capistrano
PDF
Trabajo zabbix
PDF
Provisión Automática de máquinas con Ansible
PDF
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
PDF
Varnish http cache
PPTX
04 . utilizando la consola de play framework
PDF
Jvmmx jigsaw
PDF
PDF
Distributed Task Processing with Celery - PyZH
PDF
Rails Against The Machine
PDF
Ataque por inyección de código sql y sniffing
RabbitMQ y Symfony
Gestionando tu infraestructura con Ansible
Taller de Capistrano
Trabajo zabbix
Provisión Automática de máquinas con Ansible
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
Varnish http cache
04 . utilizando la consola de play framework
Jvmmx jigsaw
Distributed Task Processing with Celery - PyZH
Rails Against The Machine
Ataque por inyección de código sql y sniffing
Publicidad

Destacado (11)

PPT
Er training smi 2010
ODP
Ansible para Gestión de la configuración y Automatización
PDF
De desarrollo a producción usando docker
PPTX
Arista reinventing data center switching
PPTX
Ansible Meetup NYC 060215
PDF
DevOps, por donde comenzar? - DrupalCon Latin America 2015
PDF
Arista: DevOps for Network Engineers
PDF
Arista Networks - Building the Next Generation Workplace and Data Center Usin...
PDF
Managing Desktops with Ansible
PDF
Remote Control your PC using Python and Kivy
PDF
Dev ops infraestructura agil con open source
Er training smi 2010
Ansible para Gestión de la configuración y Automatización
De desarrollo a producción usando docker
Arista reinventing data center switching
Ansible Meetup NYC 060215
DevOps, por donde comenzar? - DrupalCon Latin America 2015
Arista: DevOps for Network Engineers
Arista Networks - Building the Next Generation Workplace and Data Center Usin...
Managing Desktops with Ansible
Remote Control your PC using Python and Kivy
Dev ops infraestructura agil con open source
Publicidad

Similar a Ansible administracion simplificada (20)

PDF
ODP
Ambientes de desarrollo y producción. Mejores prácticas con ansible
PDF
Cloud Computing. Gestión de configuraciones. Ansible
PDF
Logs en Linux.pdf
PDF
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
PDF
Comandos linux
PPT
Configuración maquinas virtuales
PDF
Comandos Basicos De Linux
PPTX
Creacion de un Repositorio Local en CentOS_6.0
PDF
Informe linux
PPTX
LINUXsddsdsdsdsdssdsddssddssdsdsdsd.pptx
PDF
Un caso Forense: Analizando un servidor Linux
PDF
Curso Linux Basico
PPTX
Instalación de Servicios de Red para OpenSUSE
PDF
Scripting para Pentesters v1.0
PDF
Entorno PHP
DOCX
PPT
2.10 instalacionyconfiguraciondeservicios
DOCX
Transcripcion (jackeline chillogalli
Ambientes de desarrollo y producción. Mejores prácticas con ansible
Cloud Computing. Gestión de configuraciones. Ansible
Logs en Linux.pdf
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
Comandos linux
Configuración maquinas virtuales
Comandos Basicos De Linux
Creacion de un Repositorio Local en CentOS_6.0
Informe linux
LINUXsddsdsdsdsdssdsddssddssdsdsdsd.pptx
Un caso Forense: Analizando un servidor Linux
Curso Linux Basico
Instalación de Servicios de Red para OpenSUSE
Scripting para Pentesters v1.0
Entorno PHP
2.10 instalacionyconfiguraciondeservicios
Transcripcion (jackeline chillogalli

Último (20)

PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PPTX
Presentación de Redes de Datos modelo osi
PDF
SAP Transportation Management para LSP, TM140 Col18
PPT
introduccion a las_web en el 2025_mejoras.ppt
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Calidad desde el Docente y la mejora continua .pdf
PDF
Diapositiva proyecto de vida, materia catedra
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PPT
Que son las redes de computadores y sus partes
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PDF
clase auditoria informatica 2025.........
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
Presentación de Redes de Datos modelo osi
SAP Transportation Management para LSP, TM140 Col18
introduccion a las_web en el 2025_mejoras.ppt
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Calidad desde el Docente y la mejora continua .pdf
Diapositiva proyecto de vida, materia catedra
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
Zarate Quispe Alex aldayir aplicaciones de internet .docx
Power Point Nicolás Carrasco (disertación Roblox).pptx
Que son las redes de computadores y sus partes
historia_web de la creacion de un navegador_presentacion.pptx
Plantilla para Diseño de Narrativas Transmedia.pdf
clase auditoria informatica 2025.........
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
El-Gobierno-Electrónico-En-El-Estado-Bolivia
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
Propuesta BKP servidores con Acronis1.pptx
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx

Ansible administracion simplificada

  • 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
  • 10. Library/Action - Mayo 2013 (72) add_host,debug,get_url,mount,postgresql_user,slurp,apt,dj ango_manage,git,mysql_db,rabbitmq_parameter,subversio n,apt_key,easy_install,group,mysql_user,rabbitmq_plugin,s upervisorctl,apt_repository,ec2,group_by,nagios,rabbitmq_ user,svr4pkg,assemble,ec2_facts,hg,ohai,rabbitmq_vhost,s ysctl,async_status,ec2_vol,ini_file,opkg,raw,template,async _wrapper,facter,libr,pacman,script,uri,authorized_key,fail,lin einfile,pause,seboolean,user,cloudformation,fetch,lvol,ping, selinux,virt,command,file,macports,pip,service,wait_for,cop y,fireball,mail,pkgin,setup,yum,cron,gem,mongodb_user,po stgresql_db,shell,zfs
  • 11. Library/Action - Feb 2015 (259) a10_server,a10_service_group,a10_virtual_server,acl,add_host,airbrake_deployment,alternatives,apa che2_module,apt,apt_key,apt_repository,apt_rpm,assemble,assert,at,authorized_key,azure,bigip_fact s,bigip_monitor_http,bigip_monitor_tcp,bigip_node,bigip_pool,bigip_pool_member,bigpanda,boundary _meter,bower,bzr,campfire,capabilities,cloudformation,command,composer,copy,cpanm,cron,crypttab, datadog_event,debconf,debug,digital_ocean,digital_ocean_domain,digital_ocean_sshkey,django_man age,dnf,dnsimple,dnsmadeeasy,docker,docker_image,easy_install,ec2,ec2_ami,ec2_ami_search,ec2 _asg,ec2_eip,ec2_elb,ec2_elb_lb,ec2_facts,ec2_group,ec2_key,ec2_lc,ec2_metric_alarm,ec2_scaling _policy,ec2_snapshot,ec2_tag,ec2_vol,ec2_vpc,ejabberd_user,elasticache,facter,fail,fetch,file,filesyste m,fireball,firewalld,flowdock,gc_storage,gce,gce_img,gce_lb,gce_net,gce_pd,gem,get_url,getent,git,git hub_hooks,glance_image,gluster_volume,group,group_by,grove,haproxy,hg,hipchat,homebrew,home brew_cask,homebrew_tap,hostname,htpasswd,include_vars,ini_file,irc,jabber,jboss,jira,kernel_blacklis t,keystone_user,layman,librato_annotation,lineinfile,linode,lldp,locale_gen,logentries,lvg,lvol,lxc_contai ner,macports,mail,modprobe,mongodb_user,monit,mount,mqtt,mysql_db,mysql_replication,mysql_use r,mysql_variables,nagios,netscaler,newrelic_deployment,nexmo,nova_compute,nova_keypair,npm,oh ai,open_iscsi,openbsd_pkg,openvswitch_bridge,openvswitch_port,opkg,osx_say,ovirt,pacman,pagerd uty,patch,pause,ping,pingdom,pip,pkg5,pkg5_publisher,pkgin,pkgng,pkgutil,portage,portinstall,postgre sql_db,postgresql_ext,postgresql_lang,postgresql_privs,postgresql_user,quantum_floating_ip,quantu m_floating_ip_associate,quantum_network,quantum_router,quantum_router_gateway,quantum_router _interface,quantum_subnet,rabbitmq_parameter,rabbitmq_plugin,rabbitmq_policy,rabbitmq_user,rabbi tmq_vhost,raw,rax,rax_cbs,rax_cbs_attachments,rax_cdb,rax_cdb_database,rax_cdb_user,rax_clb,ra x_clb_nodes,rax_dns,rax_dns_record,rax_facts,rax_files,rax_files_objects,rax_identity,rax_keypair,rax _meta,rax_network,rax_queue,rax_scaling_group,rax_scaling_policy,rds,rds_param_group,rds_subne t_group,redhat_subscription,redis,replace,rhn_channel,rhn_register,riak,rollbar_deployment,route53,rp m_key,s3,script,seboolean,selinux,service,set_fact,setup,shell,slack,slurp,snmp_facts,sns,stackdriver, stat,subversion,supervisorctl,svc,svr4pkg,swdepot,synchronize,sysctl,template,twilio,typetalk,ufw,unar chive,uptimerobot,uri,urpmi,user,vb_vm,virt,vsphere_guest,wait_for,win_chocolatey,win_feature,win_g
  • 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)
  • 14. Hechos #>ansible -m setup testmachine|head -n 10 testmachine | success >> { "ansible_facts": { "ansible_all_ipv4_addresses": [ "10.1.1.4" ], "ansible_all_ipv6_addresses": [], "ansible_architecture": "amd64", "ansible_machine": "amd64", "ansible_memfree_mb": 1161, "ansible_memtotal_mb": 15850,
  • 15. Jugadas y Tareas (playbooks, tasks) nginx.yml --- - hosts: web sudo: True vars: domain: ejemplo.com tasks: - name: Instalar nginx apt: name=nginx state=present - name: configura nginx template: src=templates/nginx.conf.j2 dest=//etc/nginx.conf notify: nginx-reinicia handlers: - name: nginx-reinicia service: name=nginx state=restarted #> ansible-playbook -K nginx.yml
  • 16. (cont) Ejemplo users/ users/app.yml users/admins.yml users/departed.yml users/devs.ym users/user_actions.yml users/files users/files/keys users/files/keys/user1.keys users/files/keys/user2.keys users/var_files users/var_files/users.yml users/var_files/app.yml - name: Configura Administradores hosts: all gather_facts: False sudo: True vars_files : [ var_files/users.yml ] vars: - active: [ bcoca, eoot, dog ] - user_groups: “{{admin_group}}” tasks: - include: user_actions.yml with_items: “{{active}}” admins.yml
  • 17. Plays and Tasks (user_actions.yml) - name: Asugra que los usuarios existen user: > name={{item.name}} uid={{item.id}} password={{item.pass}} comment={{item.longname}} groups="{{user_groups}} shell={{ansible_bash_interpreter}} append=true state=present with_items: “{{users}}” - name: Asseugra .ssh existe correctamente file: dest=/home/{{item.name}}/.ssh state=directory owner={{item.name}} group={{item}} mode=0700 with_items: “{{users}}” - name: Llaves del usuario authorized_key: key="{{lookup(‘file’, ‘files/keys’ . item.name + ‘.keys)" user={{item.name}} with_items: “{{users}}” ...
  • 18. ficheros de Variables (users.yml) users: - name: alan id: 1069 longname: Alan Parsons pass: '$1$UxoGyasdfX$kOj0MgisMK.eYtgRuP7R0' - name: bcoca id: 1056 longname: Brian Coca pass: '$2a$04$ra3LpTMihRH5v6/YASDF/33Fyhe8SWk/RZuJiN5wK' - name: brian id: 1096 longname: Brian May pass: '$2a$04$Sx.lL2ejqe6bxOeNSCAh/f8nd1.q9rO/ER2gW'
  • 19. ad-hoc #>ansible webservers -m shell -a "awk '{print $9}' /var/log/nginx/access.log|sort |uniq -c |sort -k1,1nr 2>/dev/null|column -t" web1 | success | rc=0 >> 204417 200 48108 304 8550 302 6541 301 1696 404 269 206 web2 | success | rc=0 >> 205807 200 43762 304 ad-hoc
  • 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
  • 22. Instalación Interactiva (release.yml): --- - hosts: localhost sudo: False gather_facts: False vars_prompt: - name: "branch" prompt: "Elije version" private: False tasks: - pause: prompt="Pulsa 'Enter' para empezar la instalcion" - debug: msg="deploying $repo/{{branch}} a {{target}}" - include: mainapp/prep.yml - include: secondaryapp/prep.yml - hosts: “{{target}}” sudo: true gather_facts: true vars: monitor: mynagiosserver tasks: - include: mainapp/deploy.yml - include: services/nuke.yml - include: mainapp/update.yml - include: dbhost/update.yml when: dbhost is defined - include: services/unnuke.yml
  • 23. cont .. (services/nuke.yml): - pause: "Queries parar todos los servicios?" # Saca de circulación y para los servicios - name: callate nagios! nagios: action=silence host={{inventory_hostname}} service=app1 delegate_to: “{{monitor}}” tags: [ mon ] - name: parar nginx service: name=nginx state=stopped tags: [ stop ] - name: parar applicacion svc: name=app1 state=stopped - name: copiar archivo copy: src=archivos/app1_{{branch}}.tgz dest=/tmp/ - name: copiar archivo unarchive: path=/tmp/archivos/app1_{{branch}}.tgz dest=/applicaciones/app1/ …
  • 24. Para más información: http://docs.ansible.com http://groups.google.com/group/ansible-project #Ansible irc.freenode.net Para contribuir: http://groups.google.com/group/ansible-devel http://github.com/ansible/ansible http://github.com/ansible/ansible-modules-core http://github.com/ansible/asnbile-modules-extra

Notas del editor

  • #9: inspirada en el fútbol americano