diff --git a/library/files/stat b/library/files/stat
new file mode 100644
index 00000000000..95a630e7d5b
--- /dev/null
+++ b/library/files/stat
@@ -0,0 +1,109 @@
+#!/usr/bin/python
+# This file is part of Ansible
+#
+# Ansible is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Ansible is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Ansible. If not, see .
+
+DOCUMENTATION = '''
+---
+module: stat
+version_added: "1.3"
+short_description: retrieve file or file system status
+description:
+ - Retrieves facts for a file similar to the linux/unix 'stat' command.
+options:
+ path:
+ description:
+ - The full path of the file/object to get the facts of
+ required: true
+ default: null
+ aliases: []
+author: Bruce Pennypacker
+'''
+
+EXAMPLES = '''
+# Obtain the stats of /etc/foo.conf
+- stats: >
+ path=/etc/foo.conf
+
+'''
+
+import os
+import sys
+from stat import *
+from pprint import pprint
+
+def main():
+ module = AnsibleModule(
+ argument_spec = dict(
+ path = dict(required=True),
+ )
+ )
+
+ path = module.params.get('path')
+
+ try:
+ st = os.stat(path)
+ except OSError, e:
+ if e.errno == errno.ENOENT:
+ d = { 'exists' : False }
+ module.exit_json(changed=False, stat=d)
+
+ module.fail_json(msg = e.strerror)
+
+ mode = st.st_mode
+
+ # back to ansible
+ d = {
+ 'exists' : True,
+ 'mode' : S_IMODE(mode),
+ 'isdir' : S_ISDIR(mode),
+ 'ischr' : S_ISCHR(mode),
+ 'isblk' : S_ISBLK(mode),
+ 'isreg' : S_ISREG(mode),
+ 'isfifo' : S_ISFIFO(mode),
+ 'islnk' : S_ISLNK(mode),
+ 'issock' : S_ISSOCK(mode),
+ 'uid' : st.st_uid,
+ 'gid' : st.st_gid,
+ 'size' : st.st_size,
+ 'inode' : st.st_ino,
+ 'dev' : st.st_dev,
+ 'nlink' : st.st_nlink,
+ 'atime' : st.st_atime,
+ 'mtime' : st.st_mtime,
+ 'ctime' : st.st_ctime,
+ 'wusr' : bool(mode & stat.S_IWUSR),
+ 'rusr' : bool(mode & stat.S_IRUSR),
+ 'xusr' : bool(mode & stat.S_IXUSR),
+ 'wgrp' : bool(mode & stat.S_IWGRP),
+ 'rgrp' : bool(mode & stat.S_IRGRP),
+ 'xgrp' : bool(mode & stat.S_IXGRP),
+ 'woth' : bool(mode & stat.S_IWOTH),
+ 'roth' : bool(mode & stat.S_IROTH),
+ 'xoth' : bool(mode & stat.S_IXOTH),
+ 'isuid' : bool(mode & stat.S_ISUID),
+ 'isgid' : bool(mode & stat.S_ISGID),
+ }
+
+ if S_ISDIR(mode) and os.path.islink(path):
+ d['isdir'] = False
+ d['islnk'] = True
+
+
+ module.exit_json(changed=False, stat=d)
+
+# this is magic, see lib/ansible/module_common.py
+#<>
+
+main()