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 module
e with_items
em 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?
ansible
windows
powershell
Asaf Haim
fonte
fonte
Respostas:
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:
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.
pip
, pode fazer opip install ansible==2.4.1
upgrade (ou oansible==2.2.3
downgrade) e, se isso não ajudar, faça o mesmo com o2.3.1
upgrade novamente.pywinrm
conforme mencionado nos problemas acimafonte
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.
fonte