當 Ansible 啟動 PowerShell 腳本時,如何讓 Ansible 回傳「ok」(沒有任何變更)?

當 Ansible 啟動 PowerShell 腳本時,如何讓 Ansible 回傳「ok」(沒有任何變更)?

win_command通常,當 Ansible 使用/ win_shell/啟動 PowerShell 腳本時win_psexec,只要沒有遇到錯誤,它就會返回“已更改”,因為它當然不知道所有腳本都做了什麼。

既然我們可以在 PowerShell 腳本中返回任何退出程式碼,是否有辦法透過退出程式碼或其他方式通知 Ansible 不需要進行任何更改,以便 Ansible 返回「ok」狀態?或者無論如何它都會返回“已更改”(假設沒有失敗)?

答案1

我想我找到了。這win_powershell模組存取$AnsiblePowerShell 變量,由此我可以修改返回到控制器的資訊。

來自win_powershell文件:

  • $Ansible.Result是按原樣返回到控制器的值。
  • $Ansible.Diff是在 ansible.windows 1.12.0 版本中新增的,它是一個字典,設定為可由 Ansible 解釋的 diff 結果。
  • $Ansible.Changed可以設定為 true 或 false 以反映模組是否進行了更改。預設情況下,此設定為 true。
  • $Ansible.Failed如果腳本想要將失敗回傳給控制器,可以設定為 true。
  • $Ansible.Tmpdir是用作暫存位置的臨時目錄的路徑,該臨時目錄在模組完成後會被清除。
  • $Ansible.Verbosity揭示了 Ansible 在此劇中的冗長程度。允許腳本根據詳細程度設定 VerbosePreference/DebugPreference。 1.9.0 中新增。

答案2

簡而言之,作為偽代碼示例,基於您的 rc 變化場景,我們可以想像您在0沒有任何更改時退出、在4某些內容髮生更改時退出以及在出現問題時使用任何其他代碼退出...

- 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

有關更多信息,請參閱playbook 中的錯誤處理

請注意,對於嚴格提供資訊並且從不更改任何內容的命令changed_when: false是完全可以接受的。

相關內容