Kesalahan sporadis yang mungkin terjadi pada mesin Windows

8

Saya mengalami beberapa masalah on dan off saat menggunakan host windows di buku pedoman Ansible saya. Saya menjalankan Ansible 2.3 dengan pywinrm 0.2.2 diinstal. Saya menggunakan otentikasi dasar dengan pengguna Administrator lokal.

Terkadang saya menerima masalah ini saat menjalankan tugas:

 [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')

Di lain waktu, ketika saya mencoba menjalankan win_shell/win_command/raw moduledan with_itemspada sekelompok host windows sepertinya gagal pada file sementara yang dibuat oleh Ansible.

Tugas yang saya coba jalankan adalah:

- name: Check services up
  win_command: 'sc queryex {{ item }} | Findstr RUNNING'
  with_items: '{{ component_services }}'
  register: command_result
  ignore_errors: yes

Dan kesalahan yang mungkin saya dapatkan adalah:

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)

Kedua masalah ini benar-benar acak dan bahkan mungkin tidak muncul sama sekali dalam urutan proses yang berbeda.

Ada bantuan?

Asaf Haim
sumber
Berapa banyak item yang Anda jalankan terhadap host itu, mendapat masalah yang hampir sama dengan winrm 500 erro acak ketika mengeksekusi loop yang mungkin dengan banyak item pada host tertentu. Tidak dapat menemukannya juga, Anda menemukannya sementara itu?
DaBONDi
4 dan lebih banyak .. Saya takut belum ada solusi pada saat ini :(
Asaf Haim

Jawaban:

2

Anda mungkin harus membuat masalah Ansible untuk ini karena kemungkinan besar bug di Ansible.

Kesalahan pertama membuat saya berpikir tentang pipeline WinRM:

  • Kemungkinan 2.3.0 memperkenalkan fitur pipeline WinRM yang selalu aktif (mirip dengan pipelining SSH ), dan itu mungkin ada di balik ini.
  • Pemipaan SSH dapat menyebabkan masalah di Ansible untuk Linux, dan mungkin bermanfaat untuk mematikannya, tetapi ini belum memungkinkan untuk pemipaan WinRM.

Masalah terkait ini mencakup beberapa komitmen Git yang akan mengaktifkan kembali mode 'non-pipelined' dalam rilis di masa mendatang (sekarang harus dirilis dalam 2,4, mungkin dengan backport sebagai bagian dari 2.3.2 - lihat komentar ini )

Coba tingkatkan ke Ansible 2.4.1+ (yang umumnya berfungsi dengan baik) untuk mendapatkan perbaikan. Atau coba turunkan ke An 2.2.2 untuk melihat apakah ini membantu - ini akan menonaktifkan pipeline WinRM dan dapat menghindari bug regresi lainnya di area ini.

  • Jika Anda menginstal Ansible using pip, Anda dapat melakukan pip install ansible==2.4.1 upgrade (atau ansible==2.2.3downgrade), maka jika itu tidak membantu, lakukan hal yang sama dengan 2.3.1untuk meningkatkan lagi.
  • Anda juga harus meningkatkan ke terbaru pywinrmseperti yang disebutkan dalam masalah di atas
RichVel
sumber
1

Saya menemukan Ansible 2.3.2 sebagai yang paling stabil, saya belum menghabiskan banyak waktu dengan 2.4.1. 2.4.0 pasti memiliki beberapa masalah stabilitas ketika datang ke winrm.

Trondh
sumber