Ansible: filtro fetchlistfromdict

Creado en 25 mar. 2016  ·  3Comentarios  ·  Fuente: ansible/ansible

TIPO DE PROBLEMA

  • Idea característica
    RESUMEN

Digamos que tiene una matriz de diccionarios y le gustaría crear una matriz con algunos atributos de diccionario. Hay varios métodos para hacer esto: selectattr, map y el nuevo filtro de extracción .

Eso funciona muy bien hasta que decide usar hosts de algún grupo como una matriz inicial de diccionarios. Entonces, debe obtener hostvars para cada host en un grupo con un filtro. Por lo general, podemos solucionar esto con algunas iteraciones jinja, pero eso no funciona para establecer variables.

Dicho esto, hay una solución :

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

    return result

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

Y ahora:

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

Este caso parece ser muy específico y podría estar relacionado con el módulo route53 .

Entonces, ¿podemos agregar este filtro a ansible? ¿Hago un PR? ¿Qué pasa con el nombramiento? Guardé el original pero list_from_dict me parece mejor.

feature

Comentario más útil

Este ejemplo debe incluirse en la documentación. Busqué mucho antes de encontrar este problema.

Todos 3 comentarios

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

¿Qué hace esto diferente de

{{ grupos['servidores web']|map('extract', hostvars, ['custom_facts','aliases','0','ip'])|list }}

?

@amenonsen buen punto, solo he intentado obtener esto con map(attribute= , parece que el nuevo filtro de extracción hace el trabajo, ¡espero jugar con él en una nueva versión!

Este ejemplo debe incluirse en la documentación. Busqué mucho antes de encontrar este problema.

¿Fue útil esta página
0 / 5 - 0 calificaciones