en ce moment j'utilise un script shell en ansible qui serait beaucoup plus lisible s'il était sur plusieurs lignes
- name: iterate user groups
shell: groupmod -o -g {{ item['guid'] }} {{ item['username'] }} ....more stuff to do
with_items: "{{ users }}"
Je ne sais pas comment autoriser le script multiligne dans le module shell Ansible
Réponses:
Ansible utilise la syntaxe YAML dans ses playbooks. YAML a un certain nombre d'opérateurs de bloc:
Le
>
est un opérateur de bloc pliant. Autrement dit, il joint plusieurs lignes ensemble par des espaces. La syntaxe suivante:Attribuerait la valeur
This text has multiple lines\n
àkey
.Le
|
caractère est un opérateur de bloc littéral. C'est probablement ce que vous voulez pour les scripts shell multi-lignes. La syntaxe suivante:Attribuerait la valeur
This text\nhas multiple\nlines\n
àkey
.Vous pouvez l'utiliser pour les scripts shell multilignes comme celui-ci:
Il y a une mise en garde: Ansible fait une manipulation saccadée des arguments de la
shell
commande, donc si ce qui précède fonctionnera généralement comme prévu, ce qui suit ne le sera pas:Ansible rendra ce texte avec des espaces
EOF
au début , ce qui signifie que le shell ne trouvera jamais la chaîne au début d'une ligne. Vous pouvez éviter les heuristiques inutiles d'Ansible en utilisant lecmd
paramètre comme celui-ci:la source
https://support.ansible.com/hc/en-us/articles/201957837-How-do-I-split-an-action-into-a-multi-line-format-
mentionne les continuations de la ligne YAML.
A titre d'exemple (essayé avec ansible 2.0.0.2):
La commande shell est réduite en une seule ligne, comme dans
ls --color /home
la source
>
a une signification très spécifique. J'ai essayé cela et cela n'a pas fonctionné comme prévu.L'ajout d'un espace avant le délimiteur EOF permet d'éviter cmd:
la source