passando lista de listas em um playbook para um único comando (não com_itens)

1

Eu dois grupos de hosts: dc1 e dc2. Também combinado a um grupo DC.

Eu preciso passar uma lista de endereços IP de hosts de um DC externo para um comando. with_items não funciona aqui.

Deve ser assim:

somescript -H 10.10.10.3 -H 10.10.10.4

Então, há 2 pontos: 1. Obter lista de hosts no grupo DC excluindo os do grupo principal do host. Não tenho certeza se isso é possível, então o jeito sujo é definir uma variável remote_dc (ou array). 2. Digamos que temos uma lista de hosts da p.1: groups [remote_dc]. Como usá-lo como chave para os hostvars [chave] ['ansible_eth1'] ['ipv4'] ['endereço'] e obter resultado como uma lista?

Por enquanto eu tive que usar uma maneira muito suja: eu criei uma lista remote_addresses para cada grupo DC e iterou assim:

command: somescript -H {{ remote_addresses|join(' -H ') }}

Então existe uma maneira correta de implementar p.1 e p.2 e omitir a criação manual da lista de endereços ip?

    
por hryamzik 06.10.2014 / 13:05

1 resposta

4

A documentação segura tem este exemplo:

A frequently used idiom is walking a group to find all IP addresses in that group:

{% for host in groups['app_servers'] %}
   {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}
{% endfor %}

Faz aproximadamente o que você quer. Você pode usá-lo assim:

- name: Execute somescript
  command: >
    somescript {% for host in groups['app_servers'] %}
                  -H {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}
               {% endfor %}

Agora, você também deseja excluir o próprio host da lista de endereços IP. Você pode fazer isso modificando o {% for %} da seguinte forma:

{% for host in groups['app_servers'] if host != ansible_host %}

Em vez de ansible_host , talvez seja necessário usar ansible_fqdn ou ansible_nodename . Você deve verificar o que funciona para você.

    
por 06.10.2014 / 17:40

Tags