一千萬個為什麽

搜索

Windows機器的Ansible零星錯誤



在我的Ansible手冊中使用Windows主機時,我遇到了一些關閉和關閉的問題。我使用pywinrm 0.2.2來運行Ansible 2.3。我正在使用本地管理員用戶的基本身份驗證。

有時我在運行任務時收到此問題:

 [WARNING]: FATAL ERROR DURING FILE TRANSFER: Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/ansible/plugins/connection/winrm.py", line 267, in _winrm_exec
  self._winrm_send_input(self.protocol, self.shell_id, command_id, data, eof=is_last)
File "/usr/local/lib/python2.7/dist-packages/ansible/plugins/connection/winrm.py", line 248, in _winrm_send_input
  protocol.send_message(xmltodict.unparse(rq))
File "/usr/local/lib/python2.7/dist-packages/winrm/protocol.py", line 207, in send_message
   return self.transport.send_message(message)
File "/usr/local/lib/python2.7/dist-packages/winrm/transport.py", line 191, in send_message
   raise WinRMTransportError('http', error_message) WinRMTransportError: (u'http', u'Bad HTTP response returned from server. Code 500')

其他時候,當我嘗試在一組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", 
  "module_stderr": "Exception calling \"Run\" with \"1\" argument(s): \"Exception calling \"Invoke\" with \r\n\"0\" 
     argument(s): \"The running command stopped because 
           the preference variable \r\n\"ErrorActionPreference\" 
           or common parameter is set to 
   Stop: (0) : cannot open \r\nC:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\RESB3FF.tmp 
  for writing\r\n(1) : 
     using System;\r\n\"\"\r\nAt line:45 char:1\r\n+ 
     $output = $entrypoint.Run($payload)\r\n+ 
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n+ 
  CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordE \r\nxception\r\n+ 
  FullyQualifiedErrorId : ScriptMethodRuntimeException\r\n", 
  "module_stdout": "", "msg": "MODULE FAILURE", "rc": 1}
     changed: [172.16.104.141] => (item=Dnscache)
     changed: [172.16.104.168] => (item=Dnscache)
     changed: [172.16.104.145] => (item=Dnscache)

這兩個問題都是絕對隨機的,甚至可能不會出現在一系列不同的運行中。

有任何幫助?

轉載註明原文: Windows機器的Ansible零星錯誤

一共有 2 個回答:

您應該為此創建一個Ansible問題,因為它很可能是Ansible中的一個錯誤。

第一個錯誤讓我想起WinRM流水線:

  • Ansible 2.3.0引入了始終在線的WinRM流水線功能(類似於 SSH流水線),這可能是在這背後。
  • SSH流水線可能會導致Ansible for Linux出現問題,關閉它可能會很有用,但對於WinRM流水線來說,這還不可行。

相關問題包括一些Git提交,它將重新啟用“非流水線”模式在未來的版本中(現在應該在2.4版中發布,可能在2.3.2中有一個backport) - 參見此評論

嘗試升級到Ansible 2.4.1+(通常運行良好)以獲得修復。或者嘗試降級到Ansible 2.2.3以查看是否有幫助 - 這將禁用WinRM流水線並可能避免此區域中的其他回歸錯誤。

  • 如果您使用 pip 安裝Ansible,則可以執行 pip install ansible == 2.4.1 要升級(或 ansible == 2.2.3 降級),那麽如果沒有幫助,請按照 2.3.1 的要求重新升級。
  • >
  • 如上面問題所述,您還應升級到最新的 pywinrm

我發現Ansible 2.3.2是最穩定的,我沒有花太多時間在2.4.1上。 2.4.0當涉及到winrm時,肯定會有一些穩定性問題。