mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-23 05:10:22 -07:00
added timestamps to ios_command module (#50323)
ios_command module now returns timestamps field, which shows command execution time
This commit is contained in:
parent
8719866ae8
commit
2a432a093b
4 changed files with 17 additions and 6 deletions
|
@ -129,10 +129,10 @@ def get_config(module, flags=None):
|
||||||
return cfg
|
return cfg
|
||||||
|
|
||||||
|
|
||||||
def run_commands(module, commands, check_rc=True):
|
def run_commands(module, commands, check_rc=True, return_timestamps=False):
|
||||||
connection = get_connection(module)
|
connection = get_connection(module)
|
||||||
try:
|
try:
|
||||||
return connection.run_commands(commands=commands, check_rc=check_rc)
|
return connection.run_commands(commands=commands, check_rc=check_rc, return_timestamps=return_timestamps)
|
||||||
except ConnectionError as exc:
|
except ConnectionError as exc:
|
||||||
module.fail_json(msg=to_text(exc))
|
module.fail_json(msg=to_text(exc))
|
||||||
|
|
||||||
|
|
|
@ -198,7 +198,7 @@ def main():
|
||||||
match = module.params['match']
|
match = module.params['match']
|
||||||
|
|
||||||
while retries > 0:
|
while retries > 0:
|
||||||
responses = run_commands(module, commands)
|
responses, timestamps = run_commands(module, commands, return_timestamps=True)
|
||||||
|
|
||||||
for item in list(conditionals):
|
for item in list(conditionals):
|
||||||
if item(responses):
|
if item(responses):
|
||||||
|
@ -221,6 +221,7 @@ def main():
|
||||||
result.update({
|
result.update({
|
||||||
'stdout': responses,
|
'stdout': responses,
|
||||||
'stdout_lines': list(to_lines(responses)),
|
'stdout_lines': list(to_lines(responses)),
|
||||||
|
'timestamps': timestamps
|
||||||
})
|
})
|
||||||
|
|
||||||
module.exit_json(**result)
|
module.exit_json(**result)
|
||||||
|
|
|
@ -27,6 +27,7 @@ from itertools import chain
|
||||||
|
|
||||||
from ansible.errors import AnsibleConnectionFailure
|
from ansible.errors import AnsibleConnectionFailure
|
||||||
from ansible.module_utils._text import to_text
|
from ansible.module_utils._text import to_text
|
||||||
|
from ansible.module_utils.basic import get_timestamp
|
||||||
from ansible.module_utils.common._collections_compat import Mapping
|
from ansible.module_utils.common._collections_compat import Mapping
|
||||||
from ansible.module_utils.six import iteritems
|
from ansible.module_utils.six import iteritems
|
||||||
from ansible.module_utils.network.common.config import NetworkConfig, dumps
|
from ansible.module_utils.network.common.config import NetworkConfig, dumps
|
||||||
|
@ -271,11 +272,12 @@ class Cliconf(CliconfBase):
|
||||||
|
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
def run_commands(self, commands=None, check_rc=True):
|
def run_commands(self, commands=None, check_rc=True, return_timestamps=False):
|
||||||
if commands is None:
|
if commands is None:
|
||||||
raise ValueError("'commands' value is required")
|
raise ValueError("'commands' value is required")
|
||||||
|
|
||||||
responses = list()
|
responses = list()
|
||||||
|
timestamps = list()
|
||||||
for cmd in to_list(commands):
|
for cmd in to_list(commands):
|
||||||
if not isinstance(cmd, Mapping):
|
if not isinstance(cmd, Mapping):
|
||||||
cmd = {'command': cmd}
|
cmd = {'command': cmd}
|
||||||
|
@ -286,14 +288,19 @@ class Cliconf(CliconfBase):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
out = self.send_command(**cmd)
|
out = self.send_command(**cmd)
|
||||||
|
timestamp = get_timestamp()
|
||||||
except AnsibleConnectionFailure as e:
|
except AnsibleConnectionFailure as e:
|
||||||
if check_rc:
|
if check_rc:
|
||||||
raise
|
raise
|
||||||
out = getattr(e, 'err', to_text(e))
|
out = getattr(e, 'err', to_text(e))
|
||||||
|
|
||||||
responses.append(out)
|
responses.append(out)
|
||||||
|
timestamps.append(timestamp)
|
||||||
|
|
||||||
return responses
|
if return_timestamps:
|
||||||
|
return responses, timestamps
|
||||||
|
else:
|
||||||
|
return responses
|
||||||
|
|
||||||
def get_defaults_flag(self):
|
def get_defaults_flag(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -22,6 +22,7 @@ __metaclass__ = type
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from units.compat.mock import patch
|
from units.compat.mock import patch
|
||||||
|
from ansible.module_utils.basic import get_timestamp
|
||||||
from ansible.modules.network.ios import ios_command
|
from ansible.modules.network.ios import ios_command
|
||||||
from units.modules.utils import set_module_args
|
from units.modules.utils import set_module_args
|
||||||
from .ios_module import TestIosModule, load_fixture
|
from .ios_module import TestIosModule, load_fixture
|
||||||
|
@ -46,6 +47,7 @@ class TestIosCommandModule(TestIosModule):
|
||||||
def load_from_file(*args, **kwargs):
|
def load_from_file(*args, **kwargs):
|
||||||
module, commands = args
|
module, commands = args
|
||||||
output = list()
|
output = list()
|
||||||
|
timestamps = list()
|
||||||
|
|
||||||
for item in commands:
|
for item in commands:
|
||||||
try:
|
try:
|
||||||
|
@ -55,7 +57,8 @@ class TestIosCommandModule(TestIosModule):
|
||||||
command = item['command']
|
command = item['command']
|
||||||
filename = str(command).replace(' ', '_')
|
filename = str(command).replace(' ', '_')
|
||||||
output.append(load_fixture(filename))
|
output.append(load_fixture(filename))
|
||||||
return output
|
timestamps.append(get_timestamp())
|
||||||
|
return output, timestamps
|
||||||
|
|
||||||
self.run_commands.side_effect = load_from_file
|
self.run_commands.side_effect = load_from_file
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue