Ansible usa la sintaxis YAML en sus libros de jugadas. YAML tiene varios operadores de bloque:
El >
es un operador de bloque plegable. Es decir, une varias líneas mediante espacios. La siguiente sintaxis:
key: >
This text
has multiple
lines
Asignaría el valor This text has multiple lines\n
a key
.
El |
personaje es un operador de bloque literal. Esto es probablemente lo que desea para los scripts de shell de varias líneas. La siguiente sintaxis:
key: |
This text
has multiple
lines
Asignaría el valor This text\nhas multiple\nlines\n
a key
.
Puede usar esto para scripts de shell de varias líneas 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 }}"
Hay una advertencia: Ansible realiza una manipulación tonta de los argumentos del shell
comando, por lo que, si bien lo anterior generalmente funcionará como se esperaba, lo siguiente no lo hará:
- shell: |
cat <<EOF
This is a test.
EOF
Ansible en realidad representará ese texto con espacios EOF
iniciales , lo que significa que el shell nunca encontrará la cadena al comienzo de una línea. Puede evitar las inútiles heurísticas de Ansible utilizando el cmd
parámetro como este:
- shell:
cmd: |
cat <<EOF
This is a test.
EOF