Support setting persistent command timeout per task basis (#42847)
* Support setting persistent command timeout per task basis Fixes #42200 * Add variable `ansible_command_timeout` to `persistent_command_timeout` option for `network_cli` and `netconf` connection plugin so that the command_timeout can be set per task basis while using `connection=network_cli` or `connection=netconf` eg: ``` - name: run copy command ios_command: commands: - show version vars: ansible_command_timeout: 40 ``` * Modify `ansible-connection` to read command_timeout value from connection plugin options. * Add `ansible_command_timeout` to `persistent_command_timeout` option in `persistent` to support `connection=local` so that it is backward compatibilty * To support `connection=local` pass the timeout value as variables from persistent connection to `ansible-connection` instead of sending it in playcontext * Fix CI failure * Fix review comment
This commit is contained in:
parent
5e20ef1d89
commit
97d4e53131
25 changed files with 72 additions and 34 deletions
|
@ -119,7 +119,7 @@ class ConnectionProcess(object):
|
||||||
if not data:
|
if not data:
|
||||||
break
|
break
|
||||||
|
|
||||||
signal.alarm(self.connection._play_context.timeout)
|
signal.alarm(self.connection.get_option('persistent_command_timeout'))
|
||||||
resp = self.srv.handle_request(data)
|
resp = self.srv.handle_request(data)
|
||||||
signal.alarm(0)
|
signal.alarm(0)
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ class ConnectionProcess(object):
|
||||||
self.shutdown()
|
self.shutdown()
|
||||||
|
|
||||||
def command_timeout(self, signum, frame):
|
def command_timeout(self, signum, frame):
|
||||||
display.display('command timeout triggered, timeout value is %s secs' % self.play_context.timeout, log_only=True)
|
display.display('command timeout triggered, timeout value is %s secs' % self.connection.get_option('persistent_command_timeout'), log_only=True)
|
||||||
self.shutdown()
|
self.shutdown()
|
||||||
|
|
||||||
def handler(self, signum, frame):
|
def handler(self, signum, frame):
|
||||||
|
@ -273,6 +273,7 @@ def main():
|
||||||
else:
|
else:
|
||||||
messages.append('found existing local domain socket, using it!')
|
messages.append('found existing local domain socket, using it!')
|
||||||
conn = Connection(socket_path)
|
conn = Connection(socket_path)
|
||||||
|
conn.set_options(var_options=variables)
|
||||||
pc_data = to_text(init_data)
|
pc_data = to_text(init_data)
|
||||||
try:
|
try:
|
||||||
messages.extend(conn.update_play_context(pc_data))
|
messages.extend(conn.update_play_context(pc_data))
|
||||||
|
|
|
@ -58,10 +58,11 @@ class ActionModule(_ActionModule):
|
||||||
pc.port = int(provider['port'] or self._play_context.port or 22)
|
pc.port = int(provider['port'] or self._play_context.port or 22)
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
|
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -58,10 +58,11 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
|
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -52,13 +52,14 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
pc.become = provider['authorize'] or False
|
pc.become = provider['authorize'] or False
|
||||||
pc.become_pass = provider['auth_pass']
|
pc.become_pass = provider['auth_pass']
|
||||||
pc.become_method = 'enable'
|
pc.become_method = 'enable'
|
||||||
|
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
|
|
||||||
|
|
|
@ -66,10 +66,12 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider.get('user', self._play_context.connection_user)
|
pc.remote_user = provider.get('user', self._play_context.connection_user)
|
||||||
pc.password = provider.get('password', self._play_context.password)
|
pc.password = provider.get('password', self._play_context.password)
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
|
|
||||||
display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
if not socket_path:
|
if not socket_path:
|
||||||
|
|
|
@ -66,10 +66,12 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider.get('user', self._play_context.connection_user)
|
pc.remote_user = provider.get('user', self._play_context.connection_user)
|
||||||
pc.password = provider.get('password', self._play_context.password)
|
pc.password = provider.get('password', self._play_context.password)
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
|
|
||||||
display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
if not socket_path:
|
if not socket_path:
|
||||||
|
|
|
@ -60,7 +60,7 @@ class ActionModule(_ActionModule):
|
||||||
pc.port = int(provider['port'] or self._play_context.port or 22)
|
pc.port = int(provider['port'] or self._play_context.port or 22)
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
self._task.args['provider'] = provider.update(
|
self._task.args['provider'] = provider.update(
|
||||||
host=pc.remote_addr,
|
host=pc.remote_addr,
|
||||||
port=pc.port,
|
port=pc.port,
|
||||||
|
@ -71,6 +71,7 @@ class ActionModule(_ActionModule):
|
||||||
pc.connection = 'netconf'
|
pc.connection = 'netconf'
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -51,13 +51,15 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
pc.become = provider['authorize'] or True
|
pc.become = provider['authorize'] or True
|
||||||
pc.become_pass = provider['auth_pass']
|
pc.become_pass = provider['auth_pass']
|
||||||
pc.become_method = 'enable'
|
pc.become_method = 'enable'
|
||||||
|
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
if not socket_path:
|
if not socket_path:
|
||||||
|
|
|
@ -60,7 +60,7 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
pc.become = provider['authorize'] or False
|
pc.become = provider['authorize'] or False
|
||||||
if pc.become:
|
if pc.become:
|
||||||
pc.become_method = 'enable'
|
pc.become_method = 'enable'
|
||||||
|
@ -68,6 +68,7 @@ class ActionModule(_ActionModule):
|
||||||
|
|
||||||
display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -60,7 +60,7 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
pc.become = provider['authorize'] or False
|
pc.become = provider['authorize'] or False
|
||||||
if pc.become:
|
if pc.become:
|
||||||
pc.become_method = 'enable'
|
pc.become_method = 'enable'
|
||||||
|
@ -68,6 +68,7 @@ class ActionModule(_ActionModule):
|
||||||
|
|
||||||
display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -60,7 +60,7 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
pc.become = provider['authorize'] or False
|
pc.become = provider['authorize'] or False
|
||||||
if pc.become:
|
if pc.become:
|
||||||
pc.become_method = 'enable'
|
pc.become_method = 'enable'
|
||||||
|
@ -68,6 +68,7 @@ class ActionModule(_ActionModule):
|
||||||
|
|
||||||
display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -51,13 +51,15 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
pc.become = provider['authorize'] or True
|
pc.become = provider['authorize'] or True
|
||||||
pc.become_pass = provider['auth_pass']
|
pc.become_pass = provider['auth_pass']
|
||||||
pc.become_method = 'enable'
|
pc.become_method = 'enable'
|
||||||
|
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
if not socket_path:
|
if not socket_path:
|
||||||
|
|
|
@ -66,7 +66,6 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout']) if provider['timeout'] else None
|
|
||||||
pc.become = provider['authorize'] or False
|
pc.become = provider['authorize'] or False
|
||||||
if pc.become:
|
if pc.become:
|
||||||
pc.become_method = 'enable'
|
pc.become_method = 'enable'
|
||||||
|
@ -75,8 +74,8 @@ class ActionModule(_ActionModule):
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
|
||||||
if connection._play_context.timeout is None:
|
command_timeout = int(provider['timeout']) if provider['timeout'] else connection.get_option('persistent_command_timeout')
|
||||||
connection._play_context.timeout = connection.get_option('persistent_command_timeout')
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -58,7 +58,6 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout']) if provider['timeout'] else None
|
|
||||||
pc.become = provider['authorize'] or False
|
pc.become = provider['authorize'] or False
|
||||||
if pc.become:
|
if pc.become:
|
||||||
pc.become_method = 'enable'
|
pc.become_method = 'enable'
|
||||||
|
@ -67,8 +66,8 @@ class ActionModule(_ActionModule):
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
|
||||||
if connection._play_context.timeout is None:
|
command_timeout = int(provider['timeout']) if provider['timeout'] else connection.get_option('persistent_command_timeout')
|
||||||
connection._play_context.timeout = connection.get_option('persistent_command_timeout')
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -61,13 +61,12 @@ class ActionModule(_ActionModule):
|
||||||
pc.port = int(provider['port'] or self._play_context.port or 22)
|
pc.port = int(provider['port'] or self._play_context.port or 22)
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.timeout = int(provider['timeout']) if provider['timeout'] else None
|
|
||||||
|
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
|
||||||
if connection._play_context.timeout is None:
|
command_timeout = int(provider['timeout']) if provider['timeout'] else connection.get_option('persistent_command_timeout')
|
||||||
connection._play_context.timeout = connection.get_option('persistent_command_timeout')
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -59,7 +59,7 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
pc.become = provider['authorize'] or False
|
pc.become = provider['authorize'] or False
|
||||||
if pc.become:
|
if pc.become:
|
||||||
pc.become_method = 'enable'
|
pc.become_method = 'enable'
|
||||||
|
@ -67,6 +67,7 @@ class ActionModule(_ActionModule):
|
||||||
|
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
|
|
||||||
|
|
|
@ -72,13 +72,12 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout']) if provider['timeout'] else None
|
|
||||||
|
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
|
||||||
if connection._play_context.timeout is None:
|
command_timeout = int(provider['timeout']) if provider['timeout'] else connection.get_option('persistent_command_timeout')
|
||||||
connection._play_context.timeout = connection.get_option('persistent_command_timeout')
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -151,6 +151,8 @@ class ActionModule(ActionBase):
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent',
|
connection = self._shared_loader_obj.connection_loader.get('persistent',
|
||||||
play_context, sys.stdin)
|
play_context, sys.stdin)
|
||||||
|
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': play_context.timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, play_context.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, play_context.remote_addr)
|
||||||
if not socket_path:
|
if not socket_path:
|
||||||
|
|
|
@ -85,7 +85,6 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout']) if provider['timeout'] else None
|
|
||||||
pc.become = provider['authorize'] or False
|
pc.become = provider['authorize'] or False
|
||||||
if pc.become:
|
if pc.become:
|
||||||
pc.become_method = 'enable'
|
pc.become_method = 'enable'
|
||||||
|
@ -94,8 +93,8 @@ class ActionModule(_ActionModule):
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
|
||||||
if connection._play_context.timeout is None:
|
command_timeout = int(provider['timeout']) if provider['timeout'] else connection.get_option('persistent_command_timeout')
|
||||||
connection._play_context.timeout = connection.get_option('persistent_command_timeout')
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -55,10 +55,11 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT)
|
||||||
|
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -58,13 +58,12 @@ class ActionModule(_ActionModule):
|
||||||
pc.remote_user = provider['username'] or self._play_context.connection_user
|
pc.remote_user = provider['username'] or self._play_context.connection_user
|
||||||
pc.password = provider['password'] or self._play_context.password
|
pc.password = provider['password'] or self._play_context.password
|
||||||
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file
|
||||||
pc.timeout = int(provider['timeout']) if provider['timeout'] else None
|
|
||||||
|
|
||||||
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
display.vvv('using connection plugin %s (was local)' % pc.connection, pc.remote_addr)
|
||||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||||
|
|
||||||
if connection._play_context.timeout is None:
|
command_timeout = int(provider['timeout']) if provider['timeout'] else connection.get_option('persistent_command_timeout')
|
||||||
connection._play_context.timeout = connection.get_option('persistent_command_timeout')
|
connection.set_options(direct={'persistent_command_timeout': command_timeout})
|
||||||
|
|
||||||
socket_path = connection.run()
|
socket_path = connection.run()
|
||||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||||
|
|
|
@ -152,6 +152,8 @@ options:
|
||||||
key: command_timeout
|
key: command_timeout
|
||||||
env:
|
env:
|
||||||
- name: ANSIBLE_PERSISTENT_COMMAND_TIMEOUT
|
- name: ANSIBLE_PERSISTENT_COMMAND_TIMEOUT
|
||||||
|
vars:
|
||||||
|
- name: ansible_command_timeout
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -155,6 +155,8 @@ options:
|
||||||
key: command_timeout
|
key: command_timeout
|
||||||
env:
|
env:
|
||||||
- name: ANSIBLE_PERSISTENT_COMMAND_TIMEOUT
|
- name: ANSIBLE_PERSISTENT_COMMAND_TIMEOUT
|
||||||
|
vars:
|
||||||
|
- name: ansible_command_timeout
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import getpass
|
import getpass
|
||||||
|
|
|
@ -26,6 +26,8 @@ options:
|
||||||
key: command_timeout
|
key: command_timeout
|
||||||
env:
|
env:
|
||||||
- name: ANSIBLE_PERSISTENT_COMMAND_TIMEOUT
|
- name: ANSIBLE_PERSISTENT_COMMAND_TIMEOUT
|
||||||
|
vars:
|
||||||
|
- name: ansible_command_timeout
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
import pty
|
import pty
|
||||||
|
@ -119,7 +121,7 @@ class Connection(ConnectionBase):
|
||||||
stdin.write(src)
|
stdin.write(src)
|
||||||
stdin.write(b'\n#END_INIT#\n')
|
stdin.write(b'\n#END_INIT#\n')
|
||||||
|
|
||||||
src = cPickle.dumps({}, protocol=0)
|
src = cPickle.dumps({'ansible_command_timeout': self.get_option('persistent_command_timeout')}, protocol=0)
|
||||||
stdin.write(src)
|
stdin.write(src)
|
||||||
stdin.write(b'\n#END_VARS#\n')
|
stdin.write(b'\n#END_VARS#\n')
|
||||||
|
|
||||||
|
|
|
@ -19,4 +19,22 @@
|
||||||
provider: "{{ cli }}"
|
provider: "{{ cli }}"
|
||||||
register: result
|
register: result
|
||||||
|
|
||||||
|
- name: run ios commands to test command_timeout
|
||||||
|
ios_command:
|
||||||
|
commands:
|
||||||
|
- show running-config all
|
||||||
|
- show interfaces
|
||||||
|
- show running-config all
|
||||||
|
vars:
|
||||||
|
ansible_command_timeout: 1
|
||||||
|
ignore_errors: True
|
||||||
|
register: result
|
||||||
|
when: ansible_connection == 'network_cli'
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- 'result.failed == true'
|
||||||
|
- "'timeout trying to send command' in result.module_stderr"
|
||||||
|
when: ansible_connection == 'network_cli'
|
||||||
|
|
||||||
- debug: msg="END ios_smoke cli/misc_tests.yaml on connection={{ ansible_connection }}"
|
- debug: msg="END ios_smoke cli/misc_tests.yaml on connection={{ ansible_connection }}"
|
||||||
|
|
Loading…
Reference in a new issue