Ansible: récupérer la liste du filtre dict

Créé le 25 mars 2016  ·  3Commentaires  ·  Source: ansible/ansible

TYPE DE PROBLEME

  • Idée de fonctionnalité
    RÉSUMÉ

Supposons que vous disposiez d'un tableau de dictionnaires et que vous souhaitiez créer un tableau avec certains attributs de dictionnaire. Il existe plusieurs méthodes pour le faire : selectattr, map et le nouveau filtre d'extraction .

Cela fonctionne très bien jusqu'à ce que vous décidiez d'utiliser les hôtes d'un groupe comme tableau initial de dictionnaires. Vous devez donc obtenir hostvars pour chaque hôte d'un groupe avec un filtre. Nous pouvons généralement contourner ce problème avec quelques itérations jinja, mais cela ne fonctionne pas pour définir des variables.

Cela dit il y a une solution :

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

    return result

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

Et maintenant:

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

Ce cas semble être très spécifique et pourrait être lié au module route53 .

Alors peut-on ajouter ce filtre à ansible ? Dois-je faire un PR ? Qu'en est-il de la dénomination ? J'ai conservé l'original, mais list_from_dict me convient mieux.

feature

Commentaire le plus utile

Cet exemple devrait être inclus dans la documentation. J'ai cherché assez longtemps avant de trouver ce problème.

Tous les 3 commentaires

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

Qu'est-ce que cela fait différemment de

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

?

@amenonsen bon point, j'ai seulement essayé d'obtenir cela avec map(attribute= , on dirait que le nouveau filtre d'extraction fait le travail, j'ai hâte de jouer avec dans une nouvelle version !

Cet exemple devrait être inclus dans la documentation. J'ai cherché assez longtemps avant de trouver ce problème.

Cette page vous a été utile?
0 / 5 - 0 notes