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\n
a 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\n
a 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 shell
comando, 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 EOF
no início de uma linha. Você pode evitar as heurísticas inúteis do Ansible usando o cmd
parâmetro como este:
- shell:
cmd: |
cat <<EOF
This is a test.
EOF