Colectivo Ansible: arquitectura, consideraciones e instalación

Lo hemos reafirmado antes: “La simplicidad es la máxima sofisticación”. (Leonardo da Vinci). ¡El Colectivo Ansible engloba el manejo de la ACS de manera práctica!

Muchos, al escuchar la palabra Ansible, tal vez recordarán el aparato de comunicación de ciencia ficción que conecta de manera instantánea, más rápido que la velocidad de la luz. Claro, algo tiene que ver con el software que presentaremos hoy, en el aspecto de que sí, es para comunicarnos, pero no con otras galaxias, sino con nuestros servidores de datos y/o aplicaciones.

Logo del Colectivo Ansible

Si eres Administrador de una Red de Area Local o programador los conceptos serán fáciles de asimilar, y como también hay personas que trabajan en el campo de la monitorización en el área de consola web, pilar fundamental de este sector corporativo, y que deseen ampliar sus conocimientos, comenzaremos desde lo más básico hasta lo más avanzado, con enlaces web para que aclaren dudas o amplíen información. Recordad: todos y todas debemos aprender algo nuevo todos los días y hoy no va a ser la excepción.

Colectivo Ansible

El Colectivo Ansible (Ansible Community en inglés) se publicó en el año 2012 bajo Licencia Pública General GNU 3.0, lo cual quiere decir que contamos con las cuatro libertades del software libre. Su código fuente público, abierto a modificaciones por nuestra parte (y que hasta pueden asimilar nuestras propuestas y modificaciones) está alojado a la fecha en GitHub (más detalles en Wikipedia). Como veremos, es un software sencillo por línea de comandos, pero poderoso. Si tenemos a nuestro cargo no más de una docena de máquinas (incluso hasta cien de ellas) tranquilamente podremos usar esta versión.

Arquitectura del Colectivo Ansible

Un Agente (“Agente Software” para ser explícitos) es un pequeño programa que se instala en un dispositivo y que luego envía datos al Servidor Pandora FMS, y constituye un método de trabajo para recopilar datos. Pandora FMS puede trabajar también con verificaciones remotas, sin necesidad de agentes: utiliza ambos métodos porque la Flexibilidad forma parte de nuestro nombre y se demuestra con hechos, no solo con palabras.

La Administración de Configuración de Servidores en Pandora FMS está plenamente soportada por Puppet: con esta herramienta de software podremos instalar los agentes necesarios de Pandora FMS para una correcta monitorización. Si bien utilizamos a Puppet para instalar los Agentes Software de Pandora FMS, con Pandora FMS también podremos monitorizar a Puppet con un plugin actualizado a diciembre de 2017 por medio de este enlace.

A diferencia de Puppet, Ansible no necesita de agentes para realizar su trabajo. Con Ansible seremos capaces de controlar una máquina remota (llamada nodo) o varias de ellas en una lista (llamada inventario) definida en una máquina local central (llamada controladora) por medio de guiones, pequeños programas con instrucciones precisas, llamados módulos. Para completar el panorama, un conjunto de instrucciones que contengan guiones es denominado libreto o Playbook.

  • Máquina Local: Controladora.
  • Máquina Remota: Nodo.
  • Lista con las direcciones de los Nodos: Inventario.
  • Fichero con guión: Módulo.
  • Fichero con guiones e instrucciones que llame a otros guiones: Libreto.

A su vez, dentro del inventario podremos agrupar dispositivos asignando un nombre entre corchetes rectos y a continuación los equipos deseados. Para los Libretos se utiliza YAML, y para las comunicaciones utiliza JSON sobre SSH (Pandora FMS utiliza XML sobre protocolo Tentacle); como vemos, esto garantiza que las comunicaciones sean seguras entre la Controladora y sus Nodos.

Consideraciones previas

Ansible necesita del lenguaje de programación Python 2.6 o superior y Open SSH para acceder y comunicar de forma segura tanto en la Controladora como en cada uno de sus Nodos. Estos dos componentes están en un 99% de los servidores en ambiente GNU/Linux y un punto crítico para nuestra Controladora es generar una autenticación por llave pública. Esto es necesario para que Ansible no utilice nuestra contraseña de usuario para conectar a cada uno de los nodos, solo introduciremos nuestra contraseña cuando copiemos dicha clave pública al nodo respectivo. Además, el usuario con que trabajemos debe tener derechos de administrador o root, es decir, estar el el grupo de sudoers.

Utilizaremos una máquina virtual con Ubuntu 18 (Controladora) para hacer nuestras pruebas con la dirección IP 192.168.1.60 y un Nodo con la dirección 192.168.1.47

Instalación del Colectivo Ansible

En la ventana terminal de nuestra futura Controladora:

sudo apt-get install ansible

Una vez instalado verificamos qué versión tenemos con el comando “ansible –version”. Nuestro primer trabajo es crear nuestro Inventario modificando con vuestro editor de texto favorito el fichero

/etc/ansible/hosts

que está en formato INI, por lo que podremos agrupar otros nodos en una sección de servidores web, por ejemplo:

[N47]
192.168.1.47

[ServidoresWeb]
example.com
192.168.1.1
mail[1:7:].example.com

Al guardar el fichero, Ansible sabrá los Nodos que controla. Fíjense que a nuestro Nodo le colocamos un alias “N47”. También, como ejemplo, tenemos un grupo de servidores de correo numerados de 1 a 7, tomad nota de la sintaxis. Ansible puede manejar Inventario de manera dinámica con otra solución del mismo autor de Ansible, el Sr. Michael DeHaan: el software es llamado Cobbler, el cual tiene funciones superiores como DHCP, DNS e IPAM para arranque por PXE (asume las mismas funciones de phpIPAM), así que es una solución más compleja.

Lo siguiente será generar un par de llaves, pública y privada, y luego copiaremos la llave pública a cada uno de los Nodos con nuestra contraseña:

mkdir -p $HOME/.ssh
chmod 0700 $HOME/.ssh
ssh-keygen -t rsa

Generación de par de llaves en la Controladora

Ahora copiaremos nuestra llave pública de la Controladora al Nodo con ”

ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]

” y luego probaremos la conexión sin contraseña:

Copiado de la llave pública de la Controladora al Nodo de ejemplo

Trabajando con Ansible

Nos desconectaremos del Nodo con “exit” y ejecutaremos nuestra primera prueba (en rojo los nodos ficticios):

ansible -m shell -a 'uptime' all

Desglosamos la línea de comando:

  • ansible: el nombre de la aplicación.
  • -m: nombre del módulo a utilizar, “shell” en este caso para ejecutar cualquier comando que necesitemos.
  • ‘uptime’: comando que devuelve el tiempo en uso del ordenador
  • all: todos los Nodos del Inventario, el único funcionando es “N47”, en adelante es el que utilizaremos.

Como vemos, con Ansible podemos hacer tareas básicas de monitorización; por ejemplo, podríamos preguntar si un Nodo necesita ser reiniciado (en Ubuntu hay un servicio para evitar reinicios incluso a pesar que actualicemos el kernel): podemos enviar ”

ansible -m shell -a 'ls /var/run/reboot-required' N47

“. El comando “ls”, que sirve para listar ficheros y directorios, devuelve error si no consigue el fichero (no necesita ser reiniciado) y dicho valor lo recibe e interpreta Ansible por nosotros.

Si instalamos Ansible con Pandora FMS pudiéramos, en teoría, crear un chequeo remoto para conocer cuáles Nodos necesitan ser reiniciados, pero pudiéramos ir aún más allá: con Ansible instalar ”

sudo apt-get install needrestart

” para luego listar los procesos que necesitan ser reiniciados con la instrucción ”

needrestart -r l

” y enviar una alerta por la Consola Web de Pandora FMS. El detalle es que necesitaremos la contraseña de root para poder instalar cualquier software.

Libretos en Ansible

Siguiendo con el ejemplo, crearemos un fichero de texto y lo nombraremos “my.yml” con lo siguiente:

---
- hosts: N47
   tasks:
     - name: installing needrestart
     apt:
        name: needrestart
        state: latest

A continuación ejecutamos el siguiente comando y el software “needrestart” será instalado en el Nodo que llamamos “N47”:

ansible-playbook --ask-vault-pass --extra-vars '@password.yml' my.yml  N47

Instalando "needrestart" en un Nodo con Colectivo Ansible

Notad en la figura que ejecutamos la instrucción en dos oportunidades y Ansible nos informa si realizó algún cambio en el Nodo (comportamiento idempotente).

Otras plataformas

También es posible, por medio de un guión oficial, acondicionar máquinas con Microsoft Windows® para que acepten comandos con WinRM (aquí hablamos un poco más del tema en su conjunto) de parte de Ansible y en la Controladora deberemos instalar “python-pip” y luego “pywinrm”.

Galaxia Ansible

El Colectivo Ansible tiene su página especial llamada Galaxia Ansible, donde hay gran cantidad de Libretos para ser usados de forma libre. Por ejemplo, en el apartado de monitorización dedican objetos para Grafana (brevemente hablamos de este software para monitorizar Microsoft SQL Server y con Ansible podemos automatizar su instalación), también hay para instalar un agente de Zabbix (el cual analizamos en su debida oportunidad), ¡incluso Kazuki Matsuda tiene su propio libreto para instalar el Servidor Pandora FMS! En fin, son muchos los recursos disponibles en esa página, más los módulos oficiales.

Nos despedimos y os decimos que aquí, en Pandora FMS, estamos constantemente innovando y trabajando por adelantado para llevaros las mejores soluciones en monitorización. ¿Sois un caso particular? Contáctadnos o descargad nuestra versión colectiva completamente funcional; dejad vuestros comentarios a continuación.

 

Shares