%2C%20wenn%20Ansible%20ein%20PowerShell-Skript%20initiiert%3F.png)
win_command
Wenn Ansible ein PowerShell-Skript mit / win_shell
/ startet win_psexec
, gibt es normalerweise „changed“ zurück, sofern keine Fehler auftreten, da es natürlich nicht weiß, was das Skript alles gemacht hat.
Da wir in einem PowerShell-Skript jeden Exit-Code zurückgeben können, gibt es eine Möglichkeit, Ansible über Exit-Codes oder auf andere Weise zu benachrichtigen, dass keine Änderung erforderlich war, sodass Ansible den Status „OK“ zurückgibt? Oder wird immer „geändert“ zurückgegeben, egal was passiert (sofern kein Fehler vorliegt)?
Antwort1
Ich glaube, ich habe es gefunden.win_powershellModul greift auf die $Ansible
PowerShell-Variable zu, wodurch ich ändern kann, welche Informationen an den Controller zurückgegeben werden.
Von demwin_powershellDokumentation:
$Ansible.Result
ist ein Wert, der unverändert an den Controller zurückgegeben wird.$Ansible.Diff
wurde in der Version 1.12.0 von ansible.windows hinzugefügt und ist ein Wörterbuch, das auf das von Ansible interpretierbare Diff-Ergebnis eingestellt ist.$Ansible.Changed
kann auf „true“ oder „false“ gesetzt werden, um anzugeben, ob das Modul eine Änderung vorgenommen hat oder nicht. Standardmäßig ist dies auf „true“ gesetzt.$Ansible.Failed
kann auf „true“ gesetzt werden, wenn das Skript den Fehler an den Controller zurückgeben möchte.$Ansible.Tmpdir
ist der Pfad zu einem temporären Verzeichnis, das als Zwischenspeicherort verwendet und nach Abschluss des Moduls bereinigt wird.$Ansible.Verbosity
zeigt Ansibles Ausführlichkeitsstufe für dieses Spiel an. Ermöglicht dem Skript, VerbosePreference/DebugPreference basierend auf der Ausführlichkeit festzulegen. Hinzugefügt in 1.9.0.
Antwort2
Kurz gesagt als Pseudocodebeispiel, basierend auf Ihrem RC-Variationsszenario, in dem wir uns vorstellen könnten, dass Sie mit beenden, 0
wenn sich nichts geändert hat, mit, 4
wenn sich etwas geändert hat, und mit jedem anderen Code, wenn etwas schiefgelaufen ist ...
- name: some shell task
ansible.windows.win_command: my_command
register: my_command
failed_when: my_command.rc | int not in [0,4]
changed_when: my_command.rc | int == 4
Weitere Informationen finden Sie unterFehlerbehandlung in Playbooks
Beachten Sie, dass dies für Befehle, die ausschließlich informativen Charakter haben und nie etwas ändern, changed_when: false
vollkommen akzeptabel ist.