прямо сейчас я использую сценарий оболочки в доступе, который был бы намного более читаемым, если бы он был на нескольких строках
- name: iterate user groups
shell: groupmod -o -g {{ item['guid'] }} {{ item['username'] }} ....more stuff to do
with_items: "{{ users }}"
Просто не уверен, как разрешить многострочный скрипт в модуле оболочки Ansible
Ответы:
Ansible использует синтаксис YAML в своих сборниках. YAML имеет ряд блочных операторов:
Оператор
>
складного блока. То есть он объединяет несколько строк пробелами. Следующий синтаксис:Назначить ли значение
This text has multiple lines\n
дляkey
.Этот
|
символ является буквальным оператором блока. Вероятно, это то, что вам нужно для многострочных сценариев оболочки. Следующий синтаксис:Назначить ли значение
This text\nhas multiple\nlines\n
дляkey
.Вы можете использовать это для многострочных сценариев оболочки, например:
Есть одно предостережение: Ansible выполняет некоторую резкую манипуляцию с аргументами
shell
команды, поэтому, хотя приведенное выше, как правило, будет работать должным образом , следующее не будет:Ansible фактически отобразит этот текст с ведущими пробелами, что означает, что оболочка никогда не найдет строку
EOF
в начале строки. Вы можете избежать бесполезной эвристики Ansible, используя следующийcmd
параметр:источник
https://support.ansible.com/hc/en-us/articles/201957837-How-do-I-split-an-action-into-a-multi-line-format-
упоминает продолжения строки YAML.
В качестве примера (пробовал с ansible 2.0.0.2):
Команда оболочки сворачивается в одну строку, как в
ls --color /home
источник
>
есть очень конкретное значение. Я попробовал это, и это не сработало, как ожидалось.Добавление пробела перед разделителем EOF позволяет избежать cmd:
источник