Ich habe es versucht:
- command: ./configure chdir=/src/package/
- command: /usr/bin/make chdir=/src/package/
- command: /usr/bin/make install chdir=/src/package/
was funktioniert, aber ich denke, es gibt etwas mehr .. ordentlich.
Also habe ich das versucht:
von: /programming/24043561/multiple-commands-in-the-same-line-for-bruker-topspin, die mir "keine solche Datei oder kein solches Verzeichnis" zurückgeben
- command: ./configure;/usr/bin/make;/usr/bin/make install chdir=/src/package/
Ich habe es auch versucht: https://u.osu.edu/hasnan.1/2013/12/16/ansible-run-multiple-commands-using-command-module-and-with-items/
aber ich konnte nicht die richtige Syntax finden, um zu setzen:
- command: "{{ item }}" chdir=/src/package/
with_items:
./configure
/usr/bin/make
/usr/bin/make install
Das funktioniert nicht, da es ein Zitatproblem gibt.
Jemand?
shell
Modul. Wenn Sie die Dokumente auf dem Befehlsmodul lesen, werden Sie sehen, warum es nicht funktioniert. (keine vollständige Antwort, da ich sie nicht getestet habe)Antworten:
Wenn ein Wert in YAML mit einer geschweiften Klammer (
{
) beginnt , geht der YAML-Parser davon aus, dass es sich um ein Wörterbuch handelt . In solchen Fällen, in denen der Wert eine (Jinja2) -Variable enthält, muss eine der beiden folgenden Strategien angewendet werden, um eine Verwechslung des YAML-Parsers zu vermeiden:Zitiere den ganzen Befehl:
- command: "{{ item }} chdir=/src/package/" with_items: - ./configure - /usr/bin/make - /usr/bin/make install
oder ändern Sie die Reihenfolge der Argumente:
- command: chdir=/src/package/ {{ item }} with_items: - ./configure - /usr/bin/make - /usr/bin/make install
Vielen Dank für den alternativen Vorschlag von @RamondelaFuente.
quelle
"cp {{base_dir}}"
.Um mehrere Shell-Befehle mit ansible auszuführen, können Sie das Shell- Modul mit einer mehrzeiligen Zeichenfolge verwenden (beachten Sie die Pipe danach
shell:
), wie in diesem Beispiel gezeigt:quelle
Ich stand vor dem gleichen Problem. In meinem Fall befand sich ein Teil meiner Variablen in einem Wörterbuch, dh mit der Variablen with_dict (Schleife), und ich musste 3 Befehle für jeden item.key ausführen. Diese Lösung ist relevanter, wenn Sie das Wörterbuch with_dict verwenden müssen, um mehrere Befehle auszuführen ( ohne dass with_items erforderlich ist ).
Die Verwendung von with_dict und with_items in einer Aufgabe hat nicht geholfen, da die Variablen nicht aufgelöst wurden.
Meine Aufgabe war wie:
Rollen / git / defaults / main.yml war:
Das Obige führte zu einem Fehler ähnlich dem folgenden für jedes {{item}} (für 3 Befehle wie oben erwähnt). Wie Sie sehen, werden die Werte von tools_dir nicht ausgefüllt (tools_dir ist eine Variable, die in den Standardwerten / main.yml einer allgemeinen Rolle definiert ist, und der Wert item.value.git_tar_dir wurde nicht ausgefüllt / aufgelöst).
Die Lösung war einfach. Anstatt das "COMMAND" -Modul in Ansible zu verwenden, habe ich das "Shell" -Modul verwendet und eine Variable in den Rollen / git / defaults / main.yml erstellt
Nun sieht die Rolle / git / defaults / main.yml folgendermaßen aus:
und die Aufgabenrollen / git / task / main.yml sehen wie folgt aus:
Dieses Mal wurden die Werte erfolgreich ersetzt, da das Modul "SHELL" war und die Ansible-Ausgabe die korrekten Werte wiedergab. Dies erforderte keine with_items: Schleife.
quelle
Sie können auch so vorgehen:
Hoffe das könnte anderen helfen
quelle
Shell arbeitet für mich.
Einfach gesagt, Shell ist dasselbe, wie Sie ein Shell-Skript ausführen.
Anmerkungen:
Das folgende Beispiel zeigt einen Fehler in der Shell, der jedoch am Ende der Ausführung erfolgreich ist.
Dieses Beispiel zeigt das Stoppen der Shell mit dem Fehler von Exit 1.
Referenz: https://docs.ansible.com/ansible/latest/modules/shell_module.html
quelle
Hier ist ein Arbeiter wie dieser. \Ö/
quelle