diff --git a/lib/ansible/module_utils/network/iosxr/iosxr.py b/lib/ansible/module_utils/network/iosxr/iosxr.py index b49c72875af66e..8ab1cc0959e8ff 100644 --- a/lib/ansible/module_utils/network/iosxr/iosxr.py +++ b/lib/ansible/module_utils/network/iosxr/iosxr.py @@ -477,10 +477,10 @@ def load_config(module, command_filter, commit=False, replace=False, return diff -def run_commands(module, commands, check_rc=True): +def run_commands(module, commands, check_rc=True, return_timestamps=False): connection = get_connection(module) 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: module.fail_json(msg=to_text(exc)) diff --git a/lib/ansible/modules/network/iosxr/iosxr_command.py b/lib/ansible/modules/network/iosxr/iosxr_command.py index e3d971a76a5e71..2f45801841bfda 100644 --- a/lib/ansible/modules/network/iosxr/iosxr_command.py +++ b/lib/ansible/modules/network/iosxr/iosxr_command.py @@ -178,7 +178,7 @@ def main(): match = module.params['match'] while retries > 0: - responses = run_commands(module, commands) + responses, timestamps = run_commands(module, commands, return_timestamps=True) for item in list(conditionals): if item(responses): @@ -201,6 +201,7 @@ def main(): result.update({ 'stdout': responses, 'stdout_lines': list(to_lines(responses)), + 'timestamps': timestamps }) module.exit_json(**result) diff --git a/lib/ansible/plugins/cliconf/iosxr.py b/lib/ansible/plugins/cliconf/iosxr.py index 8fc63008d0d18d..4b0453901fbb54 100644 --- a/lib/ansible/plugins/cliconf/iosxr.py +++ b/lib/ansible/plugins/cliconf/iosxr.py @@ -24,6 +24,7 @@ from ansible.errors import AnsibleConnectionFailure 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.connection import ConnectionError from ansible.module_utils.network.common.config import NetworkConfig, dumps @@ -172,10 +173,11 @@ def commit(self, comment=None, label=None, replace=None): self.send_command(**cmd_obj) - 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: raise ValueError("'commands' value is required") responses = list() + timestamps = list() for cmd in to_list(commands): if not isinstance(cmd, Mapping): cmd = {'command': cmd} @@ -185,6 +187,7 @@ def run_commands(self, commands=None, check_rc=True): raise ValueError("'output' value %s is not supported for run_commands" % output) try: + timestamp = get_timestamp() out = self.send_command(**cmd) except AnsibleConnectionFailure as e: if check_rc: @@ -203,7 +206,11 @@ def run_commands(self, commands=None, check_rc=True): pass responses.append(out) - return responses + timestamps.append(timestamp) + if return_timestamps: + return responses, timestamps + else: + return responses def discard_changes(self): self.send_command('abort') diff --git a/test/units/modules/network/iosxr/test_iosxr_command.py b/test/units/modules/network/iosxr/test_iosxr_command.py index 49242939e4ef9c..75ea75df0f767d 100644 --- a/test/units/modules/network/iosxr/test_iosxr_command.py +++ b/test/units/modules/network/iosxr/test_iosxr_command.py @@ -20,6 +20,7 @@ __metaclass__ = type from units.compat.mock import patch +from ansible.module_utils.basic import get_timestamp from ansible.modules.network.iosxr import iosxr_command from units.modules.utils import set_module_args from .iosxr_module import TestIosxrModule, load_fixture @@ -45,6 +46,7 @@ def load_fixtures(self, commands=None): def load_from_file(*args, **kwargs): module, commands = args output = list() + timestamps = list() for item in commands: try: @@ -53,7 +55,8 @@ def load_from_file(*args, **kwargs): command = item filename = str(command).replace(' ', '_') output.append(load_fixture(filename)) - return output + timestamps.append(get_timestamp()) + return output, timestamps self.run_commands.side_effect = load_from_file