diff --git a/assemble b/assemble index 23c50221b27..7c0f7c773a3 100755 --- a/assemble +++ b/assemble @@ -28,6 +28,7 @@ import shlex import shutil import syslog import tempfile + try: import hashlib HAVE_HASHLIB=True @@ -64,12 +65,14 @@ def write_temp_file(data): os.close(fd) return path -def file_digest(path): - if HAVE_HASHLIB: - digest = hashlib.md5(file(path).read()).hexdigest() - else: - digest = md5.new(file(path).read()).hexdigest() - return digest +def md5(filename): + ''' compute md5sum, return None if file is not present ''' + if not os.path.exists(filename): + return None + if HAVE_HASHLIB: + return hashlib.md5(file(filename).read()).hexdigest() + else: + return md5.new(file(filename).read()).hexdigest() # =========================================== @@ -111,10 +114,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 = file_digest(path) +pathmd5 = md5(path) if os.path.exists(dest): - destmd5 = file_digest(dest) + destmd5 = md5(dest) if pathmd5 != destmd5: shutil.copy(path, dest) diff --git a/copy b/copy index f06f7793606..d0aaac09262 100755 --- a/copy +++ b/copy @@ -24,6 +24,13 @@ 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 @@ -38,9 +45,16 @@ def exit_kv(rc=0, **kwargs): print dump_kv(kwargs) sys.exit(rc) -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 +def md5(filename): + ''' compute md5sum, return None if file is not present ''' + if not os.path.exists(filename): + return None + if HAVE_HASHLIB: + return hashlib.md5(file(filename).read()).hexdigest() + else: + return md5.new(file(filename).read()).hexdigest() + +# =========================================== if len(sys.argv) == 1: exit_kv(rc=1, failed=1, msg="incorrect number of arguments given") @@ -73,7 +87,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 = md5_sum(src) +md5sum_src = md5(src) md5sum_dest = None # check if there is no dest file @@ -83,7 +97,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 = md5_sum(dest) + md5sum_dest = md5(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/setup b/setup index 15f5b67fd8f..bed214c70c6 100755 --- a/setup +++ b/setup @@ -33,6 +33,13 @@ 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 @@ -311,9 +318,16 @@ def ansible_facts(): get_service_facts(facts) return facts -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 +def md5(filename): + ''' compute md5sum, return None if file is not present ''' + if not os.path.exists(filename): + return None + if HAVE_HASHLIB: + return hashlib.md5(file(filename).read()).hexdigest() + else: + return md5.new(file(filename).read()).hexdigest() + +# =========================================== # load config & template variables @@ -351,7 +365,7 @@ md5sum = None if not os.path.exists(ansible_file): changed = True else: - md5sum = md5_sum(ansible_file) + md5sum = md5(ansible_file) # Get some basic facts in case facter or ohai are not installed for (k, v) in ansible_facts().items(): @@ -400,7 +414,7 @@ reformat = json.dumps(setup_options, sort_keys=True, indent=4) f.write(reformat) f.close() -md5sum2 = md5_sum(ansible_file) +md5sum2 = md5(ansible_file) if md5sum != md5sum2: changed = True