Ansible administracion simplificada

24
Ansible Administración Simplificada Brian Coca Mayo 2015

Transcript of Ansible administracion simplificada

Page 1: Ansible   administracion simplificada

AnsibleAdministración Simplificada

Brian CocaMayo 2015

Page 2: Ansible   administracion simplificada

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, …)

Page 3: Ansible   administracion simplificada

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,...)

Page 4: Ansible   administracion simplificada

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*

Jonathan Davila
Think 'Instalacion facil' would be better?
Page 5: Ansible   administracion simplificada

________________/ 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?

Page 6: Ansible   administracion simplificada

Filosofía UNIX

Page 7: Ansible   administracion simplificada

El diagrama

Page 8: Ansible   administracion simplificada

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

Page 9: Ansible   administracion simplificada

Inventario (máquinas y grupos)

Estático:[web] #definición de grupoweb0 #definición de máquinaweb1.example.com ansible_ssh_port=1234 #variables para conexionweb[02:15] # puedes definir rangos

[db]mysql[1:3] mysql_port=6666 #variables en generalmysqlbackup ansible_ssh_host=10.10.1.23

[web:children] # jerarquías app1app2

Puede ser dinámico (+x)”- ec2.py- cobbler- devuelve JSON (fácil de crear)- directorio: usa los ficheros contenidos

Page 10: Ansible   administracion simplificada

Library/Action - Mayo 2013 (72)

add_host,debug,get_url,mount,postgresql_user,slurp,apt,django_manage,git,mysql_db,rabbitmq_parameter,subversion,apt_key,easy_install,group,mysql_user,rabbitmq_plugin,supervisorctl,apt_repository,ec2,group_by,nagios,rabbitmq_user,svr4pkg,assemble,ec2_facts,hg,ohai,rabbitmq_vhost,sysctl,async_status,ec2_vol,ini_file,opkg,raw,template,async_wrapper,facter,libr,pacman,script,uri,authorized_key,fail,lineinfile,pause,seboolean,user,cloudformation,fetch,lvol,ping,selinux,virt,command,file,macports,pip,service,wait_for,copy,fireball,mail,pkgin,setup,yum,cron,gem,mongodb_user,postgresql_db,shell,zfs

Page 11: Ansible   administracion simplificada

Library/Action - Feb 2015 (259)a10_server,a10_service_group,a10_virtual_server,acl,add_host,airbrake_deployment,alternatives,apache2_module,apt,apt_key,apt_repository,apt_rpm,assemble,assert,at,authorized_key,azure,bigip_facts,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_manage,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,filesystem,fireball,firewalld,flowdock,gc_storage,gce,gce_img,gce_lb,gce_net,gce_pd,gem,get_url,getent,git,github_hooks,glance_image,gluster_volume,group,group_by,grove,haproxy,hg,hipchat,homebrew,homebrew_cask,homebrew_tap,hostname,htpasswd,include_vars,ini_file,irc,jabber,jboss,jira,kernel_blacklist,keystone_user,layman,librato_annotation,lineinfile,linode,lldp,locale_gen,logentries,lvg,lvol,lxc_container,macports,mail,modprobe,mongodb_user,monit,mount,mqtt,mysql_db,mysql_replication,mysql_user,mysql_variables,nagios,netscaler,newrelic_deployment,nexmo,nova_compute,nova_keypair,npm,ohai,open_iscsi,openbsd_pkg,openvswitch_bridge,openvswitch_port,opkg,osx_say,ovirt,pacman,pagerduty,patch,pause,ping,pingdom,pip,pkg5,pkg5_publisher,pkgin,pkgng,pkgutil,portage,portinstall,postgresql_db,postgresql_ext,postgresql_lang,postgresql_privs,postgresql_user,quantum_floating_ip,quantum_floating_ip_associate,quantum_network,quantum_router,quantum_router_gateway,quantum_router_interface,quantum_subnet,rabbitmq_parameter,rabbitmq_plugin,rabbitmq_policy,rabbitmq_user,rabbitmq_vhost,raw,rax,rax_cbs,rax_cbs_attachments,rax_cdb,rax_cdb_database,rax_cdb_user,rax_clb,rax_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_subnet_group,redhat_subscription,redis,replace,rhn_channel,rhn_register,riak,rollbar_deployment,route53,rpm_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,unarchive,uptimerobot,uri,urpmi,user,vb_vm,virt,vsphere_guest,wait_for,win_chocolatey,win_feature,win_get_url,win_group,win_msi,win_ping,win_service,win_stat,win_updates,win_user,xattr,yum,zabbix_group,zabbix_maintenance,zfs,zypper,zypper_repository

Page 12: Ansible   administracion simplificada

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

Page 13: Ansible   administracion simplificada

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)

Page 14: Ansible   administracion simplificada

Hechos

#>ansible -m setup testmachine|head -n 10testmachine | 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,

Page 15: Ansible   administracion simplificada

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

Page 16: Ansible   administracion simplificada

(cont)

Ejemplo

users/users/app.ymlusers/admins.ymlusers/departed.ymlusers/devs.ymusers/user_actions.ymlusers/filesusers/files/keysusers/files/keys/user1.keysusers/files/keys/user2.keysusers/var_filesusers/var_files/users.ymlusers/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

Page 17: Ansible   administracion simplificada

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}}” ...

Page 18: Ansible   administracion simplificada

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'

Page 19: Ansible   administracion simplificada

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 20048108 3048550 3026541 3011696 404269 206web2 | success | rc=0 >>205807 20043762 304

ad-hoc

Page 20: Ansible   administracion simplificada

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

Page 21: Ansible   administracion simplificada

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

Page 22: Ansible   administracion simplificada

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

Page 23: Ansible   administracion simplificada

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/…

Page 24: Ansible   administracion simplificada

Para más información:

http://docs.ansible.comhttp://groups.google.com/group/ansible-project#Ansible irc.freenode.net

Para contribuir:http://groups.google.com/group/ansible-develhttp://github.com/ansible/ansiblehttp://github.com/ansible/ansible-modules-corehttp://github.com/ansible/asnbile-modules-extra