introduccion a ansible

24
introducción a ansible devops-ar meetup Buenos Aires - 23/junio/2014

Upload: osvaldo

Post on 26-Jun-2015

808 views

Category:

Internet


5 download

DESCRIPTION

Introducción a Ansible

TRANSCRIPT

Page 1: Introduccion a Ansible

introducción a ansible

devops-ar meetup

Buenos Aires - 23/junio/2014

Page 2: Introduccion a Ansible

ansibleAnsible 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.

Page 3: Introduccion a Ansible

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!

Page 4: Introduccion a Ansible

requerimientosEquipo 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.

Page 5: Introduccion a Ansible

arquitecturaEquipo de control Equipos administrados

SshdPython 2.4+

Python 2.6+ansibleplaybooks

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.

Page 6: Introduccion a Ansible

instalaciónPara instalar desde código fuente.$ git clone git://github.com/ansible/ansible.git$ cd ./ansible$ source ./hacking/env-setup

Latest Release Via YumRPMs 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

RecomendadoLatest Releases Via Pip

$ sudo pip install ansible

Disponible para Via pkg (FreeBSD)y Homebrew (Mac OSX)

Page 7: Introduccion a Ansible

configuración del inventarioEl 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.comPuede contener hostnames y/o direcciones IP únicamente o definidos en grupos como los mostrados: webservers o

dbservers.

Groups

Servers

Page 8: Introduccion a Ansible

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.

Page 9: Introduccion a Ansible

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 -lansible-doc aptansible-doc copy

Page 10: Introduccion a Ansible

tarea / task

- name: Install Apache web server apt: pkg=apache2 state=latest

Page 11: Introduccion a Ansible

tarea / task

- name: Install Apache web server apt: pkg=apache2 state=latest

Documentación

Argumentos

Módulo

Page 12: Introduccion a Ansible

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)

Page 13: Introduccion a Ansible

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)

Page 14: Introduccion a Ansible

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

Page 15: Introduccion a Ansible

# Synchronization of src on the control machine to dest on the remote hostssynchronize: src=some/relative/path dest=/some/absolute/path

# Synchronization of two paths both on the control machinelocal_action: synchronize src=some/relative/path dest=/some/absolute/path

# Synchronization of src on the inventory host to the dest on the localhost inpull modesynchronize: mode=pull src=some/relative/path dest=/some/absolute/path

# Synchronization of src on delegate host to dest on the current inventory hostsynchronize: > 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 commandsynchronize: src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"

pasando parámetros al módulotarea / tasks

Page 16: Introduccion a Ansible

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.

Page 17: Introduccion a Ansible

playbooksansible-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"

Page 18: Introduccion a Ansible

variables

Page 19: Introduccion a Ansible

roles

Page 20: Introduccion a Ansible

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

Page 21: Introduccion a Ansible

● 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

Page 22: Introduccion a Ansible

______________________

/ Ansible in a one-liner: \

\ chmod +x README.md /

------------------------------------

\ ^__^

\ (oo)\_______

(__)\ )\/\

||----w |

|| ||

Page 23: Introduccion a Ansible

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

Page 24: Introduccion a Ansible

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