O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Ansible administracion simplificada

1.398 visualizações

Publicada em

ansible, configuration manegement, spanish, administracion de sistemas, automatizacion

Publicada em: Tecnologia
  • Entre para ver os comentários

  • Seja a primeira pessoa a gostar disto

Ansible administracion simplificada

  1. 1. Ansible Administración Simplificada Brian Coca Mayo 2015
  2. 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. 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. 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. 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?
  6. 6. Filosofía UNIX
  7. 7. El diagrama
  8. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×