La colección Datadope Discovery para Ansible proporciona un conjunto completo de módulos, roles, actions y playbooks diseñados para facilitar la recolección de datos de sistemas operativos (Linux, Windows y SunOS) de forma automatizada.
Esta colección permite extraer información sobre procesos, paquetes instalados, puertos activos, contenedores Docker y máquinas virtuales en entornos Hyper-V, simplificando tareas de auditoría, monitorización y descubrimiento de software.
Requisitos de la colección Datadope Discovery
- Versión mínima de Ansible: 2.9.8
- Sin dependencias adicionales para funciones básicas.
- Para extraer datos de VMs Linux en sistemas Windows con Hyper-V, es necesario instalar:
linux-cloud-tools-virtual
En caso de no estar disponible, Hyper-V no podrá obtener las interfaces de las máquinas virtuales Linux, impidiendo obtener su hostname realizando una resolución de DNS.
Instalación
La instalación de la colección se realiza desde su repositorio git correspondiente en github. Puede realizarse tanto desde un fichero requirements.txt de ansible como desde la línea de comandos haciendo uso del comando ansible-galaxy, siendo necesario en ambos casos especificar la rama o tag a instalar.
- Para la instalación mediante línea de comandos, se ejecutará:
ansible-galaxy collection install git+https://github.com/datadope-io/ansible_collection_discovery.git,v1.1.1
- Para la instalación como dependencia, se deberá incluir en el fichero requirements.txt:
- name: +https://github.com/datadope-io/ansible_collection_discovery.git type: git version: v1.1.1
Módulos, actions, roles y playbooks disponibles
Módulos
Linux
- process_facts: Permite la extracción de la información relativa a los procesos que se encuentren en ejecución en el sistema. Es también compatible con otros sistemas unix-like.
Ejemplo de output:
[
{
'pid': '10',
'ppid': '1',
'user': 'root',
'cmdline': 'the process command line'
}
]
- check_connection: Comprueba si un endpoint existe y responde, y adicionalmente informa sobre el protocolo web utilizado (http/https).
Ejemplo de output:
{
"available": true,
"identified_as": "https"
}
- file_parser: Lee y compila archivos de las máquinas remotas, de forma que si un fichero incluye referencias a otros (como en archivos de configuración de algunos software) el resultado sea un archivo completo autocontenido.
Windows
- win_process_facts: Al igual que su homónimo para sistemas Linux, extrae en el mismo formato la información sobre los procesos en ejecución en los sistemas Windows.
Ejemplo de output:
[
{
"cmdline": "\"C:\\Program Files\\Microsoft SQL Server\\MSSQL14.SQLEXPRESS\\MSSQL\\Binn\\sqlservr.exe",
"pid": 1560,
"ppid": 444,
"user": "NT SERVICE\\MSSQL$SQLEXPRESS"
}
]
- win_package_facts: Recopila información sobre los paquetes instalados en el sistema. Respeta el formato del módulo ‘ansible.builtin.package_facts’ para sistemas Linux.
Ejemplo de output:
[
{
"psqlODBC 13.00.0000": [
{
"arch": "AMD64",
"authorized_cdf_prefix": null,
"comments": "ODBC drivers for PostgreSQL, packaged by EnterpriseDB",
"contact": "",
"estimated_size": 13676,
"help_link": "",
"help_telephone": null,
"install_date": "20220215",
"install_location": "C:\\Program Files\\PostgreSQL\\psqlODBC",
"install_source": null,
"language": null,
"modify_path": null,
"name": "psqlODBC 13.00.0000",
"no_repair": "1",
"publisher": "EnterpriseDB",
"readme": null,
"size": null,
"source": "windows_registry",
"system_component": null,
"uninstall_string": "\"C:\\Program Files\\PostgreSQL\\psqlODBC\\uninstall-psqlodbc.exe\"",
"url_info_about": "",
"url_update_info": null,
"vendor": null,
"version": "13.00.0000-2",
"version_major": 13,
"version_minor": 0,
"windows_installer": null
}
]
}
]
- win_hyperv_facts: Extrae la información sobre las máquinas virtuales que se estén ejecutando en el sistema Windows sobre el que se ejecute el módulo.
Ejemplo de output:
[
{
"creation_time": "ju. oct. 27 19:42:05 2022",
"hostname": "vm1.mshome.net",
"id": "f3abe0f9-3ba0-49a7-ae48-e2f0808cca9d",
"max_memory": 1099511627776,
"memory": 2147483648,
"min_memory": 536870912,
"name": "Ubuntu 18.04 LTS",
"network_adapters": [ ],
"path": "C:\\ProgramData\\Microsoft\\Windows\\Hyper-V",
"processor_count": 4,
"serial": "4857-2270-1268-6889-7697-3920-09",
"state": 2,
"hypervisor": "Hyper-V"
}
]
SunOS
- sunos_listen_ports_facts: Obtiene la información sobre las escuchas activas en los sistemas SunOS, respetando el formado de las contrapartes ‘listen_ports_facts’ de Linux, incluido en ansible, y ‘win_listen_ports_facts’ de Windows, incluido en la collection ‘community.windows’.
Ejemplo de output (clave tcp_listen):
[
{
"address": "127.0.0.1",
"name": "python",
"pid": 816,
"port": 150,
"protocol": "tcp",
"stime": "Thu Nov 15 12:25:29 2018",
"user": "root"
}
]
Actions:
- software_facts: Proporcionando la información sobre los puertos activos, el software instalado y los procesos en ejecución, es capaz de proveer un listado con la información sobre el software en ejecución, realizando tareas para ampliar y organizar dicha información.
Ejemplo de output:
[
{
'name': 'PostgreSQL Database',
'process':
{
'pid': '1234',
'ppid': '1',
'cmdline': '/usr/bin/postgres -D /var/lib/postgresql/data',
'listening_ports': [
'5432'
],
'children': [
{
'pid': '1235',
'ppid': '1234',
'cmdline': 'postgres: logger process'
},
{
'pid': '1236',
'ppid': '1234',
'cmdline': 'checkpointer process'
}
]
},
'listening_ports': [5432],
'packages': [
{
'arch': 'x86_64',
'epoch': None,
'name': 'postgresql10-server',
'release': '1PGDG.rhel7',
'source': 'rpm',
'version': '10.17'
}
],
'version': [
{
'number': '10.17',
'type': 'package'
}
]
}
]
Roles incluidos
- docker_containers: Permite la obtención de información relativa a los contenedores que se encuentren en ejecución en una máquina mediante el uso de docker. Por defecto, hace uso de la colección ‘community.docker’, pero en caso de fallo, es capaz de hacer uso del CLI de docker para obtener la información.
- software_discovery: Se encarga de ejecutar los módulos necesarios para obtener la información requerida por ‘software_facts’ dependiendo del sistema operativo, para, posteriormente, ejecutarlo.
- hyperv_vms: Comprueba que Hyper-V esté habilitado y en ejecución en la máquina para, posteriormente, lanzar la extracción de información de las máquinas virtuales que estén activas.
Playbooks:
- software_discovery.yml: Además de ejecutar el rol de software_discovery, ofrece la posibilidad de almacenar la información extraída en la ubicación especificada con el formato dado (yaml/json).
Ejemplo de extracción de procesos en una máquina Windows
Para extraer los procesos de una máquina Windows y que estos queden registrados en la clave ‘processes’ de los ‘ansible_facts’ de la máquina, únicamente debemos añadir una tarea que incluya el módulo ‘datadope.discovery.win_process_facts’. Para este ejemplo, además, activaremos la opción ‘extended_data’, que nos proporciona información adicional sobre cada uno de los procesos:
- name: Gather processes facts
datadope.discovery.win_process_facts:
extended_data: true
Ejemplo de extracción completa de software en una máquina
Para realizar una extracción completa del software de una máquina, haremos uso del rol ‘software_discovery’, que se encargará automáticamente de recopilar la información necesaria por el action ‘software_facts’ según el sistema operativo, para, posteriormente, invocarlo y almacenar dicha información en la clave ‘software’ de los ‘ansible_facts’ de la máquina.
Esta invocación podremos realizarla de dos formas distintas; incluyendo el rol como parte de los roles de un playbook, o incluyendo el rol como parte de una task haciendo uso del módulo ‘include_role’
Ejemplo de playbook incluyendo la clave ‘roles’:
- hosts: all
roles:
- role: datadope.discovery.software_discovery
Ejemplo de task que haga uso del rol:
- name: Ejecutar el rol software_discovery de Datadope Discovery
include_role:
name: datadope.discovery.software_discovery
Recursos
Colección de ansible Datadope Discovery:
https://github.com/datadope-io/ansible_collection_discovery
Documentación sobre la instalación de colecciones en ansible:
https://docs.ansible.com/ansible/latest/collections_guide/collections_installing.html