diff --git a/lib/ansible/utils.py b/lib/ansible/utils.py index c46ff6a342f..0c72f8ae5fd 100644 --- a/lib/ansible/utils.py +++ b/lib/ansible/utils.py @@ -26,19 +26,11 @@ import jinja2 import yaml import optparse from operator import methodcaller - try: import json except ImportError: import simplejson as json -try: - import hashlib - HAVE_HASHLIB=True -except ImportError: - import md5 - HAVE_HASHLIB=False - from ansible import errors import ansible.constants as C @@ -320,18 +312,21 @@ def parse_kv(args): options[k]=v return options -def local_md5(filename): +def local_md5(file): ''' compute local md5sum, return None if file is not present ''' - if os.path.exists(filename): - md5val=None - if os.path.exists(filename): - if HAVE_HASHLIB: - md5val=hashlib.md5(file(filename).read()).hexdigest() - else: - md5val=md5.new(file(filename).read()).hexdigest() - return md5val - else: + #was >>> cmd = "/usr/bin/md5sum %s 2> /dev/null || /sbin/md5 -q %s" % (file,file) + md5s = [ + "(/usr/bin/md5sum %s 2>/dev/null)" % (file), + "(/sbin/md5sum -q %s 2>/dev/null)" % (file), + "(/usr/bin/digest -a md5 -v %s 2>/dev/null)" % (file) + ] + cmd = " || ".join(md5s) + + if not os.path.exists(file): return None + else: + c = os.popen(cmd) + return c.read().split()[0] #################################################################### diff --git a/library/assemble b/library/assemble index bf612cca65c..23c50221b27 100755 --- a/library/assemble +++ b/library/assemble @@ -28,7 +28,6 @@ import shlex import shutil import syslog import tempfile - try: import hashlib HAVE_HASHLIB=True @@ -65,18 +64,12 @@ def write_temp_file(data): os.close(fd) return path -def local_md5(filename): - ''' compute local md5sum, return None if file is not present ''' - if os.path.exists(filename): - md5val=None - if os.path.exists(filename): - if HAVE_HASHLIB: - md5val=hashlib.md5(file(filename).read()).hexdigest() - else: - md5val=md5.new(file(filename).read()).hexdigest() - return md5val - else: - return None +def file_digest(path): + if HAVE_HASHLIB: + digest = hashlib.md5(file(path).read()).hexdigest() + else: + digest = md5.new(file(path).read()).hexdigest() + return digest # =========================================== @@ -118,10 +111,10 @@ if not os.path.isdir(src): fail_json(msg="Source (%s) is not a directory" % src) path = write_temp_file(assemble_from_fragments(src)) -pathmd5 = local_md5(path) +pathmd5 = file_digest(path) if os.path.exists(dest): - destmd5 = local_md5(dest) + destmd5 = file_digest(dest) if pathmd5 != destmd5: shutil.copy(path, dest) diff --git a/library/copy b/library/copy index a6be0caa6df..f06f7793606 100755 --- a/library/copy +++ b/library/copy @@ -24,13 +24,6 @@ import shlex import shutil import syslog -try: - import hashlib - HAVE_HASHLIB=True -except ImportError: - import md5 - HAVE_HASHLIB=False - # =========================================== # convert arguments of form a=b c=d # to a dictionary @@ -45,20 +38,9 @@ def exit_kv(rc=0, **kwargs): print dump_kv(kwargs) sys.exit(rc) -def local_md5(filename): - ''' compute local md5sum, return None if file is not present ''' - if os.path.exists(filename): - md5val=None - if os.path.exists(filename): - if HAVE_HASHLIB: - md5val=hashlib.md5(file(filename).read()).hexdigest() - else: - md5val=md5.new(file(filename).read()).hexdigest() - return md5val - else: - return None - -# =========================================== +def md5_sum(f): + md5sum = os.popen("/usr/bin/md5sum %(file)s 2>/dev/null || /sbin/md5 -q %(file)s 2>/dev/null || /usr/bin/digest -a md5 -v %(file)s 2>/dev/null" % {"file": f}).read().split()[0] + return md5sum if len(sys.argv) == 1: exit_kv(rc=1, failed=1, msg="incorrect number of arguments given") @@ -91,7 +73,7 @@ if not os.path.exists(src): exit_kv(rc=1, failed=1, msg="Source %s failed to transfer" % (src)) if not os.access(src, os.R_OK): exit_kv(rc=1, failed=1, msg="Source %s not readable" % (src)) -md5sum_src = local_md5(src) +md5sum_src = md5_sum(src) md5sum_dest = None # check if there is no dest file @@ -101,7 +83,7 @@ if os.path.exists(dest): exit_kv(rc=1, failed=1, msg="Destination %s not writable" % (dest)) if not os.access(dest, os.R_OK): exit_kv(rc=1, failed=1, msg="Destination %s not readable" % (dest)) - md5sum_dest = local_md5(dest) + md5sum_dest = md5_sum(dest) else: if not os.access(os.path.dirname(dest), os.W_OK): exit_kv(rc=1, failed=1, msg="Destination %s not writable" % (os.path.dirname(dest))) diff --git a/library/setup b/library/setup index c6edbfe4812..15f5b67fd8f 100755 --- a/library/setup +++ b/library/setup @@ -33,13 +33,6 @@ import subprocess import traceback import syslog -try: - import hashlib - HAVE_HASHLIB=True -except ImportError: - import md5 - HAVE_HASHLIB=False - try: import selinux HAVE_SELINUX=True @@ -318,20 +311,9 @@ def ansible_facts(): get_service_facts(facts) return facts -def local_md5(filename): - ''' compute local md5sum, return None if file is not present ''' - if os.path.exists(filename): - md5val=None - if os.path.exists(filename): - if HAVE_HASHLIB: - md5val=hashlib.md5(file(filename).read()).hexdigest() - else: - md5val=md5.new(file(filename).read()).hexdigest() - return md5val - else: - return None - -# =========================================== +def md5_sum(f): + md5sum = os.popen("/usr/bin/md5sum %(file)s 2>/dev/null || /sbin/md5 -q %(file)s 2>/dev/null || /usr/bin/digest -a md5 -v %(file)s 2>/dev/null" % {"file": f}).read().split()[0] + return md5sum # load config & template variables @@ -369,7 +351,7 @@ md5sum = None if not os.path.exists(ansible_file): changed = True else: - md5sum = local_md5(ansible_file) + md5sum = md5_sum(ansible_file) # Get some basic facts in case facter or ohai are not installed for (k, v) in ansible_facts().items(): @@ -418,7 +400,7 @@ reformat = json.dumps(setup_options, sort_keys=True, indent=4) f.write(reformat) f.close() -md5sum2 = local_md5(ansible_file) +md5sum2 = md5_sum(ansible_file) if md5sum != md5sum2: changed = True