Im Moment verwende ich ein Shell-Skript in Ansible, das viel besser lesbar wäre, wenn es in mehreren Zeilen wäre
- name: iterate user groups
shell: groupmod -o -g {{ item['guid'] }} {{ item['username'] }} ....more stuff to do
with_items: "{{ users }}"
Ich bin mir nur nicht sicher, wie ich ein mehrzeiliges Skript im Ansible-Shell-Modul zulassen soll
Antworten:
Ansible verwendet in seinen Playbooks die YAML-Syntax. YAML hat eine Reihe von Blockoperatoren:
Das
>
ist ein Faltblockoperator. Das heißt, es verbindet mehrere Zeilen durch Leerzeichen. Die folgende Syntax:Würden Sie den Wert zuweisen
This text has multiple lines\n
zukey
.Das
|
Zeichen ist ein Literalblockoperator. Dies ist wahrscheinlich das, was Sie für mehrzeilige Shell-Skripte wünschen. Die folgende Syntax:Würden Sie den Wert zuweisen
This text\nhas multiple\nlines\n
zukey
.Sie können dies für mehrzeilige Shell-Skripte wie das folgende verwenden:
Es gibt eine Einschränkung: Ansible führt einige ruckelige Manipulationen von Argumenten für den
shell
Befehl durch, sodass die oben genannten Funktionen im Allgemeinen wie erwartet funktionieren, die folgenden jedoch nicht:Ansible rendert diesen Text tatsächlich mit führenden Leerzeichen, was bedeutet, dass die Shell die Zeichenfolge nie
EOF
am Anfang einer Zeile findet. Sie können die nicht hilfreichen Heuristiken von Ansible vermeiden, indem Sie den folgendencmd
Parameter verwenden:quelle
https://support.ansible.com/hc/en-us/articles/201957837-How-do-I-split-an-action-into-a-multi-line-format-
erwähnt die Fortsetzung der YAML-Leitung.
Als Beispiel (versucht mit ansible 2.0.0.2):
Der Shell-Befehl wird wie in einer einzelnen Zeile zusammengefasst
ls --color /home
quelle
>
hat eine ganz bestimmte Bedeutung. Ich habe es versucht und es hat nicht wie erwartet funktioniert.Durch Hinzufügen eines Leerzeichens vor dem EOF-Trennzeichen kann cmd vermieden werden:
quelle