You can manage files with Ansible using several built-in modules that provide functionalities for creating, copying, modifying, and deleting files and directories. Here are some of the key modules and examples of how to use them:
1. Using the file Module
The file module is used to manage file properties and permissions.
- name: Ensure a directory exists
file:
path: /path/to/directory
state: directory
mode: '0755' # Set permissions
2. Using the copy Module
The copy module is used to copy files from the control machine to the target hosts.
- name: Copy a file to the target host
copy:
src: /local/path/to/file.txt
dest: /remote/path/to/file.txt
owner: user # Set file owner
group: group # Set file group
mode: '0644' # Set permissions
3. Using the template Module
The template module processes a Jinja2 template and copies it to the target host.
- name: Deploy a configuration file from a template
template:
src: template.j2
dest: /etc/config.conf
4. Using the fetch Module
The fetch module is used to copy files from remote hosts back to the control machine.
- name: Fetch a file from the remote host
fetch:
src: /remote/path/to/file.txt
dest: /local/path/to/destination/
flat: yes # Prevents creating a directory structure
5. Using the synchronize Module
The synchronize module is a wrapper around rsync and is used for synchronizing files between the control machine and remote hosts.
- name: Synchronize files to the remote host
synchronize:
src: /local/path/
dest: /remote/path/
6. Using the unarchive Module
The unarchive module is used to unpack compressed files.
- name: Unarchive a tar file
unarchive:
src: /local/path/to/archive.tar.gz
dest: /remote/path/
remote_src: no # Indicates that the source file is on the control machine
7. Using the lineinfile Module
The lineinfile module is used to manage lines in a file, allowing you to add, modify, or remove specific lines.
- name: Ensure a line is present in a file
lineinfile:
path: /etc/config.conf
line: 'new_setting=value'
Summary
By using these modules, you can effectively manage files and directories on remote hosts in your Ansible playbooks. Each module provides specific functionalities that can be combined to create powerful automation workflows for file management.
