aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicah Anderson <micah@riseup.net>2009-08-27 15:26:09 -0400
committerMicah Anderson <micah@riseup.net>2009-08-27 15:26:09 -0400
commitdae31bd0aa6cb47122b080acaee584e7df354da3 (patch)
treed622d29780b1c715670acbd309d04d95bf186771
parent0b9d05cf596fab6b8fe4b03e21e6f8cb802238fe (diff)
parent73c59d37ff9f35abf4307fd243e4ed5ec9e78d97 (diff)
downloadpuppet-backupninja-dae31bd0aa6cb47122b080acaee584e7df354da3.tar.gz
puppet-backupninja-dae31bd0aa6cb47122b080acaee584e7df354da3.tar.bz2
Merge commit '73c59d37ff9f35abf4307fd243e4ed5ec9e78d97'
-rw-r--r--manifests/dup.pp123
-rw-r--r--manifests/init.pp13
-rw-r--r--manifests/server.pp6
-rw-r--r--templates/dup.conf.erb43
4 files changed, 181 insertions, 4 deletions
diff --git a/manifests/dup.pp b/manifests/dup.pp
new file mode 100644
index 0000000..170e53a
--- /dev/null
+++ b/manifests/dup.pp
@@ -0,0 +1,123 @@
+# 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",
+ "/etc/ssh/*" ],
+ $vsinclude = false,
+ # [dest]
+ $incremental = "yes",
+ $keep = 60,
+ $bandwithlimit = "0",
+ $sshoptions = false,
+ $destdir = "/backups",
+ $desthost = false,
+ $destuser = false,
+ # configs to backupninja client
+ $backupkeystore = false,
+ $backupkeytype = false,
+ # options to backupninja server 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,
+ backupkeys => $backupkeystore,
+ keytype => $backupkeytype,
+ }
+
+ # the client's ssh key
+ backupninja::client::key { "${destuser}-${name}":
+ user => $destuser,
+ host => $desthost,
+ installkey => $installkey,
+ keytype => $backupkeytype,
+ }
+
+ # the backupninja rule for this duplicity backup
+ file { "${backupninja::client::configdir}/${order}_${name}.dup":
+ ensure => $ensure,
+ content => template('backupninja/dup.conf.erb'),
+ owner => root,
+ group => root,
+ mode => 0600,
+ require => File["${backupninja::client::configdir}"]
+ }
+}
+
diff --git a/manifests/init.pp b/manifests/init.pp
index 8ed54e3..23b4268 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -1,5 +1,16 @@
-import "*.pp"
+import "client.pp"
+import "config.pp"
+import "dup.pp"
+import "labelmount.pp"
+import "maildir.pp"
+import "mysql.pp"
+import "rdiff.pp"
+import "server.pp"
+import "sh.pp"
+import "svn.pp"
+import "sys.pp"
class backupninja {
}
+
diff --git a/manifests/server.pp b/manifests/server.pp
index 162d889..213022b 100644
--- a/manifests/server.pp
+++ b/manifests/server.pp
@@ -30,8 +30,8 @@ class backupninja::server {
# get created on the server
define sandbox(
$user = false, $host = false, $installuser = true, $dir = false, $manage_ssh_dir = true,
- $ssh_dir = false, $authorized_keys_file = false, $backupkeys = false, $uid = false,
- $gid = "backupninjas", $backuptag = false)
+ $ssh_dir = false, $authorized_keys_file = false, $backupkeys = false, $keytype = "rsa",
+ $uid = false, $gid = "backupninjas", $backuptag = false)
{
$real_user = $name ? {
@@ -84,7 +84,7 @@ class backupninja::server {
@@file { "${real_ssh_dir}/${real_authorized_keys_file}":
ensure => present,
mode => 0644, owner => 0, group => 0,
- source => "$real_backupkeys/${user}_id_rsa.pub",
+ source => "$real_backupkeys/${user}_id_${keytype}.pub",
require => File["${real_ssh_dir}"],
tag => "$real_backuptag",
}
diff --git a/templates/dup.conf.erb b/templates/dup.conf.erb
new file mode 100644
index 0000000..ce77a5c
--- /dev/null
+++ b/templates/dup.conf.erb
@@ -0,0 +1,43 @@
+# This configuration file was auto-generated by the Puppet configuration
+# management system. Any changes you make to this file will be overwritten
+# the next time Puppet runs. Please make configuration changes to this
+# service in Puppet.
+
+<%= 'options = ' + options if options %>
+<%= 'nicelevel = ' + nicelevel if nicelevel %>
+<%= 'testconnect = ' + testconnect if testconnect %>
+<%= 'tmpdir = ' + tmpdir if tmpdir %>
+
+[gpg]
+<%= 'sign = ' + sign if sign %>
+<%= 'encryptkey = ' + encryptkey if encryptkey %>
+<%= 'signkey = ' + signkey if signkey %>
+<%= 'password = ' + password if password %>
+
+[source]
+<% if include.is_a? String -%>
+<%= 'include = ' + include %>
+<% elsif include.is_a? Array -%>
+<%= include.map { |i| "include = #{i}" }.join("\n") %>
+<% end -%>
+
+<% if exclude.is_a? String -%>
+<%= 'exclude = ' + exclude %>
+<% elsif exclude.is_a? Array -%>
+<%= exclude.map { |i| "exclude = #{i}" }.join("\n") %>
+<% end -%>
+
+<% if vsinclude.is_a? String -%>
+<%= 'vsinclude = ' + vsinclude %>
+<% elsif vsinclude.is_a? Array -%>
+<%= vsinclude.map { |i| "vsinclude = #{i}" }.join("\n") %>
+<% end -%>
+
+[dest]
+<%= 'incremental = ' + incremental if incremental %>
+<%= 'keep = ' + keep if keep %>
+<%= 'bandwithlimit = ' + bandwithlimit if bandwithlimit %>
+<%= 'sshoptions = ' + sshoptions if sshoptions %>
+<%= 'destdir = ' + destdir if destdir %>
+<%= 'desthost = ' + desthost if desthost %>
+<%= 'destuser = ' + destuser if destuser %>