Ansible использует синтаксис YAML в своих сборниках. YAML имеет ряд блочных операторов:
Оператор >складного блока. То есть он объединяет несколько строк пробелами. Следующий синтаксис:
key: >
This text
has multiple
lines
Назначить ли значение This text has multiple lines\nдля key.
Этот |символ является буквальным оператором блока. Вероятно, это то, что вам нужно для многострочных сценариев оболочки. Следующий синтаксис:
key: |
This text
has multiple
lines
Назначить ли значение This text\nhas multiple\nlines\nдля key.
Вы можете использовать это для многострочных сценариев оболочки, например:
- name: iterate user groups
shell: |
groupmod -o -g {{ item['guid'] }} {{ item['username'] }}
do_some_stuff_here
and_some_other_stuff
with_items: "{{ users }}"
Есть одно предостережение: Ansible выполняет некоторую резкую манипуляцию с аргументами shellкоманды, поэтому, хотя приведенное выше, как правило, будет работать должным образом , следующее не будет:
- shell: |
cat <<EOF
This is a test.
EOF
Ansible фактически отобразит этот текст с ведущими пробелами, что означает, что оболочка никогда не найдет строку EOFв начале строки. Вы можете избежать бесполезной эвристики Ansible, используя следующий cmdпараметр:
- shell:
cmd: |
cat <<EOF
This is a test.
EOF