SlideShare uma empresa Scribd logo
1 de 24
introducción a ansible
devops-ar meetup
Buenos Aires - 23/junio/2014
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.
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!
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.
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.
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)
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
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.
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
tarea / task
- name: Install Apache web server
apt: pkg=apache2 state=latest
tarea / task
- name: Install Apache web server
apt: pkg=apache2 state=latest
Documentación
Argumentos
Módulo
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)
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)
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
# 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
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.
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"
variables
roles
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
● 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
______________________
/ Ansible in a one-liner: 
 chmod +x README.md /
------------------------------------
 ^__^
 (oo)_______
(__) )/
||----w |
|| ||
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
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

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Debugging ansible modules
Debugging ansible modulesDebugging ansible modules
Debugging ansible modules
 
KVM tools and enterprise usage
KVM tools and enterprise usageKVM tools and enterprise usage
KVM tools and enterprise usage
 
Bringing up Aruba Mobility Master, Managed Device & Access Point
Bringing up Aruba Mobility Master, Managed Device & Access PointBringing up Aruba Mobility Master, Managed Device & Access Point
Bringing up Aruba Mobility Master, Managed Device & Access Point
 
how to install VMware
how to install VMwarehow to install VMware
how to install VMware
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
 
Introduction to ansible
Introduction to ansibleIntroduction to ansible
Introduction to ansible
 
오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기
 
Ansible
AnsibleAnsible
Ansible
 
Deploying CloudStack and Ceph with flexible VXLAN and BGP networking
Deploying CloudStack and Ceph with flexible VXLAN and BGP networking Deploying CloudStack and Ceph with flexible VXLAN and BGP networking
Deploying CloudStack and Ceph with flexible VXLAN and BGP networking
 
Qemu
QemuQemu
Qemu
 
Ansible
AnsibleAnsible
Ansible
 
Introduction to FreeSWITCH
Introduction to FreeSWITCHIntroduction to FreeSWITCH
Introduction to FreeSWITCH
 
OpenShift 4, the smarter Kubernetes platform
OpenShift 4, the smarter Kubernetes platformOpenShift 4, the smarter Kubernetes platform
OpenShift 4, the smarter Kubernetes platform
 
Building Windows Images with Packer
Building Windows Images with PackerBuilding Windows Images with Packer
Building Windows Images with Packer
 
Ansible 101
Ansible 101Ansible 101
Ansible 101
 
OpenShift 4 installation
OpenShift 4 installationOpenShift 4 installation
OpenShift 4 installation
 
IPMI is dead, Long live Redfish
IPMI is dead, Long live RedfishIPMI is dead, Long live Redfish
IPMI is dead, Long live Redfish
 
Ansible
AnsibleAnsible
Ansible
 
Linux basics
Linux basicsLinux basics
Linux basics
 
Automating with Ansible
Automating with AnsibleAutomating with Ansible
Automating with Ansible
 

Destaque

Ambientes de desarrollo y producción. Mejores prácticas con ansible
Ambientes de desarrollo y producción. Mejores prácticas con ansibleAmbientes de desarrollo y producción. Mejores prácticas con ansible
Ambientes de desarrollo y producción. Mejores prácticas con ansible
Joaquin Contreras
 
Orchestration with Ansible at Fedora Project
Orchestration with Ansible at Fedora ProjectOrchestration with Ansible at Fedora Project
Orchestration with Ansible at Fedora Project
Aditya Patawari
 

Destaque (19)

Provisión Automática de máquinas con Ansible
Provisión Automática de máquinas con AnsibleProvisión Automática de máquinas con Ansible
Provisión Automática de máquinas con Ansible
 
Ansible para Gestión de la configuración y Automatización
Ansible para Gestión de la configuración y AutomatizaciónAnsible para Gestión de la configuración y Automatización
Ansible para Gestión de la configuración y Automatización
 
Ansible administracion simplificada
Ansible   administracion simplificada Ansible   administracion simplificada
Ansible administracion simplificada
 
Ambientes de desarrollo y producción. Mejores prácticas con ansible
Ambientes de desarrollo y producción. Mejores prácticas con ansibleAmbientes de desarrollo y producción. Mejores prácticas con ansible
Ambientes de desarrollo y producción. Mejores prácticas con ansible
 
Orchestration with Ansible at Fedora Project
Orchestration with Ansible at Fedora ProjectOrchestration with Ansible at Fedora Project
Orchestration with Ansible at Fedora Project
 
Er training smi 2010
Er training smi 2010Er training smi 2010
Er training smi 2010
 
Cobbler - Fast and reliable multi-OS provisioning
Cobbler - Fast and reliable multi-OS provisioningCobbler - Fast and reliable multi-OS provisioning
Cobbler - Fast and reliable multi-OS provisioning
 
Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando docker
 
Ecosistema de desarrollo en PHP con Docker y Ansible
Ecosistema de desarrollo en PHP con Docker y AnsibleEcosistema de desarrollo en PHP con Docker y Ansible
Ecosistema de desarrollo en PHP con Docker y Ansible
 
Arista reinventing data center switching
Arista   reinventing data center switchingArista   reinventing data center switching
Arista reinventing data center switching
 
Ansible Meetup NYC 060215
Ansible Meetup NYC 060215Ansible Meetup NYC 060215
Ansible Meetup NYC 060215
 
DevOps, por donde comenzar? - DrupalCon Latin America 2015
DevOps, por donde comenzar?  - DrupalCon Latin America 2015DevOps, por donde comenzar?  - DrupalCon Latin America 2015
DevOps, por donde comenzar? - DrupalCon Latin America 2015
 
Arista: DevOps for Network Engineers
Arista: DevOps for Network EngineersArista: DevOps for Network Engineers
Arista: DevOps for Network Engineers
 
Arista Networks - Building the Next Generation Workplace and Data Center Usin...
Arista Networks - Building the Next Generation Workplace and Data Center Usin...Arista Networks - Building the Next Generation Workplace and Data Center Usin...
Arista Networks - Building the Next Generation Workplace and Data Center Usin...
 
Python - code quality and production monitoring
Python - code quality and production monitoringPython - code quality and production monitoring
Python - code quality and production monitoring
 
Managing Desktops with Ansible
Managing Desktops with AnsibleManaging Desktops with Ansible
Managing Desktops with Ansible
 
Remote Control your PC using Python and Kivy
Remote Control your PC using Python and KivyRemote Control your PC using Python and Kivy
Remote Control your PC using Python and Kivy
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open source
 

Semelhante a Introduccion a Ansible

28 el directorio sysconfig
28  el directorio sysconfig28  el directorio sysconfig
28 el directorio sysconfig
Aprende Viendo
 
Thunder cache 3.1.2 en centos 6.3
Thunder cache 3.1.2 en centos 6.3Thunder cache 3.1.2 en centos 6.3
Thunder cache 3.1.2 en centos 6.3
Loquenecesito,com
 
Instalación de servidor DHCP en Ubuntu Server 12.04
Instalación de servidor DHCP en Ubuntu Server 12.04Instalación de servidor DHCP en Ubuntu Server 12.04
Instalación de servidor DHCP en Ubuntu Server 12.04
Totus Muertos
 
Nuestro primer Sitio Web Con Software Libre
Nuestro primer Sitio Web Con Software LibreNuestro primer Sitio Web Con Software Libre
Nuestro primer Sitio Web Con Software Libre
Hollman Enciso
 

Semelhante a Introduccion a Ansible (20)

Presentación Docker
Presentación DockerPresentación Docker
Presentación Docker
 
28 el directorio sysconfig
28  el directorio sysconfig28  el directorio sysconfig
28 el directorio sysconfig
 
Virtualización con Xen
Virtualización con XenVirtualización con Xen
Virtualización con Xen
 
Docker 2014 v2
Docker 2014 v2Docker 2014 v2
Docker 2014 v2
 
Servidor PXE de Instalaciones GNU/Linux
Servidor PXE de Instalaciones GNU/LinuxServidor PXE de Instalaciones GNU/Linux
Servidor PXE de Instalaciones GNU/Linux
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
 
Guía instalación koha por paquetes en ubuntu 16.04 lts actualizada
Guía instalación koha por paquetes en ubuntu 16.04 lts actualizadaGuía instalación koha por paquetes en ubuntu 16.04 lts actualizada
Guía instalación koha por paquetes en ubuntu 16.04 lts actualizada
 
Como instalar unix erazo gloria
Como instalar unix erazo gloriaComo instalar unix erazo gloria
Como instalar unix erazo gloria
 
SSH en Ubuntu - Transferencia Segura
SSH en Ubuntu - Transferencia SeguraSSH en Ubuntu - Transferencia Segura
SSH en Ubuntu - Transferencia Segura
 
Thunder cache 3.1.2 en centos 6.3
Thunder cache 3.1.2 en centos 6.3Thunder cache 3.1.2 en centos 6.3
Thunder cache 3.1.2 en centos 6.3
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020
 
Open Build Service
Open Build ServiceOpen Build Service
Open Build Service
 
Docker y PostgreSQL
Docker y PostgreSQLDocker y PostgreSQL
Docker y PostgreSQL
 
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
 
Docker en el entorno de desarrollo
Docker en el entorno de desarrolloDocker en el entorno de desarrollo
Docker en el entorno de desarrollo
 
Clase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasosClase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasos
 
Instalación de servidor DHCP en Ubuntu Server 12.04
Instalación de servidor DHCP en Ubuntu Server 12.04Instalación de servidor DHCP en Ubuntu Server 12.04
Instalación de servidor DHCP en Ubuntu Server 12.04
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
 
Receta red social
Receta red socialReceta red social
Receta red social
 
Nuestro primer Sitio Web Con Software Libre
Nuestro primer Sitio Web Con Software LibreNuestro primer Sitio Web Con Software Libre
Nuestro primer Sitio Web Con Software Libre
 

Último

Unidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disolucionesUnidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disoluciones
chorantina325
 

Último (6)

¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
¡Descubre el Poder del Masaje Holístico en nuestra Primera Sesión del Seminar...
 
PSICOPATOLOGIA I.pptxdhehehehehehehehehe
PSICOPATOLOGIA I.pptxdhehehehehehehehehePSICOPATOLOGIA I.pptxdhehehehehehehehehe
PSICOPATOLOGIA I.pptxdhehehehehehehehehe
 
Corte de luz 2024 Guayaquil Guayas ecuad
Corte de luz 2024 Guayaquil Guayas ecuadCorte de luz 2024 Guayaquil Guayas ecuad
Corte de luz 2024 Guayaquil Guayas ecuad
 
Las redes sociales en el mercado digital
Las redes sociales en el mercado digitalLas redes sociales en el mercado digital
Las redes sociales en el mercado digital
 
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjjPPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
 
Unidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disolucionesUnidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disoluciones
 

Introduccion a Ansible

  • 1. introducción a ansible devops-ar meetup Buenos Aires - 23/junio/2014
  • 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. 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. 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. 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. 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. 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. 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. 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. tarea / task - name: Install Apache web server apt: pkg=apache2 state=latest
  • 11. tarea / task - name: Install Apache web server apt: pkg=apache2 state=latest Documentación Argumentos Módulo
  • 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. 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. 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. # 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. 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. 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"
  • 19. roles
  • 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. ● 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. ______________________ / Ansible in a one-liner: chmod +x README.md / ------------------------------------ ^__^ (oo)_______ (__) )/ ||----w | || ||
  • 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. 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

Notas do Editor

  1. http://en.wikipedia.org/wiki/Ansible_(software)
  2. http://docs.ansible.com/intro_installation.html
  3. http://michaelheap.com/writing-an-ansible-module-using-php/
  4. http://c8271edabed5308ac980-cda7999d7abab3ad9e8f119c5c51874c.r20.cf5.rackcdn.com/operational/#/4/1