Está en la página 1de 29

CAPTULO 1

Empezando

Bienvenido a Ansible: Principiante a Pro! A lo largo de este libro, que va a ser introducido en las facetas de Ansible y cmo el
programa puede ser utilizado para asegurar que todas sus mquinas estn configurados correctamente, si se trata de su
escritorio local o una flota de servidores remotos.
Es importante sealar que este libro mayora asume que ests en una mquina Linux o OS X. Si bien es posible
ejecutar Ansible en Windows, es muy experimental y no se recomienda para el uso del da a da. Si se encuentra en una
mquina Windows, no se preocupe! En este captulo, vamos a explicar cmo usar una mquina Linux virtualizado como
su sistema de control, lo que significa que puede ejecutar Ansible al igual que lo sera capaz de si se ejecuta Linux o OS X
de forma nativa.

Vamos a empezar por echar un vistazo a la gestin de configuracin antes de instalar Ansible y escribir nuestro primer
libro de jugadas. UN libro de jugadas Es un archivo de texto que contiene instrucciones para Ansible a seguir para asegurarse de
que la mquina contra la cual se le han acabado Ansible est en el estado correcto.

Al final de este captulo, usted tiene instalado Ansible y ser capaz de ejecutar un guin que
instala PHP, nginx, y MySQL.

Qu es la Gestin de la Configuracin?
gestin de la configuracin fue desarrollado por el Departamento de Defensa de Estados Unidos en la dcada de 1950 como un mtodo de

hacer el seguimiento de los elementos materiales de hardware. gestin de la configuracin

es una forma de manejar los cambios en un sistema que utiliza un mtodo definido para que el sistema mantiene su integridad en el
tiempo. Se mantiene un registro de todos los cambios realizados a un sistema junto con la documentacin acerca de quin hizo el
cambio, cuando se hizo el cambio, y por qu se hizo. Esto nos permite conocer el estado exacto de un sistema en cualquier momento
en el tiempo.
Con los aos, este proceso fue refinado y oficializ con muchas normas diferentes, comenzando con la norma
MIL-STD-480, a travs de la norma ISO-9000, y finalmente termina con la norma ANSI / EIA-649, la Norma Nacional de
Consenso para la Gestin de la Configuracin (en el momento de esta publicacin). A medida que las computadoras aumentan
en popularidad, la misma prctica se aplica a los programas informticos, as como de hardware del equipo. Un sistema de
equipo que ejecuta es una combinacin de muchos factores diferentes, que consiste no slo de la versin del software que se
ejecuta, sino tambin su configuracin, el sistema operativo anfitrin, e incluso, en algunos casos, su ubicacin fsica. Si
cualquiera de estos factores cambia, para todos los efectos, es un sistema informtico diferente.

2016 Michael Heap 1


M. Heap, ansible, DOI 10.1007 / 978-1-4842-1659-0_1
CAPTULO 1 EMPEZANDO

Inicialmente, gestin de la configuracin estaba a punto de documentar el estado de varios sistemas en el tiempo. Sin
embargo, como las herramientas disponibles han mejorado, parece que hemos pasado de la obligacin de documentar que el
sistema est en el estado deseado a declarar el estado deseado y dejar que las herramientas se encargaran de ello para nosotros.
Ahora definimos estado ideal del sistema en lugar de su estado actual, y Ansible asegura que todo es como debe ser. Si tiene que
cambiar las versiones de software o archivos de configuracin para que el sistema se ajusta a nuestra definicin, Ansible har.

Infraestructura como Cdigo

Histricamente, que se asegurara de que el estado de un sistema coincida con lo que se esperaba y luego crear un documento que
certifica que este es el caso. Hoy en da, escribimos ese documento como una especificacin de declarar el estado esperado del
sistema, entonces dependemos de herramientas como Ansible para implementar las transformaciones necesarias. Seguro, se utiliz
para escribir scripts de shell pequeas que crearan un usuario o instalar y configurar un paquete de software especfico, sino que
simplemente no es suficiente. Infraestructura como cdigo exige el mismo respeto que damos a nuestros comentarios de misin
crtica de software de cdigo, conjuntos de pruebas, y los procesos de desarrollo de software probadas. Todas las cosas que damos
por sentado cuando se escribe cdigo de control de versiones, patrones de diseo, por lo que no en-son slo para cuando se escribe
cdigo ms. Ahora puede utilizar las mismas tcnicas en la definicin de su infraestructura.

Mientras que los scripts de shell que usted ha escrito y perfeccionado a lo largo de los aos puede trabajar en un pequeo
nmero de servidores, cmo hacer frente cuando el negocio de su empresa se quita de repente y hay que aprovisionar una
docena de nuevos servidores de forma idntica? Con la llegada de los servicios de AWS como Amazon, Rackspace Cloud, y otros
servicios en la nube, el nmero de mquinas de un administrador del sistema tiene que lidiar con sobre una base diaria se ha
incrementado en un orden de magnitud. Esto es incluso antes de considerar las mejoras de productividad para los desarrolladores
que resulten por la infraestructura definida como cdigo. Ser capaz de girar un ambiente en un servicio en la nube o localmente en
una mquina virtual para probar sus cambios desarrolladores es increble. El tiempo de ciclo de cuando un desarrollador escribe el
cdigo a su siendo desplegado a las cadas de produccin, ya que el cdigo ha sido probado no slo en un sistema idntico a los
servidores de produccin, pero tambin ha sido probada usando exactamente las mismas herramientas de aprovisionamiento y
despliegue. En conclusin, la infraestructura como el cdigo es una gran cosa, y que no va a desaparecer pronto.

sobre Ansible
Ansible fue lanzado por primera vez por Michael DeHaan en 2012 como un proyecto paralelo pequea, y ha tenido un ascenso
meterico en popularidad, con ms de 17.000 estrellas y 1.410 contribuyentes nicos en GitHub. Estrellas en GitHub son una
manera de seguir una el progreso de un proyecto que le interesa, pero no son necesariamente contribuir en el cdigo. Ms all
de ser un proyecto de cdigo abierto con xito, se ha utilizado con xito en la empresa por empresas como Apple y la NASA, que
dependen de ella para sus necesidades de gestin de configuracin.

La primera AnsibleFest se llev a cabo en Boston en 2013. En 2014, fue AnsibleFest en el camino hacia la
ciudad de Nueva York antes de trasladarse a San Francisco de 2015. Los desarrolladores y personal de operaciones
de todo el mundo se reunieron para hablar de cmo Ansible les ha ayudado en su trabajo diario y vive para discutir el
futuro de Ansible.

2
CAPTULO 1 EMPEZANDO

En el momento de escribir estas lneas, Ansible 2.1 ha sido liberado, y 2.2 est en desarrollo activo. Los desarrolladores de
Ansible han mantenido la compatibilidad hacia atrs entre la versin 1 y versin 2, mientras que la adicin de algunas funciones muy
tiles, tales como bloques (una manera de detectar errores durante la ejecucin utilizando trata de atraparlo ). Ansible 2.0 tambin es
compatible con las nuevas estrategias de ejecucin libro de jugadas, incluyendo la ejecucin lineal estndar y uno que se ejecuta un
guin tan rpido como sea posible.

Ansible utiliza archivos YAML como su principal fuente de informacin en tiempo de ejecucin. YAML es un lenguaje de
representacin de datos que se utiliza comnmente para la configuracin. Si usted no ha utilizado YAML, no se preocupe. archivos YAML
son realmente fciles de escribir, y por el tiempo que haya creado uno o dos, usted tendr la cada de ella. Si alguna vez has usado JSON
o XML, se debe sentir como en casa; Sin embargo, mientras que JSON y XML no son muy humano amable, YAML es muy fcil de leer y
usar. No obstante, presenta algunas peculiaridades embargo, como ser un espacio en blanco sensible. No obstante, si alguna vez ha
escrito ningn cdigo Python, esto no debera ser un problema para usted.

Lo que me lleva a mi siguiente punto - Ansible est escrito completamente en Python. El corredor principal y todos los
mdulos son compatibles Python 2.6, lo que significa que van a trabajar con cualquier versin de python2 por encima de la
versin 2.6. DeHaan elegir Python para Ansible ya que significaba que no habra dependencias adicionales sobre los equipos
que debe gestionar. En este punto en el tiempo, la mayora de los otros sistemas de gestin de configuracin comn
requieren la instalacin de Ruby.

No slo no hay dependencias de idiomas adicionales para sus mquinas, pero tambin que no hay dependencias adicionales en
absoluto. Ansible funciona mediante la ejecucin de comandos a travs de SSH, as que no hay necesidad de instalar ningn software de
servidor. Esta es una gran ventaja por dos razones:

1. Sus mquinas de ejecutar su aplicacin sin ningn tipo de CPU o memoria


demonios hambrientos de ejecucin en segundo plano.

2. Usted consigue todo lo que SSH proporciona de forma gratuita. Puede utilizar las
funciones avanzadas, como ControlPersist, Kerberos, y saltar anfitriones. Adems,
no hay necesidad de rodar su propio mecanismo de autenticacin - SSH puede dejar
que cuidar de l para usted!

Marioneta, Chef, y otras herramientas de gestin de configuraciones

Cfengine era el sistema original de gestin de configuracin. Sin embargo, la mayora de la gente hoy en da se comparan Ansible a
herramientas como la marioneta y el chef, que son ms comnmente utilizados en la actualidad. De marionetas y Chef son ms similares
entre s de lo que son a Ansible, pero pueden realizar las mismas funciones. Mientras que la marioneta y el chef cada utilizan un servidor
central para almacenar el estado deseado de las mquinas y los metadatos asociados con ellos, Ansible no tiene ningn servidor central
en absoluto (lo que es sin agente). Esto es importante, ya que cuando se utilizan herramientas tales como la marioneta y el chef cada
servidor comprobar en forma peridica con el servidor central para ver si hay alguna actualizacin. Ansible se basa enteramente en el
usuario final empujando a los propios cambios.

Ansible se asemeja ms a una herramienta llamada SaltStack (Sal), que tambin utiliza los archivos YAML de configuracin y tambin

est escrito en Python. Tanto Ansible y Salt se construyen principalmente como motores de ejecucin, donde su definicin del sistema es slo

una lista de comandos para ejecutar, abstradas detrs de mdulos reutilizables que proporcionan una interfaz idempotente a sus servidores.

Gracias a la mayor parte de los mdulos de Ansible y mdulos del estado de Salt ser idempotente, ambas herramientas se puede utilizar para

definir el estado de una mquina antes de la herramienta se ejecutar y aplicar ese estado.

3
CAPTULO 1 EMPEZANDO

Como se mencion anteriormente, Ansible utiliza un modelo sin agentes donde los cambios son expulsados a las
mquinas bajo demanda. Esto es diferente a la marioneta y el Chef, donde hay un servidor central que se ve como la nica
fuente de la verdad, y las mquinas de comprobar peridicamente con el servidor para asegurarse de que tienen la ltima
copia de todo lo que necesitan. Esto tiene sus ventajas y desventajas: la buena noticia es que si hace cambios, puede
empujar al instante estos cambios a las mquinas sin esperar a un demonio para comprobar si hay algn cambio. La mala
noticia es que usted es responsable de llevar a cabo actualizaciones a sus mquinas, mientras que con la marioneta y el chef
que slo puede confirmar los cambios y saber que van a ser lanzado pronto. Vale la pena mencionar que Ansible puede
apoyar este modelo de extraccin, as, pero vamos a hablar de eso un poco ms adelante en el captulo 9 . Como se
mencion anteriormente, Ansible usa SSH para conectarse desde el ordenador central a otros sistemas. Si bien esto nos da
mucha confianza en su mecanismo de transporte, sino que tambin puede ser bastante lento. Por el contrario, utiliza la sal
ZeroMQ, que es muy rpido cuando bootstrapping una conexin y enviar comandos al receptor.

Instalacin Ansible
Instalacin Ansible es fcil. Sin embargo, la instalacin de la versin correcta de Ansible no es tan fcil.

Ansible est disponible en los repositorios de paquetes para sistemas operativos como Ubuntu ( apt-get ) y Fedora ( yum ), pero
las versiones en los repositorios son por lo general varios lanzamientos de retraso. Como Ansible est en rpido desarrollo, que
querr la ltima versin disponible, ya sea por la construccin de uno mismo o de su instalacin a travs de un gestor de
paquetes.
La forma ms fcil de asegurarse de que siempre tiene la ltima versin disponible es para agarrar el cdigo
fuente de https://github.com/ansible/ansible y construir por s mismo.

Nota Usted necesitar un entorno de desarrollo creado para construir Ansible partir del cdigo fuente. Esto implica tener

Git , pip , y las bibliotecas de desarrollo Python instalado. Ver el Apndice

Un edificio Ansible, para ms informacin.

Una vez que tenga todas las dependencias necesarias instaladas, se puede descargar desde Ansible Github y
construirlo:

git clone: //github.com/ansible/ansible.git --recursive cd marca ansible

sudo make install

Esto construir e instalar la ltima versin de desarrollo de Ansible para usted de la fuente. Si se est ejecutando en un
Debian o una mquina de RedHat Linux, es posible que prefiera utilizar dkpg o yum instalar Ansible. Utilizando dpkg o yum y la
instalacin a travs del gestor de paquetes del sistema se prefiere, ya que proporciona una manera de desinstalar Ansible
limpiamente. Para obtener ms informacin sobre la construccin de paquetes Debian y RPM, consulte el Apndice A, Edificio
Ansible.

4
CAPTULO 1 EMPEZANDO

Si est ejecutando un sistema operativo que no tiene yum o apto , se puede instalar a travs de su Ansible Makefile.
Para instalar Ansible a travs del Makefile, todo lo que tiene que hacer es ejecutar sudo make install . Esto copiar Ansible
en la ubicacin correcta en su mquina.
Si no desea descargar el cdigo fuente e instalarlo usted mismo, puede utilizar un gestor de paquetes tales como apto ,
yum , o elaborar cerveza .
Si ests en OS X, puede utilizar Homebrew ( http://brew.sh ) instalar Ansible. Esta es casi idntica a la hacer ejemplo
anterior. Todo lo que necesita hacer es escribir brebaje instalar ansible y va a agarrar la versin ms reciente de la
historia.
Si ests en un sistema operativo basado en Debian, tiene dos opciones: o bien utilizar un PPA Ansible o instalar a travs de la pipa.

Si desea instalar a travs de la PPA, tendr que habilitarlo y actualizar su apto cache. Si add-apt-repositorio no
existe en el sistema, es posible que tenga que instalar pythonsoftware-propiedades primero, como sigue:

sudo apt-get install python-software-properties # sudo si se requiere ppa


add-apt-repositorios: sudo ansible / ansible apt-get update sudo apt-get install ansible

Si ests en un sistema operativo que no es compatible con EPP o si usted prefiere usar la pipa, se puede hacer eso tambin, como

se muestra aqu:

sudo PIP instalar ansible

Nota Ansible no est soportado oficialmente en Windows, pero es posible ponerlo en marcha. No recomendara la instalacin

de Ansible localmente si ests en Windows, pero en lugar de utilizar provisioner locales Ansible de Vagrant para ejecutar la

herramienta. Si desea intentar hacerlo en forma local, leer el siguiente prrafo.

Por ltimo, llegamos a Windows. Por desgracia, Ansible no se ejecuta en Windows sin un buen montn de trabajo (e
incluso entonces no es soportado oficialmente). A lo largo de este libro, que va a utilizar una mquina virtual para desarrollar
nuestro libro de jugadas, lo que significa que la instalacin de Ansible en Windows no es estrictamente necesario. Si se est
ejecutando en Windows, te recomiendo no instalar Ansible localmente y en lugar de ejecutarlo desde dentro de una mquina
virtual que cree (que vamos a cubrir en la siguiente seccin).

Si usted est decidido a intentar ejecutar Ansible en Windows, se pueden encontrar las instrucciones para
instalarlo en el Apndice A.

Escribir su primer libro de estrategias


Ahora que ha instalado Ansible, puede iniciar la automatizacin de su infraestructura. Usted necesitar un entorno en el que poner a
prueba y un libro de jugadas para funcionar. Vamos a utilizar una herramienta llamada Vagrant para proporcionar un entorno de
desarrollo desechable y creamos un libro de jugadas que se instala un PHP bsica y la pila de MySQL.

5
CAPTULO 1 EMPEZANDO

La creacin de un entorno de prueba con Vagrant


Antes de escribir su primer libro de jugadas, que necesita un entorno en el que para probarlo. Si bien se podra
escribir libros de jugadas para correr contra el equipo local, les recomiendo probar en un entorno donde no
importa si las cosas no funcionan tan intencin, en caso de que algo va mal. Para crear estos ambientes, utilizo
vagabundo.
Si eres nuevo en Vagabundo, sigue leyendo este captulo para saber lo que es y cmo puede ayudar. Si est
familiarizado con el vagabundo, o ests ansioso por empezar, no dude en ir al final del captulo y ejecutar los comandos
proporcionados para ayudarle a ponerse en marcha.

Acerca de VirtualBox y Vagrant


A lo largo de este libro, vamos a utilizar una mquina virtual contra el que vamos a ejecutar nuestros libros de jugadas.
Esta mquina virtual se proporciona usando una combinacin de VirtualBox (para la tecnologa de virtualizacin) y Vagrant
(para automatizar la creacin de mquinas virtuales). Ambas herramientas estn libremente disponibles en lnea en http://virtualbox.com
y
http://vagrantup.com respectivamente.
VirtualBox es una herramienta de virtualizacin gratuita desarrollada por Oracle. Se le permite crear un PC virtual e instalar
cualquier sistema operativo como si estuviera en hardware fsico. Puede utilizar VirtualBox como software independiente, pero
funciona mejor cuando se utiliza con Vagrant, que es esencialmente un lenguaje de programacin para mquinas virtuales.

Vagabundo es el pegamento que une todo junto. Se podra tericamente girar una mquina VirtualBox mismo,
entonces corren Ansible en l, pero vagabundo le da una forma de definir toda esa programacin. Esta configuracin
puede ser comprometido con su cdigo, y cada vez que se cambia, todo el mundo tendr la ltima versin la prxima vez
que tire hacia abajo actualizaciones. A lo largo de este libro que va a utilizar una mquina virtual, pero es til saber que
Vagrant tambin se puede utilizar para controlar el hardware real.

Instalacin de VirtualBox y Vagrant

Nota Si est utilizando algn tipo de gestor de paquetes, tales como apto o yum , no lo use para instalar VirtualBox y

vagabundo. Ambas herramientas estn en constante desarrollo, y las versiones proporcionadas en los repositorios son por

lo general varios meses de retraso.

VirtualBox est disponible en lnea en https://www.virtualbox.org/wiki/Downloads para muchas plataformas diferentes.


VirtualBox slo est disponible para sistemas de 64 bits como de la versin 5.0. Si bien se puede descargar una versin antigua
para sistemas de 32 bits, yo recomendara la actualizacin, como el resto de este libro asume una mquina de 64 bits.

Una vez que haya instalado VirtualBox, se puede descargar desde Vagrant https: // www.
vagrantup.com/downloads.html . Debe ser tan simple como descargar y ejecutar el programa de instalacin para el sistema
operativo seleccionado.

6
CAPTULO 1 EMPEZANDO

Si todo ha ido bien, debera ser capaz de ejecutar --version VBoxManage y


--version vagabundo y ver el resultado que se ve algo como lo siguiente:

$ VBoxManage --version
5.0.6r103037 $ vagabundo
vagabundo 1.7.4 --version

La creacin de su entorno
Ahora que tiene todas sus dependencias instaladas, es el momento de crear la mquina virtual en el que se
va a instalar los paquetes y luego configurar con Ansible. Crear una nueva carpeta llamada ansible-libro e
introduzca el siguiente comando: vagabundo init ubuntu / trusty64

Esto crear un archivo en ese directorio llamado Vagrantfile:

$ Mkdir ansible-libro && cd-libro ansible $ vagabundo init


ubuntu / trusty64

Un vagrantfile se ha colocado en este directorio. Ahora est listo para vagabundo su primer entorno virtual! Por
favor, lea los comentarios en el vagrantfile, as como la documentacin sobre vagrantup.com para obtener ms
informacin sobre el uso vagabundo.
Una vez creado el archivo, puede iniciar su mquina virtual mediante la ejecucin
Vagrant hasta . Esto hace algunas cosas la primera vez que lo ejecute. En primer lugar, se comprobar si un cuadro con el
nombre ubuntu / trusty64 existe en su mquina. Si no lo hace, se descargar desde Atlas, una base de datos caja central que
sea mantenida por Hashicorp (el equipo detrs de Vagrant). Yo no tengo la caja en mi mquina, por lo que descarg el cuadro:

$ Vagantes hasta
mquina 'por defecto' trayendo con el proveedor de 'virtualbox' ... ==> defecto: Box 'ubuntu / trusty64' no
se pudo encontrar. El intento de encontrar e instalar ...

por defecto: Caja Proveedor: default de


VirtualBox: Box Versin:> = 0
==> defecto: Carga de metadatos para la caja 'ubuntu / trusty64'
por defecto: URL: https://atlas.hashicorp.com/ubuntu/trusty64 ==> defecto: cuadro 'ubuntu /
trusty64' (v20151111.0.0) Adicin de proveedor: VirtualBox

por defecto: Descarga: https://atlas.hashicorp.com/ubuntu/boxes/trusty64/ versiones / 20151111.0.0 /


proveedores / virtualbox.box
==> defecto: caja de agregado con xito 'ubuntu / trusty64' (v20151111.0.0) para 'virtualbox'!

7
CAPTULO 1 EMPEZANDO

En este punto, todo contina como si ya tena la bolsa en su sistema. Vagrant importa una copia de la caja en
el directorio actual ( ansible-libro ) por lo que se puede utilizar la misma imagen en varios proyectos diferentes. A
continuacin, utiliza VirtualBox para crear una mquina virtual y arrancar. Debera ver una salida en la pantalla que
se parece a lo siguiente:

==> defecto: Importacin de base de la caja 'ubuntu / trusty64' ... ==> defecto: Coincidencia de
direccin MAC para NAT redes ... ==> defecto: Comprobacin de si la casilla 'ubuntu / trusty64' es
hasta la fecha ... ==> defecto: default_1447596010857_ ansible-Book_ 88957: Ajustar el nombre
de la mquina virtual

==> defecto: Eliminacin de los puertos remitidos previamente establecidos ... ==> defecto: Eliminacin de
las interfaces de red establecidos previamente ... ==> por defecto: Preparacin de las interfaces de red en
base a la configuracin ...
por defecto: Adaptador 1: nat ==> defecto:
Reenvo de puertos ...
por defecto: 22 => 2222 (Adaptador 1) ==>
defecto: Arranque VM ...
==> por defecto: A la espera de la mquina para arrancar. Esto puede tomar unos pocos minutos...
direccin de SSH:: default 127.0.0.1:2222 defecto: SSH nombre de usuario: vagabundo
por defecto: SSH mtodo de autenticacin: clave privada por defecto: tiempo de espera de
conexin: Advertencia. Volviendo a intentar ... por defecto:

por defecto: clave insegura Vagrant detectado. Vagrant reemplazar automticamente

por defecto: esto con un par de claves generado de nuevo para mayor seguridad. defecto:

por defecto: Insercin de clave pblica generada dentro de invitados ... por defecto: Quitando la llave
insegura desde el invitado si est presente ... por defecto: llave insertada! Desconectar y reconectar el uso de
la llave SSH ... ==> defecto: Mquina arrancado y listo! ==> defecto: Comprobacin de las entradas de host
==> defecto: Montaje carpetas compartidas ...

por defecto: / vagabundo => / Users / michael / ansible-libro

Su mquina virtual ya est creado y en funcionamiento. Esto se puede comprobar mediante la ejecucin

estado vagabundo:

$ vagantes de estado actuales estados


de la mquina por defecto:
ejecutar (virtualbox)

Tambin puede conectarse a la mquina virtual mediante la ejecucin del comando ssh vagabundo .
Esto conectarse a la mquina mediante una clave SSH conocido que se gener cuando fue creada la mquina virtual. Una
vez que haya entrado en el sistema, se puede comprobar que tiene la mquina correcta mediante la ejecucin cat / etc /
issue:

@ vagabundo vagabundo-ubuntu-confianza-64: ~ $ cat / etc / issue Ubuntu


14.04.3 LTS \ n \ l

8
CAPTULO 1 EMPEZANDO

Felicitaciones! Acaba de crear y empezar una mquina virtual con Vagrant. Ahora que usted ha hecho esto, usted
ser capaz de seguir a lo largo conmigo durante todo el resto del libro. Como no se necesita esta mquina virtual todava,
vamos a destruirla mediante la ejecucin vagabundo destruir;

$ Vagabundo destruir
por defecto: Est seguro que desea destruir el 'default' VM? [S / N] y ==> defecto: Forzar cierre de
VM ... ==> por defecto: La destruccin de VM y unidades asociadas ... ==> defecto: eliminacin de
sistemas principales

Una vez que se ejecuta vagabundo destruir , que la mquina est totalmente desaparecido. Cualquier cambio que haya realizado en

ella se han perdido, y la prxima vez que se ejecuta Vagrant hasta , copiar el cuadro de base de nuevo para que tenga una salida limpia.

Tenemos que hacer un cambio en la Vagrantfile que se ha generado, ya que por defecto se crea mquinas
virtuales con 489mb de memoria. Para el software que necesitamos para funcionar correctamente, la mquina necesita
1024mb de memoria.
Abra la Vagrantfile en su editor y aadir lo siguiente al final del archivo, justo antes de que la palabra final.

config.vm.provider "virtualbox" hacer | vb | vb.memory =


extremo "1024"

Esto le dice a vagabundo que se necesita para crear una mquina virtual con 1024mb de memoria. Tambin tenemos que
decir vagabundo que queremos ejecutar Ansible en esta mquina virtual mediante la adicin de algunas instrucciones a la
Vagrantfile, justo despus de la configuracin que acaba de aadir. En la parte inferior y antes de que la palabra final, aadir los
siguientes contenidos en el fichero:

config.vm.provision "ansible" hacer | ansible |


ansible.playbook = "/ playbook.yml aprovisionamiento" fin

Esto le dice a Vagrant utilizar Ansible para ejecutar el libro de jugadas llamado playbook.yml dentro de una carpeta con el nombre aprovisionamiento

en el directorio actual.

Si usted no tiene Ansible instalado en la mquina (por ejemplo, porque ests en Windows), es
necesario utilizar la siguiente configuracin:

config.vm.provision "ansible_local" hacer | ansible |


ansible.playbook = "/ playbook.yml aprovisionamiento" fin

La nica diferencia entre estas dos piezas de configuracin es que uno usos
ansible y los otros usos ansible_local . Utilizando ansible se ejecutar Ansible (que instalamos anteriormente) en el
equipo local, mientras que el uso de ansible_local se inicie sesin en la mquina virtual y ejecutarlo en su lugar. No es
necesario que preocuparse de instalarlo en la mquina virtual, como Vagrant se har cargo de la instalacin y
configuracin para usted.

9
CAPTULO 1 EMPEZANDO

Si intenta ejecutar Vagrant hasta Ahora, obtendr un error, porque no existe ese archivo:

$ Vagantes hasta
Con lo que la mquina 'por defecto' con el proveedor de 'virtualbox' ... Hay errores en la
configuracin de esta mquina. Por favor, corrija los siguientes errores e intntelo de nuevo:

provisioner ansible:
* `Playbook` para la provisioner Ansible no existe en el sistema host:
/Users/michael/ansible-book/provisioning/playbook.yml

Vamos a crear los archivos que necesitamos a fin de que Vagrant para crear una mquina sin conseguir un error. Para ello, cree
una carpeta llamada aprovisionamiento y un archivo nombrado en su interior playbook.yml . Una vez que estos se crean, usted debe ser
capaz de ejecutar prestacin vagabundo y tienen que tratar de crear una mquina virtual. Lamentablemente, esto se producir un error,
ya que su libro de jugadas no es un archivo YAML vlida:

ERROR! libros de jugadas deben ser una lista de obras de teatro


Ansible no pudo completar con xito. Cualquier salida de error debe ser visible por encima. Por
favor, corrija los errores y vuelva a intentarlo.

Esta es una buena seal, sin embargo. Esto significa que Vagrant est intentando ejecutar Ansible en su mquina virtual, y est

fallando a leer el libro de jugadas, ya que no contiene ninguna jugada para funcionar en contra de su mquina. Es muy probable que se

produzcan errores similares en el futuro, como Ansible es bastante exigente cuando se trata de cmo se formatean sus archivos de libro de

jugadas. Vamos a echar un vistazo a lo que significa este mensaje de error y cmo solucionarlo en la prxima seccin.

Una introduccin a los libros de jugadas


libros de jugadas Ansible son slo los archivos YAML que utilizan la terminologa especial para informar Ansible sobre lo que
debe hacer. Ansible espera trabajar su camino a travs de una lista de comandos y argumentos, as como los detalles de
configuracin que pueden ser necesarios. Las tareas se pueden ejecutar sincrnica o asincrnica, dependiendo de lo que se
requiere por el libro de jugadas. Todo esto se define utilizando una pieza muy pequea de sintaxis que es fcil de leer por los
seres humanos y computadoras. Se le present al formato muy pronto, y estoy seguro de que va a perder la cabeza por lo fcil
que es trabajar con!

Libros de jugadas se parecen ms a un modelo de un sistema que lo hacen un lenguaje de programacin o script. Con
unas pocas excepciones (que explicaremos ms adelante), se define el estado deseado en un sistema y dejar que Ansible
asegurar que sus mquinas estn actualmente en ese estado. Por ejemplo, puede escribir un libro de jugadas que asegura que
PHP est instalado en la mquina de destino. Si no est instalado, Ansible lo instalar para usted, utilizando el gestor de
paquetes que le diga a utilizar. Si existe, Ansible detectar que y no se ejecutar ningn comando. Vamos a escribir el libro de
estrategias que ahora.

10
CAPTULO 1 EMPEZANDO

Su primer libro de estrategias

Nota Libros de jugadas se escriben como archivos YAML. YAML significa YAML No es el lenguaje de marcado, y es de la

misma familia de los lenguajes de marcas como JSON y XML. Si eres nuevo en YAML, vase el Apndice B para una breve

introduccin a la lengua.

Como se mencion anteriormente, un libro de jugadas Ansible es simplemente un archivo YAML formato especial. No es un

lenguaje personalizado que usted tiene que aprender (como es el caso de la marioneta) o cdigo ejecutable (como con el Chef) -es

simplemente vieja YAML.

archivos YAML empezar por definir los metadatos adicionales que necesita ser conectado a un archivo (comnmente conocido como

front matter ). Como no tenemos metadatos para aadir, simplemente podemos indicar que no hay ninguno disponible para este archivo
mediante la adicin de tres guiones en su propia lnea. En nuestro libro de jugadas, esta ser la primera lnea.

Como libros de jugadas son slo los archivos YAML, tienen que seguir todos las mismas reglas que un archivo YAML estndar hace.

En su mayor parte, es probable que obtener disparado por el hecho de que los archivos YAML son sensibles espacios en blanco, lo que

significa que las pestaas y espacios en sus archivos realmente significan algo. Si alguna vez has escrito ningn cdigo Python, entonces esto

no debera ser nuevo para usted.

Una vez que haya cerrado su asunto principal, lo primero que tiene que hacer es decirle a Ansible en este libro de jugadas debe

ejecutar. Esto se hace mediante la especificacin de un grupo de hosts en el que ejecutar. Vamos a cubrir un uso ms avanzado de los grupos

de hosts ms adelante, pero por ahora se lo diremos Ansible para ejecutarse en todos los ordenadores disponibles mediante la adicin - anfitriones:

todos en nuestro archivo en una nueva lnea. Su libro de jugadas (situado en el aprovisionamiento / playbook.yml) ahora debera tener este
aspecto:

---
- anfitriones: todos

Ahora que Ansible sabe dnde correr, se puede decir que qu que desea que se ejecute. Esto se hace mediante la adicin
de una seccin denominada Tareas . Dentro Tareas , usted va a decir Ansible a solo ping a sus mquinas para asegurarse de que
puede conectarse a ellos:

---
- anfitriones: todas las
tareas:
- de ping:

Ahora puede ejecutar Ansible en la mquina mediante la ejecucin prestacin vagabundo . Debera ver una salida
que se parece a lo siguiente:

$ Prestacin vagabundo
==> defecto de fabricacin: provisioner: ansible ...

Jugar todo]
********************************************************************

11
CAPTULO 1 EMPEZANDO

HECHOS DE RECOLECCIN
***************************************************************
Aceptar: [por defecto]

TAREA: [ping]
*****************************************************************
Aceptar: [por defecto]

CRNICA JUEGO
********************************************************************
defecto : Ok = 2 cambiado = 0 inalcanzable = 0 failed = 0

Nota Si la salida no se ve como este, pero en su lugar muestra una foto de una vaca (s, una vaca). Es porque usted

tiene la cowsay utilidad instalado. Para desactivar esta utilidad, se puede editar

/etc/ansible/ansible.cfg y asegrese de que ha desactivado este comportamiento estableciendo

nocows = 1 .

El bloque que dice TAREA: [ping] le permite saber que su accin se ha ejecutado correctamente. Esto demuestra que Ansible
puede conectarse a su anfitrin y hablar con l. Si bien esta ejecucin libro de jugadas es bastante pequeo, es fcil de seguir lo que
est pasando. Como el libro de jugadas aumentos en la complejidad, se puede imaginar que las cosas se pondrn ms y ms
complicado, y por lo tanto ms difcil de seguir. Afortunadamente, Ansible le permite agregar un nombre a cada tarea de explicar su
propsito. Vamos a hacer eso en nuestro silbido medidas ahora:

---
- anfitriones: todas las
tareas:
- Nombre: Asegrese de que podemos conectar a la mquina de ping:

Esta vez, cuando Ansible se ejecute, ya no decir TAREA: [ping] . En su lugar, se mostrar el nombre que ya ha
proporcionado:

TAREA: [Asegrese de que podemos conectar a la mquina]


**************************
Aceptar: [por defecto]

Estupendo! Puede conectarse a sus mquinas. Ahora que? Se podra conectarse a ellos mediante la ejecucin ssh
vagabundo tambin, pero una vez que ests all se encontrar en una mquina de vaco y no hay mucho que ver. Vamos a
aadir algo ms instrucciones que le dicen a su mquina virtual para instalar algunos paquetes.

12
CAPTULO 1 EMPEZANDO

Juntos, vamos a instalar algn tipo de software de cdigo abierto que est desarrollado en PHP. Vamos a aadir
PHP aadiendo otra entrada a la playbook.yml archivo para que se vea como la siguiente:

---
- anfitriones: todas las
tareas:
- Nombre: Asegrese de que podemos conectar a la mquina de ping:

- Nombre: Instalar PHP


apt: name = estado php5-cli = presente update_cache = yes

Anteriormente, ha utilizado el silbido Mdulo para conectarse a su mquina. Esta vez, usted va a utilizar el apto mdulo.
El mdulo a utilizar se especifica antes de que el colon, mientras que los argumentos se especifican despus. los silbido mdulo
no tiene argumentos, mientras que el apto
mdulo tiene un montn de ellos. Puede encontrar una lista de todas las apto Los argumentos de los mdulos en la
documentacin (Ansible http://docs.ansible.com/ansible/apt_module.html ), pero slo vamos a utilizar dos de ellos: nombre
y estado .
Aqu, mediante el uso de la apto mdulo, indicamos que queremos que el paquete con el nombre
php5-cli Ser presente. Estado puede ser cualquier nmero de valores, incluyendo la ms reciente, presente y ausente.

Si tu corres prestacin vagabundo de nuevo, se debe tratar de instalar el paquete php5. Por desgracia, se
producir un error, dando un mensaje como el siguiente:

TAREA: [Instalar PHP]


***********************************************************
fallado: [por defecto] => { "fallido": true}
stderr: E: No se pudo abrir la cerradura archivo / var / lib / dpkg / lock - open (13: Permiso
denegado)
E: No se pudo bloquear el directorio de administracin (/ var / lib / dpkg /), que estn raz?

Se produce un error porque, por defecto, Ansible se inicie la sesin como el usuario vagabundo, que no tiene permiso
para instalar los paquetes. Aqu es donde el volverse opcin (que controla qu comandos de usuario se ejecutan como) viene
muy bien. volverse puede aadirse en dos lugares diferentes en su libro de jugadas. Se puede aadir junto a la tarea que
requiere ms permisos, o se puede aadir en un nivel por libro de jugadas, lo que significa que cada comando se ejecuta con
permisos de administrador.

Si desea agregar a esta accin especfica, debera aadir que de este modo:

- Nombre: Instalar PHP


apt: name = = estado presente update_cache php5-cli = s se convierten en: true

13
CAPTULO 1 EMPEZANDO

En lugar de ello, sin embargo, va a agregar a su libro de jugadas, a medida que se van a ejecutar varios comandos que
requieren sudo permisos. Despus de la adicin, su libro de jugadas se ver as:

---
- anfitriones: todos se
convierten en: tareas
verdaderas:
- Nombre: Asegrese de que podemos conectar a la mquina de ping:

- Nombre: Instalar PHP


apt: name = estado php5-cli = presente update_cache = yes

Una vez que haya guardado este cambio y ejecuta prestacin vagabundo de nuevo, Ansible debe decirle que PHP se
ha instalado correctamente:

TAREA: [Instalar PHP]


***********************************************************
cambiado: [por defecto]

Se pueden aadir ms pasos para instalar Nginx y MySQL mediante la adicin de ms llamadas al apto

Mdulo diciendo que espera nginx y mysql-server-5.6 Ser presente.

---
- anfitriones: todos se
convierten en: tareas
verdaderas:
- Nombre: Asegrese de que podemos conectar a la mquina de ping:

- Nombre: Instalar PHP


apt: name = estado php5-cli = presente update_cache = yes
- Nombre: instalar Nginx aptos: name = = nginx
estado presente
- Nombre: instalar MySQL
apt: name = mysql-server-5.6 = estado presente

Al igual que con la php5-cli paquete, esto debera aparecer en la salida Ansible cuando se ejecuta prestacin
vagabundo de nuevo:

TAREA: [Instalar nginx]


*********************************************************
cambiado: [por defecto]

TAREA: [instalar MySQL]


*********************************************************
cambiado: [por defecto]

14
CAPTULO 1 EMPEZANDO

En este punto, se puede acceder a su mquina virtual para asegurarse de que todo est instalado como se puede
esperar que sea. Para ello, se corre ssh vagabundo para iniciar sesin en el sistema. A continuacin, puede ejecutar algunos
comandos para comprobar si se instalan ciertos programas:

@ vagabundo vagabundo-ubuntu-confianza-64: ~ $ cuales php / usr / bin /


php
@ vagabundo vagabundo-ubuntu-confianza-64: ~ $, que nginx / usr / sbin /
nginx
@ vagabundo vagabundo-ubuntu-confianza-64: ~ $, que mysqld / usr / sbin /
mysqld

Ahora, no importa cuntas veces se destruye y vuelve a crear su mquina virtual, estos paquetes se instalarn
automticamente durante la fase de creacin de la mquina. Si lo desea, puede darle una oportunidad ahora mediante la
ejecucin vagabundo destruir seguido por Vagrant hasta .
Felicitaciones! Usted acaba de poner juntos su primer libro de jugadas. Se instala todos los paquetes que necesita, y es
idempotente (ms sobre esto en la siguiente seccin). Todo lo que queda por hacer es para limpiarlo un poco mediante la
eliminacin de algunas tareas que no son necesarios y eliminando la duplicacin.

El primero que hay que hacer es eliminar la silbido tarea. Como ya saben que se puede conectar a la mquina, no
es necesario para realizar la misma accin cada vez que se conecta a una mquina. Despus de eso, se puede combinar
todas las llamadas a la apto mdulo en uno utilizando un constructo llamado with_items .

Una breve explicacin de cmo funciona esto es que proporcione una lista de elementos que contiene una clave denominada with_items

. Ansible A continuacin, llame a su tarea una vez para cada elemento de la lista. El valor de cada elemento est disponible a travs de la
especial {{ t}} notacin. Una vez que haya realizado estos cambios, su libro de jugadas debe tener este aspecto:

---
- anfitriones: todos se
convierten en: tareas
verdaderas:
- Nombre: Instalar los paquetes requeridos
apt: nombre = {{elemento}} = estado presente update_cache = s with_items:

- php5-cli
- nginx
- mysql-server-5.6

Si tu corres prestacin vagabundo nuevo, debera colapsar toda la salida para que una tarea en un solo bloque,
dejndole con una cantidad mucho menor de la produccin.

$ Prestacin vagabundo
==> defecto de fabricacin: provisioner: ansible ...

Jugar todo]
********************************************************************

15
CAPTULO 1 EMPEZANDO

HECHOS DE RECOLECCIN
***************************************************************
Aceptar: [por defecto]

TAREA: [Instalar los paquetes necesarios]


*********************************************
Aceptar: [por defecto] => (item = php5-cli, Nginx, mysql-server-5.6)

CRNICA JUEGO
********************************************************************
defecto : Ok = 2 cambiado = 0 inalcanzable = 0 failed = 0

En este punto, usted tiene una mquina que tiene todas las dependencias que necesita tener instalado en l, y puede ejecutar el
libro de jugadas varias veces sin tener que preocuparse sobre los efectos secundarios.

Libros de jugadas y idempotencia


idempotente es una palabra elegante que significa que se puede hacer algo varias veces y el resultado ser el mismo. En trminos
Ansible, un libro de jugadas se considera idempotente si se puede ejecutar varias veces y despus de la primera carrera de la
mquina se encuentra en un estado determinado, que no cambia si ejecuta el mismo libro de jugadas de nuevo en cualquier
momento despus de eso.
Tome el libro de jugadas que acaba de escribir, por ejemplo. La primera vez que se ejecut, es evaluado su libro de
jugadas y aplica las transformaciones necesarias para garantizar que PHP, nginx, y se han instalado MySQL. Se puede ver
que en la salida Ansible que dice que las cosas han cambiado:

Jugar todo]
********************************************************************

HECHOS DE RECOLECCIN
***************************************************************
Aceptar: [por defecto]

TAREA: [Instalar los paquetes necesarios]


*********************************************
cambiado: [por defecto] => (item = php5-cli, Nginx, mysql-server-5.6)

CRNICA JUEGO
********************************************************************
defecto : Ok = 2 cambiado = 1 inalcanzable = 0 failed = 0

diecisis
CAPTULO 1 EMPEZANDO

Si ejecuta este libro de jugadas de nuevo, en lugar de decir cambiado , dice De acuerdo . Esto se debe a la apto mdulo
comprueba para ver si un paquete est instalado antes de intentar instalarlo. A medida que los paquetes han sido instalados, no va a
hacer ningn cambio. Este libro de jugadas es idempotente:

Jugar todo]
********************************************************************

HECHOS DE RECOLECCIN
***************************************************************
Aceptar: [por defecto]

TAREA: [Instalar los paquetes necesarios]


*********************************************
Aceptar: [por defecto] => (item = php5-cli, Nginx, mysql-server-5.6)

CRNICA JUEGO
********************************************************************
defecto : Ok = 2 cambiado = 0 inalcanzable = 0 failed = 0

La mayora de los mdulos de Ansible son idempotente, pero si usted recurre a correr con el mismo comandos mando o cscara
mdulos, que se ejecutar cada vez que se ejecuta el libro de jugadas. Puede aadir condiciones a las tareas que decirles
cundo disparar, por lo que sus comandos personalizados idempotent tambin, pero vamos a cubrir que ms adelante en el
captulo 6 .

Resumen
Felicitaciones! Que acaba de instalar Ansible y escribi su primer libro de jugadas. Eso no era demasiado doloroso, verdad? Ansible
es una herramienta de gestin de la configuracin muy ligero que utiliza archivos YAML para definir el estado de un sistema.

Libros de jugadas constan de tareas, que son entradas que designan una sola accin. Estas tareas se pueden agrupar en
roles, que puede a su vez ser agrupados en juegos. El objetivo de un juego es tomar un conjunto de roles y aplicarlos a un
conjunto especfico de las mquinas. Estas funciones se ejecutarn mltiples tareas, asegurando que el estado de cada mquina
es cmo espera que sea. Vamos a estar cubriendo los roles en el captulo 4 .

La documentacin Ansible de libros de jugadas es excelente, y siempre debe ser su primer punto de referencia para
la sintaxis libro de jugadas ( http://docs.ansible.com/ansible/index.html ).
Si desea saltar directamente y ver algunos libros de jugadas de ejemplo, hay un montn de ellos disponibles en el ansibles-ejemplos
repositorio en Github ( https://github.com/ansible/ ansibles-ejemplos ). No se preocupe si usted no entiende todo, por lo que
estaremos construyendo un guin ms complejo juntos, pieza por pieza, en el captulo 3 .

Usted ha utilizado vagabundo y VirtualBox para crear un entorno de prueba, y aprovisionado usando prestacin vagabundo , pero
mediante el uso de la ansible-libro de jugadas comando (cubierto en el siguiente captulo), puede ejecutar su libro de jugadas en contra
de cualquier mquina que tenga un servidor SSH corriendo. En el siguiente captulo, vamos a echar un vistazo ms profundo a la inventario
, un archivo que dice Ansible donde correr, que el usuario inicie una sesin como, y ms.

17
CAPITULO 2

El archivo de inventario

en el captulo 1 , Armar un libro de jugadas simple y ejecut contra su mquina utilizando el vagabundo prestacin vagabundo mando.
Puede ejecutar el mismo libro de jugadas en contra de cualquier mquina que tambin tiene un servidor SSH en ejecucin mediante el
ansible-libro de jugadas mando. En primer lugar, sin embargo, necesita un archivo de inventario.

En este captulo, vamos a echar un vistazo a lo que es un archivo de inventario, cmo ejecutar ansibleplaybook sin
vagabundo, y cmo aprovechar el archivo de inventario cuando se tiene un inventario conjunto de mquinas con las que
usted necesita para interactuar.

Qu es un inventario?
En gestin de la configuracin, la herramienta que est utilizando tiene que saber que las mquinas se debe ejecutarse. Esto
se conoce como una inventario . Sin un inventario, que tendra un conjunto de libros de jugadas que definen su estado deseado
del sistema, pero no vas a saber que las mquinas que necesitaba para ejecutarlos en contra.

Con la marioneta y el chef, esta informacin se almacena en un servidor central. Como no hay un servidor central en Ansible,
necesitaremos otra forma de getAll de esta informacin para el cdigo que se ejecuta para hacer cumplir el estado deseado. Aqu
es donde el archivo de inventario entra en accin.
Por defecto, Ansible leer / etc / ansibles / hosts como su archivo de inventario predeterminado. El uso de este archivo no se
recomienda, sin embargo. Usted debe mantener un archivo de inventario diferente para cada proyecto que usted tiene y pasarlo al
tanto de la ansible y ansible-libro de jugadas
Comandos mediante el -yo opcin. Aqu est un ejemplo de pasar un archivo de inventario personalizado a
ansible antes de ejecutar el silbido mdulo:

ansible todo -i / ruta / a / -m de ping inventario

El archivo de inventario en Ansible puede ser un archivo INI o un archivo JSON. La mayora de los ejemplos que encontrar utilizar

un archivo INI, mientras que los archivos JSON se utilizan slo cuando se genera dinmicamente el inventario (cubiertos en breve). Usando el

formato INI significa que los archivos de inventario son generalmente muy simple. Pueden ser tan simple como una lista de nombres de host

para ejecutar en contra.

El siguiente es un ejemplo de un archivo de inventario simple:

host1.example.com
host2.example.com
host3.example.com
192.168.9.29

2016 Michael Heap 19


M. Heap, ansible, DOI 10.1007 / 978-1-4842-1659-0_2
CAPITULO 2 El archivo de inventario

En este ejemplo, se define una lista de hosts para ejecutar en contra. Ansible se ejecutar contra cada uno de ellos, a su
vez, a partir de host1.example.com y terminando con 192.168.9.29 . Este es el tipo ms simple de archivo de inventario que se
puede tener. No hay informacin adicional para cualquiera de los anfitriones; es simplemente una lista de hosts para ejecutar
Ansible contra.
Si ejecuta sshd en un puerto no estndar, puede especificar esto en su archivo de inventario tambin. Para ello, agregue dos
puntos seguidos por el nmero de puerto al final de su nombre de host, de la siguiente manera:

host1.example.com:50822

Si est trabajando con un gran nmero de servidores que comparten un esquema de nombres comunes, Ansible puede ser capaz de

ayudar. Ansible soporta rangos en el archivo de inventario, por lo que en lugar de enumerar a cabo cada host con la mano, puede utilizar su

funcionalidad ampliacin de la gama de hacerlo de forma automtica, como se muestra aqu:

host [1: 3] .example.com

Este es funcionalmente equivalente a la siguiente:

host1.example.com
host2.example.com
host3.example.com

el rango de expansin tambin es compatible con ceros iniciales ([ 01:03] ) y rangos alfabticos ([ Arizona] ). Por desgracia,
slo el rango Arizona esta apoyado; es decir, no se puede especificar un rango tal como [ aa: dz] , como Ansible no sabe cmo
hacer frente a esto. Si es necesario definir una gama de este tipo, es necesario utilizar dos gamas:

acoger [a: d] [a: z] .example.com

Si est familiarizado con la sintaxis de la rebanada de Python, esto puede parecer familiar para usted. Al igual que con la

rebanada, puede especificar un tercer parmetro opcional paso:

host [min: max: paso] .example.com

Paso le permite especificar el incremento entre cada host. No hay muchos casos de uso para esto, pero el
archivo de inventario lo admite, sin embargo:

host [1: 6: 2] .example.com

es equivalente a:

host1.example.com
host3.example.com
host5.example.com

20
CAPITULO 2 El archivo de inventario

Para algunos casos de uso, una simple lista de nombres de host para conectarse a no ser suficiente. Las mquinas a las que se va a

conectar puede tener diferentes usuarios habilitados y no pueden utilizar su clave SSH por defecto. Afortunadamente, Ansible tiene una

manera para que usted pueda decirle qu opciones de configuracin para pasar a SSH cuando se est tratando de establecer una conexin.

Vamos a escribir un archivo de inventario ahora que se conecta a la mquina en marcha Vagrant explcitamente. Para ello, tendr que

proporcionar una direccin IP, un nombre de usuario personalizada para utilizar, y algunos detalles de autenticacin.

Sin correr Vagrant


Hasta ahora, usted ha utilizado prestacin vagabundo Ansible para funcionar. prestacin vagabundo es slo un envoltorio que se ejecuta
el comando correcto en funcin de la provisioner que est utilizando. En nuestro caso, se est ejecutando el ansible-libro de jugadas comando
para aplicar nuestro libro de jugadas a la instancia Vagrant corriendo. Si estaba utilizando la marioneta o cocinero, sera ejecutar los
comandos correctos de esas herramientas en su lugar.

No se puede confiar en Vagrant para funcionar Ansible para usted todo el tiempo. Usted podra estar trabajando en un
ambiente en el que est presentado con una mquina que tiene SSH corriendo y nada ms. Tienes que ser capaz de ejecutar
Ansible contra estas mquinas sin la ayuda de vagabundo.

Para probar corriendo Ansible a mano, tendr que editar su vagrantfile y habilitar la red privada para que
pueda SSH en la mquina. Esto se realiza mediante la apertura de la
vagrantfile en el editor y la lnea descomentando 29 ( config.vm.network "red private_" ). Guarde este archivo, a continuacin,
ejecutar detuvo vagabundo vagabundo hasta && para reiniciar su mquina y permitir a esta red. Esto asegura que la
mquina creada tendr una direccin IP que se puede utilizar para conectarse. Una vez que tenga una direccin IP, se
puede pretender que no es un equipo gestionado-vagabundo, sino ms bien otro ordenador accesible a travs de la red
contra el que es necesario ejecutar Ansible. Esto podra ser una mquina que vive debajo de su escritorio, o una mquina
que vive en algn lugar de la nube. Para Ansible, es slo una mquina que se puede acceder.

ansible-libro de jugadas soporta una gran cantidad de diferentes parmetros, pero slo se necesita especificar algunos para ejecutar
Ansible. Es necesario que contar ansible-libro de jugadas los servidores que desee ejecutar en el medio del archivo de inventario y que libro de

jugadas para ejecutar:

ansible-libro de jugadas -i <inventory_file> aprovisionamiento / playbook.yml

He aqu un archivo de inventario muestra que puede utilizar para probar corriendo Ansible a mano. Contiene la direccin IP de la
mquina para conectarse a, que el usuario inicie una sesin como, y la ruta a un archivo de clave privada para su uso. La clave privada
es como una contrasea, pero contiene una firma criptogrfica privada que se utiliza para verificar su identidad:

192.168.33.10 ansible_user = ansible_ssh_private_key_file vagabundo = .vagrant / mquinas / default /


VirtualBox / private_key

Guardar como inventario ( todo esto debe estar en una sola lnea), y ejecute el siguiente comando. Debera
ver la misma salida que vio despus de correr prestacin vagabundo:

ansible-libro de jugadas -i inventario de aprovisionamiento / libro de jugadas. yml

21
CAPITULO 2 El archivo de inventario

Opciones de configuracin en el Inventario


Cuando se estaba ejecutando Ansible contra su instancia vagabundo, haba que establecer usuario ansible_ y ansible_ssh_private_key_file
por lo que se utilizaron las credenciales correctas.
El primer conjunto de opciones que aparece en la tabla 2-1 estn relacionados con la conexin SSH que Ansible utiliza para empujar

los comandos a servidores remotos. Para la mayora de los servidores, slo se tendr que establecer ansible_user y ansible_ssh_private_key_file

Tabla 2-1. Opciones de configuracin de inventario comn

Opcin de configuracin Explicacin

ansible_host Esto le permite utilizar un nombre diferente para un host en el archivo de


inventario y en sus libros de jugadas que su nombre de host real. Esto
puede ser til cuando se quiere nombrar una mquina, pero su direccin
IP puede cambiar. Por ejemplo, en el archivo de inventario:

alfa ansible_host = 192.168.33.10

Podr referirse a la mquina alfa


en todas partes, pero Ansible se conectar a la direccin IP
192.168.33.10 cuando se trata de llegar a l.

ansible_user El usuario iniciar la sesin como a la mquina remota a travs de SSH.

ansible_user = Michael

sera lo mismo que:

ssh michael@host1.example.com

ansible_port El puerto en el que el servidor SSH est escuchando. Este es un alias


para nombre de host: puerto .

ansible_port = 50,822

sera lo mismo que:

ssh -p 50822 host1.example.com


ansible_ssh_private_key_file El archivo de claves SSH utiliza para iniciar sesin.

ansible_ssh_private_key_file = / ruta / a / id_rsa

sera el mismo que

ssh -i / ruta / a / id_rsa


ansible_ssh_pass Si el usuario se conecta a una mquina que requiere una
contrasea, puede especificar en el archivo de inventario con
ansible_ssh_pass .
Nota : Esto es muy inseguro, y se debe utilizar la autenticacin de clave SSH o
utilizar el - -Pase preguntar bandera en la lnea de comandos para proporcionar
la contrasea en tiempo de ejecucin.

( continuado)

22
CAPITULO 2 El archivo de inventario

Tabla 2-1. ( continuado)

Opcin de configuracin Explicacin

ansible_ssh_common_args Ningn argumento adicional para proporcionar a cualquier llamada a SSH,


SFTP comandos, o SCP.

ansible_ssh_common_args = '- O
ForwardAgent = yes'

sera lo mismo que:

ssh -o ForwardAgent = yes host1.example.com

ansible_ssh_extra_args Este es el mismo que ansible_ssh_common_args ,


pero los argumentos son especificados slo se utiliza cuando se ejecuta un
comando Ansible SSH

ansible_sftp_extra_args Este es el mismo que ansible_ssh_common_args ,


pero los argumentos son especificados slo se utiliza cuando se ejecuta un
comando Ansible SFTP

ansible_scp_extra_args Este es el mismo que ansible_ssh_common_args ,


pero los argumentos son especificados slo se utiliza cuando se ejecuta un
comando Ansible SCP

Aqu est un ejemplo de archivo de inventario que utiliza algunas de estas opciones:

alpha.example.com ansible_user = bob ansible_port = 50022 bravo.example.com ansible_user =


ansible_ssh_private_key_file mary = / ruta / a / mary.key

frontend.example.com ansible_port = 50022 yellow.example.com


ansible_host = 192.168.33.10

Esto establece un puerto alternativo para alfa y Interfaz y diferentes nombres de usuario con los que Entra en el alfa y
Bravo , especifica el archivo de la clave de Bravo , y dice que amarillo. example.com en realidad es slo la direccin IP 192.168.33.10.
Eso es una gran cantidad de informacin adicional para un archivo tan pequeo inventario! No se detiene all, sin embargo.
Hay ms opciones disponibles para usted.

23
CAPITULO 2 El archivo de inventario

Mesa 2-2 Listas de opciones del privilegio de escalamiento. Vamos a cubrir una escalada de privilegios un poco ms adelante,

cuando tendr que escribir algunos archivos a una ubicacin en la que slo el usuario administrador tiene acceso (vase el captulo 3 ),

Pero estos son los ajustes pertinentes que se pueden utilizar en el archivo de inventario.

Tabla 2-2. Opciones de inventario relacionados con la escalada de privilegios

Opcin de configuracin Explicacin

ansible_become_method El mtodo a utilizar para obtener privilegios de superusuario. Por

defecto es sudo , pero puede ser cualquiera de los siguientes: sudo

, Do , pbrun , pfexec , o Haz como . Herramientas tales como pbrun son


herramientas de seguridad comerciales, que no se aplicar la

mayor parte del tiempo. sudo es la mejor opcin para la mayora

de la gente.

ansible_become_user Por defecto, volverse le eleve al nivel de la raz. Si tiene


otro usuario que tiene los permisos correctos para
completar las tareas que se est ejecutando y desea
utilizar que en lugar, puede utilizar ansible_
become_user . Esto es equivalente a los comandos que se
ejecutan con el sudo -u miUsuario

mando.

Estas opciones privilegio de escalamiento se pueden establecer en el archivo de inventario, pero que en realidad no se pueden

usar a menos que establezca hecho realidad en sus libros de jugadas.

Dado el siguiente archivo de inventario, alfa y Bravo ser tanto utilizar el automatizacin
usuario cuando hecho realidad se encuentra en un libro de jugadas. Interfaz utilizar el usuario ansible , y
amarillo utilizar raz , que es el valor por defecto:

alpha.example.com ansible_become_user = automatizacin


bravo.example.com ansible_become_user = automatizacin
frontend.example.com ansible_become_user = ansible yellow.example.
com

Es importante sealar que este no es el usuario que se utiliza para conectarse a la mquina. (Usamos ansible_user para
eso.) Es el usuario que va a cambiar cuando se utilice hecho realidad . Es necesario asegurarse de que cualquier usuario
que cambiar a tiene los permisos para realizar la tarea que se les est diciendo que hacer.

Inventario de Registro Variable


Adems de establecer las variables Ansible especiales en el inventario, tales como ansible_user
y ansible_become_user , puede establecer cualquier variable que es posible que desee utilizar ms tarde en un libro de jugadas o

plantilla. Sin embargo, la adicin de variables para el archivo de inventario general no es

24
CAPITULO 2 El archivo de inventario

la solucin correcta. Hay varios otros lugares donde se puede definir variables en un libro de jugadas, la mayora de las cuales
son una mejor opcin para esta informacin. Si encuentra que est agregando variables para un archivo de inventario, piense si
realmente esta informacin debe estar en el inventario. Es un valor por defecto? Es algo relacionado con una clase especfica de
servidores o de una aplicacin especfica? Lo ms probable es que no hay un mejor lugar para que viva. Va a aprender ms
acerca de las diferentes opciones para la colocacin variable en el captulo 5 . Si decide que el archivo de inventario es el lugar
correcto para aadir la variable, es muy fcil de hacer. Por ejemplo, si desea que una variable llamada vHost para ser accesible
en sus libros de jugadas, se podra definir una serie de la siguiente manera:

host1.example.com vhost = staging.example.com

Esto puede ser til en determinadas situaciones, como cuando se ejecuta sus sitios web de ensayo y produccin de la misma
mquina y la necesidad de diferenciar los cuales uno est trabajando con va el archivo de inventario. Imagine que realizar cambios de
base de datos como parte de su libro de jugadas, pero no quiere impactar el despliegue en vivo cuando se prueba en la puesta en
escena. Se pueden utilizar los siguientes archivos de inventario para especificar explcitamente qu base de datos que desea trabajar
con:

$ Cat-puesta en escena de inventario


alpha.example.com database_name = staging_db

$ Cat produccin-inventario alpha.example.com


nombre_basedatos = prod

En este caso, la variable nombre de la base de datos estar disponible en su libro de jugadas para que pueda realizar cualquier
accin que necesita en la base de datos correcta. Todo lo que necesita hacer es proporcionar el archivo de inventario correcta cuando
se ejecuta Ansible. Por ejemplo:

ansible-libro de jugadas -i libro de estrategias de produccin-inventario. yml

Grupos de inventario
Hasta ahora, hemos trabajado con una simple lista de los ejrcitos contra los que vamos a ejecutar Ansible. Esto no coincidir con
el mundo real, sin embargo, donde tenemos servidores web, bases de datos, balanceadores de carga, y ms como objetivos.
Ser capaz de agrupar estos servidores y les destino como una sola entidad es importante. Ansible apoya este caso de uso
mediante el uso de
grupos de inventario .
A medida que sus archivos de inventario estn en el formato de archivo INI, puede utilizar la sintaxis sectionHeading INI normales

para definir un grupo de servidores, de la siguiente manera:

[web]
host1.example.com
host2.example.com

[Base de datos]
db.example.com

25
CAPITULO 2 El archivo de inventario

En este archivo de inventario, tenemos dos anfitriones designados como servidores web y uno como servidor de base de datos.

Los corchetes se utilizan como marcadores de seccin en el formato INI, por lo que el nombre del grupo se establece en todo lo que

aparece en los corchetes.

Cuando corremos Ansible, especificamos en el que los grupos de host debe ejecutar nuestro comando. Hasta ahora, hemos utilizado el

grupo especial todas decir correr en todos los hosts en la lista. Podramos decir web o

base de datos para instruir Ansible para funcionar solamente en ese grupo de servidores. El siguiente comando se ejecutar la silbido mdulo
de slo el grupo de Internet:

ansible web -i / ruta / a / -m inventario de ping

Tambin puede configurar esto en un libro de jugadas cambiando el Hospedadores: valor en la parte superior de su archivo YAML, de

la siguiente manera:

- hosts: tareas
web:
- de ping:

Del mismo modo que se puede establecer variables para huspedes especficos, se puede establecer variables para grupos de

anfitriones tambin. Para ello, utilice una cabecera especial en su archivo de inventario:

[Web: vars] apache_version


= 2,4 engage_flibbit = true

Estas variables estarn disponibles en el plazo Ansible para cualquier mquina en la web grupo. Incluso puede
crear grupos de grupos! Imagine que tiene un conjunto de servidores de produccin que son una mezcla de CentOS
5 y CentOS 6 mquinas. Tal vez su archivo de inventario se vera como la siguiente:

[Web_centos5]
host1.example.com
host2.example.com

[Web_centos6]
shinynewthing.example.com

[Database_centos5]
database.example.com

[Reporting_centos6]
reporting.example.com

Si desea ejecutar algo en tan slo los servidores CentOS 5, tendra por lo general tiene que especificar tanto web_centos5
y database_centos5 . En su lugar, puede crear un grupo de grupos utilizando el: nios sufijo en el nombre del grupo:

26
CAPITULO 2 El archivo de inventario

[CentOS5: los nios]


web_centos5
database_centos5

[Centos6: los nios]


web_centos6
reporting_centos6

Ahora, slo hay que apuntar CentOS5 anfitriones Si slo desea ejecutar un comando en los servidores CentOS 5. Por otra parte,
se puede establecer variables para este nuevo grupo tambin. Es slo un grupo, despus de todo:

[CentOS5: vars]
apache_version = 2,2

[Centos6: vars]
apache_version = 2,4

Los grupos son muy poderosos y ser muy til ms adelante una vez que comencemos definiendo las variables fuera de

nuestro archivo de inventario.

Un ejemplo de inventario
Es hora de recapitular algunas de las cosas que has aprendido hasta ahora en este captulo. He aqu un archivo de inventario para un
despliegue de ficcin que contiene un servidor web, una base de datos, y un equilibrador de carga. El ambiente fue creado durante un
perodo de tiempo, lo que significa que hay varios sistemas operativos derivados de los diferentes usuarios y mtodos de acceso a las
mquinas:

[Web_centos5]
fe1.example.com ansible_user = michael ansible_ssh_private_key_file = michael. llave

fe2.example.com ansible_user = michael ansible_ssh_private_key_file = michael. llave

[Web_centos6]
web [1: 3] .example.com ansible_user = automatizacin ansible_port = 50022 ansible_ssh_ private_key_file = /
ruta / a / auto.key

[Database_centos6]
db.example.com ansible_user = michael ansible_ssh_private_key_file = / ruta / a / db.key

[Loadbalancer_centos6]
lb.example.com ansible_user = automatizacin ansible_port = 50022 ansible_ssh_ private_key_file =
/ ruta / a / lb.key

27
CAPITULO 2 El archivo de inventario

[Web: los nios]


web_centos5
web_centos6

[base de datos]: nios


database_centos6

[LoadBalancer: nios]
loadbalancer_centos6

Las mquinas ms antiguas se estn ejecutando CentOS 5, y usan mi cuenta personal como el nombre de usuario Ansible. mquinas

ms nuevas han dedicado a los usuarios de automatizacin con sus propias claves privadas. La mquina de base de datos utiliza mi cuenta

personal, pero tiene una clave SSH diferente. Por ltimo, el equilibrador de carga utiliza un usuario de la automatizacin, pero no utiliza la

automatizacin llave que tiene su propia llave equilibrador de carga especial.

Por ltimo, se agrupan todos juntos. Quieres ser capaz de dirigirse a los servidores web o servidores de bases de datos
como un grupo, no importa si son CentOS 5 o CentOS 6. Aunque el grupo de base de datos slo tiene un grupo de nios en todo
por ahora, es posible aadir CentOS 7 servidores en el futuro. Tener un grupo listo para usar le ahorrar un montn de tiempo.

Slo mirando a este archivo de inventario, se puede ver que hay siete mquinas en este despliegue ( fe1 , Fe2 , web1 ,
web2 , web3 , db , y lb ). Usted sabe qu usuario Ansible se inicie la sesin como y qu tecla se usar para hacerlo. Incluso
se sabe a qu puerto del servidor SSH est ejecutando.

Un archivo de inventario bien escrito no es slo algo para Ansible de usar; es documentacin acerca de la implementacin de los
nuevos empleados, contratistas, e incluso para s mismo cuando se necesita hacer referencia de nuevo a l.

Los inventarios dinmicos


Cuando tiene uno o dos servidores para la gestin, el mantenimiento de un archivo de inventario a mano no es demasiado esfuerzo.
Lo que sucede cuando se tiene que administrar 100 servidores? Qu pasa
1000? Mientras se mantiene una lista a mano es todava posible con un enorme (20.000 +) nmero de servidores, en ese punto puede

llegar a ser muy propenso a errores. Una vez que se llega a este nmero de servidores, que est tpicamente menos probable que

dependa de un archivo de texto esttico para el seguimiento de su inventario; en cambio, es probable que optar por algo que tiene un poco

ms de estructura, tal como una hoja de clculo o una base de datos. No sera grande utilizar estas herramientas como la fuente de los

datos de inventario?

Ansible apoya el concepto de una inventario dinmico , que es un archivo JSON que contiene todos los datos necesarios
acerca de sus mquinas. JSON no es tan humana de usar como el formato de archivo INI. Est diseado principalmente para ser
ledos por mquinas. Ansible en s tiene algunas opiniones cuando se trata de esto tambin, y realiza algunas comprobaciones al
acceder al archivo de inventario que usted proporcione. Cuando se llama a Ansible, comprobar para determinar si el archivo
pasado como el archivo de inventario es ejecutable. Si es as, el archivo se ejecuta, y Ansible cambiar a usar su analizador JSON
para leer los datos de entrada. Si no es ejecutable, que ser ledo por Ansible con la suposicin de que est en el formato de
archivo INI, y no ser capaz de ser analizado si se trata de un archivo JSON esttica.

28
CAPITULO 2 El archivo de inventario

El uso de un ejecutable le permite leer los datos de inventario acerca de sus mquinas desde cualquier lugar se puede leer los
datos. Esto podra proceder de cualquier parte: una API remota, una base de datos local, un conjunto de archivos que analizar y cotejar
cualquier cosa que usted necesita con el fin de rellenar una lista de servidores para ejecutar en contra.

Ansible espera un formato JSON especfica a ser devuelto por cualquier ejecutable que se utiliza para proporcionar un
inventario de mquinas. Se parece a la siguiente:

{ "My_script": [ "dev2", "dev"], "_meta": { "hostvars": { "dev2": { "ansible_ host": "dev2.example.com",


"ansible_user": "ansible" }, "dev": { "ansible_ husped": "dev.example.com", "ansible_port": "50022",
"ansible_user": "automatizacin"}}}}

La primera clave es el nombre de su script, y el valor es el nombre del host que se utilizar en el archivo de inventario.
Luego, para cada nombre hay un poco de metadatos que contiene el host SSH para utilizar, que el usuario inicie una sesin como
y qu puerto SSH para utilizar.
Imagine que tiene una base de datos con todas sus mquinas, y desea utilizar esa base de datos que el archivo
de inventario. El ejecutable puede tener un aspecto como el siguiente pseudo-cdigo:

Mquinas = fetch_rows ( "SELECT nombre de host, el usuario, clave, puerto desde active_ mquinas")

nombres de host = machines.map (m) => metadatos retorno m.hostname = {

'Hostvars' => {}}

foreach (mquinas como m) {


metadata.hostvars [m.hostname] = {
ansible_user => m.user, ansible_port => m.port,
ansible_ssh_private_key_file => M.Key}}

output_json ({
'My_script' => nombres de host,
'_meta' => metadatos})

fetch_rows lee la informacin de la base de datos, entonces el resto de la secuencia de comandos da formato a la
informacin en la estructura que Ansible est esperando. Aunque este ejemplo se lee desde una nica ubicacin, se poda
leer desde mltiples ubicaciones y combinar los datos en su ejecutable si es necesario.

Hay un montn de soluciones de inventario dinmicas pre-construidos disponibles para Ansible. El sitio de
documentacin en s tiene una gran pgina de la lista de las opciones disponibles ( http: // docs.
ansible.com/ansible/intro_dynamic_inventory.html ). Si los hosts estn en la nube de AWS de Amazon, es posible optar por usar
un inventario dinmico debido al escalado dinmico de la nube

29
CAPITULO 2 El archivo de inventario

capacidades. Aunque un inventario dinmico no necesariamente tiene que ser dinmico (por ejemplo, si se mantiene
una base de datos usted mismo), es muy til cuando se est usando algo como Amazon EC2 para crear mquinas en
la demanda. Todo lo que necesita hacer es crear la mquina y asegrese de que tiene las etiquetas correctas, y la
prxima vez que ejecute Ansible, que se suministrarn al igual que todo lo dems.

Si no se utiliza AWS pero usted utiliza OpenStack, utilice el script inventario dinmico de OpenStack en su lugar!
Hay ms de treinta guiones dinmicos de inventario disponibles en Github en https://github.com/ansible/ansible/tree/devel/contrib/inventory
. Encontrar uno que funcione para usted y utilizarlo. Si no hay uno que funcione para usted, escribir el suyo propio. Que
ya tiene toda la informacin que necesita, y Ansible le permite volver a utilizarlo en lugar de duplicar la informacin en un
archivo de inventario esttico.

mltiples inventarios
Por ltimo, qu sucede si usted tiene una combinacin de hardware fsico y servidores de la nube en su infraestructura? No se puede
fuente de API basados en la nube de forma exclusiva, ya que no saben acerca de sus mquinas fsicas, y posiblemente no puede
realizar un seguimiento de todos los servidores de la nube con la mano. Por suerte, Ansible tiene una solucin para eso tambin.

Si la ruta de inventario se pasa a Ansible es un directorio, Ansible leer todos los archivos de ese directorio como un
inventario y unirlos. Esto le permite tener tanto un archivo de inventario esttico que usted maneja con la mano, as como algo
parecido ec2.py que genera un inventario de Amazon EC2 de forma dinmica. Si el inventario es grande, incluso se podra tener
varios archivos INI desglosados por centro de datos o por el papel (o cualquier divisin arbitraria que se pueda imaginar), as
como unos ejecutables que se ejecutan a hablar con varios proveedores de la nube. En el momento en que los datos son
recopilados por Ansible, que lo tratar como un gran inventario.

Resumen
Hay muchos beneficios que se derivan del archivo de inventario Ansible. No slo se puede personalizar la forma en que se
conecte a las mquinas, pero tambin se puede aadir a los grupos (y crear grupos de grupos!), As como variables de ajuste a
nivel de host o grupo. Tambin puede generar un inventario de forma dinmica utilizando cualquier aplicacin ejecutable que
devuelve JSON en el formato que Ansible est esperando.

En el siguiente captulo, vamos a estar escribiendo un libro de jugadas un poco ms complicado. Tomaremos las WordPress
proyecto de cdigo abierto ampliamente utilizado y el aprovisionamiento de un servidor con todas las dependencias necesarias
antes de implementar una instalacin de WordPress que se puede iniciar sesin y blog acerca de su viaje a lo largo de este libro.

30

También podría gustarte