Ansible: cómo adaptar el formato de salida de los filtros de mapa (con extracto)

Ansible: cómo adaptar el formato de salida de los filtros de mapa (con extracto)

Estoy intentando extraer las direcciones IP de los hosts que forman parte de dos grupos y usarlas en un archivo de configuración .xml.

El problema al que me enfrento aquí es el resultado generado por la expresión utilizada en la plantilla jinja. Lo que quiero lograr es un resultado como 10.3.5.1,10.3.5.2,10.3.5.2pero en lugar de esto obtengo algo como [u'10.3.5.1],[u'10.3.5.2],[u'10.3.5.2].

Esta es la expresión utilizada en la plantilla jinja:

<member1>{{ (groups['group_one']+groups['group_two']) | map('extract',hostvars,'ansible_ip_addresses') | list | unique | join(',') }}</member1>

También probé algunos otros filtros pero no pude obtener el resultado esperado.

¿Qué filtros debo usar para esto? (No pude encontrar los correctos)

Respuesta1

ansible_ip_addresseses una lista, por lo que tiene una lista (de hosts) con listas anidadas (con direcciones IP).

Probablemente quieras aplanarlo antes de aplicarlo uniquey join:

{{ (groups['group_one']+groups['group_two']) | map('extract',hostvars,'ansible_ip_addresses') | list | sum(start=[]) | unique | join(',') }}

Esto creará una lista plana con una única dirección IP como elemento, luego tomará elementos únicos y los unirá con una coma.

información relacionada