Introduccion a Ansible

2,102 views

Published on

Introducción a Ansible

Published in: Internet
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,102
On SlideShare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
41
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • http://en.wikipedia.org/wiki/Ansible_(software)
  • http://docs.ansible.com/intro_installation.html
  • http://michaelheap.com/writing-an-ansible-module-using-php/
  • http://c8271edabed5308ac980-cda7999d7abab3ad9e8f119c5c51874c.r20.cf5.rackcdn.com/operational/#/4/1
  • Introduccion a Ansible

    1. 1. introducción a ansible devops-ar meetup Buenos Aires - 23/junio/2014
    2. 2. ansible Ansible es una herramienta que permite el manejo de configuraciones de una manera radicalmente simple, instalación de aplicaciones, ejecución de tareas y la orquestración de estas tareas en un entorno multinodo. Esta plataforma fue creada por Michael DeHaan, autor de la aplicación de provisionamiento de servidores Cobbler y co-autor de la herramienta para administración remota Func. DeHaan toma el nombre del sistema ficticion de comunicación instántanea en el hiperespacio mencionado en el libro Ender's Game, de Orson Scott Card, y originalmente inventado por Ursula K. Le Guin en su novela de 1966 Rocannon's World.
    3. 3. Filosofia de diseño ● Proceso de instalación extremadamente sencillo con una curva de aprendizaje mínima. ● Super paralelo y super rápido por defecto. ● No requiere demonios ni en los clientes ni en el servidor; utiliza solamente sshd. ● Utiliza un lenguaje fácil de entender y utilizar tanto para los usuarios como para las computadoras. ● Enfásis en la seguridad y la facilidad de auditoría/revisión/rescritura de contenido. ● Permite administrar equipos remotos instantaneamente, sin requerir ninguna instalación inicial. ● Permitir el desarrollo de módulos en cualquier lenguaje dinámico, no solo Python (bash inclusive!) ● No requiere permisos de root. ● Ser la herramienta de automatización más fácil de utilizar, la más fácil!
    4. 4. requerimientos Equipo de Control Actualmente Ansible puede ser ejecutado desde cualquier equipo con Python 2.6 instalado(soporte de Windows en camino). Esto incluye Red Hat, Debian, CentOS, OS X, cualquiera de los BSDs, y compañia. Los siguientes módulos de Python también deberán estar instalado (paramiko es opcional): $ sudo pip install paramiko PyYAML jinja2 httplib2 Equipos administrados En los equipos administrados, solo se requiere Python 2.4 o posterior, teniendo en cuenta que menor a Python 2.5 on the remotes, se va a requerir el siguiente módulo: python-simplejson Se puede utilizar una versión de python diferente a la que tiene el sistema, instalada de manera manual, por ejemplo.
    5. 5. arquitectura Equipo de control Equipos administrados Sshd Python 2.4+ Python 2.6+ ansible playbooks ssh ssh El equipo de control puede ser un servidor, una laptop. Puede tener conexión por ssh o estar detrás de un jumphost o un firewall.
    6. 6. instalaciónPara instalar desde código fuente. $ git clone git://github.com/ansible/ansible.git $ cd ./ansible $ source ./hacking/env-setup Latest Release Via Yum RPMs are available from yum for EPEL 6, 7, and currently supported Fedora distributions. # install the epel-release RPM if needed on CentOS, RHEL, or Scientific Linux $ sudo yum install ansible Latest Releases Via Apt (Ubuntu) $ sudo apt-get install apt-add-repository $ sudo apt-add-repository ppa:rquillo/ansible $ sudo apt-get update $ sudo apt-get install ansible Recomendado Latest Releases Via Pip $ sudo pip install ansible Disponible para Via pkg (FreeBSD) y Homebrew (Mac OSX)
    7. 7. configuración del inventario El inventario (inventory) es una descripción de los nodos accesibles por Ansible. El Inventory se define en un archivo de confirmación en formato INI, cuya ubicación predeterminada es /etc/ansible/hosts. [dbservers] sql1.example.com [webservers] foo.example.com bar.example.com Puede contener hostnames y/o direcciones IP únicamente o definidos en grupos como los mostrados: webservers o dbservers. Groups Servers
    8. 8. módulos ● Los módulos se consideran la unidad de trabajo en Ansible. ● Es código que se ejecuta en el equipo administrado. ● Cada módulo es básicamente independiente y puede ser escrito en cualquier lenguaje de programación de scripts como Python, Perl, Ruby, bash, etc. ● Una de las principales características de los módulos es la idempotencia, que significa que una vez que el sistema ha alcanzado el estado deseado, el mismo se mantiene sin importar la cantidad de veces que se repitan las mismas acciones. ● Se copian por SSH hacia el equipo administrado donde son ejecutados. ● Devuelven datos en formato JSON que es interpretado por ansible.
    9. 9. módulos de ansible (core) ● apt/yum/pip Adicionar/Desinstalar paquetes ● command/shell Ejecutar cualquier comando de shell (con o sin ambiente). ● copy Copiar archivos al servidor administrado ● file Crear directorios, enlaces simbólicos, modificar permisos ● service Iniciar/Detener/Habilitar servicios ● template Similar a copy, pero con reemplazo de variables (390 modules en http://docs.ansible.com/list_of_all_modules.html) RTFM: ansible-doc -l ansible-doc apt ansible-doc copy
    10. 10. tarea / task - name: Install Apache web server apt: pkg=apache2 state=latest
    11. 11. tarea / task - name: Install Apache web server apt: pkg=apache2 state=latest Documentación Argumentos Módulo
    12. 12. tarea / tasks - name: Instalando un servidor web Apache con PHP apt: pkg={{ item }} state=latest with_items: - apache2 - php5 - libapache2-mod-php5 - php-apc (usando un iterador)
    13. 13. tarea / tasks - name: Install Apache web server with PHP (apt version) apt: pkg={{ item }} state=latest with_items: - apache2 - php5 - libapache2-mod-php5 - php-apc when: ansible_distribution == ‘Ubuntu'" - name: Install Apache web server with PHP (yum version) yum: pkg={{ item }} state=latest with_items: - httpd24 - php55 - php55-pecl-apc when: ansible_distribution == 'Amazon' (usando facts)
    14. 14. tarea / tasks - name: Copy website configuration copy: src=site.conf dest=/etc/apache2/sites-available/site.conf owner=root group=root mode=0644 notify: restart apache tags: config
    15. 15. # Synchronization of src on the control machine to dest on the remote hosts synchronize: src=some/relative/path dest=/some/absolute/path # Synchronization of two paths both on the control machine local_action: synchronize src=some/relative/path dest=/some/absolute/path # Synchronization of src on the inventory host to the dest on the localhost in pull mode synchronize: mode=pull src=some/relative/path dest=/some/absolute/path # Synchronization of src on delegate host to dest on the current inventory host synchronize: > src=some/relative/path dest=/some/absolute/path delegate_to: delegate.host # Synchronize and delete files in dest on the remote host that are not found in src of localhost. synchronize: src=some/relative/path dest=/some/absolute/path delete=yes # Synchronize using an alternate rsync command synchronize: src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync" pasando parámetros al módulo tarea / tasks
    16. 16. plays- name: This is a Play hosts: web-servers remote_user: ubuntu sudo: yes connection: ssh gather_facts: no vars: http_port: 80 cache_dir: /opt/cache tasks: - name: create cache dir file: path={{ cache_dir }} state=directory - name: install nginx yum: name=nginx state=installed Son una serie ordenada de tareas ejecutadas en una seleccion de equipos. Se permite definir un control sobre el flujo de ejecución de las tareas.
    17. 17. playbooks ansible-playbook es la herramienta para ejecutar los playbooks y permite definir: ● un conjunto secuencial de plays ● un inventario ● variables globales $ ansible-playbook deploy.yaml -i production -e "componente=octopush version=2.3.90"
    18. 18. variables
    19. 19. roles
    20. 20. Se pueden definir tareas que se ejecuten antes Y después que los roles sean aplicados de la siguiente manera --- - hosts: webservers pre_tasks: - shell: echo 'hello' roles: - { role: some_role } tasks: - shell: echo 'still busy' post_tasks: - shell: echo 'goodbye' tareas pre/post
    21. 21. ● ejecución condicional: se pueden establecer condiciones para la ejecución de una tarea mediante la directiva when: que evalua la condición y ejecuta la tarea si el resultado es verdadero. ● delegación de tareas: las tareas se pueden ejecutar en un servidor distinto al indicado por e playbook mediante la directiva delegate_to:, en el caso de que la acción se vaya a ejecutar en el mismo host, en vez de delegate_to: 127.0.0.1 se puede utilizar local_action: e indicar a continuación la tarea directamente. ● notificadores / notifiers / handlers. Son tareas que se ejecutan al final del playbook por una única vez, sin importar cuantas veces haya sido invocadas con el notify. ● raw commands Se puede utilizar ansible para ejecutar comandos en los servidores remotos sin necesidad de un playbook. ● scripts Son archivos de scripts que se copian al servidor remoto y se ejecutan. Automatizan la ejecución remota de scrips ya existentes. otros
    22. 22. ______________________ / Ansible in a one-liner: chmod +x README.md / ------------------------------------ ^__^ (oo)_______ (__) )/ ||----w | || ||
    23. 23. Herramientas como Chef o Puppet son excelentes para administrar la configuración de equipos pero llegar a dominarlos requiere tiempo. Además, necesitan servidores adicionales y la instalación y configuración de un cliente en los equipos administrados. Por otro lado están herramientas como Fabric (Python) o Capistrano (Ruby) que solo necesitan una conexión por ssh a los equipos administrados para ejecutar las accciones definidas. Pero el conjunto de acciones disponibles es muy limitado y por lo general se va a requirer programación adicional. Ansible toma lo mejor de ambos ambos. Viene con un número impresionante de módulos y solo requiere conexión por ssh a los equipos administrados. Además, su curva de aprendizaje es mínima y no requiere ni servidores extras ni la instalación de agentes en los equipos remotos. http://snappishproductions.com/2014/03/24/Spot-Instances-With-Ansible.html
    24. 24. referencias ● https://speakerdeck.com/phantomwhale/ansible-your-first-step-into-server-provisioning ● http://rosstuck.com/multistage-environments-with-ansible/ ● http://www.slideshare.net/pas256/how-ansible-makes-automation-easy ● http://lextoumbourou.com/blog/posts/getting-started-with-ansible/ ● http://tomoconnor.eu/blogish/getting-started-ansible ● http://www.nickhammond.com/automating-development-environment-ansible/ ● https://gist.github.com/quicksnap/7490228

    ×