J'utilise des playbooks Ansible générés par programmation. En général, parce que les playbooks ne sont que du YAML, c'est simple. Cependant, lorsque vous utilisez le key=value
formulaire "simple" , les playbooks ne sont pas du pur YAML - ils incluent du contenu intégré sous une shlex
forme comparable.
Pour éviter l'ambiguïté sous cette forme (est-ce que cette key=value
paire est un argument de la commande ou un argument pour ansible?), Et n'ai qu'un seul format à analyser et à générer, j'utilise inconditionnellement le mécanisme d'arguments complexes démontré par l'exemple dans l'ansible -exemple de référentiel .
Cela utilise une syntaxe du type suivant:
action: module-name
args:
key1: value1
key2: value2
... ce qui est bien et bon. Cependant, lorsque vous essayez d'utiliser ce formulaire pour les modules shell
ou command
( dont la documentation décrit la commande réelle comme passée dans un argument nommé free_form
), cela ne fonctionne pas si bien:
action: shell
args:
free_form: echo hello_world >/tmp/something
creates: /tmp/something
Lorsqu'elle est invoquée, elle exécute ce qui suit:
/bin/sh -c " free_form='echo hello_world >/tmp/something' "
... ce qui n'est pas du tout ce que j'essaie d'accomplir.
Quelle est la bonne façon d'utiliser les modules Ansible en prenant des commandes "de forme libre" en utilisant la pure syntaxe YAML?
- shell: ...
? Si cette structure est quelque chose qui ne peut être généré de manière fiable qu'à la main, cela va quelque peu à l'encontre du point de la question.