w tej chwili używam skryptu powłoki w ansible, który byłby znacznie bardziej czytelny, gdyby znajdował się w wielu wierszach
- name: iterate user groups
shell: groupmod -o -g {{ item['guid'] }} {{ item['username'] }} ....more stuff to do
with_items: "{{ users }}"
Nie wiem tylko, jak zezwolić na wielowierszowy skrypt w module powłoki Ansible
Odpowiedzi:
Ansible używa składni YAML w swoich podręcznikach. YAML ma kilka operatorów bloków:
Jest
>
to operator składanego bloku. Oznacza to, że łączy wiele linii razem spacjami. Następująca składnia:Byłoby przypisać wartość
This text has multiple lines\n
dokey
.|
Postać jest dosłownym operator bloku. To jest prawdopodobnie to, czego potrzebujesz w przypadku wielowierszowych skryptów powłoki. Następująca składnia:Byłoby przypisać wartość
This text\nhas multiple\nlines\n
dokey
.Możesz tego użyć dla wielowierszowych skryptów powłoki, takich jak:
Jest jedno zastrzeżenie: Ansible wykonuje jakąś szaloną manipulację argumentami
shell
polecenia, więc chociaż powyższe będzie działać zgodnie z oczekiwaniami, poniższe nie będą:Ansible faktycznie wyrenderuje ten tekst ze spacjami wiodącymi, co oznacza, że powłoka nigdy nie znajdzie ciągu
EOF
na początku wiersza. Możesz uniknąć niekorzystnej heurystyki Ansible, używająccmd
parametru w ten sposób:źródło
https://support.ansible.com/hc/en-us/articles/201957837-How-do-I-split-an-action-into-a-multi-line-format-
wspomina o kontynuacjach linii YAML.
Jako przykład (próbowano z ansible 2.0.0.2):
Polecenie powłoki jest zwinięte do jednego wiersza, jak w
ls --color /home
źródło
>
ma bardzo specyficzne znaczenie. Próbowałem tego i nie działało zgodnie z oczekiwaniami.Dodanie spacji przed ogranicznikiem EOF pozwala uniknąć cmd:
źródło