The ansible role I use to orchestrate syncthing configurations on my personal infrastructure
action_plugins | ||
files | ||
handlers | ||
tasks | ||
templates | ||
.gitignore | ||
LICENSE | ||
README.md |
syncthing
This ansible role handles the installation and configuration of syncthing.
Introduction
I wanted a role to install and configure syncthing for me and did not find an existing one that satisfied me. I had a few mandatory features in mind:
- the ability to configure a servers parameters in only one place to avoid repetition
- having a fact that retrieves the ID of a device
- the validation of host_vars which virtually no role in the wild ever does
- the ability to manage an additional inventory file for devices which ansible cannot manage (like my phone)
Role variables
There is a single variable to specify in the host_vars
of your hosts: syncthing
. This is a dict that can contain the following keys:
- address: optional string to specify how to connect to the server, must match the format
tcp://<hostname>
ortcp://<ip>
. Default value is dynamic which means a passive host. - shared: a mandatory dict describing the directories this host shares, which can contain the following keys:
- name: a mandatory string to name the share in the configuration. It must match on all devices that share this folder.
- path: the path of the folder on the device. This can difer on each device sharing this data.
- peers: a list a strings. Each item should be either the ansible_hostname of another device, or a hostname from the
syncthing_data.yaml
file
Configuring a host through its host_vars
looks like this:
syncthing:
address: tcp://lore.adyxax.org
shared:
- name: org-mode
path: /var/syncthing/org-mode
peers:
- hero
- light
- lumapps
- Pixel 3a
The optional syncthing_data.yaml file
To be found by the action_plugins
, this file should be in the same folder as your playbook. It shares the same format as the host_vars
but with additional keys for the hostname and its ID.
The data file for non ansible devices looks like this:
- name: Pixel 3a
id: ABCDEFG-HIJKLMN-OPQRSTU-VWXYZ01-2345678-90ABCDE-FGHIJKL-MNOPQRS
shared:
- name: Music
path: /storage/emulated/0/Music
peers:
- phoenix
- name: Photos
path: /storage/emulated/0/DCIM/Camera
peers:
- phoenix
- name: org-mode
path: /storage/emulated/0/Org
peers:
- lore.adyxax.org
Example playbook
- hosts: all
roles:
- { role: syncthing, tags: [ 'syncthing' ], when: "syncthing is defined" }