Ansible

Ansible Rsync (Synchronize Alias)

In Ansible, we have access to the “ansible.posix.synchronize” module as part of the “ansible.posix” collection. This module provides a wrapper interface around the rsync command in Unix-like systems.

If you are not familiar, the rsync utility provides a powerful and efficient method of synchronizing the files and directories from one location to another with minimal data transfer using the delta encoding where it is applicable.

Using this module, we have an easy and user-friendly method of integrating the rsync operations in a declarative Ansible playbook which makes it easier to automate the file and directory synchronization process.

Prerequisites:

To follow along, ensure that you have the following:

  • Installed Ansible
  • Installed rsync on the target machine

Installing the Ansible.Posix Collection

Before we can use the “ansible.posix.synchronize” module, we need to install the “ansible.posix” collection.

We can do this by running the ansible-galaxy command as follows:

$ ansible-galaxy collection install ansible.posix

Ansible.Posix.Synchronize Module Parameters

The “ansible.posix.synchronize” module provides a variety of parameters which allows us to customize its behavior. The following are some important parameters that you should know when working with the synchronize module.

src – It specifies the path to the source directory that you wish to synchronize.

dest ­– It is the specified the path to the destination directory to sync.

dest_port – It specifies an alternate SSH port for the destination host.

delete – If it is set to yes, the module deletes the files in the destination that don’t exist in the source.

rsync_path – It sets the rsync command to run on the remote host. It is useful if it’s not in the PATH.

recursive – If it is set to yes, it synchronizes the directories recursively.

compress ­- Use compression during the rsync operation.

archive – If it is set to yes, rsync archives the files (preserve the permissions, times, owner, group, ACLs, and xattrs).

The provided parameters are some commonly used parameters when working with the synchronize module. You can refer to the documentation for a more detailed information on other available parameters.

Basic Usage

The most basic usage of the synchronize module is to sync the files or directories from a source to a destination. An example playbook on how to use this module to synchronize the files or directories is shown in the following:

---
- hosts
: all
tasks
:
- name
: Sync dir from src to dest
ansible.posix.synchronize
:
src
: /opt/src
dest
: /home/debian/opt/dest

In this case, we use the synchronize module to synchronize the specified source directory to the destination directory.

Sync the Directory from Local to Remote

We can also use this module to sync a local directory to a remote machine as demonstrated in the following playbook:

---
- hosts
: db_server
tasks
:
- name
: Sync local dir to remote
ansible.posix.synchronize
:
src
: /opt/configs/latest
dest
: /etc/mysqld/config/latest

This should sync the specified directory on the local machine to the specified path on the remote host.

Sync from Remote to Local

As demonstrated in the example playbook, we can also sync from a remote machine to the local machine.

---
- hosts
: db_server
tasks
:
- name
: Sync remote directory to local
ansible.posix.synchronize
:
src
: /etc/mysqld/config/latest
dest
: /opt/configs/latest
delegate_to
: localhost

Setting the Rsync Path

In some cases, rsync may not be available in the PATH environment variable in your remote system or you wish to use a specific version. You can specify the path as follows:

---
- hosts
: all
tasks
:
- name
: Sync with specific rsync path
ansible.posix.synchronize
:
src
: /local/path/
dest
: /remote/path/
rsync_path
: /path/to/rsync

Sync Between Two Remote Machines

We can also sync the directories between two systems using the “delegate_to” parameter. An example playbook is shown in the following:

---
- hosts
: db_servers
tasks
:
- name
: Sync between two remote machines
ansible.posix.synchronize
:
src
: /path/on/db_master/
dest
: remote_host_2:/path/on/db_slave/
delegate_to
: db_master

Exclude the Files/Directories

To exclude specific files or directories from sync, we can use the exclude parameter as follows:

---
- hosts
: all
tasks
:
- name
: Sync while excluding specific files/directories
ansible.posix.synchronize
:
src
: /local/path/
dest
: /remote/path/
exclude
:
- some_directory/
- "*.tmp"

Using Compression

To use compression for the sync operation, set the compress parameter to yes as demonstrated in the following example:

---
- hosts
: all
tasks
:
- name
: Sync with compression
ansible.posix.synchronize
:
src
: /local/path/
dest
: /remote/path/
compress
: yes

Conclusion

You learned how to work with the synchronize module from the “ansible.posix” collection to use the rsync utility in your systems. We also covered practical examples on how to work with this module effectively.

About the author

John Otieno

My name is John and am a fellow geek like you. I am passionate about all things computers from Hardware, Operating systems to Programming. My dream is to share my knowledge with the world and help out fellow geeks. Follow my content by subscribing to LinuxHint mailing list