1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

check cli context to be sure out of config mode in ios (#21493)

This change will now check the cli context after a module runs and if
the cli is still in config mode it will exit config mode.  Also fixes a
minor issue with converting list of commands to a dict

fixes #21481
This commit is contained in:
Peter Sprygada 2017-02-16 07:54:33 -05:00 committed by John R Barker
parent edf2b00614
commit 34e6cc788f
2 changed files with 18 additions and 9 deletions

View file

@ -65,18 +65,19 @@ def get_config(module, flags=[]):
_DEVICE_CONFIGS[cmd] = cfg
return cfg
def to_commands(commands):
transform = ComplexList(dict(
command=dict(key=True),
prompt=dict(),
response=dict()
))
def to_commands(module, commands):
spec = {
'command': dict(key=True),
'prompt': dict(),
'response': dict()
}
transform = ComplexList(spec, module)
return transform(commands)
def run_commands(module, commands, check_rc=True):
responses = list()
commands = to_commands(to_list(commands))
commands = to_commands(module, to_list(commands))
for cmd in commands:
cmd = module.jsonify(cmd)
rc, out, err = exec_command(module, cmd)

View file

@ -53,10 +53,11 @@ class ActionModule(_ActionModule):
pc.become = provider['authorize'] or False
pc.become_pass = provider['auth_pass']
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
socket_path = self._get_socket_path(pc)
if not os.path.exists(socket_path):
# start the connection if it isn't started
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
connection.exec_command('EXEC: show version')
task_vars['ansible_socket'] = socket_path
@ -66,7 +67,14 @@ class ActionModule(_ActionModule):
self._play_context.become_method = None
return super(ActionModule, self).run(tmp, task_vars)
results = super(ActionModule, self).run(tmp, task_vars)
# need to make sure to leave config mode if the module didn't clean up
rc, out, err = connection.exec_command('EXEC: prompt()')
if str(out).strip().endswith(')#'):
connection.exec_command('EXEC: exit')
return results
def _get_socket_path(self, play_context):
ssh = connection_loader.get('ssh', class_only=True)