Как сделать многострочный скрипт оболочки в Ansible
сейчас я использую сценарий оболочки в ansible, который был бы гораздо более читаемым, если бы он был на нескольких строках
- name: iterate user groups
shell: groupmod -o -g {{ item['guid'] }} {{ item['username'] }} ....more stuff to do
with_items: "{{ users }}"
просто не знаю, как разрешить многострочный скрипт в модуле Ansible shell
2 ответа:
Ansible использует синтаксис YAML в своих книгах воспроизведения. YAML имеет ряд блочных операторов:
The
>
складывая оператор блока. То есть он соединяет несколько строк вместе пробелами. Следующий синтаксис:key: > This text has multiple lines
присвоит значение
This text has multiple lines\n
доkey
.The
|
символ-это оператор литерального блока. Это, вероятно, то, что вы хотите для многострочных сценариев оболочки. Следующий синтаксис: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 делает некоторые janky манипуляции аргументами к
shell
команда, так что в то время как выше будет обычно работать, как ожидалось, следующее не будет:- shell: | cat <<EOF This is a test. EOF
Ansible фактически отобразит этот текст с ведущими пробелами, что означает, что оболочка никогда не будет найдите строку
EOF
в начале строки. Вы можете избежать бесполезной эвристики Ansible, используя