Este articulo tiene la intención de que veamos más allá de la función básica de las herramientas que usamos habitualmente. Siempre asociamos a un producto/herramienta con una función determinada, lo que es correcto, pero deberíamos también pensar en cómo extender su funcionalidad.
Cuando pensamos en ITIL una de las tareas que tenemos que realizar es la de crear y mantener la CMDB (Configuration Management Data Base), el recopilar la información de los servidores y el software que contienen nos lleva a usar agentes, o crearnos procesos que debemos instalar, uso de productos de terceros, usar las herramientas de monitorización para actualizar, etc.
Hace poco, debido a que necesitaba realizar un inventario del software que se había instalado en un servidor me di cuenta de que con Ansible podía obtenerlo, y no solo eso sino también la configuración del servidor, por lo tanto, pensé ¿Por qué no usar Ansible para crear/mantener una CMDB?
En Ansible tenemos la posibilidad de utilizar las “facts”, estas nos dan el inventario del servidor al que estamos consultando, por lo tanto, es muy sencillo con unas pocas líneas conseguir traernos el inventario de un servidor, y además nos traeremos las características de este.
El siguiente código Ansible nos muestra cómo traernos por ejemplo el listado del SW Instalado y las características del servidor. Básicamente este código lo que hace es obtener las facts que deseamos, en nuestro caso el inventario de paquetes instalado en el servidor (ansible_facts.packages) y el inventario de la configuración del servidor (ansible_facts), donde tendremos las CPU, Memoria, etc. Toda esta información nos permite tener el catalogo de la CMDB actualizado, solo tendremos que leer el JSON que nos devuelve el código.
NOTA: para los sistemas basados en Debian hay que instalar previamente Python-apt.
Código Ansible
El resultado de este código nos devuelve dos archivos JSON con el resultado de la consulta de las “Ansible_facts”.
Ahora bien, suponiendo que tengo un listado de servidores a consultar, también es interesante conocer las diferencias de los archivos obtenidos, y aquí es donde podemos hacer uso de otro elemento para tener las diferencias.
Si creamos un repositorio Git, podemos ejecutar con un planificador la ejecución de este código ansible y con poco mas podemos dejar en el repositorio Git el contenido de los servicios.
Como ejemplo de cómo usar he creado un Docker que se ejecuta este código, para ello he instalado los paquetes necesarios a nivel del Docker, creado una carpeta .ssh con las claves de acceso y un script para que se ejecute al arrancar el contenedor.
El script que se ejecuta nos permite completar la operación:
Como ejemplo he creado un servidor LAMP en mi cuenta de Google Cloud Platform y he lanzado el contenedor con las correspondientes credenciales, todo esto se puede ver en el repositorio de GitHub
https://github.com/jplazaroalonso/AnsibleCMDB
Si lo desea use el código y vea los ejemplos de qué es lo que devuelve Ansible para este caso:
https://github.com/jplazaroalonso/AnsibleCMDB/blob/main/inventory/lamp-1-vm_packages.json
https://github.com/jplazaroalonso/AnsibleCMDB/blob/main/inventory/lamp-1-vm_facts.json
Ahora toca cargar esta información en nuestra CMDB o donde consideremos que sea más útil!!