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
d0f43587
Commit
d0f43587
authored
Jul 21, 2012
by
Michael DeHaan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Port the copy module over to the new "common module" logic.
parent
d76c8c9c
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
68 additions
and
101 deletions
+68
-101
hacking/test-module
+2
-2
lib/ansible/module_common.py
+20
-0
library/copy
+46
-99
No files found.
hacking/test-module
View file @
d0f43587
...
...
@@ -30,8 +30,8 @@ import sys
import
os
import
subprocess
import
traceback
from
ansible
import
utils
from
ansible
import
module_common
import
ansible.utils
as
utils
import
ansible.module_common
as
module_common
try
:
import
json
...
...
lib/ansible/module_common.py
View file @
d0f43587
...
...
@@ -39,6 +39,11 @@ import subprocess
import sys
import syslog
try:
from hashlib import md5 as _md5
except ImportError:
from md5 import md5 as _md5
class AnsibleModule(object):
def __init__(self, argument_spec, bypass_checks=False, no_log=False):
...
...
@@ -135,6 +140,21 @@ class AnsibleModule(object):
print json.dumps(kwargs)
sys.exit(1)
def md5(self, filename):
''' Return MD5 hex digest of local file, or None if file is not present. '''
if not os.path.exists(filename):
return None
digest = _md5()
blocksize = 64 * 1024
infile = open(filename, 'rb')
block = infile.read(blocksize)
while block:
digest.update(block)
block = infile.read(blocksize)
infile.close()
return digest.hexdigest()
# == END DYNAMICALLY INSERTED CODE ===
"""
library/copy
View file @
d0f43587
...
...
@@ -16,108 +16,55 @@
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
import
sys
import
os
import
shlex
import
shutil
import
syslog
try
:
from
hashlib
import
md5
as
_md5
except
ImportError
:
from
md5
import
md5
as
_md5
# ===========================================
# convert arguments of form a=b c=d
# to a dictionary
# FIXME: make more idiomatic
def
dump_kv
(
vars
):
return
" "
.
join
(
"
%
s='
%
s'"
%
(
k
,
v
)
for
(
k
,
v
)
in
vars
.
items
())
def
exit_kv
(
rc
=
0
,
**
kwargs
):
if
'path'
in
kwargs
:
add_path_info
(
kwargs
)
print
dump_kv
(
kwargs
)
sys
.
exit
(
rc
)
def
md5
(
filename
):
''' Return MD5 hex digest of local file, or None if file is not present. '''
if
not
os
.
path
.
exists
(
filename
):
return
None
digest
=
_md5
()
blocksize
=
64
*
1024
infile
=
open
(
filename
,
'rb'
)
block
=
infile
.
read
(
blocksize
)
while
block
:
digest
.
update
(
block
)
block
=
infile
.
read
(
blocksize
)
infile
.
close
()
return
digest
.
hexdigest
()
# ===========================================
if
len
(
sys
.
argv
)
==
1
:
exit_kv
(
rc
=
1
,
failed
=
1
,
msg
=
"incorrect number of arguments given"
)
argfile
=
sys
.
argv
[
1
]
if
not
os
.
path
.
exists
(
argfile
):
exit_kv
(
rc
=
1
,
failed
=
1
,
msg
=
"file
%
s does not exist"
%
(
argfile
))
args
=
open
(
argfile
,
'r'
)
.
read
()
items
=
shlex
.
split
(
args
)
syslog
.
openlog
(
'ansible-
%
s'
%
os
.
path
.
basename
(
__file__
))
syslog
.
syslog
(
syslog
.
LOG_NOTICE
,
'Invoked with
%
s'
%
args
)
params
=
{}
for
x
in
items
:
(
k
,
v
)
=
x
.
split
(
"="
)
params
[
k
]
=
v
src
=
params
[
'src'
]
dest
=
params
[
'dest'
]
if
src
:
src
=
os
.
path
.
expanduser
(
src
)
if
dest
:
dest
=
os
.
path
.
expanduser
(
dest
)
md5sum_src
=
None
# raise an error if there is no src file
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
(
src
)
md5sum_dest
=
None
# check if there is no dest file
if
os
.
path
.
exists
(
dest
):
# raise an error if copy has no permission on dest
if
not
os
.
access
(
dest
,
os
.
W_OK
):
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
(
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
)))
if
md5sum_src
!=
md5sum_dest
:
# was os.system("cp %s %s" % (src, dest))
try
:
shutil
.
copyfile
(
src
,
dest
)
except
shutil
.
Error
:
exit_kv
(
rc
=
1
,
failed
=
1
,
msg
=
"failed to copy:
%
s and
%
s are the same"
%
(
src
,
dest
))
except
IOError
:
exit_kv
(
rc
=
1
,
failed
=
1
,
msg
=
"failed to copy:
%
s to
%
s"
%
(
src
,
dest
))
changed
=
True
else
:
changed
=
False
# mission accomplished
#print "md5sum=%s changed=%s" % (md5sum_src, changed)
exit_kv
(
dest
=
dest
,
src
=
src
,
md5sum
=
md5sum_src
,
changed
=
changed
)
def
main
():
module
=
AnsibleModule
(
argument_spec
=
dict
(
src
=
dict
(
required
=
True
),
dest
=
dict
(
required
=
True
)
)
)
src
=
os
.
path
.
expanduser
(
module
.
params
[
'src'
])
dest
=
os
.
path
.
expanduser
(
module
.
params
[
'dest'
])
if
not
os
.
path
.
exists
(
src
):
module
.
fail_json
(
msg
=
"Source
%
s failed to transfer"
%
(
src
))
if
not
os
.
access
(
src
,
os
.
R_OK
):
module
.
fail_json
(
msg
=
"Source
%
s not readable"
%
(
src
))
md5sum_src
=
module
.
md5
(
src
)
md5sum_dest
=
None
if
os
.
path
.
exists
(
dest
):
if
not
os
.
access
(
dest
,
os
.
W_OK
):
module
.
fail_json
(
msg
=
"Destination
%
s not writable"
%
(
dest
))
if
not
os
.
access
(
dest
,
os
.
R_OK
):
module
.
fail_json
(
msg
=
"Destination
%
s not readable"
%
(
dest
))
md5sum_dest
=
module
.
md5
(
dest
)
else
:
if
not
os
.
access
(
os
.
path
.
dirname
(
dest
),
os
.
W_OK
):
module
.
fail_json
(
msg
=
"Destination
%
s not writable"
%
(
os
.
path
.
dirname
(
dest
)))
if
md5sum_src
!=
md5sum_dest
:
try
:
shutil
.
copyfile
(
src
,
dest
)
except
shutil
.
Error
:
module
.
fail_json
(
msg
=
"failed to copy:
%
s and
%
s are the same"
%
(
src
,
dest
))
except
IOError
:
module
.
fail_json
(
msg
=
"failed to copy:
%
s to
%
s"
%
(
src
,
dest
))
changed
=
True
else
:
changed
=
False
module
.
exit_json
(
dest
=
dest
,
src
=
src
,
md5sum
=
md5sum_src
,
changed
=
changed
)
# this is magic, see lib/ansible/module_common.py
#<<INCLUDE_ANSIBLE_MODULE_COMMON>>
main
()
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