From d76ee309c655bc33708d7d7b5456e9499da03e2f Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Wed, 3 Jun 2015 11:36:25 -0400 Subject: [PATCH] Allo the file fact scanner to take a list of paths instead of just one path --- awx/playbooks/scan_facts.yml | 4 +- awx/plugins/library/scan_files.py | 103 +++++++++++++++--------------- 2 files changed, 54 insertions(+), 53 deletions(-) diff --git a/awx/playbooks/scan_facts.yml b/awx/playbooks/scan_facts.yml index ffbe4512fd..2c51c50709 100644 --- a/awx/playbooks/scan_facts.yml +++ b/awx/playbooks/scan_facts.yml @@ -6,7 +6,7 @@ - scan_packages: - scan_services: - scan_files: - path: '{{ scan_file_path }}' + paths: '{{ scan_file_paths }}' get_checksum: '{{ scan_use_checksum }}' recursive: '{{ scan_use_recursive }}' - when: scan_file_path is defined \ No newline at end of file + when: scan_file_paths is defined \ No newline at end of file diff --git a/awx/plugins/library/scan_files.py b/awx/plugins/library/scan_files.py index 44d0956470..cd07954b48 100644 --- a/awx/plugins/library/scan_files.py +++ b/awx/plugins/library/scan_files.py @@ -101,62 +101,63 @@ EXAMPLES = ''' def main(): module = AnsibleModule( - argument_spec = dict(path=dict(required=True), + argument_spec = dict(paths=dict(required=True, type='list'), recursive=dict(required=False, default='no', type='bool'), get_checksum=dict(required=False, default='no', type='bool'))) files = [] - path = module.params.get('path') - path = os.path.expanduser(path) - if not os.path.exists(path) or not os.path.isdir(path): - module.fail_json(msg = "Given path must exist and be a directory") + paths = module.params.get('paths') + for path in paths: + path = os.path.expanduser(path) + if not os.path.exists(path) or not os.path.isdir(path): + module.fail_json(msg = "Given path must exist and be a directory") - get_checksum = module.params.get('get_checksum') - should_recurse = module.params.get('recursive') - if not should_recurse: - path_list = [os.path.join(path, subpath) for subpath in os.listdir(path)] - else: - path_list = [os.path.join(w_path, f) for w_path, w_names, w_file in os.walk(path) for f in w_file] - for filepath in path_list: - try: - st = os.stat(filepath) - except OSError: - continue + get_checksum = module.params.get('get_checksum') + should_recurse = module.params.get('recursive') + if not should_recurse: + path_list = [os.path.join(path, subpath) for subpath in os.listdir(path)] + else: + path_list = [os.path.join(w_path, f) for w_path, w_names, w_file in os.walk(path) for f in w_file] + for filepath in path_list: + try: + st = os.stat(filepath) + except OSError: + continue - mode = st.st_mode - d = { - 'path' : filepath, - 'mode' : "%04o" % stat.S_IMODE(mode), - 'isdir' : stat.S_ISDIR(mode), - 'ischr' : stat.S_ISCHR(mode), - 'isblk' : stat.S_ISBLK(mode), - 'isreg' : stat.S_ISREG(mode), - 'isfifo' : stat.S_ISFIFO(mode), - 'islnk' : stat.S_ISLNK(mode), - 'issock' : stat.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 get_checksum and stat.S_ISREG(mode) and os.access(filepath, os.R_OK): - d['checksum'] = module.sha1(filepath) - files.append(d) + mode = st.st_mode + d = { + 'path' : filepath, + 'mode' : "%04o" % stat.S_IMODE(mode), + 'isdir' : stat.S_ISDIR(mode), + 'ischr' : stat.S_ISCHR(mode), + 'isblk' : stat.S_ISBLK(mode), + 'isreg' : stat.S_ISREG(mode), + 'isfifo' : stat.S_ISFIFO(mode), + 'islnk' : stat.S_ISLNK(mode), + 'issock' : stat.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 get_checksum and stat.S_ISREG(mode) and os.access(filepath, os.R_OK): + d['checksum'] = module.sha1(filepath) + files.append(d) results = dict(ansible_facts=dict(files=files)) module.exit_json(**results)