mirror of
				https://github.com/krislamo/puppet-rsnapshot
				synced 2025-10-31 16:58:35 +00:00 
			
		
		
		
	parameterize backup scripts
This commit is contained in:
		
							
								
								
									
										44
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								README.md
									
									
									
									
									
								
							| @@ -365,8 +365,18 @@ Default is: | |||||||
|  |  | ||||||
| #### `$backup_scripts` | #### `$backup_scripts` | ||||||
| Additional scripts to create, possible values are: mysql, psql, misc | Additional scripts to create, possible values are: mysql, psql, misc | ||||||
| NOTE: this requires you to install the client packages you wish to use. |  | ||||||
|       You can do this by passing an array to [$rsnapshot::package_name](#package_name) | NOTE: the psql and mysql scripts will SSH into your host and try and use pg_dump/mysqldump respectively. | ||||||
|  | Make sure you have those tools installed on your DB hosts. | ||||||
|  |  | ||||||
|  | You can do this by passing an array to [$rsnapshot::package_name](#package_name) | ||||||
|  |  | ||||||
|  | Example: | ||||||
|  | ```yaml | ||||||
|  | rsnapshot::package_name: | ||||||
|  |   - rsnapshot | ||||||
|  |   - pbzip2 | ||||||
|  | ``` | ||||||
|  |  | ||||||
| Default is: | Default is: | ||||||
|  |  | ||||||
| @@ -414,6 +424,7 @@ This creates | |||||||
| - a mysql backup script for `bazqux.de` using the credentials `myuser:mypassword` | - a mysql backup script for `bazqux.de` using the credentials `myuser:mypassword` | ||||||
|  |  | ||||||
| The scripts look like this: | The scripts look like this: | ||||||
|  |  | ||||||
| mysql: | mysql: | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| @@ -422,10 +433,31 @@ host=bazqux.de | |||||||
| user=myuser | user=myuser | ||||||
| pass=mypassword | pass=mypassword | ||||||
|  |  | ||||||
| dbs=( $(mysql -h "$host" -u "$user" -p"$pass" -e 'show databases' | sed '1d;/information_schema/d;/performance_schema/d')  ) | dbs=(  | ||||||
|  |       $(ssh -l root "$host" "mysql -u ${user} -p${pass} -e 'show databases' | sed '1d;/information_schema/d;/performance_schema/d'")   | ||||||
|  |     ) | ||||||
|  |  | ||||||
| for db in "${dbs[@]}"; do | for db in "${dbs[@]}"; do | ||||||
|   mysqldump --host="$host" --user="$user" --password="$pass" --single-transaction --quick --routines --ignore-table=mysql.event "$db" > "$db".sql |   ssh -l root "$host" "mysqldump --user=${user} --password=${pass} --single-transaction --quick --routines --ignore-table=mysql.event ${db}" > "${db}.sql" | ||||||
|  |   wait | ||||||
|  |   pbzip2 -p3 "$db".sql | ||||||
|  | done       | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | mysql with root user: | ||||||
|  |  | ||||||
|  | ```bash | ||||||
|  | #!/bin/bash | ||||||
|  | host=bazqux.de | ||||||
|  | user=root | ||||||
|  |  | ||||||
|  | dbs=(  | ||||||
|  |       $(ssh -l root "$host" "mysql -e 'show databases' | sed '1d;/information_schema/d;/performance_schema/d'")   | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  | for db in "${dbs[@]}"; do | ||||||
|  |   ssh -l root "$host" "mysqldump --single-transaction --quick --routines --ignore-table=mysql.event ${db}" > "${db}.sql" | ||||||
|   wait |   wait | ||||||
|   pbzip2 -p3 "$db".sql |   pbzip2 -p3 "$db".sql | ||||||
| done       | done       | ||||||
| @@ -441,7 +473,9 @@ user=backupuser | |||||||
| pass=password | pass=password | ||||||
|  |  | ||||||
| PGPASSWORD="$pass" | PGPASSWORD="$pass" | ||||||
| dbs=( $(psql -h "$host" -U "$user" -Atc "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres'")   ) | dbs=(  | ||||||
|  |       $(ssh -l root "$host" "psql -U ${user} -Atc \"SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres'\"" )    | ||||||
|  |     ) | ||||||
|  |  | ||||||
| for db in "${dbs[@]}"; do | for db in "${dbs[@]}"; do | ||||||
|   ssh -l root "$host" "pg_dump -U ${user} -Fc ${db}" > "$db".sql |   ssh -l root "$host" "pg_dump -U ${user} -Fc ${db}" > "$db".sql | ||||||
|   | |||||||
| @@ -135,21 +135,23 @@ class rsnapshot::config ( | |||||||
|       content => template('rsnapshot/rsnapshot.erb'), |       content => template('rsnapshot/rsnapshot.erb'), | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |      | ||||||
|  |  | ||||||
|     if has_key($hash, backup_scripts) { |     if has_key($hash, backup_scripts) { | ||||||
|  |       $hash[backup_scripts].each |$script, $scriptconf| { | ||||||
|  |         $real_script       = deep_merge($rsnapshot::params::backup_scripts[$script], $rsnapshot::backup_scripts[$script], $hash[backup_scripts][$script]) | ||||||
|  |         notify { "$hash[backup_scripts][$script] for $host and $script": } | ||||||
|  |         #        notify { "$real_script for $host and $script": } | ||||||
|  |         $dbbackup_user     = $real_script[dbbackup_user] | ||||||
|  |         $dbbackup_password = $real_script[dbbackup_password] | ||||||
|  |         $dumper            = $real_script[dumper] | ||||||
|  |         $dump_flags        = $real_script[dump_flags] | ||||||
|  |         $ignore_dbs        = $real_script[ignore_dbs] | ||||||
|  |  | ||||||
|       $hash[backup_scripts].each |$script, $credentials| { |  | ||||||
|  |  | ||||||
|         if is_hash($credentials) { |  | ||||||
|           $dbbackup_user     = $credentials['dbbackup_user'] |  | ||||||
|           $dbbackup_password = $credentials['dbbackup_password'] |  | ||||||
|         } else { |  | ||||||
|           $dbbackup_user     = $rsnapshot::default_backup_scripts[$script]['dbbackup_user'] |  | ||||||
|           $dbbackup_password = $rsnapshot::default_backup_scripts[$script]['dbbackup_password'] |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         concat::fragment { "${host}_${script}_backup": |         concat::fragment { "${host}_${script}_backup": | ||||||
|           target  => $config, |         target  => $config, | ||||||
|           content => "backup_script	${conf_d}/${host}.${script}.sh	./${script}\n", |         content => "backup_script	${conf_d}/${host}.${script}.sh	./${script}\n", | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         file { "${conf_d}/${host}.${script}.sh": |         file { "${conf_d}/${host}.${script}.sh": | ||||||
|   | |||||||
| @@ -93,13 +93,19 @@ class rsnapshot::params { | |||||||
|     }, |     }, | ||||||
|   } |   } | ||||||
|   $backup_scripts = { |   $backup_scripts = { | ||||||
|     mysql             => { |     mysql               => { | ||||||
|       dbbackup_user     => 'root', |       dbbackup_user     => 'root', | ||||||
|       dbbackup_password => 'myFancyPassWord', |       dbbackup_password => '', | ||||||
|  |       dumper            => 'mysqldump', | ||||||
|  |       dump_flags        => '--single-transaction --quick --routines --ignore-table=mysql.event', | ||||||
|  |       ignore_dbs        => [ 'information_schema', 'performance_schema' ], | ||||||
|     }, |     }, | ||||||
|     psql                => { |     psql                => { | ||||||
|       dbbackup_user     => 'postgres', |       dbbackup_user     => 'postgres', | ||||||
|       dbbackup_password => '', |       dbbackup_password => '', | ||||||
|  |       dumper            => 'pg_dump', | ||||||
|  |       dump_flags        => '-Fc', | ||||||
|  |       ignore_dbs        => [], | ||||||
|     }, |     }, | ||||||
|     misc => {}, |     misc => {}, | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -6,10 +6,21 @@ host=<%=@host%> | |||||||
| user=<%=@dbbackup_user%> | user=<%=@dbbackup_user%> | ||||||
| pass=<%=@dbbackup_password%> | pass=<%=@dbbackup_password%> | ||||||
|  |  | ||||||
| dbs=( $(mysql -h "$host" -u "$user" -p"$pass" -e 'show databases' | sed '1d;/information_schema/d;/performance_schema/d')  ) | <% if (@dbbackup_user == 'root' && @dbbackup_password == '') -%> | ||||||
|  | dbs=(  | ||||||
|  |       $(ssh -l root "$host" "mysql -e 'show databases' | sed '1d;<%@ignore_dbs.to_a.each do |db|-%>/<%=db-%>/d;<%end-%>'" )  | ||||||
|  |     ) | ||||||
|  | <%else-%> | ||||||
|  | dbs=(  | ||||||
|  |       $(ssh -l root "$host" "mysql -u <%=@dbbackup_user-%> -p'<%=@dbbackup_password-%>' -e 'show databases' | sed '1d;<%@ignore_dbs.each do |db|-%>/<%=db-%>/d;<%end-%>'" ) | ||||||
|  |     ) | ||||||
|  | <%end-%> | ||||||
| for db in "${dbs[@]}"; do | for db in "${dbs[@]}"; do | ||||||
|   mysqldump --host="$host" --user="$user" --password="$pass" --single-transaction --quick --routines --ignore-table=mysql.event "$db" > "$db".sql | <% if @dbbackup_user == 'root' -%> | ||||||
|  |   ssh -l root "$host" "<%=@dumper-%> <%=@dump_flags-%> ${db}" > "$db".sql | ||||||
|  | <%else-%> | ||||||
|  |   ssh -l root "$host" "<%=@dumper-%>  --user=<%=@dbbackup_user-%> --password='<%=@dbbackup_password-%>' <%=@dump_flags-%> ${db}" > "$db".sql | ||||||
|  | <%end-%> | ||||||
|   wait |   wait | ||||||
|   pbzip2 "$db".sql |   pbzip2 "$db".sql | ||||||
| done | done | ||||||
|   | |||||||
| @@ -7,10 +7,11 @@ user=<%=@dbbackup_user%> | |||||||
| pass=<%=@dbbackup_password%> | pass=<%=@dbbackup_password%> | ||||||
|  |  | ||||||
| PGPASSWORD="$pass" | PGPASSWORD="$pass" | ||||||
| dbs=( $(psql -h "$host" -U "$user" -Atc "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres'")  ) | dbs=(  | ||||||
|  |       $(ssh "$host" "psql -U ${user} -Atc \"SELECT datname FROM pg_database WHERE NOT datistemplate AND NOT datname ~ '<%@ignore_dbs.each do |db|-%><%if db == @ignore_dbs.last-%><%=db-%><%else-%><%=db-%>|<%end-%><%end-%>'\"")   | ||||||
|  |     ) | ||||||
| for db in "${dbs[@]}"; do | for db in "${dbs[@]}"; do | ||||||
|   ssh -l root "$host" "pg_dump -U ${user} -Fc ${db}" > "$db".sql |   ssh -l root "$host" "<%=@dumper-%> -U ${user} <%=@dump_flags-%> ${db}" > "$db".sql | ||||||
|   wait |   wait | ||||||
|   pbzip2 "$db".sql |   pbzip2 "$db".sql | ||||||
| done | done | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user