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