jborean93 / pypsrp

PowerShell Remoting Protocol for Python
MIT License
324 stars 49 forks source link

psrp_reconnection_retries: Not working as expected #114

Closed Udayendu closed 3 years ago

Udayendu commented 3 years ago

Summary

psrp_reconnection_retries is not working as expected. Its dropping the connection immediately.

Issue Type

Component Name

Additional Information

[windows:children] dotnetserv01

[windows:vars] ansible_user=demoadmin ansible_password=XXXXXX ansible_port=5986 ansible_connection=psrp ansible_psrp_auth=credssp ansible_psrp_cert_validation=ignore ansible_psrp_connection_timeout=1800 ansible_psrp_operation_timeout=1200 ansible_psrp_reconnection_retries=100 <<<<

## How to reproduce the issue:
- Ansible playbook to deploy the .NET

$ cat roles/dotnet/tasks/main.yml

Expected result

Actual result

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/usr/local/lib/python3.8/dist-packages/requests/adapters.py", line 439, in send resp = conn.urlopen( File "/usr/local/lib/python3.8/dist-packages/urllib3/connectionpool.py", line 755, in urlopen retries = retries.increment( File "/usr/local/lib/python3.8/dist-packages/urllib3/util/retry.py", line 532, in increment raise six.reraise(type(error), error, _stacktrace) File "/usr/local/lib/python3.8/dist-packages/urllib3/packages/six.py", line 770, in reraise raise value File "/usr/local/lib/python3.8/dist-packages/urllib3/connectionpool.py", line 699, in urlopen httplib_response = self._make_request( File "/usr/local/lib/python3.8/dist-packages/urllib3/connectionpool.py", line 447, in _make_request self._raise_timeout(err=e, url=url, timeout_value=read_timeout) File "/usr/local/lib/python3.8/dist-packages/urllib3/connectionpool.py", line 336, in _raise_timeout raise ReadTimeoutError( urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='192.168.0.120', port=5986): Read timed out. (read timeout=30)

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/usr/local/lib/python3.8/dist-packages/ansible/executor/task_executor.py", line 159, in run res = self._execute() File "/usr/local/lib/python3.8/dist-packages/ansible/executor/task_executor.py", line 583, in _execute result = self._handler.run(task_vars=variables) File "/usr/local/lib/python3.8/dist-packages/ansible/plugins/action/normal.py", line 47, in run result = merge_hash(result, self._execute_module(task_vars=task_vars, wrap_async=wrap_async)) File "/usr/local/lib/python3.8/dist-packages/ansible/plugins/action/init.py", line 1112, in _execute_module res = self._low_level_execute_command(cmd, sudoable=sudoable, in_data=in_data) File "/usr/local/lib/python3.8/dist-packages/ansible/plugins/action/init.py", line 1264, in _low_level_execute_command rc, stdout, stderr = self._connection.exec_command(cmd, in_data=in_data, sudoable=sudoable) File "/usr/local/lib/python3.8/dist-packages/ansible/plugins/connection/psrp.py", line 454, in exec_command rc, stdout, stderr = self._exec_psrp_script(script, in_data) File "/usr/local/lib/python3.8/dist-packages/ansible/plugins/connection/psrp.py", line 878, in _exec_psrp_script ps.invoke(input=input_data) File "/usr/local/lib/python3.8/dist-packages/pypsrp/powershell.py", line 1102, in invoke return self.end_invoke() File "/usr/local/lib/python3.8/dist-packages/pypsrp/powershell.py", line 1078, in end_invoke self.poll_invoke() File "/usr/local/lib/python3.8/dist-packages/pypsrp/powershell.py", line 1252, in poll_invoke responses = self.runspace_pool._receive(self.id, File "/usr/local/lib/python3.8/dist-packages/pypsrp/powershell.py", line 640, in _receive response = self.shell.receive("stdout", command_id=command_id, File "/usr/local/lib/python3.8/dist-packages/pypsrp/shell.py", line 238, in receive response = self.wsman.receive(self.resource_uri, receive, File "/usr/local/lib/python3.8/dist-packages/pypsrp/wsman.py", line 311, in receive res = self.invoke(WSManAction.RECEIVE, resource_uri, resource, File "/usr/local/lib/python3.8/dist-packages/pypsrp/wsman.py", line 389, in invoke response = self.transport.send(xml) File "/usr/local/lib/python3.8/dist-packages/pypsrp/wsman.py", line 761, in send return self._send_request(prep_request) File "/usr/local/lib/python3.8/dist-packages/pypsrp/wsman.py", line 764, in _send_request response = self.session.send(request, timeout=( File "/usr/local/lib/python3.8/dist-packages/requests/sessions.py", line 655, in send r = adapter.send(request, **kwargs) File "/usr/local/lib/python3.8/dist-packages/requests/adapters.py", line 529, in send raise ReadTimeout(e, request=request) requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='192.168.0.120', port=5986): Read timed out. (read timeout=30) fatal: [192.168.0.120]: FAILED! => { "msg": "Unexpected failure during module execution.", "stdout": "" }

Udayendu commented 3 years ago

@jborean93 Could you please take a look at this ? I am not sure why its not retrying even after having the entry in the inventory file.

jborean93 commented 3 years ago

Answered in https://github.com/ansible/ansible/issues/75197.

TLDR: read timeouts aren't configured to retry ever due to the state mutation they may be in response of.