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

2

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>

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

Quais filtros devo usar para isso? (Eu não encontrei os corretos)

    
por pandoJohn 12.03.2018 / 17:34

1 resposta

2

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

Você provavelmente deseja nivelá-lo antes de aplicar unique e join :

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

Isto fará uma lista simples com um único endereço ip como elemento, então pegue itens únicos e junte-os com vírgula.

    
por 12.03.2018 / 20:27

Tags