A Ansible usa a sintaxe YAML em seus manuais. YAML tem vários operadores de bloco:
O >é um operador de bloco dobrável. Ou seja, ele une várias linhas por espaços. A seguinte sintaxe:
key: >
This text
has multiple
lines
Atribuiria o valor This text has multiple lines\na key.
O |personagem é um operador de bloco literal. Isso é provavelmente o que você deseja para scripts de shell de várias linhas. A seguinte sintaxe:
key: |
This text
has multiple
lines
Atribuiria o valor This text\nhas multiple\nlines\na key.
Você pode usar isso para scripts de shell de várias linhas como este:
- name: iterate user groups
shell: |
groupmod -o -g {{ item['guid'] }} {{ item['username'] }}
do_some_stuff_here
and_some_other_stuff
with_items: "{{ users }}"
Há uma ressalva: o Ansible faz alguma manipulação desajeitada de argumentos para o shellcomando, portanto, embora o acima funcione normalmente, o seguinte não:
- shell: |
cat <<EOF
This is a test.
EOF
Na verdade, o Ansible renderizará esse texto com espaços à esquerda, o que significa que o shell nunca encontrará a string EOFno início de uma linha. Você pode evitar as heurísticas inúteis do Ansible usando o cmdparâmetro como este:
- shell:
cmd: |
cat <<EOF
This is a test.
EOF