Revert "switch to using hashlib.md5 or md5 (if python 2.4) instead of a os call"

This reverts commit 865796c368.

(Superseeded by next commit)
This commit is contained in:
Michael DeHaan 2012-07-07 11:48:32 -04:00
parent 5211b58a98
commit c150e9f14f
4 changed files with 31 additions and 79 deletions

View file

@ -26,19 +26,11 @@ import jinja2
import yaml import yaml
import optparse import optparse
from operator import methodcaller from operator import methodcaller
try: try:
import json import json
except ImportError: except ImportError:
import simplejson as json import simplejson as json
try:
import hashlib
HAVE_HASHLIB=True
except ImportError:
import md5
HAVE_HASHLIB=False
from ansible import errors from ansible import errors
import ansible.constants as C import ansible.constants as C
@ -320,18 +312,21 @@ def parse_kv(args):
options[k]=v options[k]=v
return options return options
def local_md5(filename): def local_md5(file):
''' compute local md5sum, return None if file is not present ''' ''' compute local md5sum, return None if file is not present '''
if os.path.exists(filename): #was >>> cmd = "/usr/bin/md5sum %s 2> /dev/null || /sbin/md5 -q %s" % (file,file)
md5val=None md5s = [
if os.path.exists(filename): "(/usr/bin/md5sum %s 2>/dev/null)" % (file),
if HAVE_HASHLIB: "(/sbin/md5sum -q %s 2>/dev/null)" % (file),
md5val=hashlib.md5(file(filename).read()).hexdigest() "(/usr/bin/digest -a md5 -v %s 2>/dev/null)" % (file)
else: ]
md5val=md5.new(file(filename).read()).hexdigest() cmd = " || ".join(md5s)
return md5val
else: if not os.path.exists(file):
return None return None
else:
c = os.popen(cmd)
return c.read().split()[0]
#################################################################### ####################################################################

View file

@ -28,7 +28,6 @@ import shlex
import shutil import shutil
import syslog import syslog
import tempfile import tempfile
try: try:
import hashlib import hashlib
HAVE_HASHLIB=True HAVE_HASHLIB=True
@ -65,18 +64,12 @@ def write_temp_file(data):
os.close(fd) os.close(fd)
return path return path
def local_md5(filename): def file_digest(path):
''' 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: if HAVE_HASHLIB:
md5val=hashlib.md5(file(filename).read()).hexdigest() digest = hashlib.md5(file(path).read()).hexdigest()
else: else:
md5val=md5.new(file(filename).read()).hexdigest() digest = md5.new(file(path).read()).hexdigest()
return md5val return digest
else:
return None
# =========================================== # ===========================================
@ -118,10 +111,10 @@ if not os.path.isdir(src):
fail_json(msg="Source (%s) is not a directory" % src) fail_json(msg="Source (%s) is not a directory" % src)
path = write_temp_file(assemble_from_fragments(src)) path = write_temp_file(assemble_from_fragments(src))
pathmd5 = local_md5(path) pathmd5 = file_digest(path)
if os.path.exists(dest): if os.path.exists(dest):
destmd5 = local_md5(dest) destmd5 = file_digest(dest)
if pathmd5 != destmd5: if pathmd5 != destmd5:
shutil.copy(path, dest) shutil.copy(path, dest)

View file

@ -24,13 +24,6 @@ import shlex
import shutil import shutil
import syslog import syslog
try:
import hashlib
HAVE_HASHLIB=True
except ImportError:
import md5
HAVE_HASHLIB=False
# =========================================== # ===========================================
# convert arguments of form a=b c=d # convert arguments of form a=b c=d
# to a dictionary # to a dictionary
@ -45,20 +38,9 @@ def exit_kv(rc=0, **kwargs):
print dump_kv(kwargs) print dump_kv(kwargs)
sys.exit(rc) sys.exit(rc)
def local_md5(filename): def md5_sum(f):
''' compute local md5sum, return None if file is not present ''' 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]
if os.path.exists(filename): return md5sum
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
# ===========================================
if len(sys.argv) == 1: if len(sys.argv) == 1:
exit_kv(rc=1, failed=1, msg="incorrect number of arguments given") 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)) exit_kv(rc=1, failed=1, msg="Source %s failed to transfer" % (src))
if not os.access(src, os.R_OK): if not os.access(src, os.R_OK):
exit_kv(rc=1, failed=1, msg="Source %s not readable" % (src)) 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 md5sum_dest = None
# check if there is no dest file # 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)) exit_kv(rc=1, failed=1, msg="Destination %s not writable" % (dest))
if not os.access(dest, os.R_OK): if not os.access(dest, os.R_OK):
exit_kv(rc=1, failed=1, msg="Destination %s not readable" % (dest)) exit_kv(rc=1, failed=1, msg="Destination %s not readable" % (dest))
md5sum_dest = local_md5(dest) md5sum_dest = md5_sum(dest)
else: else:
if not os.access(os.path.dirname(dest), os.W_OK): 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))) exit_kv(rc=1, failed=1, msg="Destination %s not writable" % (os.path.dirname(dest)))

View file

@ -33,13 +33,6 @@ import subprocess
import traceback import traceback
import syslog import syslog
try:
import hashlib
HAVE_HASHLIB=True
except ImportError:
import md5
HAVE_HASHLIB=False
try: try:
import selinux import selinux
HAVE_SELINUX=True HAVE_SELINUX=True
@ -318,20 +311,9 @@ def ansible_facts():
get_service_facts(facts) get_service_facts(facts)
return facts return facts
def local_md5(filename): def md5_sum(f):
''' compute local md5sum, return None if file is not present ''' 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]
if os.path.exists(filename): return md5sum
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
# ===========================================
# load config & template variables # load config & template variables
@ -369,7 +351,7 @@ md5sum = None
if not os.path.exists(ansible_file): if not os.path.exists(ansible_file):
changed = True changed = True
else: else:
md5sum = local_md5(ansible_file) md5sum = md5_sum(ansible_file)
# Get some basic facts in case facter or ohai are not installed # Get some basic facts in case facter or ohai are not installed
for (k, v) in ansible_facts().items(): 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.write(reformat)
f.close() f.close()
md5sum2 = local_md5(ansible_file) md5sum2 = md5_sum(ansible_file)
if md5sum != md5sum2: if md5sum != md5sum2:
changed = True changed = True