From 895e6c5d063d02e1e55a860c9a083122aabdd4ac Mon Sep 17 00:00:00 2001 From: Matt Clay Date: Wed, 5 Jul 2017 19:00:13 -0700 Subject: [PATCH] Fix wait_for with newer versions of psutil. (#26455) * Add support for newer psutil versions. * Fix psutil install in wait_for integration test. * Fix test requirements for wait_for elapsed. --- .../modules/utilities/logic/wait_for.py | 15 +++++++++--- .../targets/wait_for/tasks/main.yml | 24 +++++++++---------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/lib/ansible/modules/utilities/logic/wait_for.py b/lib/ansible/modules/utilities/logic/wait_for.py index cc2ee219de..0499683f0b 100644 --- a/lib/ansible/modules/utilities/logic/wait_for.py +++ b/lib/ansible/modules/utilities/logic/wait_for.py @@ -243,14 +243,23 @@ class TCPConnectionInfo(object): def get_active_connections_count(self): active_connections = 0 for p in psutil.process_iter(): - connections = p.get_connections(kind='inet') + if hasattr(p, 'get_connections'): + connections = p.get_connections(kind='inet') + else: + connections = p.connections(kind='inet') for conn in connections: if conn.status not in self.module.params['active_connection_states']: continue - (local_ip, local_port) = conn.local_address + if hasattr(conn, 'local_address'): + (local_ip, local_port) = conn.local_address + else: + (local_ip, local_port) = conn.laddr if self.port != local_port: continue - (remote_ip, remote_port) = conn.remote_address + if hasattr(conn, 'remote_address'): + (remote_ip, remote_port) = conn.remote_address + else: + (remote_ip, remote_port) = conn.raddr if (conn.family, remote_ip) in self.exclude_ips: continue if any(( diff --git a/test/integration/targets/wait_for/tasks/main.yml b/test/integration/targets/wait_for/tasks/main.yml index e30651fae3..03157ed74e 100644 --- a/test/integration/targets/wait_for/tasks/main.yml +++ b/test/integration/targets/wait_for/tasks/main.yml @@ -30,8 +30,8 @@ that: - waitfor|success - "waitfor.path == '/tmp/wait_for_file'" - - waitfor.elapsed <= 10 - - waitfor.elapsed > 0 + - waitfor.elapsed >= 5 + - waitfor.elapsed <= 15 - name: setup create a file after 10s shell: sleep 10 && touch /tmp/wait_for_file @@ -48,8 +48,8 @@ that: - waitfor|success - "waitfor.path == '/tmp/wait_for_file'" - - waitfor.elapsed <= 10 - - waitfor.elapsed > 0 + - waitfor.elapsed >= 5 + - waitfor.elapsed <= 15 - name: setup write keyword to file after 10s shell: rm -f /tmp/wait_for_keyword && sleep 10 && echo completed > /tmp/wait_for_keyword @@ -67,8 +67,8 @@ that: - waitfor|success - "waitfor.search_regex == 'completed'" - - waitfor.elapsed <= 10 - - waitfor.elapsed > 0 + - waitfor.elapsed >= 5 + - waitfor.elapsed <= 15 - name: test wait for port timeout wait_for: @@ -114,22 +114,20 @@ - not waitfor|changed - "waitfor.port == {{ http_port }}" -# TODO: fix drain test for freebsd and macOS, ubuntu-py3 -- name: setup install psutil - package: - name: python-psutil - when: ansible_system == "Linux" and not (ansible_distribution == "Ubuntu" and ansible_distribution_version == "16.04") +- name: install psutil using pip (non-Linux only) + pip: + name: psutil + when: ansible_system != 'Linux' - name: test wait for port drained wait_for: port: "{{ http_port }}" state: drained register: waitfor - when: ansible_system == "Linux" and not (ansible_distribution == "Ubuntu" and ansible_distribution_version == "16.04") + - name: verify test wait for port assert: that: - waitfor|success - not waitfor|changed - "waitfor.port == {{ http_port }}" - when: ansible_system == "Linux" and not (ansible_distribution == "Ubuntu" and ansible_distribution_version == "16.04")