Ansible: como adaptar o formato de saída dos filtros de mapa (com extração)

Ansible: como adaptar o formato de saída dos filtros de mapa (com extração)

Estou tentando extrair os endereços IP dos hosts que fazem parte de dois grupos e usá-los em um arquivo de configuração .xml.

O problema que estou enfrentando aqui é a saída gerada pela expressão usada no modelo jinja. O que eu quero alcançar é uma saída como 10.3.5.1,10.3.5.2,10.3.5.2, mas em vez disso estou obtendo algo como [u'10.3.5.1],[u'10.3.5.2],[u'10.3.5.2].

Esta é a expressão usada no modelo jinja:

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

Também tentei alguns outros filtros, mas não consegui o resultado esperado.

Quais filtros devo usar para isso? (não consegui encontrar os corretos)

Responder1

ansible_ip_addressesé uma lista, então você tem uma lista (de hosts) com listas aninhadas (com endereços IP).

Você provavelmente deseja alisá-lo antes de aplicar uniquee join:

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

Isso criará uma lista simples com um único endereço IP como elemento, depois pegará itens exclusivos e os unirá com vírgula.

informação relacionada