
win_command
通常,當 Ansible 使用/ win_shell
/啟動 PowerShell 腳本時win_psexec
,只要沒有遇到錯誤,它就會返回“已更改”,因為它當然不知道所有腳本都做了什麼。
既然我們可以在 PowerShell 腳本中返回任何退出程式碼,是否有辦法透過退出程式碼或其他方式通知 Ansible 不需要進行任何更改,以便 Ansible 返回「ok」狀態?或者無論如何它都會返回“已更改”(假設沒有失敗)?
答案1
我想我找到了。這win_powershell模組存取$Ansible
PowerShell 變量,由此我可以修改返回到控制器的資訊。
來自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
是完全可以接受的。