J'ai un modèle Jinja2 dans Ansible et j'ai besoin d'inclure certains fichiers sous condition. Fondamentalement, j'ai une boucle for qui inclut des "sous-parties" qui pourraient ou pourraient ne pas être présentes. L'exemple suivant illustre le code de base qui fonctionnerait si tous les outils avaient en fait un fichier « pbr.j2 », mais il se bloque parce que Ansible ne peut pas trouver certains fichiers:Ansible: Inclure un fichier s'il existe et ne rien faire s'il ne fonctionne pas
{% for tool in tools %}
{% set template = 'tools/' + tool.name + '/pbr.j2' %}
{% include template %}
{% endfor %}
J'ai aussi essayé le exists
et is_file
filtres, mais je reçois toujours "faux" même lorsque le fichier existe. Voici un exemple de code de ce que j'ai essayé:
{% for tool in tools %}
{% set template = 'tools/' + tool.name + '/pbr.j2' %}
{% if template|exists %}
{% include template %}
{% endif %}
{% endfor %}
Le résultat de ce dernier exemple est qu'aucun fichier n'est inclus. Si je remplace exists
par is_file
, j'ai le même comportement.
Que dois-je changer pour accomplir ce que je veux?
J'ai vu que les filtres étaient censés être utilisés dans les fichiers .yml et je n'ai pas trouvé d'aide pour référencer les tests de fichiers dans les templates Jinja2, mais j'ai pensé qu'il y avait probablement des filtres simples pour accomplir ce que je veux mais ça n'a tout simplement pas été documenté. Je vais aller avec la route de tâche à la place et passer la liste au modèle Jinja2. Merci pour votre aide, j'apprécie vraiment! – Drizzt