通常当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
模块访问$Ansible
PowerShell变量