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 unique
e 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.