J'ai créé https://github.com/eparis/ansible-inventory-bug pour montrer exactement ce que je veux dire avec un reproducteur propre que tout le monde peut exécuter localement. Il a à la fois un inventaire « dynamique » et un inventaire statique.
(Pour « dynamique », c'est vraiment juste du chat dans certains json, mais cela montre clairement le problème)
Avec un fichier d'inventaire statique, when: inventory_hostname in {{ groups['group'] }}
fonctionne très bien. Mais avec l'inventaire dynamique, il échoue avec ce qui ressemble à un gâchis de localisation python/gestion de chaîne ...
Alors j'ai fait beaucoup d'expérimentations et j'ai trouvé
Travaux:
when: inventory_hostname in groups['group']
Échoue:
when: inventory_hostname in {{ groups['group'] }}
C'est donc l'ensemble supplémentaire de {{ }} qui pose problème. Bien que je ne sache pas pourquoi cela fonctionne pour le statique mais pas pour le dynamique.
Vous ne devriez pas utiliser {{ }} dans quand (nous devrions en fait en faire une erreur), la raison pour laquelle le statique/dynamique fonctionne un peu différemment ici semble être due au type d'objet renvoyé à la fin, liste vs chaîne unicode .
fermeture comme ci-dessus
Commentaire le plus utile
Alors j'ai fait beaucoup d'expérimentations et j'ai trouvé
Travaux:
when: inventory_hostname in groups['group']
Échoue:
when: inventory_hostname in {{ groups['group'] }}
C'est donc l'ensemble supplémentaire de {{ }} qui pose problème. Bien que je ne sache pas pourquoi cela fonctionne pour le statique mais pas pour le dynamique.