Merge pull request #554 from davehatton/switch_to_using_hashlib_or_md5
Switch to using hashlib or md5
This commit is contained in:
commit
c432f9bc74
5 changed files with 81 additions and 25 deletions
|
@ -746,7 +746,8 @@ class Runner(object):
|
||||||
test = "[[ -r %s ]]" % path
|
test = "[[ -r %s ]]" % path
|
||||||
md5s = [
|
md5s = [
|
||||||
"(%s && /usr/bin/md5sum %s 2>/dev/null)" % (test,path),
|
"(%s && /usr/bin/md5sum %s 2>/dev/null)" % (test,path),
|
||||||
"(%s && /sbin/md5sum -q %s 2>/dev/null)" % (test,path)
|
"(%s && /sbin/md5sum -q %s 2>/dev/null)" % (test,path),
|
||||||
|
"(%s && /usr/bin/digest -a md5 -v %s 2>/dev/null)" % (test,path)
|
||||||
]
|
]
|
||||||
cmd = " || ".join(md5s)
|
cmd = " || ".join(md5s)
|
||||||
cmd = "%s || (echo \"0 %s\")" % (cmd, path)
|
cmd = "%s || (echo \"0 %s\")" % (cmd, path)
|
||||||
|
|
|
@ -26,11 +26,19 @@ 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
|
||||||
|
|
||||||
|
@ -312,14 +320,18 @@ def parse_kv(args):
|
||||||
options[k]=v
|
options[k]=v
|
||||||
return options
|
return options
|
||||||
|
|
||||||
def local_md5(file):
|
def local_md5(filename):
|
||||||
''' compute local md5sum, return None if file is not present '''
|
''' compute local md5sum, return None if file is not present '''
|
||||||
cmd = "/usr/bin/md5sum %s 2> /dev/null || /sbin/md5 -q %s" % (file,file)
|
if os.path.exists(filename):
|
||||||
if not os.path.exists(file):
|
md5val=None
|
||||||
return 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:
|
else:
|
||||||
c = os.popen(cmd)
|
return None
|
||||||
return c.read().split()[0]
|
|
||||||
|
|
||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|
|
@ -28,6 +28,7 @@ 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
|
||||||
|
@ -64,12 +65,18 @@ def write_temp_file(data):
|
||||||
os.close(fd)
|
os.close(fd)
|
||||||
return path
|
return path
|
||||||
|
|
||||||
def file_digest(path):
|
def local_md5(filename):
|
||||||
if HAVE_HASHLIB:
|
''' compute local md5sum, return None if file is not present '''
|
||||||
digest = hashlib.md5(file(path).read()).hexdigest()
|
if os.path.exists(filename):
|
||||||
else:
|
md5val=None
|
||||||
digest = md5.new(file(path).read()).hexdigest()
|
if os.path.exists(filename):
|
||||||
return digest
|
if HAVE_HASHLIB:
|
||||||
|
md5val=hashlib.md5(file(filename).read()).hexdigest()
|
||||||
|
else:
|
||||||
|
md5val=md5.new(file(filename).read()).hexdigest()
|
||||||
|
return md5val
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
# ===========================================
|
# ===========================================
|
||||||
|
|
||||||
|
@ -111,10 +118,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 = file_digest(path)
|
pathmd5 = local_md5(path)
|
||||||
|
|
||||||
if os.path.exists(dest):
|
if os.path.exists(dest):
|
||||||
destmd5 = file_digest(dest)
|
destmd5 = local_md5(dest)
|
||||||
|
|
||||||
if pathmd5 != destmd5:
|
if pathmd5 != destmd5:
|
||||||
shutil.copy(path, dest)
|
shutil.copy(path, dest)
|
||||||
|
|
28
library/copy
28
library/copy
|
@ -24,6 +24,13 @@ 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
|
||||||
|
@ -38,9 +45,20 @@ def exit_kv(rc=0, **kwargs):
|
||||||
print dump_kv(kwargs)
|
print dump_kv(kwargs)
|
||||||
sys.exit(rc)
|
sys.exit(rc)
|
||||||
|
|
||||||
def md5_sum(f):
|
def local_md5(filename):
|
||||||
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]
|
''' compute local md5sum, return None if file is not present '''
|
||||||
return md5sum
|
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
|
||||||
|
|
||||||
|
# ===========================================
|
||||||
|
|
||||||
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")
|
||||||
|
@ -73,7 +91,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 = md5_sum(src)
|
md5sum_src = local_md5(src)
|
||||||
|
|
||||||
md5sum_dest = None
|
md5sum_dest = None
|
||||||
# check if there is no dest file
|
# check if there is no dest file
|
||||||
|
@ -83,7 +101,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 = md5_sum(dest)
|
md5sum_dest = local_md5(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)))
|
||||||
|
|
|
@ -33,6 +33,13 @@ 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
|
||||||
|
@ -311,9 +318,20 @@ def ansible_facts():
|
||||||
get_service_facts(facts)
|
get_service_facts(facts)
|
||||||
return facts
|
return facts
|
||||||
|
|
||||||
def md5_sum(f):
|
def local_md5(filename):
|
||||||
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]
|
''' compute local md5sum, return None if file is not present '''
|
||||||
return md5sum
|
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
|
||||||
|
|
||||||
|
# ===========================================
|
||||||
|
|
||||||
# load config & template variables
|
# load config & template variables
|
||||||
|
|
||||||
|
@ -351,7 +369,7 @@ md5sum = None
|
||||||
if not os.path.exists(ansible_file):
|
if not os.path.exists(ansible_file):
|
||||||
changed = True
|
changed = True
|
||||||
else:
|
else:
|
||||||
md5sum = md5_sum(ansible_file)
|
md5sum = local_md5(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():
|
||||||
|
@ -400,7 +418,7 @@ reformat = json.dumps(setup_options, sort_keys=True, indent=4)
|
||||||
f.write(reformat)
|
f.write(reformat)
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
md5sum2 = md5_sum(ansible_file)
|
md5sum2 = local_md5(ansible_file)
|
||||||
|
|
||||||
if md5sum != md5sum2:
|
if md5sum != md5sum2:
|
||||||
changed = True
|
changed = True
|
||||||
|
|
Loading…
Reference in a new issue