Uso de complementos de inventario de Ansible Content Collections en Ansible Tower

Los entornos de TI se están volviendo cada vez más complejos. En estas condiciones, es crucial para el sistema de automatización de TI contar con información actualizada sobre los nodos que están presentes en la red y deben ser procesados. En Red Hat Ansible Automation Platform, este problema se resuelve a través de los llamados inventarios (Podemos intentar ejecutar ansible con el archivo de inventario:) – listas de nodos gestionados.

Uso de complementos de inventario de Ansible Content Collections en Ansible Tower

En su forma más simple, un inventario es un archivo estático. Esta es la opción ideal cuando comienzas a trabajar con Ansible, pero a medida que la automatización se expande, se vuelve insuficiente.

Y aquí está el porqué:

  1. ¿Cómo actualizar y mantener un listado completo de los nodos controlados cuando algo cambia constantemente, cuando las cargas de trabajo – y a su vez los nodos en los que se ejecutan – aparecen y desaparecen?
  2. ¿Cómo clasificar los componentes de la infraestructura de TI para seleccionar de manera precisa los nodos para aplicar determinada automatización?

Las respuestas a ambas preguntas son proporcionadas por el inventario dinámico (dynamic inventory) – un script o plugin que busca los nodos que necesitan automatización accediendo a la fuente de verdad (source of truth). Además, el inventario dinámico clasifica automáticamente los nodos en grupos para que puedas seleccionar con mayor precisión los sistemas objetivo para ejecutar la automatización de Ansible.

Los plugins de inventario permiten al usuario de Ansible acceder a plataformas externas para la búsqueda dinámica de nodos objetivo y utilizar estas plataformas como fuente de verdad al formar el inventario. La lista estándar de fuentes en Ansible incluye plataformas en la nube como AWS EC2, Google GCP y Microsoft Azure, además de que hay muchos otros plugins de inventario disponibles para Ansible.

Ansible Tower viene con una serie de plugins de inventario, que funcionan directamente "listo para usar" y además de las plataformas en la nube mencionadas anteriormente, ofrecen integración con VMware vCenter, Red Hat OpenStack Platform y Red Hat Satellite. Para estos plugins, solo es necesario proporcionar las credenciales para conectarse a la plataforma objetivo, después de lo cual pueden ser utilizados como fuente de datos de inventario en Ansible Tower.

Además de los plugins de fábrica que vienen con Ansible Tower, hay otros plugins de inventario apoyados por la comunidad de Ansible. Con la transición a Red Hat Ansible Content Collections , estos plugins se han comenzado a incluir en las colecciones correspondientes.

En esta publicación, como ejemplo, analizaremos el uso del plugin de inventario para ServiceNow, una popular plataforma de gestión de servicios de TI, en cuya CMDB los clientes suelen almacenar información sobre todos sus dispositivos. Además, la CMDB puede contener contexto útil para la automatización, como detalles sobre los propietarios de servidores, niveles de servicio (producción/no producción), actualizaciones instaladas y ventanas de mantenimiento. El plugin de inventario de Ansible puede trabajar con la CMDB de ServiceNow y forma parte de la colección. servicenow en el portal galaxy.ansible.com.

Repositorio Git

Para utilizar el plugin de inventario de la colección en Ansible Tower, debe establecerse como fuente del proyecto. En Ansible Tower, un proyecto es una integración con algún sistema de control de versiones, como un repositorio git, que se puede usar para sincronizar no solo los playbooks de automatización, sino también variables y listas de inventario.

Nuestro repositorio es en realidad muy sencillo:

├── collections
│   └── requirements.yml
└── servicenow.yml

El archivo servicenow.yml contiene detalles para el plugin de inventario. En nuestro caso, simplemente indicamos la tabla en la CMDB de ServiceNow que queremos usar. También especificamos los campos que se agregarán como variables de nodo, además de cierta información sobre los grupos que deseamos crear.

$ cat servicenow.yml
plugin: servicenow.servicenow.now
table: cmdb_ci_linux_server
fields: [ip_address,fqdn,host_name,sys_class_name,name,os]
keyed_groups:
  - key: sn_sys_class_name | lower
	prefix: ''
	separator: ''
  - key: sn_os | lower
	prefix: ''
	separator: ''

Tenga en cuenta que aquí no se especifica el instancia de ServiceNow a la que nos conectaremos, y no se establecen credenciales para la conexión. Todo esto lo ajustaremos más adelante en Ansible Tower.

El archivo collections/requirements.yml es necesario para que Ansible Tower pueda descargar la colección requerida y, de este modo, obtener el plugin de inventario necesario. De lo contrario, tendríamos que instalar y mantener manualmente esta colección en todos nuestros nodos de Ansible Tower.

$ cat collections/requirements.yml
---
collections:

- name: servicenow.servicenow

Después de enviar esta configuración al sistema de control de versiones, se puede crear un proyecto en Ansible Tower que haga referencia al repositorio correspondiente. En el ejemplo a continuación, Ansible Tower se enlaza con nuestro repositorio en github. Presta atención a la URL SCM: te permite especificar la cuenta para conectarte a un repositorio privado, así como establecer una rama, etiqueta o commit específicos para su extracción.

Uso de complementos de inventario de Ansible Content Collections en Ansible Tower

Creamos credenciales para ServiceNow

Como se mencionó anteriormente, la configuración en nuestro repositorio no contiene credenciales para conectarse a ServiceNow ni especifica la instancia de ServiceNow con la que vamos a interactuar. Por lo tanto, para establecer estos datos, crearemos credenciales en Ansible Tower. De acuerdo con la documentación del plugin de inventario de ServiceNow, existe una serie de variables de entorno que utilizaremos para establecer los parámetros de conexión, por ejemplo, de esta manera:

= username
    	La cuenta de usuario de ServiceNow, debe tener derechos para leer cmdb_ci_server (por defecto), o la tabla especificada por SN_TABLE

    	set_via:
      	env:
      	- name: SN_USERNAME

En este caso, si la variable de entorno SN_USERNAME está configurada, entonces el plugin de inventario la utilizará como la cuenta de conexión a ServiceNow.

También necesitamos establecer las variables SN_INSTANCE y SN_PASSWORD.

Sin embargo, en Ansible Tower no hay credenciales de este tipo donde se puedan especificar estos datos para ServiceNow. Sin embargo, Ansible Tower nos permite definir tipos de credenciales personalizables, puedes leer más sobre esto en el artículo «Ansible Tower Feature Spotlight: Custom Credentials».

En nuestro caso, la configuración de entrada para las credenciales personalizables para ServiceNow se ve de la siguiente manera:

fields:
  - id: SN_USERNAME
	type: string
	label: Nombre de usuario
  - id: SN_PASSWORD
	type: string
	label: Contraseña
	secret: true
  - id: SN_INSTANCE
	type: string
	label: Instancia de Snow
required:
  - SN_USERNAME
  - SN_PASSWORD
  - SN_INSTANCE

Estas credenciales se expondrán como variables de entorno con el mismo nombre. Esto se describe en la configuración del inyector:

env:
  SN_INSTANCE: '{{ SN_INSTANCE }}'
  SN_PASSWORD: '{{ SN_PASSWORD }}'
  SN_USERNAME: '{{ SN_USERNAME }}'

Así que hemos definido el tipo de credencial que necesitamos, ahora podemos agregar la cuenta de ServiceNow y especificar la instancia, el nombre de usuario y la contraseña, así:

Uso de complementos de inventario de Ansible Content Collections en Ansible Tower

Creamos inventario

Así que ahora estamos listos para crear un inventario en Ansible Tower. Lo llamaremos ServiceNow:

Uso de complementos de inventario de Ansible Content Collections en Ansible Tower

Después de crear el inventario, podemos adjuntar una fuente de datos. Aquí indicamos el proyecto que creamos anteriormente e introducimos la ruta a nuestro archivo de inventario YAML en el repositorio del sistema de control de versiones, en nuestro caso servicenow.yml en la raíz del proyecto. Además, es necesario vincular la cuenta de ServiceNow.

Uso de complementos de inventario de Ansible Content Collections en Ansible Tower

Para verificar cómo está funcionando todo, intentemos sincronizarnos con la fuente de datos presionando el botón «Sync all». Si todo está configurado correctamente, los nodos deberían importarse a nuestro inventario:

Uso de complementos de inventario de Ansible Content Collections en Ansible Tower

Tenga en cuenta que los grupos necesarios también se han creado.

Conclusión

En esta publicación, hemos revisado cómo usar los complementos de inventario de Ansible Tower de colecciones, usando el complemento de ServiceNow como ejemplo. También hemos establecido de forma segura las credenciales para conectarnos a nuestra instancia de ServiceNow. La vinculación de un complemento de inventario desde el proyecto no solo funciona con complementos de terceros o personalizados, sino que también puede aplicarse para modificar la operación de algunos complementos de inventario estándar. Gracias a esto, Ansible Automation Platform se integra de manera fácil y fluida con herramientas existentes al automatizar entornos de TI que se vuelven cada vez más complejos.

Puede encontrar información adicional sobre los temas tratados en esta publicación, así como sobre otros aspectos de la aplicación de Ansible aquí:

*Red Hat no proporciona ninguna garantía sobre la corrección del código aquí presentado. Todo el material se proporciona en un marco de ausencia de soporte, a menos que se indique lo contrario explícitamente.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster