From 2c197343f3d44d00adbe3d7785a22c8ef64a576e Mon Sep 17 00:00:00 2001 From: Peter Sprygada Date: Mon, 16 Jan 2017 08:32:45 -0500 Subject: [PATCH] adds timeout check when network_cli run without persistence (#20299) * checks if signal hander is set and sets it if not (will be set if coming from ansible-connection) * will now timeout long running commands based on DEFAULT_TIMEOUT setting --- lib/ansible/plugins/connection/network_cli.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/ansible/plugins/connection/network_cli.py b/lib/ansible/plugins/connection/network_cli.py index 1df244f0f3..879374df68 100644 --- a/lib/ansible/plugins/connection/network_cli.py +++ b/lib/ansible/plugins/connection/network_cli.py @@ -24,6 +24,7 @@ import json import signal import datetime +from ansible import constants as C from ansible.errors import AnsibleConnectionFailure from ansible.module_utils.six.moves import StringIO from ansible.plugins import terminal_loader @@ -203,6 +204,7 @@ class Connection(_Connection): def alarm_handler(self, signum, frame): """Alarm handler raised in case of command timeout """ + display.debug('alarm_handler fired!') self.close_shell() def exec_command(self, cmd): @@ -242,7 +244,12 @@ class Connection(_Connection): return (1, '', str(exc)) try: + if not signal.getsignal(signal.SIGALRM): + display.debug('setting alarm handler in network_cli') + signal.signal(signal.SIGALRM, self.alarm_handler) + signal.alarm(C.DEFAULT_TIMEOUT) out = self.send(obj) + signal.alarm(0) return (0, out, '') except (AnsibleConnectionFailure, ValueError) as exc: return (1, '', str(exc))