Ansible: filtro fetchlistfromdict

Criado em 25 mar. 2016  ·  3Comentários  ·  Fonte: ansible/ansible

TIPO DE PROBLEMA

  • Ideia de recurso
    RESUMO

Digamos que você tenha um array de dicionários e gostaria de construir um array com alguns atributos de dicionário. Existem vários métodos para fazer isso: selectattr, map e o novo filtro de extração .

Isso funciona muito bem até que você decida usar hosts de algum grupo como uma matriz inicial de dicionários. Portanto, você precisa obter hostvars para cada host em um grupo com um filtro. Normalmente, podemos contornar isso com algumas iterações jinja, mas isso não funciona para definir variáveis.

Dito isso, há uma solução :

def fetchlistfromdict(d, l):
    result = []
    for item in l:
        result.append(d[item])

    return result

class FilterModule(object):
    def filters(self):
        return {
            'fetchlistfromdict': fetchlistfromdict,
        }

E agora:

{{ hostvars|fetchlistfromdict(groups['webservers']) |map(attribute='custom_facts.aliases.0.ip')|list}}

Este caso parece ser muito específico e pode estar relacionado ao módulo route53 .

Então, podemos adicionar esse filtro ao ansible? Devo fazer um PR? E a nomenclatura? Eu salvei o original, mas list_from_dict parece melhor para mim.

feature

Comentários muito úteis

Este exemplo deve ser incluído na documentação. Eu pesquisei muito antes de encontrar esse problema.

Todos 3 comentários

{{ hostvars|fetchlistfromdict(groups['webservers']) |map(attribute='custom_facts.aliases.0.ip')|list}}

O que isso faz diferente de

{{ groups['webservers']|map('extract', hostvars, ['custom_facts','aliases','0','ip'])|list }}

?

@amenonsen bom ponto, eu só tentei fazer isso com map(attribute= , parece que o novo filtro de extração faz o trabalho, ansioso para brincar com ele em uma nova versão!

Este exemplo deve ser incluído na documentação. Eu pesquisei muito antes de encontrar esse problema.

Esta página foi útil?
0 / 5 - 0 avaliações