win_command
通常,当 Ansible 使用//启动 PowerShell 脚本时,只要它没有遇到错误,它就会返回“已更改”,因为它当然不知道脚本做了什么win_shell
。win_psexec
由于我们可以在 PowerShell 脚本中返回任何退出代码,那么是否有办法通过退出代码或其他方式通知 Ansible 无需进行任何更改,以便 Ansible 返回“ok”状态?或者无论如何它都会始终返回“已更改”(假设没有失败)?
答案1
我想我找到了。赢取权力外壳模块访问$Ansible
PowerShell 变量,从而我可以修改返回给控制器的信息。
来自赢取权力外壳文档:
$Ansible.Result
是按原样返回给控制器的值。$Ansible.Diff
在 ansible.windows 1.12.0 版本中添加,是一个设置为 Ansible 可以解释的差异结果的字典。$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
有关详细信息,请参阅For more information, see剧本中的错误处理
请注意,对于那些严格意义上的信息性且不会改变任何内容的命令来说,changed_when: false
这是完全可以接受的。