如何让 Ansible 在启动 PowerShell 脚本时返回"OK"(没有任何更改)?



通常当Ansible启动带有win_command/win_shell/win_psexec的PowerShell脚本时,只要它没有遇到错误,它就会返回changed,因为它当然不知道所有的脚本做了什么。

既然我们可以在PowerShell脚本中返回任何退出代码,有没有一种方法,通过退出代码或其他方式,通知Ansible,没有必要的改变,以便Ansible返回OK状态?

或者它将总是返回changed无论什么(假设没有失败)?

它会返回changed,因为它当然不知道脚本做了什么

正确,因为这是为这种类型的模块定义的默认行为。

关于你的问题

既然我们可以在PowerShell脚本中返回任何退出代码,是否有一种方法,通过退出代码或其他方式,通知Ansible没有必要进行更改,以便Ansible返回OK状态?

这已经是正确的想法了。换言之,是的,这种行为是可能的。

除了已经给出的关于定义changed的注释之外,还需要定义失败。这是因为否则non-zero return code将导致失败。

最小示例剧本

---
- hosts: localhost
become: false
gather_facts: false
tasks:
- name: Exec sh command
shell:
cmd: "echo ''; exit 254;"
register: result
failed_when: result.rc != 0 and result.rc != 254
changed_when: result.rc != 254
- name: Show result
debug:
msg: "{{ result }}"

将导致

的输出
TASK [Exec sh command] *****************
TASK [Show result] *********************
ok: [localhost] =>
msg:
changed: false
cmd: echo ''; exit 254;
delta: '0:00:00.012397'
end: '2022-12-24 18:00:00.012397'
failed: false
failed_when_result: false
msg: non-zero return code
rc: 254
start: '2022-12-24 18:00:00.000000'
stderr: ''
stderr_lines: []
stdout: ''
stdout_lines: []

类似Q&

  • shell命令和设置任务changed
  • win_powershell模块访问$AnsiblePowerShell变量

最新更新