Datadope Discovery Parte 1 – Módulos, instalación y uso

Datadope Discovery Parte 1 – Módulos, instalación y uso

Datadope Discovery Parte 1 – Módulos, instalación y uso

Tiempo de lectura: 4

La colección de ansible de Datadope Discovery ofrece un conjunto de módulos, roles, actions y playbooks que buscan facilitar la recopilación de la información de servidores mediante la utilización de ansible. Ofrece módulos tanto para sistemas UNIX como para Windows, permitiendo la extracción de datos de paquetería, procesos y software instalados, entre otros, con la simple inclusión de una tarea de ansible.

Requisitos

Los requisitos de compatibilidad se reducen a cumplir los requisitos de ansible 2.9.8 (versión mínima compatible), no existen requisitos adicionales.

Como requisito adicional, en caso de querer extraer información sobre las máquinas virtuales Linux que estén ejecutándose en sistemas Windows bajo el hipervisor Hyper-V, es necesario que se encuentre instalado el paquete:

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:

  • 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

 

David Nieto Sanz
Gabriela Guitron

Gabriela Guitron

¿Te ha resultado interesante?

Deja una respuesta

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

SÍGUENOS

CATEGORÍAS

ÚLTIMAS ENTRADAS