aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--manifests/dup.pp116
-rw-r--r--templates/dup.conf.erb1
2 files changed, 117 insertions, 0 deletions
diff --git a/manifests/dup.pp b/manifests/dup.pp
new file mode 100644
index 0000000..11fca07
--- /dev/null
+++ b/manifests/dup.pp
@@ -0,0 +1,116 @@
+# Run duplicity-backup as part of a backupninja run.
+#
+# Valid attributes for this type are:
+#
+# order:
+#
+# The prefix to give to the handler config filename, to set order in
+# which the actions are executed during the backup run.
+#
+# ensure:
+#
+# Allows you to delete an entry if you don't want it any more (but be
+# sure to keep the configdir, name, and order the same, so that we can
+# find the correct file to remove).
+#
+# options, nicelevel, testconnect, tmpdir, sign, encryptkey, signkey,
+# password, include, exclude, vsinclude, incremental, keep, bandwithlimit,
+# sshoptions, destdir, desthost, desuser:
+#
+# As defined in the backupninja documentation. The options will be
+# placed in the correct sections automatically. The include and
+# exclude options should be given as arrays if you want to specify
+# multiple directories.
+#
+# directory, ssh_dir_manage, ssh_dir, authorized_keys_file, installuser,
+# installkey, backuptag:
+#
+# Options for the bakupninja::server::sandbox define, check that
+# definition for more info.
+#
+# Some notes about this handler:
+#
+# - There's no support for a 'local' type in backupninja's duplicity
+# handler on version 0.9.6-4, which is the version available in stable and
+# testing debian repositories by the time of this writing.
+define backupninja::duplicity( $order = 90,
+ $ensure = present,
+ # options to the config file
+ $options = false, #
+ $nicelevel = 0, #
+ $testconnect = "yes", #
+ $tmpdir = "/var/tmp/duplicity", #
+ # [gpg]
+ $sign = "no",
+ $encryptkey = false,
+ $signkey = false,
+ $password = "a_very_complicated_passphrase",
+ # [source]
+ $include = [ "/var/spool/cron/crontabs",
+ "/var/backups",
+ "/etc",
+ "/root",
+ "/home",
+ "/usr/local/*bin",
+ "/var/lib/dpkg/status*" ],
+ $exclude = [ "/home/*/.gnupg",
+ "/home/*/.local/share/Trash",
+ "/home/*/.Trash",
+ "/home/*/.thumbnails",
+ "/home/*/.beagle",
+ "/home/*/.aMule",
+ "/home/*/.gnupg",
+ "/home/*/.gpg",
+ "/home/*/.ssh",
+ "/home/*/gtk-gnutella-downloads"],
+ $vsinclude = false,
+ # [dest]
+ $incremental = "yes",
+ $keep = 60,
+ $bandwithlimit = "128",
+ $sshoptions = false,
+ $destdir = "/backups",
+ $desthost = false,
+ $destuser = false,
+ # options to backupninja's module sandbox
+ $ssh_dir_manage = true,
+ $ssh_dir = false,
+ $authorized_keys_file = false,
+ $installuser = true,
+ $backuptag = false,
+ # key options
+ $installkey = true ) {
+ include backupninja::client
+
+ case $host { false: { err("need to define a host for remote backups!") } }
+
+ # guarantees there's a configured backup space for this backup
+ backupninja::server::sandbox { "${user}-${name}":
+ user => $destuser,
+ host => $desthost,
+ dir => $destdir,
+ manage_ssh_dir => $ssh_dir_manage,
+ ssh_dir => $ssh_dir,
+ authorized_keys_file => $authorized_keys_file,
+ installuser => $installuser,
+ backuptag => $backuptag,
+ }
+
+ # the client's ssh key
+ backupninja::client::key { "${destuser}-${name}":
+ user => $destuser,
+ host => $desthost,
+ installkey => $installkey,
+ }
+
+ # the backupninja rule for this duplicity backup
+ file { "${backupninja::client::configdir}/${order}_${name}.duplicity":
+ ensure => $ensure,
+ content => template('backupninja/dup.conf.erb'),
+ owner => root,
+ group => root,
+ mode => 0600,
+ require => File["${backupninja::client::configdir}"]
+ }
+}
+
diff --git a/templates/dup.conf.erb b/templates/dup.conf.erb
index 1c4ccfc..ce77a5c 100644
--- a/templates/dup.conf.erb
+++ b/templates/dup.conf.erb
@@ -40,3 +40,4 @@
<%= 'sshoptions = ' + sshoptions if sshoptions %>
<%= 'destdir = ' + destdir if destdir %>
<%= 'desthost = ' + desthost if desthost %>
+<%= 'destuser = ' + destuser if destuser %>