From 8ed72e7e7bbce6e87db1ee0a90ee6b63d721d6ee Mon Sep 17 00:00:00 2001 From: David Wilson Date: Wed, 31 Oct 2018 18:18:49 +0000 Subject: [PATCH 1/4] issue #369: avoid Ansible 2.5 bug (cond_reset_warn missing method) --- tests/ansible/integration/connection/reset.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/ansible/integration/connection/reset.yml b/tests/ansible/integration/connection/reset.yml index 56e901b7..a0ba520b 100644 --- a/tests/ansible/integration/connection/reset.yml +++ b/tests/ansible/integration/connection/reset.yml @@ -6,8 +6,9 @@ - name: integration/connection/reset.yml hosts: test-targets tasks: - - when: is_mitogen - block: + - meta: end_play + when: not is_mitogen + - custom_python_detect_environment: register: out From 6c71c5bfefa5552a2241a7daabf308b52d6b9bfe Mon Sep 17 00:00:00 2001 From: David Wilson Date: Wed, 31 Oct 2018 18:30:03 +0000 Subject: [PATCH 2/4] issue #369: disable reset_connection on Ansible<2.5.6 https://github.com/ansible/ansible/issues/27520 --- ansible_mitogen/connection.py | 27 +++++++++++++++---- .../ansible/integration/connection/reset.yml | 6 +++++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/ansible_mitogen/connection.py b/ansible_mitogen/connection.py index b566b541..e017608e 100644 --- a/ansible_mitogen/connection.py +++ b/ansible_mitogen/connection.py @@ -31,6 +31,7 @@ from __future__ import unicode_literals import logging import os +import pprint import random import stat import time @@ -699,11 +700,16 @@ class Connection(ansible.plugins.connection.ConnectionBase): representing the target. If no connection exists yet, ContextService will establish it before returning it or throwing an error. """ - dct = self.parent.call_service( - service_name='ansible_mitogen.services.ContextService', - method_name='get', - stack=mitogen.utils.cast(list(stack)), - ) + try: + dct = self.parent.call_service( + service_name='ansible_mitogen.services.ContextService', + method_name='get', + stack=mitogen.utils.cast(list(stack)), + ) + except mitogen.core.CallError: + LOG.warning('Connection failed; stack configuration was:\n%s', + pprint.pformat(stack)) + raise if dct['msg']: if dct['method_name'] in self.become_methods: @@ -809,6 +815,10 @@ class Connection(ansible.plugins.connection.ConnectionBase): self.broker = None self.router = None + reset_compat_msg = ( + 'Mitogen only supports "reset_connection" on Ansible 2.5.6 or later' + ) + def reset(self): """ Explicitly terminate the connection to the remote host. This discards @@ -816,6 +826,13 @@ class Connection(ansible.plugins.connection.ConnectionBase): the 'disconnected' state, and informs ContextService the connection is bad somehow, and should be shut down and discarded. """ + if self._play_context.remote_addr is None: + # <2.5.6 incorrectly populate PlayContext for reset_connection + # https://github.com/ansible/ansible/issues/27520 + raise ansible.errors.AnsibleConnectionFailure( + self.reset_compat_msg + ) + self._connect() self._mitogen_reset(mode='reset') diff --git a/tests/ansible/integration/connection/reset.yml b/tests/ansible/integration/connection/reset.yml index a0ba520b..768cd2d5 100644 --- a/tests/ansible/integration/connection/reset.yml +++ b/tests/ansible/integration/connection/reset.yml @@ -9,6 +9,12 @@ - meta: end_play when: not is_mitogen + - debug: msg="reset.yml skipped on Ansible<2.5.6" + when: ansible_version.full < '2.5.6' + + - meta: end_play + when: ansible_version.full < '2.5.6' + - custom_python_detect_environment: register: out From e8fc9e490f5879ad5f52aeddb5d98596c8f0f6f6 Mon Sep 17 00:00:00 2001 From: David Wilson Date: Wed, 31 Oct 2018 19:14:58 +0000 Subject: [PATCH 3/4] tests: update osa_delegate_to_self to match connection parameters --- tests/ansible/integration/delegation/osa_delegate_to_self.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/ansible/integration/delegation/osa_delegate_to_self.yml b/tests/ansible/integration/delegation/osa_delegate_to_self.yml index 0915bbb8..a9cd6c6e 100644 --- a/tests/ansible/integration/delegation/osa_delegate_to_self.yml +++ b/tests/ansible/integration/delegation/osa_delegate_to_self.yml @@ -22,6 +22,7 @@ 'docker_path': None, 'kind': 'lxc', 'lxc_info_path': None, + 'lxc_path': None, 'machinectl_path': None, 'python_path': None, 'username': None, From cbd4129cb9f06f2b149f2596ac6e045dea3c7d87 Mon Sep 17 00:00:00 2001 From: David Wilson Date: Wed, 31 Oct 2018 19:15:23 +0000 Subject: [PATCH 4/4] tests: fix paramiko_unblemished.yml --- .../integration/connection_loader/paramiko_unblemished.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ansible/integration/connection_loader/paramiko_unblemished.yml b/tests/ansible/integration/connection_loader/paramiko_unblemished.yml index a71af868..de8de4b0 100644 --- a/tests/ansible/integration/connection_loader/paramiko_unblemished.yml +++ b/tests/ansible/integration/connection_loader/paramiko_unblemished.yml @@ -1,6 +1,6 @@ # Ensure paramiko connections aren't grabbed. -- name: integration/connection_loader__paramiko_unblemished.yml +- name: integration/connection_loader/paramiko_unblemished.yml hosts: test-targets any_errors_fatal: true tasks: