Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. DevOps
Code

Automatizar todo con Ansible: Parte Uno

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Automate All the Things With Ansible.
Automate All the Things With Ansible: Part Two

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Información general

Esta es la primera parte de un tutorial en dos partes sobre Ansible. En esta parte aprenderás qué es Ansible, cómo instalarlo y configurarlo, y cómo instalar un clúster Vagrant local para probarlo. A continuación, descubrirá el inventario, los módulos, los comandos ad-hoc, los playbooks, las estrategias de ejecución, los bloques y la bóveda.

¿Qué es Ansible?

Ansible es una herramienta de gestión de configuración y orquestación. Opera en el mismo dominio que Puppet, Chef y Saltstack. Esto significa que con Ansible puede proporcionar remotamente una flota completa de servidores remotos, instalar e implementar software en ellos y controlarlos remotamente.

Ansible es un proyecto de código abierto implementado en Python y tiene una arquitectura con módulos que pueden manejar prácticamente cualquier sistema operativo, entorno de nube y herramienta o marco de administración del sistema. También puedes extenderlo fácilmente con tus propios complementos si quieres hacer algo especial.

Una de las características únicas de Ansible es que no instala ningún software en máquinas gestionadas. Maneja las máquinas remotamente a través de SSH. Para administrar una máquina remota, sólo tiene que asegurarse de que su clave SSH pública está en el archivo authorized_keys de esa máquina.

Primeros pasos con Ansible

Ansible se ejecuta en una máquina de control y puede administrar servidores que ejecutan cualquier sistema operativo, pero la máquina de control no puede ser una máquina de Windows en este momento. Usaré Mac OS X en este tutorial como la máquina de control.

Instalación

Ansible requiere Python 2.6 o 2.7. Para instalarlo, escriba:

pip install ansible

En Mac OS X, se recomienda aumentar el número de identificadores de archivos:

sudo launchctl limit maxfiles 1024 unlimited

Si ve un error como "Demasiados archivos abiertos", probablemente necesite hacerlo.

Para verificar que Ansible se ha instalado correctamente, escriba ansible --version. Debería verse:

El número de versión puede ser diferente, por supuesto.

El archivo de configuración Ansible

Ansible tiene un archivo de configuración que le permite controlar muchas opciones. El orden de búsqueda es:

  • ANSIBLE_CONFIG (una variable de entorno)
  • ansible.cfg (en el directorio actual)
  • .ansible.cfg (en el directorio principal)
  • /etc/ansible/ansible.cfg

También puede anular configuraciones específicas utilizando variables de entorno individuales, que tienen prioridad sobre el archivo de configuración.

Consulte la documentación de Ansible para conocer todas las opciones.

Configurar el clúster Vagrant

Para entender realmente el poder de Ansible, necesita un montón de servidores para administrar. Para el propósito de este tutorial voy a utilizar un clúster Vagrant de 3 máquinas virtuales, pero en lo que respecta Ansible se trata de algunos de los hosts que necesita para administrar. Para obtener más información sobre Vagrant, consulte Introducción a Vagrant.

Primero, instale VirtualBox y Vagrant. Entonces ponga lo siguiente en un archivo llamado 'Vagrantfile' en un directorio de trabajo

A continuación, escriba vagrant up. Vagrant creará tres máquinas virtuales para usted, disponibles como larry, rizado y moe. Para verificar, escriba el vagrant status. Debería ver:

Para asegurarse de que puede SSH en los hosts del clúster, escriba: vagrant ss >> ~/.ssh/config.

Ahora puede SSH en cualquiera de sus servidores virtuales usando su nombre de host. Por ejemplo: ssh curly. Esto permitirá que Ansible se conecte a los hosts de clúster a través de SSH sin ningún problema con nombres de usuario, contraseñas o claves.

Inventario

Ahora que tenemos un grupo, necesitamos decirle a Ansible. Esto se hace utilizando un archivo de inventario. El archivo de inventario es una lista de nombres de host organizados en grupos que utilizan un formato de archivo INI. Ponga lo siguiente en un archivo llamado 'hosts' en su directorio de trabajo.

Puse "Larry" en un grupo llamado "funny" y los otros anfitriones en un grupo llamado "funnier". Esa organización nos permitirá realizar acciones en estos grupos. También puede realizar acciones en hosts individuales y en todos los hosts.

Módulos

Ansible tiene una arquitectura muy modular y extensible. Todas sus capacidades están organizadas en módulos. Hay módulos básicos y módulos adicionales. Cada módulo representa un comando, y la mayoría toma argumentos. Puede utilizar módulos directamente en comandos ad-hoc o en playbooks. Puede leer todos los módulos de la documentación.

Comandos Ad-Hoc

Es hora de ponerse manos a la obra. La forma más sencilla de utilizar Ansible es ejecutar comandos ad-hoc. Los comandos Ad-hoc utilizan módulos. El formato de un comando ad-hoc es:

ansible <grupo de hosts> -i <archivo de inventario> -m <modulo> [-a <argumento 1>, ... <argumento N>]

Por ejemplo, para ver si todos los hosts de su inventario están activos, puede utilizar el módulo ping (sin argumentos):

Ansible tiene muchos módulos para todas las tareas comunes de administración del sistema, como administración de archivos, administración de usuarios y administración de paquetes, así como muchas tareas poco comunes. Pero si no encuentra lo que necesita o simplemente se siente más cómodo con comandos de shell, puede utilizar el módulo de shell directamente incluyendo las tuberías. El comando siguiente extrae las direcciones IP interna y externa de todos los hosts:

Playbooks

Ad-hoc comandos son agradables cuando se quiere hacer algo rápidamente en un montón de hosts, pero el verdadero poder de Ansible está en sus libros de rol. Los Playbooks son archivos YAML donde se definen las colecciones de tareas para lograr objetivos como el aprovisionamiento, la configuración, el despliegue y la orquestación de la infraestructura.

Ejemplo de Playbook

Echemos un vistazo a como se ve un playbook típico antes de llegar a los detalles.

El playbook tiene una sección de hosts donde se especifican los hosts del archivo de inventario. En este caso, el nombre del grupo es "funnier". Luego hay una sección de tareas con dos tareas que instalan Nginx y Python 3. Finalmente, hay una sección de controladores donde Nginx se inicia después de su instalación.

Ejecución de Playbooks

Ejecutas los playbooks con el comando ansible-playbook. Aún es necesario proporcionar un archivo de inventario y el libro de reproducción que desea ejecutar. Guarde el playbook en un archivo llamado "playbook.yml" en su directorio de trabajo. Hagamos un intento:

Oh no. ¿Que pasó? Ansible da un mensaje de error decente: "Error al bloquear apt para la operación exclusiva". Muchos libros de juego requerirán privilegios de sudo. Este libro de jugadas no es una excepción. Para ejecutar el libro de jugadas con privilegios de sudo, simplemente agregue el indicador --sudo:

Ansible es idempotente, lo que significa que si algo ya está en el estado deseado, Ansible lo dejará como esta. En la salida de ansible-playbook, puede ver qué tareas han tenido éxito o no y qué hosts se han cambiado.

Vamos a ejecutar el mismo playbook de nuevo. Nada se supone que debe cambiarse:

Ejecutar estrategias

Antes de Ansible 2.0, plays se ejecutaron de forma lineal, tarea por tarea. Todos los hosts de destino ejecutaron la primera tarea. Sólo cuando todos los anfitriones se hicieron con la primera tarea podrían comenzar en la segunda tarea.

Ansible 2.0 agregó el concepto de estrategias de ejecución. Actualmente hay dos estrategias: la estrategia "lineal" que he descrito anteriormente, que es la estrategia por defecto y la estrategia "libre", donde los hosts son libres de ejecutar las tareas en el libro de jugadas todavía en orden, pero no en lockstep con otros hosts.

Esto podría ser útil si cientos de hosts necesitan descargar varios archivos de algunos servidores FTP. El primer host puede terminar de descargar el primer archivo y pasar al siguiente, mientras que otros hosts siguen ocupados descargando el primer archivo. En el momento en que los otros hosts lleguen a descargar el siguiente archivo, el primer host ya ha descargado, y hay menos congestion.

La estrategia libre parece superior en la mayoría de las situaciones. Acabas de añadir un par clave-valor strategy: free al playbook.

Bloques

Otra nueva característica de Ansible 2.0 es bloques. Los bloques le permiten agrupar las tareas. Esto es muy útil si tiene tareas que deben ejecutarse sólo bajo ciertas condiciones. Anteriormente, tenías que hacerlo por cada tarea por separado.

Con bloques, puede agrupar todas estas tareas de depuración y poner la condición "when" en el nivel de bloque.

La bóveda

Ansible se comunica con máquinas remotas a través de SSH, pero los playbooks pueden contener secretos como nombre de usuario, contraseñas y claves API. Dado que normalmente almacena playbooks en sistemas de control de código fuente como git, esta información será visible para cualquier persona que tenga acceso de lectura.

Ansible ayuda con el programa ansible-vault que le permite crear, editar y volver a cifrar archivos cifrados. Estos archivos se pueden descifrar al momento de ejecutar el libro de juego proporcionando una contraseña. Si agrega el indicador --vault-ask-pass a ansible-playbook, entonces le pedirá la contraseña de la bóveda.

Alternativamente, puede agregar --vault-password-file <archivo de contraseña> y Ansible leerá la contraseña de su archivo. Si utiliza el archivo de contraseñas, no lo guarde en el control de código fuente.

Ahora, puede guardar los archivos encriptados en el control de código fuente y no preocuparse de que alguien encuentre sus secretos. Debe administrar cuidadosamente su contraseña de bóveda. Si lo pierde, no podrá descifrar los archivos de la bóveda.

Conclusion

Ansible es una gran herramienta. Es ligero. Se puede utilizar interactivamente con comandos ad-hoc, y se adapta muy bien a sistemas masivos. También tiene mucho dinamismo y una gran comunidad. Si administra o si sólo trabaja con servidores remotos, deseara Ansible.

Estén atentos para la segunda parte.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.