From 2af6510dedde0c41f4775655e2b743aba52068d0 Mon Sep 17 00:00:00 2001 From: Stephen Fromm Date: Tue, 16 Jul 2013 10:27:38 -0700 Subject: [PATCH] Update stat module to handle symlinks Add follow parameter to stat module that controls whether to follow symlinks. It defaults to no. This then calls os.stat or os.lstat based on the value of follow. Add lnk_source key/value pair if path is a symlink and follow=no. Drop the statement that sets isdir=False and islnk=True when path is a symlink that points to a directory. --- library/files/stat | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/library/files/stat b/library/files/stat index a510d9c934..0478e03036 100644 --- a/library/files/stat +++ b/library/files/stat @@ -28,6 +28,12 @@ options: required: true default: null aliases: [] + follow: + description: + - Whether to follow symlinks + required: false + default: no + aliases: [] author: Bruce Pennypacker ''' @@ -49,13 +55,18 @@ def main(): module = AnsibleModule( argument_spec = dict( path = dict(required=True), + follow = dict(default='no', type='bool') ) ) path = module.params.get('path') + follow = module.params.get('follow') try: - st = os.stat(path) + if follow: + st = os.stat(path) + else: + st = os.lstat(path) except OSError, e: if e.errno == errno.ENOENT: d = { 'exists' : False } @@ -98,9 +109,8 @@ def main(): 'isgid' : bool(mode & stat.S_ISGID), } - if S_ISDIR(mode) and os.path.islink(path): - d['isdir'] = False - d['islnk'] = True + if S_ISLNK(mode): + d['lnk_source'] = os.path.realpath(path) if S_ISREG(mode): d['md5'] = module.md5(path)