{%- from "backupninja/map.jinja" import client, service_grains with context %}
{%- from "linux/map.jinja" import system with context %}
##
## This is an example rdiff-backup configuration file.
##
## Here you can find all the possible rdiff-backup options, details of
## what the options provide and possible settings. The defaults are set
## as the commented out option, uncomment and change when
## necessary. Options which are uncommented in this example do not have
## defaults, and the settings provided are recommended.
## 
## The defaults are useful in most cases, just make sure to configure the 
## destination host and user.
##

## passed directly to rdiff-backup
## an example setting would be:
## options = --force
## 
## Default:
# options = 

## default is 0, but set to 19 if you want to lower the priority.
## an example setting would be:
## nicelevel = 19
##
## Default
# nicelevel = 0

## default is yes. set to no to skip the test if the remote host is alive
##
## Default:
# testconnect = no

## default is not to limit bandwidth. 
## set to a number in bytes/second to limit bandwidth usage. Use a negative 
## number to set a limit that will never be exceeded, or a positive number 
## to set a target average bandwidth use. cstream is required. See cstream's 
## -t option for more information. 62500 bytes = 500 Kb (.5 Mb)
## an example setting would be:
## bwlimit = 62500
##
## Default:
# bwlimit = 0

## should backupninja ignore the version differences between source and remote
## rdiff-backup? (default: no)
## This could be useful if the version differences between rdiff-backup instances
## on remote and local side are different, and you are certain there are no
## problems in using mis-matched versions and want to get beyond this check.
## An example usage could be the remote side has its authorized_keys configured
## with command="rdiff-backup --server" to allow for restricted yet automated 
## password-less backups
## 
## Default:
# ignore_version = no

######################################################
## source section
## (where the files to be backed up are coming from)

[source]

## an optional subdirectory below 'directory' (see [dest])
label = thishostname

## type can be "local" or "remote"
type = local

## only use if '[source] type = remote'
# host = srchost
# user = srcuser

## how many days of data to keep
## (you can also use the time format of rdiff-backup, e.g. 6D5h)
## (to keep everything, set this to yes)
## an example setting would be:
##keep = yes
##
## Default:
# keep = 60

## A few notes about includes and excludes:
## 1. include, exclude and vsinclude statements support globbing with '*'
## 2. Symlinks are not dereferenced. Moreover, an include line whose path
##    contains, at any level, a symlink to a directory, will only have the
##    symlink backed-up, not the target directory's content. Yes, you have to
##    dereference yourself the symlinks, or to use 'mount --bind' instead.
##    Example: let's say /home is a symlink to /mnt/crypt/home ; the following
##    line will only backup a "/home" symlink ; neither /home/user nor
##    /home/user/Mail will be backed-up :
##      include = /home/user/Mail
##    A workaround is to 'mount --bind /mnt/crypt/home /home' ; another one is to
##    write :
##      include = /mnt/crypt/home/user/Mail
## 3. All the excludes come after all the includes. The order is not otherwise
##    taken into account.

## files to include in the backup
{%- for backup_name, backup in service_grains.backupninja.backup.iteritems() %}
{%- for fs_include in backup.get('fs_includes', []) %}
include = {{ fs_include }}
{%- endfor %}
{%- endfor %}

## If vservers = yes in /etc/backupninja.conf then the following variables can
## be used:
## vsnames = all | <vserver1> <vserver2> ... (default = all)
## vsinclude = <path>
## vsinclude = <path>
## ...
## Any path specified in vsinclude is added to the include list for each vserver
## listed in vsnames (or all if vsnames = all, which is the default).
##
## For example, vsinclude = /home will backup the /home directory in every
## vserver listed in vsnames. If you have 'vsnames = foo bar baz', this
## vsinclude will add to the include list /vservers/foo/home, /vservers/bar/home
## and /vservers/baz/home.
## Vservers paths are derived from $VROOTDIR.

{%- for backup_name, backup in service_grains.backupninja.backup.iteritems() %}
{%- for fs_exclude in backup.get('fs_excludes', []) %}
exclude = {{ fs_exclude }}
{%- endfor %}
{%- endfor %}


######################################################
## destination section
## (where the files are copied to)

[dest]

## type can be "local" or "remote", this must be set!
## an example configuration would be:
## type = remote
##
## Default:
# type =

## put the backups under this directory, this must be set!
## an example setting would be:
## directory = /backups
## 
## Default:
# directory =

## the machine which will receive the backups.
## only use if "[dest] type = remote"
## an example setting would be:
## host = backuphost
##
## Default
# host =

## make the files owned by this user. you must be able to
## `su -c "ssh backupuser@backhost"` without specifying a password.
## only use if "[dest] type = remote"
## an example setting would be:
## user = backupuser
##
## Default:
# user =

## passed directly to ssh
## an example setting would be:
## sshoptions = -o IdentityFile=/root/.ssh/id_rsa_duplicity
##
## Default:
# sshoptions = 
