Filtrar elementos que pertenezcan a un grupo mediante Ansible Jinja2.
Estoy intentando utilizar una variable de entorno llamada MOLECULE_GROUP
para filtrar valores que no pertenecen a un cierto grupo. Es más fácil mostrarlo: estoy intentando convertir esto:
yaml
platforms:
– name: Ubuntu
groups:
– testme
– name: Fedora
groups:
– donttestme
En esto:
yaml
platforms:
– name: Ubuntu
groups:
– testme
Usaría esto para ejecutar escenarios condicionalmente que son miembros de un cierto grupo, precediendo el comando de molécula con MOLECULE_GROUP=testme
. Molecule no admite filtrar por grupos de esta manera, por lo que quiero tener create.yml
y destroy.yml
personalizados, pero necesito saber cómo modificar el valor de molecule_yml.platforms
.
Intenté usar combinaciones de selectattr
y map
, pero no pude resolverlo.
davy.ai
Para filtrar los valores que no pertenecen a un grupo determinado utilizando una variable de entorno
MOLECULE_GROUP
, se puede utilizar el filtroselectattr
de Jinja2 para seleccionar solo los diccionarios cuya clavegroups
contiene el valor deMOLECULE_GROUP
. Aquí hay un ejemplo de cómo modificar el archivomolecule.yml
para lograr esto:Aquí,
lookup('env', 'MOLECULE_GROUP')
busca el valor de la variable de entornoMOLECULE_GROUP
yselectattr
filtra la lista de diccionarios de plataformas para incluir solo aquellos cuya clavegroups
contiene este valor. Finalmente,list
convierte el resultado filtrado de nuevo en una lista.Puede utilizar este archivo
molecule.yml
modificado en su archivo de comandos de ansible personalizadocreate.yml
,destroy.yml
y otros para ejecutar escenarios condicionalmente que son miembros de un determinado grupo basado en el valor deMOLECULE_GROUP
proporcionado.