Erros esporádicos possíveis em máquinas Windows

8

Estou enfrentando alguns problemas dentro e fora ao usar hosts do Windows nos meus manuais do Ansible. Estou executando o Ansible 2.3 com o pywinrm 0.2.2 instalado. Estou usando autenticação básica com o usuário administrador local.

Às vezes, recebo esse problema quando executo uma tarefa:

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

Outras vezes, quando tento executar um win_shell/win_command/raw modulee with_itemsem um grupo de hosts do Windows, parece falhar em arquivos temporários criados pelo Ansible.

A tarefa que estou tentando executar é:

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

E o erro que posso receber é:

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)

Ambos os problemas são absolutamente aleatórios e podem até não aparecer em uma sequência de execuções diferentes.

Alguma ajuda?

Asaf Haim
fonte
Quantos itens você executa novamente nesse host, obtiveram quase o mesmo Problema com erros aleatórios do winrm 500 ao executar um loop ansible com muitos itens em um host específico Também não foi possível descobrir, você o encontrou nesse meio tempo?
DaBONDi 04/07
4 e mais .. Receio que ainda não haja solução para mim :(
Asaf Haim

Respostas:

2

Provavelmente, você deve criar um problema Ansible para isso, pois provavelmente é um bug no Ansible.

O primeiro erro me faz pensar sobre o pipelining do WinRM:

  • O Ansible 2.3.0 introduziu um recurso de pipelining sempre ativo do WinRM (semelhante ao pipeline SSH ), e isso pode estar por trás disso.
  • O pipelining SSH pode causar problemas no Ansible for Linux, e pode ser útil desativá-lo, mas isso ainda não é possível para o pipelining do WinRM.

Esse problema relacionado inclui alguns commits do Git que reativam o modo 'não pipelined' em uma versão futura (agora deve ser lançado na 2.4, possivelmente com um backport como parte do 2.3.2 - veja este comentário )

Tente atualizar para o Ansible 2.4.1+ (que geralmente funciona bem) para obter a correção. Ou tente fazer o downgrade para o Ansible 2.2.3 para ver se isso ajuda - isso desabilitará o pipelining do WinRM e poderá evitar outros erros de regressão nessa área.

  • Se você instalou o Ansible usando pip, pode fazer o pip install ansible==2.4.1 upgrade (ou o ansible==2.2.3downgrade) e, se isso não ajudar, faça o mesmo com o 2.3.1upgrade novamente.
  • você também deve atualizar para o mais recente, pywinrmconforme mencionado nos problemas acima
RichVel
fonte
1

Eu achei o Ansible 2.3.2 o mais estável, embora ainda não tenha passado muito tempo com o 2.4.1. 2.4.0 definitivamente possui alguns problemas de estabilidade quando se trata de winrm.

Trondh
fonte