Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ansible administracion simplificada

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

  • Login to see the comments

  • Be the first to like this

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

×