joe-speedboat.fact_inventory
Nombre del rol
joe-speedboat.fact_inventory
Descripción
Este rol de Ansible te permite recopilar hechos esenciales de varios recursos de punto final, proporcionando información valiosa para gestionar tu infraestructura. Ya sea que necesites desplegar máquinas virtuales, crear un resumen de tus recursos o visualizar topologías de red, este rol simplifica el proceso al recolectar hechos de diferentes puntos finales.
Características
- Independiente de Recursos: Funciona con una variedad de recursos de punto final, como VMware vCenter, AWS, Azure, y más.
- Fácil Configuración: Configuración sencilla usando variables YAML para especificar los recursos de los cuales deseas recopilar hechos.
- Datos Estructurados: Recopila datos estructurados, incluyendo centros de datos, clústeres, anfitriones, máquinas virtuales, almacenes de datos, redes, y más.
- Salida JSON: Genera un archivo JSON bien formateado con los hechos recopilados, adecuado para análisis o visualización posteriores.
Requisitos
- Ansible >= 2.11
- Python >= 3.6 (en el host objetivo)
- Paquetes de Python:
- pip
- setuptools
- vsphere-automation-sdk-python
- Colección de Ansible:
- community.vmware
Variables del rol
Las siguientes variables están disponibles para configuración:
inventory_file
: La ruta al archivo de inventario. El valor predeterminado es/tmp/fact_inventory.json
.debug_vars
: Un booleano para activar el modo de depuración. El valor predeterminado esTrue
.inventory_targets
: Una lista de objetivos de los cuales recopilar hechos. Cada objetivo debe ser un diccionario con las siguientes claves:ressource_name
: El nombre del recurso.type
: El tipo del recurso (por ejemplo, "vsphere").validate_certs
: Un booleano para activar la validación de certificados.vcenter_api_url
: La URL de la API de vCenter.vcenter_username
: El nombre de usuario para la API de vCenter.vcenter_password
: La contraseña para la API de vCenter.datacenter_regex
: Una expresión regular para filtrar los centros de datos.cluster_regex
: Una expresión regular para filtrar los clústeres.host_regex
: Una expresión regular para filtrar los anfitriones.datastore_regex
: Una expresión regular para filtrar los almacenes de datos.network_regex
: Una expresión regular para filtrar las redes.vm_folder_regex
: Una expresión regular para filtrar las carpetas de VM.
Dependencias
Ninguna.
Licencia
GPLv3
Uso
Para usar este rol, debes especificar las variables en la lista inventory_targets
en tu libro de jugadas o en el archivo defaults/main.yml
. Cada elemento de la lista representa un objetivo del cual recopilar hechos.
Las variables datacenter_regex
, cluster_regex
, host_regex
, datastore_regex
, network_regex
y vm_folder_regex
te permiten filtrar los resultados de la API de vSphere. Estas variables aceptan expresiones regulares. Por ejemplo, si deseas recopilar hechos solo de centros de datos cuyos nombres comienzan con "dc", puedes establecer datacenter_regex
a '^dc'.
Pruebas
Antes de ejecutar las pruebas, necesitas crear un archivo vars.yml
en el directorio tests
con tu configuración específica. Puedes hacer esto copiando el archivo vars_example.yml
:
cp tests/vars_example.yml tests/vars.yml
Luego, completa el archivo vars.yml
con tus valores específicos, incluyendo las expresiones regulares para filtrar.
Para ejecutar las pruebas, ejecuta el siguiente comando:
ansible-playbook tests/test.yml -i tests/inventory
Este comando ejecutará el libro de jugadas test.yml
utilizando el archivo de inventario ubicado en el directorio tests
.
Script CGI para Opciones de Rundeck
Con Rundeck y JSON, puedes crear menús de trabajo excelentes.
Pero para eso necesitas configurar el servidor CGI primero y usarlo con el archivo de recursos JSON, creado por este rol.
Aquí está cómo configurar lighttpd
con CGI en Rocky Linux 8:
dnf install lighttpd
systemctl enable lighttpd
cp -av /etc/lighttpd/modules.conf /etc/lighttpd/modules.conf.orig
cp -av /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig
cp -av /etc/lighttpd/conf.d/cgi.conf /etc/lighttpd/conf.d/cgi.conf.orig
sed -i 's@.*\(include.*conf.d/cgi.conf"\).*@\1@' /etc/lighttpd/modules.conf
sed -i 's@.*server\.use-ipv6.*@server\.use-ipv6 = "disable"@' /etc/lighttpd/lighttpd.conf
sed -i 's@.*server\.bind.*@server\.bind = "localhost"@' /etc/lighttpd/lighttpd.conf
sed -i 's@.*server\.port.*@server\.port = 8888@' /etc/lighttpd/lighttpd.conf
semanage port -a -t http_port_t -p tcp 8888
systemctl restart lighttpd
systemctl status lighttpd
lsof -i -P -n | grep light
test -f /usr/bin/python && ln -s /usr/bin/python3 /usr/bin/python
mkdir -p /var/www/lighttpd/cgi-bin
vi /var/www/lighttpd/cgi-bin/test.cgi
------------------
#!/usr/bin/env python3
print("Content-Type: text/html") # HTML sigue
print() # línea en blanco, fin de encabezados
print("<html>")
print("<head><title>Hola CGI</title></head>")
print("<body>")
print("<h1>Hola Mundo</h1>")
print("</body>")
print("</html>")
----------------------
chmod +x /var/www/lighttpd/cgi-bin/test.cgi
curl http://127.0.0.1:8888/cgi-bin/test.cgi
En este rol, proporcioné un CGI que se puede usar para servir estas opciones, está en tests/cgi-bin/option.py
, solo cópialo al directorio cgi-bin, actualiza la ubicación del archivo JSON y llámalo.
Ten en cuenta que este CGI es solo una prueba de concepto en este momento, rápido y sucio.
cp tests/cgi-bin/option.py /var/www/lighttpd/cgi-bin/option.cgi
chmod +x /var/www/lighttpd/cgi-bin/option.cgi
vi /var/www/lighttpd/cgi-bin/option.cgi # actualiza la ubicación del archivo JSON
Y luego puedes llamarlo dentro de Rundeck:
[ "Datacenter1" ]
[ "Cluster1" ]
[ "LUN_01_VM_Replica", "LUN_02_VM_Replicas" ]
Y esto es bastante asombroso ... con muy poco esfuerzo.
ansible-galaxy install joe-speedboat.fact_inventory