SlideShare une entreprise Scribd logo
1  sur  24
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

Contenu connexe

Tendances

Tendances (13)

RabbitMQ y Symfony
RabbitMQ y SymfonyRabbitMQ y Symfony
RabbitMQ y Symfony
 
Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible
 
Taller de Capistrano
Taller de CapistranoTaller de Capistrano
Taller de Capistrano
 
Trabajo zabbix
Trabajo zabbixTrabajo zabbix
Trabajo zabbix
 
Provisión Automática de máquinas con Ansible
Provisión Automática de máquinas con AnsibleProvisión Automática de máquinas con Ansible
Provisión Automática de máquinas con Ansible
 
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
 
Varnish http cache
Varnish http cacheVarnish http cache
Varnish http cache
 
04 . utilizando la consola de play framework
04 .  utilizando la consola de play framework04 .  utilizando la consola de play framework
04 . utilizando la consola de play framework
 
Jvmmx jigsaw
Jvmmx jigsawJvmmx jigsaw
Jvmmx jigsaw
 
Drupal console
Drupal consoleDrupal console
Drupal console
 
Distributed Task Processing with Celery - PyZH
Distributed Task Processing with Celery - PyZHDistributed Task Processing with Celery - PyZH
Distributed Task Processing with Celery - PyZH
 
Rails Against The Machine
Rails Against The MachineRails Against The Machine
Rails Against The Machine
 
Ataque por inyección de código sql y sniffing
Ataque por inyección de código sql y sniffingAtaque por inyección de código sql y sniffing
Ataque por inyección de código sql y sniffing
 

En vedette

Er training smi 2010
Er training smi 2010Er training smi 2010
Er training smi 2010imitam
 
Ansible para Gestión de la configuración y Automatización
Ansible para Gestión de la configuración y AutomatizaciónAnsible para Gestión de la configuración y Automatización
Ansible para Gestión de la configuración y Automatizaciónsergiovier
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando dockerChristian Rodriguez
 
Arista reinventing data center switching
Arista   reinventing data center switchingArista   reinventing data center switching
Arista reinventing data center switchingVLCM2015
 
Ansible Meetup NYC 060215
Ansible Meetup NYC 060215Ansible Meetup NYC 060215
Ansible Meetup NYC 060215jedelman99
 
DevOps, por donde comenzar? - DrupalCon Latin America 2015
DevOps, por donde comenzar?  - DrupalCon Latin America 2015DevOps, por donde comenzar?  - DrupalCon Latin America 2015
DevOps, por donde comenzar? - DrupalCon Latin America 2015Taller Negócio Digitais
 
Arista: DevOps for Network Engineers
Arista: DevOps for Network EngineersArista: DevOps for Network Engineers
Arista: DevOps for Network EngineersPhilip DiLeo
 
Arista Networks - Building the Next Generation Workplace and Data Center Usin...
Arista Networks - Building the Next Generation Workplace and Data Center Usin...Arista Networks - Building the Next Generation Workplace and Data Center Usin...
Arista Networks - Building the Next Generation Workplace and Data Center Usin...Aruba, a Hewlett Packard Enterprise company
 
Remote Control your PC using Python and Kivy
Remote Control your PC using Python and KivyRemote Control your PC using Python and Kivy
Remote Control your PC using Python and KivyVengat Vasanth
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open sourcescrumecuador
 

En vedette (11)

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

Similaire à Ansible administracion simplificada

Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJSBEEVA_es
 
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]RootedCON
 
Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magentoOnestic
 
Scripting para Pentesters v1.0
Scripting para Pentesters v1.0Scripting para Pentesters v1.0
Scripting para Pentesters v1.0wcuestas
 
Ambientes de desarrollo y producción. Mejores prácticas con ansible
Ambientes de desarrollo y producción. Mejores prácticas con ansibleAmbientes de desarrollo y producción. Mejores prácticas con ansible
Ambientes de desarrollo y producción. Mejores prácticas con ansibleJoaquin Contreras
 
Cómo crear una distribución Linux
Cómo crear una distribución LinuxCómo crear una distribución Linux
Cómo crear una distribución LinuxMauro Parra-Miranda
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARPablo Godel
 
Alta disponibilidad con Pacemaker
Alta disponibilidad con PacemakerAlta disponibilidad con Pacemaker
Alta disponibilidad con PacemakerNelson Calero
 
LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)Emanuel Calvo
 
Compilación del Kernel
Compilación del KernelCompilación del Kernel
Compilación del KernelJuan Sánchez
 
CESGA: Curso Básico SVG
CESGA: Curso Básico SVGCESGA: Curso Básico SVG
CESGA: Curso Básico SVGJavier Lopez
 
Creacion de un IPS utilizando Linux y hardware Soekris
Creacion de un IPS utilizando Linux y hardware SoekrisCreacion de un IPS utilizando Linux y hardware Soekris
Creacion de un IPS utilizando Linux y hardware Soekrisozikox
 
Instalacionoracle10 g
Instalacionoracle10 gInstalacionoracle10 g
Instalacionoracle10 gronyweb
 

Similaire à Ansible administracion simplificada (20)

Docker y PostgreSQL
Docker y PostgreSQLDocker y PostgreSQL
Docker y PostgreSQL
 
Docker 2014 v2
Docker 2014 v2Docker 2014 v2
Docker 2014 v2
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]
 
Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magento
 
Scripting para Pentesters v1.0
Scripting para Pentesters v1.0Scripting para Pentesters v1.0
Scripting para Pentesters v1.0
 
Ambientes de desarrollo y producción. Mejores prácticas con ansible
Ambientes de desarrollo y producción. Mejores prácticas con ansibleAmbientes de desarrollo y producción. Mejores prácticas con ansible
Ambientes de desarrollo y producción. Mejores prácticas con ansible
 
Gestionando servidores con Puppet
Gestionando servidores con PuppetGestionando servidores con Puppet
Gestionando servidores con Puppet
 
Cómo crear una distribución Linux
Cómo crear una distribución LinuxCómo crear una distribución Linux
Cómo crear una distribución Linux
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
 
Memorias
MemoriasMemorias
Memorias
 
Entorno PHP
Entorno PHPEntorno PHP
Entorno PHP
 
Alta disponibilidad con Pacemaker
Alta disponibilidad con PacemakerAlta disponibilidad con Pacemaker
Alta disponibilidad con Pacemaker
 
PDIDTI-S7.pptx
PDIDTI-S7.pptxPDIDTI-S7.pptx
PDIDTI-S7.pptx
 
Bulma 441
Bulma 441Bulma 441
Bulma 441
 
LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)
 
Compilación del Kernel
Compilación del KernelCompilación del Kernel
Compilación del Kernel
 
CESGA: Curso Básico SVG
CESGA: Curso Básico SVGCESGA: Curso Básico SVG
CESGA: Curso Básico SVG
 
Creacion de un IPS utilizando Linux y hardware Soekris
Creacion de un IPS utilizando Linux y hardware SoekrisCreacion de un IPS utilizando Linux y hardware Soekris
Creacion de un IPS utilizando Linux y hardware Soekris
 
Instalacionoracle10 g
Instalacionoracle10 gInstalacionoracle10 g
Instalacionoracle10 g
 

Dernier

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 

Dernier (10)

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 

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

Notes de l'éditeur

  1. inspirada en el fútbol americano