Ansible utilise la syntaxe YAML dans ses playbooks. YAML possède un certain nombre d'opérateurs de bloc :
-
El >
est un opérateur de bloc de pliage. C'est-à-dire qu'il joint plusieurs lignes ensemble par des espaces. La syntaxe suivante :
key: >
This text
has multiple
lines
Assignerait la valeur This text has multiple lines\n
a key
.
-
El |
est un opérateur de bloc littéral. C'est probablement ce que vous voulez pour les scripts shell multi-lignes. La syntaxe suivante :
key: |
This text
has multiple
lines
Assignerait la valeur This text\nhas multiple\nlines\n
a key
.
Vous pouvez l'utiliser pour les scripts shell multilignes comme celui-ci :
- name: iterate user groups
shell: |
groupmod -o -g {{ item['guid'] }} {{ item['username'] }}
do_some_stuff_here
and_some_other_stuff
with_items: "{{ users }}"
Il y a une mise en garde : Ansible fait quelques manipulations bizarres des arguments de la fonction shell
Ainsi, alors que la commande ci-dessus fonctionne généralement comme prévu, la commande suivante ne fonctionne pas :
- shell: |
cat <<EOF
This is a test.
EOF
Ansible rendra en fait ce texte avec des espaces en tête, ce qui signifie que le shell ne trouvera jamais la chaîne de caractères EOF
au début d'une ligne. Vous pouvez éviter l'heuristique peu utile d'Ansible en utilisant l'attribut cmd
comme ceci :
- shell:
cmd: |
cat <<EOF
This is a test.
EOF
2 votes
Vous pouvez également envisager d'utiliser la commande ansible 'script' et d'utiliser un fichier externe.