From 68096c274457c8b86a4f1bc86a03b95c06c4c5fb Mon Sep 17 00:00:00 2001 From: Tongliang Liu Date: Thu, 11 Sep 2014 13:31:07 -0700 Subject: [PATCH 1/3] Added support for returning owner's group name in stat module #8967. --- library/files/stat | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/library/files/stat b/library/files/stat index 8c717a395c4..36ef7145783 100644 --- a/library/files/stat +++ b/library/files/stat @@ -66,6 +66,7 @@ import os import sys from stat import * import pwd +import grp def main(): module = AnsibleModule( @@ -140,6 +141,9 @@ def main(): pw = pwd.getpwuid(st.st_uid) d['pw_name'] = pw.pw_name + + grp_info = grp.getgrgid(pw.pw_gid) + d['gr_name'] = grp_info.gr_name except: pass From 3ae1fba12b2e9688791602abbc7354f9300b7096 Mon Sep 17 00:00:00 2001 From: Tongliang Liu Date: Wed, 11 Feb 2015 19:55:20 -0800 Subject: [PATCH 2/3] Removed old module folder --- library/files/stat | 156 --------------------------------------------- 1 file changed, 156 deletions(-) delete mode 100644 library/files/stat diff --git a/library/files/stat b/library/files/stat deleted file mode 100644 index 36ef7145783..00000000000 --- a/library/files/stat +++ /dev/null @@ -1,156 +0,0 @@ -#!/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: [] - follow: - description: - - Whether to follow symlinks - required: false - default: no - aliases: [] - get_md5: - description: - - Whether to return the md5 sum of the file - required: false - default: yes - aliases: [] -author: Bruce Pennypacker -''' - -EXAMPLES = ''' -# Obtain the stats of /etc/foo.conf, and check that the file still belongs -# to 'root'. Fail otherwise. -- stat: path=/etc/foo.conf - register: st -- fail: msg="Whoops! file ownership has changed" - when: st.stat.pw_name != 'root' - -# Determine if a path exists and is a directory. Note we need to test -# both that p.stat.isdir actually exists, and also that it's set to true. -- stat: path=/path/to/something - register: p -- debug: msg="Path exists and is a directory" - when: p.stat.isdir is defined and p.stat.isdir == true - -# Don't do md5 checksum -- stat: path=/path/to/myhugefile get_md5=no -''' - -import os -import sys -from stat import * -import pwd -import grp - -def main(): - module = AnsibleModule( - argument_spec = dict( - path = dict(required=True), - follow = dict(default='no', type='bool'), - get_md5 = dict(default='yes', type='bool') - ), - supports_check_mode = True - ) - - path = module.params.get('path') - path = os.path.expanduser(path) - follow = module.params.get('follow') - get_md5 = module.params.get('get_md5') - - try: - if follow: - st = os.stat(path) - else: - st = os.lstat(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' : "%04o" % 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_ISLNK(mode): - d['lnk_source'] = os.path.realpath(path) - - if S_ISREG(mode) and get_md5 and os.access(path,os.R_OK): - d['md5'] = module.md5(path) - - - try: - pw = pwd.getpwuid(st.st_uid) - - d['pw_name'] = pw.pw_name - - grp_info = grp.getgrgid(pw.pw_gid) - d['gr_name'] = grp_info.gr_name - except: - pass - - - module.exit_json(changed=False, stat=d) - -# import module snippets -from ansible.module_utils.basic import * - -main() From 1fc20951579c6fef99978b4e9fd7176a53a1f757 Mon Sep 17 00:00:00 2001 From: Tongliang Liu Date: Wed, 11 Feb 2015 20:00:38 -0800 Subject: [PATCH 3/3] Added "--recursive" to git clone command in installation via yum section. Changed rpm build parent directory to current dir. --- docsite/rst/intro_installation.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docsite/rst/intro_installation.rst b/docsite/rst/intro_installation.rst index 07e0c501c70..303880cac11 100644 --- a/docsite/rst/intro_installation.rst +++ b/docsite/rst/intro_installation.rst @@ -173,10 +173,10 @@ You can also build an RPM yourself. From the root of a checkout or tarball, use .. code-block:: bash - $ git clone git://github.com/ansible/ansible.git + $ git clone git://github.com/ansible/ansible.git --recursive $ cd ./ansible $ make rpm - $ sudo rpm -Uvh ~/rpmbuild/ansible-*.noarch.rpm + $ sudo rpm -Uvh ./rpmbuild/ansible-*.noarch.rpm .. _from_apt: