Administración del servidor

Tutorial de Ansible – Automatiza tus sistemas

En un tutorial anterior, hablamos sobre el comando expect y vimos cómo automatizar scripts en Linux usando su lenguaje de scripting.

Hoy, daremos un paso más allá en nuestras técnicas de automatización y hablaremos acerca de una herramienta que automatiza las tareas de manera más profesional y para diferentes plataformas, esta herramienta es Ansible.


También hablaremos sobre algunas características de Ansible, tales como playbook, inventory, vault, role y container.

 

¿Qué es Ansible?

Ansible es una herramienta de IT de código abierto proporcionada por Red-Hat Enterprise Linux (RHEL) que ayuda en la administración de la configuración, el servicio de orquestación, la automatización de tareas y la implementación de aplicaciones.

Esta herramienta está dirigida a ayudar a los administradores de sistemas que buscan minimizar las tareas recurrentes, la implementación sin problemas y la fácil automatización.

Las herramientas similares a Ansible que existen son Puppet, SaltStack y Chef, las cuales son las principales herramientas de administración de configuración disponibles en el mercado.

Cada una de estas herramientas tiene sus propias ventajas y desventajas, por lo que elegir la opción correcta puede ser un poco desafiante, dependiendo de qué funciones se necesitan o qué lenguaje de programación prefieres.

Gracias a las ventajas de Ansible en comparación con otras herramientas, Ansible es una especie de herramienta nueva hecha en Python y la cual utiliza plantillas YAML para hacer scripting de sus trabajos.

YAML significa “YAML Ain’t Markup Language” (YAML no es un legunaje de marcado) lo que significa que es un lenguaje muy fácil de leer. Esto ayuda a los nuevos usuarios a entenderlo fácilmente.

Otra ventaja de utilizar Ansible es que ya que no es necesario instalar un agente en los hosts, lo que mejora la velocidad de comunicación, debido a que utiliza los modelos push y pull para enviar comandos a sus nodos de Linux y, para los nodos de Windows, se utiliza el protocolo WinRM.

Como dijimos anteriormente, ya que se trata de una nueva herramienta en sus desventajas podemos observar que tiene una interfaz de usuario deficiente, una plataforma no personalizada e inmadura en comparación con otras herramientas.

Aunque obviando las desventajas Ansible es un sistema muy utilizado el cual se esta usando con más frecuencia que nunca y hay un aumento en el numero de descargas.



Configuración de Ansible en Ubuntu

Como mencionamos anteriormente, no es necesario instalar un agente en los hosts, a diferencia de otras herramientas. Para Ansible, solo necesitas una instalación en un nodo maestro lo cual carece de un proceso en segundo plano, dependencia de base de datos y un servicio que siempre se ejecuta, lo cual lo convierte en un software extremadamente ligero.

Se recomienda utilizar el administrador de paquetes predeterminado para Ubuntu al instalar Ansible, lo que ayudará a instalar la última versión estable.

Antes de iniciar el proceso de instalación y para la instalación del paquete de Linux, debes asegurarte de que Python 2 (versión 2.6 o posterior) o Python 3 (versión 3.5 o posterior) esté instalado.

De todas formas la mayoría de los administradores de paquetes de Linux, cuando se les pide que descarguen Ansible, descargarán automáticamente la versión mas actualizada de Python y sus dependencias.

Y para la instalación desde la fuente, la suite de desarrollo puede ser necesaria como el paquete build-essential para Ubuntu.

Podemos instalar Ansible en Ubuntu usando uno de los dos métodos siguientes:

El primer método a través del gestor de paquetes de Ubuntu.

Primero, instala Ansible PPA para Ubuntu usando el siguiente comando:

Luego, en segundo lugar, presione Enter para confirmar la configuración del servidor de claves.

Tercero, actualiza el administrador de paquetes usando el siguiente comando:

Cuarto, Ansible está listo para ser instalado usando el siguiente comando:

El segundo método de instalación de Ansible es desde su código fuente:

Este método a veces es útil para los usuarios que necesitan algunos requisitos particulares como, por ejemplo, instalar una versión beta o la versión de desarrollo de Ansible, incluso si esto te otorga acceso anticipado a nuevas funciones y módulos nuevos, debes tener cuidado, es una versión inestable que todavía está en desarrollo y pruebas.

Además, este método tambien puede ser útil si no necesita instalar Ansible a través del administrador de paquetes.

Por lo tanto, para obtener el paquete fuente de Ansible puedes usar una de las siguientes técnicas.

Primero descargando el archivo .tar:

Descarga el archivo .tar

Descomprimirlo

La segunda forma es a través del codigo fuente de GitHub:

Pero tendremos que instalar primero git

Luego instalamos Ansible

Después de descargar el código fuente de Ansible utilizando una de las técnicas anteriores, comenzaremos a construir Ansible, pero como mencionamos anteriormente, necesitaremos instalar Python.

Por lo tanto, podemos usar los siguientes comandos para instalar Python para asegurarnos de que se cumplan los requisitos de Ansible:

Ve al directorio de Ansible Source

Instala Python usando easy_install

Instala los requisitos de Python

Configurar el entorno para usar Ansible.

Si está utilizando la fuente de GitHub, puedes actualizar el proyecto Ansible y sus submódulos de la siguiente manera:

Cada vez que ejecutes el paso anterior, deberás asegurarte de que las variables de ambiente este ya establecidas.

Finalmente, Ansible Inventory se puede encontrar generalmente en /etc/ansible/hosts y su archivo de configuración se encuentra generalmente en /etc/ansible/ansible.cfg

Configuración del nodo maestro de ansible

Generalmente, el archivo de configuración de Ansible (ansible.cfg) se encuentra en /etc/ansible/ansible.cfg o en el directorio de inicio que pertenece al usuario que instaló Ansible.

Tan pronto como hayas instalado Ansible, puedes comenzar a utilizarlo con su configuración predeterminada. En los proximos parrafos, analizaremos las configuraciones de Ansible más importantes y útiles que mejorarán tu experiencia de trabajo con Ansible.

A partir de Ansible 2.4 y versiones posteriores, “ansible-config” es un comando que utilizan los usuarios de Ansible para enumerar las opciones de Ansible habilitadas con sus valores.

El archivo de configuración ansible se divide en varias secciones, pero en este artículo, solo nos centraremos en la sección general [default]. Por lo tanto, echemos un vistazo a esta sección de parámetros básicos.

Usando tu editor de texto favorito (Gedit, vi, nano…) puedes abrir el archivo de configuración ansible.cfg:

  • inventory: señala la ubicación del inventario que utiliza Ansible para conocer los hosts disponibles

  • roles_path: indica la ubicación donde el Ansible Playbook tiene que buscar roles adicionales

  • log_path: señala la ubicación donde se almacena los logs de Ansible. El permiso para escribir en este archivo debe darse al usuario de Ansible.

  • retry_files_enabled: indica la función de reintento que permite a Ansible crear un archivo .retry cada vez que falla un Playbook. Se recomienda dejar esta opción deshabilitada a menos que realmente lo desees, ya que si está habilitada, creará varios archivos que ocuparán bastante espacio

  • host_keychecking: teste parámetro se utiliza en entornos que cambian constantemente, donde se eliminan los hosts antiguos y host nuevos toman su lugar. Este parámetro se usa generalmente en una nube o en un entorno virtualizado.

  • forks: Indica la cantidad de tareas paralelas que se pueden ejecutar en el host del cliente. De forma predeterminada, el valor de esta propiedad es 5 y esto permite ahorrar recursos del sistema y ancho de banda de la red, pero en caso de que tengas suficientes recursos y un buen ancho de banda, puede aumentar el número.

  • remote_port: contiene el número de puerto utilizado por SSH en los hosts

  • nocolor: Le da la posibilidad de usar diferentes colores para el libro de jugadas y las tareas de Ansible que muestran errores y éxitos

Configuración de nodo para cliente Linux

OpenSSH-server es la única herramienta importante que debes instalar en el nodo cliente y, de forma predeterminada, todas las nuevas versiones de Linux utilizan SSH como la principal herramienta de acceso remoto. Por lo tanto, necesitas revisar los siguientes puntos cuidadosamente:

  • El servicio SSH está siempre en funcionamiento.
  • El puerto SSH, que es 22 por defecto, debe estar permitido en el firewall del sistema.

Configuración de nodo para cliente Windows

Para que Ansible pueda administrar de forma remota el host de Windows, las siguientes aplicaciones deben instalarse en los nodos de Windows:

  • PowerShell versión 3.0 o superior
  • .NET versión 4.0

Para los requisitos que faltan, hay un script de PowerShell de Ansible que realiza esta instalación automáticamente, puedes encontrarlo en el siguiente enlace https://github.com/jborean93/ansible-windows/blob/master/scripts/Upgrade-PowerShell.ps1

Pero antes de ejecutar el script anterior, debes cambiar la política de ejecución para que no se restrinja al ejecutar la siguiente secuencia de comandos y debes ejecutarla como administrador:

Después de la ejecución, el Ansible ya hizo el script de PowerShell y luego ejecutó el script de política de ejecución nuevamente para volver a restringirlo.

Otro script importante que debe ejecutarse es para configurar WinRM de forma que funcione funcione y se ejecute para escuchar los comandos de Ansible, esta secuencia de comandos también está disponible en Ansible y puedes encontrarla en el siguiente enlace:

https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1

De manera similar, este script debe ejecutarse como administrador y con la política de ejecución como no restringida, puedes usar el siguiente fragmento de código:

Si no se producen errores, este Ansible ahora debería poder administrar este nodo.


Fundamentos de YAML

Como hemos mencionado anteriormente, YAML es un lenguaje amigable para los seres humanos que se puede usar para administrar datos. A continuación, hablaremos de los conceptos básicos de YAML y te mostraremos cómo escribir un código usando YAML.

Pautas para crear un archivo YAML:

  • YAML usa espacios en lugar de tabulaciones.
  • YAML distingue entre mayúsculas y minúsculas
  • El archivo YAML debe guardarse con la extensión .yml
  • El archivo YAML a veces comienza con “—” y termina con “…” pero es opcional.

Ya que se puede usar YAML para escribir playbooks de Ansible, a continuación vas a ver que tan fácil es usar YAML. Entonces, en el siguiente ejemplo, necesitamos copiar la configuración del usuario. Si estás utilizando un comando Ansible, se verá así:

- name: Copy user configuration copy: src=/home/admin/setup.conf dest=/usr/local/projects/ owner=setup group=dev mode=0677 backup=yes

Pero en caso de que estés usando YAML, será de la siguiente forma:

Otro ejemplo es este archivo inventory.ini que puede ser parecido a lo que se muestra a continuación:

Pero en caso de que estés usando YAML, se verá así:

Por lo tanto, a partir de los dos ejemplos anteriores, puedes ver que YAML es un lenguaje fácil de usar, amigable para los humanos, ordenado y atractivo.

 

Ansible Inventory

Es un archivo .ini que consta de registros de direcciones IP y hostnames de los clientes host. También puede contener algunas otras variables acerca de los hosts.

En general, el contenido de este archivo se organiza en grupos y cada grupo tiene un nombre, este nombre se escribe entre dos corchetes como, por ejemplo, [Grupo1].

La ubicación del archivo Ansible Inventory se encuentra por defecto en /etc/ansible/hosts. Sin embargo, se recomienda colocar todos los archivos de configuración de Ansible en una carpeta en el directorio de inicio del usuario, para permitir que el usuario agregue y modifique su configuración de acuerdo con sus necesidades. Entonces, a continuación, vamos a ver un ejemplo de abrir el archivo de configuración de Ansible y configurar el inventory:

Además, puede elegir un archivo Ansible inventory mientras ejecutas un comando agregando la opción -i al comando:

Hay dos tipos de inventarios Ansible estáticos y dinámicos. El inventario estático se puede utilizar en pequeñas organizaciones que tienen una infraestructura de pequeña a mediana.

Si bien el inventario dinámico se puede utilizar en grandes organizaciones donde hay una gran cantidad de hosts, es posible que se inicien tareas complicadas y que empiecen a aparecer enormes errores.

Si estás intentando agregar hosts con un estilo similar al Ansible Inventory, utiliza un bloque contador como el siguiente ejemplo:

Archivo Inventory con hosts de estilo similar:

Inventory utilizando un bloque contador:


Ansible Playbook

Ansible Playbook es simplemente un grupo sistemático de scripts que utilizan comandos Ansible en un método más organizado que pueden instalar y configurar sistemas. Ansible Playbook puede realizar las siguientes tareas y delegarlas a otros servidores:

  • Reordenar los despliegues de sistemas de múltiples niveles.
  • Aplicar parches de aplicaciones y sistemas.
  • Recopilar datos de los hosts de los clientes y dependiendo de los datos recopilados, comenzar a enviar acciones instantáneas a servidores, dispositivos y balanceadores de carga.

Ansible Playbook está escrito en YAML, el cual es un lenguaje muy simple de lectura humana en comparación con otros lenguajes de codificación tradicionales. YAML también puede permitir a los usuarios compartir su código de una manera fácil.


Ansible Roles

Al convertir Ansible Playbooks a roles te dará la posibilidad de cambiar un conjunto de tareas de administración de configuración en módulos reutilizables con múltiples configuraciones que se compartirán fácilmente cuando sea necesario.

La estructura de los roles de Ansible es muy simple; consta de muchas carpetas, cada una de ellas consta de muchos archivos YAML que, de forma predeterminada, tienen un archivo main.yml pero pueden tener más de un archivo.

Ansible Vault

Es una herramienta de cifrado de ansible que permite a los usuarios cifrar varias variables. Esta bóveda de Ansible produce archivos encriptados para guardar las variables. Los archivos se pueden mover a otra ubicación cuando sea necesario.

Ansible vault puede cifrar distintos tipos de datos que se encuentran en los roles y Playbooks de Ansible. Además, puedes cifrar archivos de tareas en caso de que necesite ocultar un nombre de variable.

Ansible Container

Es una herramienta de código abierto que permite a los usuarios automatizar todo lo relacionado con sus contenedores, desde la construcción hasta la implementación y la administración. Un ansible container permite una mejor administración de código y la implementación de contenedores en cualquier registro de la nube.

De forma predeterminada, el Ansible container no se instala desde el principio como parte de la instalación de Ansible, por lo que deberás configurarlo en un host de container y durante el proceso de instalación, deberá elegir un motor contenedor para trabajar.

Mokhtar Ebrahim
Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *