Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introduce new 'filetree' lookup plugin (ansible#14332)
* Introduce new 'filetree' lookup plugin The new "filetree" lookup plugin makes it possible to recurse over a tree of files within the task loop. This makes it possible to e.g. template a complete tree of files to a target system with little effort while retaining permissions and ownership. The module supports directories, files and symlinks. The item dictionary consists of: - src - root - path - mode - state - owner - group - seuser - serole - setype - selevel - uid - gid - size - mtime - ctime EXAMPLES: Here is an example of how we use with_filetree within a role: ```yaml - name: Create directories file: path: /web/{{ item.path }} state: directory mode: '{{ item.mode }}' owner: '{{ item.owner }}' group: '{{ item.group }}' force: yes with_filetree: web/ when: item.state == 'directory' - name: Template complete tree file: src: '{{ item.src }}' dest: /web/{{ item.path }} state: 'link' mode: '{{ item.mode }}' owner: '{{ item.owner }}' group: '{{ item.group }}' with_filetree: web/ when: item.state == 'link' - name: Template complete tree template: src: '{{ item.src }}' dest: /web/{{ item.path }} mode: '{{ item.mode }}' owner: '{{ item.owner }}' group: '{{ item.group }}' force: yes with_filetree: web/ when: item.state == 'file' ``` SPECIAL USE: The following properties also have its special use: - root: Makes it possible to filter by original location - path: Is the relative path to root - uid, gid: Makes it possible to force-create by exact id, rather than by name - size, mtime, ctime: Makes it possible to filter out files by size, mtime or ctime TODO: - Add snippets to documentation * Small fixes for Python 3 * Return the portion of the file’s mode that can be set by os.chmod() And remove the exists=True, which is redundant. * Use lstat() instead of stat() since we support symlinks * Avoid a few possible stat() calls * Bring in line with v1.9 and hybrid plugin * Remove glob module since we no longer use it * Included suggestions from @RussellLuo - Two blank lines will be better. See PEP 8 - I think if props is not None is more conventional 😄 * Support failed pwd/grp lookups * Implement first-found functionality in the path-order
- Loading branch information