Wie bringt man Ansible dazu, „ok“ zurückzugeben (nichts geändert), wenn Ansible ein PowerShell-Skript initiiert?

Wie bringt man Ansible dazu, „ok“ zurückzugeben (nichts geändert), wenn Ansible ein PowerShell-Skript initiiert?

win_commandWenn 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 $AnsiblePowerShell-Variable zu, wodurch ich ändern kann, welche Informationen an den Controller zurückgegeben werden.

Von demwin_powershellDokumentation:

  • $Ansible.Resultist ein Wert, der unverändert an den Controller zurückgegeben wird.
  • $Ansible.Diffwurde 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.Changedkann 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.Failedkann auf „true“ gesetzt werden, wenn das Skript den Fehler an den Controller zurückgeben möchte.
  • $Ansible.Tmpdirist der Pfad zu einem temporären Verzeichnis, das als Zwischenspeicherort verwendet und nach Abschluss des Moduls bereinigt wird.
  • $Ansible.Verbosityzeigt 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, 0wenn sich nichts geändert hat, mit, 4wenn 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: falsevollkommen akzeptabel ist.

verwandte Informationen