Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
ansible
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
ansible
Commits
8d6d711a
Commit
8d6d711a
authored
Aug 03, 2015
by
muffl0n
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move get_available_hash_algorithms() from get_url
parent
c3ce140d
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
50 additions
and
33 deletions
+50
-33
lib/ansible/module_utils/basic.py
+50
-33
No files found.
lib/ansible/module_utils/basic.py
View file @
8d6d711a
...
@@ -94,27 +94,6 @@ try:
...
@@ -94,27 +94,6 @@ try:
except
ImportError
:
except
ImportError
:
pass
pass
HAVE_HASHLIB
=
False
try
:
from
hashlib
import
sha1
as
_sha1
HAVE_HASHLIB
=
True
except
ImportError
:
from
sha
import
sha
as
_sha1
try
:
from
hashlib
import
md5
as
_md5
except
ImportError
:
try
:
from
md5
import
md5
as
_md5
except
ImportError
:
# MD5 unavailable. Possibly FIPS mode
_md5
=
None
try
:
from
hashlib
import
sha256
as
_sha256
except
ImportError
:
pass
try
:
try
:
from
systemd
import
journal
from
systemd
import
journal
has_journal
=
True
has_journal
=
True
...
@@ -1341,21 +1320,63 @@ class AnsibleModule(object):
...
@@ -1341,21 +1320,63 @@ class AnsibleModule(object):
or
stat
.
S_IXGRP
&
os
.
stat
(
path
)[
stat
.
ST_MODE
]
or
stat
.
S_IXGRP
&
os
.
stat
(
path
)[
stat
.
ST_MODE
]
or
stat
.
S_IXOTH
&
os
.
stat
(
path
)[
stat
.
ST_MODE
])
or
stat
.
S_IXOTH
&
os
.
stat
(
path
)[
stat
.
ST_MODE
])
def
digest_from_file
(
self
,
filename
,
digest_method
):
def
get_available_hash_algorithms
(
self
):
''' Return hex digest of local file for a given digest_method, or None if file is not present. '''
''' Get all hash algorithms that are available on this system as a dict.
For example: {
'md5': md5.md5,
'sha1': sha.sha
}
'''
available_hash_algorithms
=
dict
()
try
:
import
hashlib
# python 2.7.9+ and 2.7.0+
for
attribute
in
(
'available_algorithms'
,
'algorithms'
):
algorithms
=
getattr
(
hashlib
,
attribute
,
None
)
if
algorithms
:
break
if
algorithms
is
None
:
# python 2.5+
algorithms
=
(
'md5'
,
'sha1'
,
'sha224'
,
'sha256'
,
'sha384'
,
'sha512'
)
for
algorithm
in
algorithms
:
available_hash_algorithms
[
algorithm
]
=
getattr
(
hashlib
,
algorithm
)
except
ImportError
:
import
sha
available_hash_algorithms
=
{
'sha1'
:
sha
.
sha
}
try
:
import
md5
available_hash_algorithms
[
'md5'
]
=
md5
.
md5
except
ImportError
:
pass
return
available_hash_algorithms
def
digest_from_file
(
self
,
filename
,
algorithm
):
''' Return hex digest of local file for a digest_method specified by name, or None if file is not present. '''
if
not
os
.
path
.
exists
(
filename
):
if
not
os
.
path
.
exists
(
filename
):
return
None
return
None
if
os
.
path
.
isdir
(
filename
):
if
os
.
path
.
isdir
(
filename
):
self
.
fail_json
(
msg
=
"attempted to take checksum of directory:
%
s"
%
filename
)
self
.
fail_json
(
msg
=
"attempted to take checksum of directory:
%
s"
%
filename
)
digest
=
digest_method
# preserve old behaviour where the third parameter was a hash algorithm object
if
hasattr
(
algorithm
,
'hexdigest'
):
digest_method
=
algorithm
else
:
try
:
digest_method
=
self
.
get_available_hash_algorithms
()[
algorithm
]()
except
KeyError
:
self
.
fail_json
(
msg
=
"Could not hash file '
%
s' with algorithm '
%
s'. Available algorithms:
%
s"
%
(
filename
,
algorithm
,
', '
.
join
(
self
.
get_available_hash_algorithms
())))
blocksize
=
64
*
1024
blocksize
=
64
*
1024
infile
=
open
(
filename
,
'rb'
)
infile
=
open
(
filename
,
'rb'
)
block
=
infile
.
read
(
blocksize
)
block
=
infile
.
read
(
blocksize
)
while
block
:
while
block
:
digest
.
update
(
block
)
digest
_method
.
update
(
block
)
block
=
infile
.
read
(
blocksize
)
block
=
infile
.
read
(
blocksize
)
infile
.
close
()
infile
.
close
()
return
digest
.
hexdigest
()
return
digest
_method
.
hexdigest
()
def
md5
(
self
,
filename
):
def
md5
(
self
,
filename
):
''' Return MD5 hex digest of local file using digest_from_file().
''' Return MD5 hex digest of local file using digest_from_file().
...
@@ -1368,19 +1389,15 @@ class AnsibleModule(object):
...
@@ -1368,19 +1389,15 @@ class AnsibleModule(object):
Most uses of this function can use the module.sha1 function instead.
Most uses of this function can use the module.sha1 function instead.
'''
'''
if
not
_md5
:
return
self
.
digest_from_file
(
filename
,
'md5'
)
raise
ValueError
(
'MD5 not available. Possibly running in FIPS mode'
)
return
self
.
digest_from_file
(
filename
,
_md5
())
def
sha1
(
self
,
filename
):
def
sha1
(
self
,
filename
):
''' Return SHA1 hex digest of local file using digest_from_file(). '''
''' Return SHA1 hex digest of local file using digest_from_file(). '''
return
self
.
digest_from_file
(
filename
,
_sha1
()
)
return
self
.
digest_from_file
(
filename
,
'sha1'
)
def
sha256
(
self
,
filename
):
def
sha256
(
self
,
filename
):
''' Return SHA-256 hex digest of local file using digest_from_file(). '''
''' Return SHA-256 hex digest of local file using digest_from_file(). '''
if
not
HAVE_HASHLIB
:
return
self
.
digest_from_file
(
filename
,
'sha256'
)
self
.
fail_json
(
msg
=
"SHA-256 checksums require hashlib, which is available in Python 2.5 and higher"
)
return
self
.
digest_from_file
(
filename
,
_sha256
())
def
backup_local
(
self
,
fn
):
def
backup_local
(
self
,
fn
):
'''make a date-marked backup of the specified file, return True or False on success or failure'''
'''make a date-marked backup of the specified file, return True or False on success or failure'''
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment