在使用Ansible与Windows主机时的偶发错误

45次阅读
没有评论

问题描述

在使用Ansible的过程中,与Windows主机在playbooks中遇到了一些问题。他在运行Ansible 2.3版本,安装了pywinrm 0.2.2。使用基本身份验证与本地Administrator用户进行连接。在运行任务时,有时会遇到以下问题:
1. 错误信息示例:

[WARNING]: FATAL ERROR DURING FILE TRANSFER: Traceback (most recent call last): ...
WinRMTransportError: (u'http', u'Bad HTTP response returned from server. Code 500')
  1. 当尝试在一组Windows主机上使用win_shell/win_command/raw模块和with_items运行任务时,会在Ansible创建的临时文件上失败。
    示例任务:
- name: Check services up
  win_command: 'sc queryex {{ item }} | Findstr RUNNING'
  with_items: '{{ component_services }}'
  register: command_result
  ignore_errors: yes

可能的错误示例:

changed: [172.16.104.169] => (item=Dnscache)failed: [172.16.104.176] (item=Dnscache) => {"failed": true, "item": "Dnscache", ... "msg": "MODULE FAILURE", "rc": 1}

这些问题似乎是随机出现的,有时在不同运行中甚至可能完全不出现。

解决方案

请注意以下操作可能涉及版本差异及风险,务必在操作前备份数据。

解决方案1:升级Ansible和pywinrm

升级到Ansible 2.4.1+版本可能会解决上述问题。在2.3版本中,引入了类似SSH pipelining的WinRM pipelining功能,可能会导致问题。升级到2.4.1版本可以获得修复。如果升级后问题仍然存在,也可以尝试降级到2.2.3版本,以避免其他相关问题。以下是操作步骤:
1. 如果使用pip安装Ansible,可以执行以下命令升级:
pip install ansible==2.4.1
或降级:
pip install ansible==2.2.3
2. 还应该确保升级到最新版本的pywinrm,可以根据之前提到的问题链接进行操作。

解决方案2:选择更稳定的版本

根据经验,用户发现Ansible 2.3.2版本是比较稳定的版本。如果对2.4.1版本尚未进行充分测试,可以尝试使用2.3.2版本。2.4.0版本在涉及winrm时可能存在稳定性问题。

综上所述,如果你在使用Ansible与Windows主机时遇到偶发错误,可以通过升级Ansible和pywinrm,或选择更稳定的版本来解决问题。记得在操作前备份重要数据。

希望这些解决方案能够帮助你解决问题。如果问题仍然存在,建议在Ansible的官方问题追踪页面上报告该问题,以便获取更多支持和解决方案。

正文完