Initial commit
This commit is contained in:
		
							parent
							
								
									f1582f8953
								
							
						
					
					
						commit
						6733f1a951
					
				| 
						 | 
				
			
			@ -0,0 +1,233 @@
 | 
			
		|||
#wmdeit_backup
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class wmdeit_backup(
 | 
			
		||||
	$backup_dir = "/srv/backup",
 | 
			
		||||
	$backup_key_file = "/root/.ssh/backup_key",
 | 
			
		||||
	$backup_key,
 | 
			
		||||
	$mnt_server = undef
 | 
			
		||||
 | 
			
		||||
) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	file {$backup_dir:
 | 
			
		||||
		ensure => directory
 | 
			
		||||
	}  -> 
 | 
			
		||||
	file {"$backup_dir/mnt":
 | 
			
		||||
		ensure => directory
 | 
			
		||||
	} ->
 | 
			
		||||
	file {"$backup_dir/backup.sh":
 | 
			
		||||
		ensure => absent,
 | 
			
		||||
		content => "#!/bin/bash\n/usr/bin/rsnapshot -c $backup_dir/\$1 daily && we=\$(LC_TIME=C date +%A) && if [ \$we = \"Friday\" ]; then /usr/bin/rsnapshot -c $backup_dir/\$1 weekly; fi",
 | 
			
		||||
		mode => '755',
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if $mnt_server {
 | 
			
		||||
		mount {"$backup_dir/mnt":
 | 
			
		||||
			device => "sshfs#$mnt_server",
 | 
			
		||||
			fstype => "fuse",
 | 
			
		||||
			ensure => mounted,
 | 
			
		||||
			require => File["$backup_dir/mnt"],
 | 
			
		||||
			options => defaults,
 | 
			
		||||
			remounts => false
 | 
			
		||||
		} 
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	package { ["rsnapshot","sshfs"]:
 | 
			
		||||
		ensure => installed,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	file { "/root/.ssh":
 | 
			
		||||
		ensure => directory,
 | 
			
		||||
		mode => "600",
 | 
			
		||||
	} ->
 | 
			
		||||
	file {"$backup_key_file":
 | 
			
		||||
		ensure => file,
 | 
			
		||||
		content => $backup_key,
 | 
			
		||||
		mode => "600",
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
define wmdeit_backup::scpbackup (
 | 
			
		||||
	$weekday = 0
 | 
			
		||||
 | 
			
		||||
) {
 | 
			
		||||
	$dir = $title
 | 
			
		||||
 | 
			
		||||
	$bname = $title
 | 
			
		||||
	$backup_key_file = $wmdeit_backup::backup_key_file
 | 
			
		||||
	$backup_pub_key_file = "/tmp/backup_pub.pem" 
 | 
			
		||||
	$privkey = "/root/${title}_privkey"
 | 
			
		||||
	$backup_dir = $wmdeit_backup::backup_dir 
 | 
			
		||||
	$shellscript = "$backup_dir/backup-scp-$title.sh"
 | 
			
		||||
 | 
			
		||||
	$tdir = "$backup_dir/$dir/daily.0"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	file {"$shellscript":
 | 
			
		||||
		mode => "700",
 | 
			
		||||
		ensure => file,
 | 
			
		||||
		content => "#!/bin/sh
 | 
			
		||||
#Get current week of year modulo 2, so we can name our backups alternating backup1 and backup02 
 | 
			
		||||
G=\$((`/bin/date +%V` % 2))
 | 
			
		||||
# create key
 | 
			
		||||
/usr/bin/openssl rand -hex 64 -out $privkey
 | 
			
		||||
# create encrypted backup
 | 
			
		||||
/usr/bin/openssl rsautl -encrypt -inkey $backup_pub_key_file -pubin -in $privkey -out  $backup_dir/mnt/backup-$bname-0\$G-privkey.enc
 | 
			
		||||
cd $tdir
 | 
			
		||||
tar  c ./ | xz -3  |  openssl enc -aes-256-cbc -salt -pass file:$privkey > $backup_dir/mnt/backup-$bname-0\$G-tar.xz.enc
 | 
			
		||||
# upload backup to server
 | 
			
		||||
#scp $backup_dir/mnt/backup-$bname\$G-privkey.enc $server:backup-$bname\$G-privkey.enc
 | 
			
		||||
#rsync $backup_dir/mnt/backup-$bname\$G-tar.xz.enc $server:backup-$bname\$G-tar.xz.enc 
 | 
			
		||||
rm $privkey
 | 
			
		||||
"
 | 
			
		||||
	}
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
#	exec {"/usr/bin/openssl rsa -in $backup_key_file -pubout -out $backup_pub_key_file":
 | 
			
		||||
#		creates => $backup_pub_key_file
 | 
			
		||||
#	}
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
	cron {"scpbackup-$title":
 | 
			
		||||
		weekday => $weekday,
 | 
			
		||||
		hour => 23,
 | 
			
		||||
		minute => 0,
 | 
			
		||||
		command => "$shellscript"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class wmdeit_backup::mysqldump_all (
 | 
			
		||||
	$hour = 20,		# Start SQL-Dump by default after Tagesschau
 | 
			
		||||
	$minute = 15
 | 
			
		||||
	){
 | 
			
		||||
 | 
			
		||||
	$mysql = '/usr/bin/mysql'
 | 
			
		||||
	$mysqldump = '/usr/bin/mysqldump'
 | 
			
		||||
 | 
			
		||||
	cron {'mysqldump':
 | 
			
		||||
		ensure => present,
 | 
			
		||||
		user => root,	
 | 
			
		||||
		command => "$mysql -N -e 'show databases' | while read dbname; do $mysqldump --complete-insert --routines --triggers --single-transaction --max_allowed_packet=512M \"\$dbname\" > /var/backups/\"\$dbname\".sql; done",
 | 
			
		||||
 | 
			
		||||
		hour => $hour,
 | 
			
		||||
		minute => $minute,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
define wmdeit_backup::backup(
 | 
			
		||||
 | 
			
		||||
	$ssh_port = 22, 
 | 
			
		||||
	$server=$title,
 | 
			
		||||
	$dirs = ["/"],
 | 
			
		||||
	$local_dir = "./",
 | 
			
		||||
	$retain_daily = 30,
 | 
			
		||||
	$retain_weekly = 24,
 | 
			
		||||
	$retain_monthly = 0,
 | 
			
		||||
	$daily_hour = 3,
 | 
			
		||||
	$daily_minute = 0,
 | 
			
		||||
 | 
			
		||||
) {
 | 
			
		||||
	$bname = $title
 | 
			
		||||
	$backup_dir = $wmdeit_backup::backup_dir 
 | 
			
		||||
	$backup_key_file = $wmdeit_backup::backup_key_file
 | 
			
		||||
 | 
			
		||||
	if $daily_hour > 23 {
 | 
			
		||||
		$idaily_hour = $daily_hour - 23
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		$idaily_hour = $daily_hour 
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if $idaily_hour-1 < 0 {
 | 
			
		||||
		$weekly_hour = $idaily_hout+23
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		$weekly_hour = $idaily_hour-1
 | 
			
		||||
	}
 | 
			
		||||
	$weekly_minute = $daily_minute
 | 
			
		||||
 | 
			
		||||
	cron {"daily_backup$title":
 | 
			
		||||
		ensure => present,
 | 
			
		||||
		hour => $idaily_hour,
 | 
			
		||||
		minute => $daily_minute,
 | 
			
		||||
		command => "/usr/bin/rsnapshot -c $backup_dir/$bname.conf daily",
 | 
			
		||||
		user => 'root'
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if $retain_weekly != 0 {
 | 
			
		||||
		$retain_weekly_string = "retain\tweekly\t$retain_weekly"
 | 
			
		||||
		$weekly_cron = present
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		$weekly_cron = absent
 | 
			
		||||
	}	
 | 
			
		||||
 | 
			
		||||
	cron {"weekly_backup$title":
 | 
			
		||||
		ensure => present,
 | 
			
		||||
		hour => $weekly_hour,
 | 
			
		||||
		minute => $weekly_minute,
 | 
			
		||||
		weekday => 0,
 | 
			
		||||
		command => "/usr/bin/rsnapshot -c $backup_dir/$bname.conf weekly",
 | 
			
		||||
		user => 'root'
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if $retain_monthly != 0 {
 | 
			
		||||
		$retain_monthly_string = "retain\tmonthly\t$retain_monthly"
 | 
			
		||||
		$monthly_cron = present
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		$monthly_cron = absent
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	cron {"monthly_backup$title":
 | 
			
		||||
		ensure => $monthly_cron,
 | 
			
		||||
		monthday => 1,
 | 
			
		||||
		hour => 1,
 | 
			
		||||
		minute => 0,
 | 
			
		||||
		command => "/usr/bin/rsnapshot -c $backup_dir/$bname.conf monthly",
 | 
			
		||||
		user => 'root'
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	$bdirs = join ($dirs.map | String $dir| {
 | 
			
		||||
		"backup	root@$server:$dir\t$local_dir\n"
 | 
			
		||||
	},"")
 | 
			
		||||
 | 
			
		||||
	file {"$backup_dir/$bname.conf":
 | 
			
		||||
		ensure => file,
 | 
			
		||||
		content => "config_version	1.2
 | 
			
		||||
snapshot_root	$backup_dir/$bname
 | 
			
		||||
cmd_cp		/bin/cp
 | 
			
		||||
cmd_rm		/bin/rm
 | 
			
		||||
cmd_rsync	/usr/bin/rsync
 | 
			
		||||
cmd_ssh		/usr/bin/ssh
 | 
			
		||||
cmd_logger	/usr/bin/logger
 | 
			
		||||
retain	daily	$retain_daily
 | 
			
		||||
$retain_weekly_string
 | 
			
		||||
$retain_monthly_string
 | 
			
		||||
 | 
			
		||||
verbose		2
 | 
			
		||||
loglevel	3
 | 
			
		||||
lockfile	/var/run/rsnapshot-$bname.pid
 | 
			
		||||
ssh_args	-p $ssh_port -i $backup_key_file
 | 
			
		||||
rsync_long_args	--delete --numeric-ids --relative --delete-excluded 
 | 
			
		||||
 | 
			
		||||
$bdirs
 | 
			
		||||
 | 
			
		||||
"			
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue