diff --git a/copy b/copy
index d2a6f750517..dcd8e98a55f 100755
--- a/copy
+++ b/copy
@@ -16,108 +16,55 @@
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see .
-#
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
+def main():
-# ===========================================
-# convert arguments of form a=b c=d
-# to a dictionary
-# FIXME: make more idiomatic
+ module = AnsibleModule(
+ argument_spec = dict(
+ src=dict(required=True),
+ dest=dict(required=True)
+ )
+ )
-def dump_kv(vars):
- return " ".join("%s='%s'" % (k,v) for (k,v) in vars.items())
+ src = os.path.expanduser(module.params['src'])
+ dest = os.path.expanduser(module.params['dest'])
-def exit_kv(rc=0, **kwargs):
- if 'path' in kwargs:
- add_path_info(kwargs)
- print dump_kv(kwargs)
- sys.exit(rc)
+ 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))
-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()
+ 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 len(sys.argv) == 1:
- exit_kv(rc=1, failed=1, msg="incorrect number of arguments given")
+ 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
-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)
+ module.exit_json(dest=dest, src=src, md5sum=md5sum_src, changed=changed)
+# this is magic, see lib/ansible/module_common.py
+#<>
+main()