diff --git a/lib/ansible/modules/network/nxos/nxos_file_copy.py b/lib/ansible/modules/network/nxos/nxos_file_copy.py index 7a4acf1b648..000da54a0d1 100644 --- a/lib/ansible/modules/network/nxos/nxos_file_copy.py +++ b/lib/ansible/modules/network/nxos/nxos_file_copy.py @@ -146,6 +146,7 @@ remote_file: sample: '/path/to/remote/file' ''' +import hashlib import os import re import time @@ -154,7 +155,7 @@ import traceback from ansible.module_utils.network.nxos.nxos import run_commands from ansible.module_utils.network.nxos.nxos import nxos_argument_spec, check_args from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils._text import to_native, to_text +from ansible.module_utils._text import to_native, to_text, to_bytes try: import paramiko @@ -175,12 +176,34 @@ except ImportError: HAS_PEXPECT = False +def md5sum_check(module, dst, file_system): + command = 'show file {0}{1} md5sum'.format(file_system, dst) + remote_filehash = run_commands(module, {'command': command, 'output': 'text'})[0] + remote_filehash = to_bytes(remote_filehash, errors='surrogate_or_strict') + + local_file = module.params['local_file'] + try: + with open(local_file, 'r') as f: + filecontent = f.read() + except (OSError, IOError) as exc: + module.fail_json(msg="Error reading the file: %s" % to_text(exc)) + + filecontent = to_bytes(filecontent, errors='surrogate_or_strict') + local_filehash = hashlib.md5(filecontent).hexdigest() + + if local_filehash == remote_filehash: + return True + else: + return False + + def remote_file_exists(module, dst, file_system='bootflash:'): command = 'dir {0}/{1}'.format(file_system, dst) body = run_commands(module, {'command': command, 'output': 'text'})[0] if 'No such file' in body: return False - return True + else: + return md5sum_check(module, dst, file_system) def verify_remote_file_exists(module, dst, file_system='bootflash:'):