2015-12-15 2 views
0

Je rencontre un problème plutôt étrange lors de l'analyse des résultats d'une commande salt. La commande Je courais estAnalyse/extraction de OrderedDict en utilisant Jinja dans Salt

{% set hostname = salt['publish.publish']('roles:*{}*'.format(role), 'grains.item', 'fqdn', 'grain') %} 

Et sortie regarde ci-dessous:

OrderedDict([('1.server.com', OrderedDict([('fqdn', '1.server.com')])), ('0.server.com', OrderedDict([('fqdn', '0.server.com')]))]) 

Maintenant, je crois comprendre quand je fais des éléments() sur le résultat ci-dessus avec une ligne ci-dessous, il devrait fonctionner

{% for hostname, fqdn in salt['publish.publish']('roles:*{}*'.format(role), 'grains.item', 'fqdn', 'grain').items() %} 

Mais le moment que j'utilise items() en ligne au-dessus je commence à courir dans une erreur:

failed: Jinja variable 'None' has no attribute 'items' 

J'ai essayé plusieurs autres moyens (Faire des items(). Items() ou stocker des résultats dans une variable et ensuite lancer une boucle) pour obtenir la liste de OrderedDict mais aucun des moyens semble aider.

Répondre

0

Soit je ne connais pas assez Python, soit il se passe quelque chose de bizarre. Il suffit d'ajouter une vérification a fait le travail ci-dessus. Donc, bloc de travail ressemble (code partiel bien sûr):

{% set hostname = salt['publish.publish']('roles:*{}*'.format(role), 'grains.item', 'fqdn', 'grain') %} 
{% if hostname is not none %} 
{% for host, site in hostname.items() %} 

Ma compréhension est if vérification n'a été destiné à la vérification au cas où hostname est vide. Mais il semble que même s'il y a des données - une vérification est nécessaire. Toujours curieux de connaître le mystère!