
Ich brauche eine kleine Hilfe.
shell
Im folgenden Beispiel muss ich es durch ein Modul ersetzen command
. Aber ich bin verwirrt, weil command
es mit Pipe nicht funktioniert.
Also bitte gebt mir die Lösung dieser Aufgabe. Beispiel:
- name: Get the version
become: true
run_once: true
shell: zypper pa | grep eric-odl | awk -F {'print $4'}
register: odl_version
Wie werde ich diese Aufgabe aufteilen, da jede Befehlsausgabe vom nächsten Befehl abhängig ist?
Antwort1
Ich muss es
shell
durchcommand
ein Modul ersetzen.
Vielleicht können Sie mehr Hintergrundinformationen zum Warum und dem, was Sie erreichen möchten, liefern.
Derzeit denke ich, dass man zypper
Sie versuchen,
Pakete (pa) [Optionen] [Repository] …
Listet alle verfügbaren Pakete oder alle Pakete aus angegebenen Repositories auf. Ähnlich wie
zypper search -s -t package
.
und danach gerne mit etwas weitermachen.
Aber ich bin verwirrt,
command
es funktioniert nicht mit Pipe.
Richtig, das ist der Fall und das beabsichtigte Verhalten. Siehe im Beispiel
command
Modul – Befehle auf Zielen ausführenDie Befehle werden nicht über die Shell verarbeitet, daher funktionieren Variablen wie
$HOSTNAME
und Operationen wie "*
", "<
", ">
", "|
", ";
" und " " nicht. Verwenden Sie die&
ansible.builtin.shellModul, wenn Sie diese Funktionen benötigen.shell
Modul – Shell-Befehle auf Zielen ausführenEs ist fast genau wie dasansible.builtin.commandModul, sondern führt den Befehl über eine Shell (
/bin/sh
) auf dem Remote-Knoten aus.Was ist der Unterschied zwischen Ansible
raw
und ?shell
command
Also bitte gib mir die Lösung dieser Aufgabe
Es wird nicht „die eine Lösung“ geben, aber Sie können einen Blick auf die folgende Liste mit den am meisten bis am wenigsten bevorzugten Ansätzen werfen:
- Verwenden von
package_facts
Modul, um Paketinformationen als Fakten zu erhalten - Auswerten
zypper
Modul zur Verwaltung von Paketen unter SUSE und openSUSE - Die Verwendung des
zypper
Befehls in einer anderen Syntax, die keingrep
und oderawk
wie in benötigt - OderSchreiben eines eigenen benutzerdefinierten Moduls
- Oder mit
script
Modul, um ein lokales Skript auf einem Remote-Knoten auszuführen, nachdem es übertragen wurde
Oder bleiben Sie zumindest shell
bei Befehlen mit Pipes (und Ihrem angegebenen Beispiel in seiner aktuellen Form).