rubypond-s3backup-manager 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/s3backup +5 -1
- data/bin/s3restore +9 -1
- data/lib/adapters/postgres_adapter.rb +15 -7
- data/lib/models/database_backup.rb +7 -4
- data/lib/models/file_backup.rb +6 -6
- data/lib/s3backup-manager.rb +1 -0
- metadata +1 -1
data/bin/s3backup
CHANGED
data/bin/s3restore
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'optparse'
|
3
|
-
|
3
|
+
begin
|
4
|
+
require 's3backup-manager'
|
5
|
+
rescue LoadError
|
6
|
+
require "#{File.dirname(__FILE__)}/../lib/s3backup-manager"
|
7
|
+
end
|
4
8
|
|
5
9
|
options = {}
|
6
10
|
optparse = OptionParser.new do|opts|
|
@@ -32,6 +36,10 @@ optparse = OptionParser.new do|opts|
|
|
32
36
|
options[:type] = t.downcase
|
33
37
|
options[:type_provided] = true
|
34
38
|
end
|
39
|
+
|
40
|
+
opts.on('--username USER', 'User to connect to the database as' ) do |u|
|
41
|
+
options[:username] = u
|
42
|
+
end
|
35
43
|
|
36
44
|
opts.on('-h', '--help', 'Display this screen') do
|
37
45
|
puts opts
|
@@ -1,17 +1,25 @@
|
|
1
1
|
module S3BackupManager
|
2
2
|
module PostgresAdapter
|
3
3
|
|
4
|
-
def dump_database_to_file(
|
5
|
-
|
6
|
-
|
7
|
-
system "sudo -u #{username} vacuumdb -z #{database} >/dev/null 2>&1"
|
4
|
+
def dump_database_to_file(username, database, directory)
|
5
|
+
directory = "#{directory}/s3postgresbackup/#{database}"
|
6
|
+
FileUtils.mkdir_p(directory)
|
7
|
+
system "cd #{directory} && sudo -u #{username} vacuumdb -z #{database} >/dev/null 2>&1"
|
8
8
|
exit(1) unless $?.success?
|
9
|
-
|
9
|
+
dump_file = "#{directory}/#{database}.pgsql"
|
10
|
+
system "cd #{directory} && sudo -u #{username} pg_dump --blobs --format=t #{database} > #{dump_file}"
|
10
11
|
exit(1) unless $?.success?
|
12
|
+
user_file = "#{directory}/globals.pgsql"
|
13
|
+
system "cd #{directory} && sudo -u #{username} pg_dumpall -v -f #{user_file} --globals-only >/dev/null 2>&1"
|
14
|
+
exit(1) unless $?.success?
|
15
|
+
[directory]
|
11
16
|
end
|
12
17
|
|
13
|
-
def restore_database_from_file(database, filename)
|
14
|
-
`
|
18
|
+
def restore_database_from_file(username, database, filename)
|
19
|
+
# `psql -h localhost -d postgres -U postgres -f "/path/to/useraccts.sql" `
|
20
|
+
# exit(1) unless $?.success?
|
21
|
+
`sudo -u #{username} pg_restore --format=t -d #{database} #{filename}`
|
22
|
+
exit(1) unless $?.success?
|
15
23
|
end
|
16
24
|
|
17
25
|
private
|
@@ -19,16 +19,19 @@ module S3BackupManager
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def backup(database)
|
22
|
-
|
23
|
-
dump_database_to_file(
|
24
|
-
super(
|
22
|
+
directory = "/tmp/#{database}"
|
23
|
+
files = dump_database_to_file(@options[:username], database, directory)
|
24
|
+
super(files, "databases/#{@options[:adapter]}")
|
25
|
+
files.each do |file|
|
26
|
+
FileUtils.rm_r(file)
|
27
|
+
end
|
25
28
|
end
|
26
29
|
|
27
30
|
def restore(database, timestamp)
|
28
31
|
filename = "#{@options[:adapter]}/#{timestamp}/#{database}"
|
29
32
|
@dumped_filename = "/tmp/#{random_string}"
|
30
33
|
super(filename, timestamp, @dumped_filename, "databases")
|
31
|
-
restore_database_from_file(@
|
34
|
+
restore_database_from_file(@options[:username], database, "#{@dumped_filename}/tmp/#{database}")
|
32
35
|
db_cleanup!
|
33
36
|
end
|
34
37
|
|
data/lib/models/file_backup.rb
CHANGED
@@ -15,9 +15,9 @@ module S3BackupManager
|
|
15
15
|
bucket.files.select{|f| f.key.match(%r{^filesystem/})}
|
16
16
|
end
|
17
17
|
|
18
|
-
def backup(
|
19
|
-
stored_file_name = "#{Time.now.strftime("%Y%m%d%H%M%S")}/#{File.basename(
|
20
|
-
encrypted_file = encrypt(pack(
|
18
|
+
def backup(files, directory = "filesystem")
|
19
|
+
stored_file_name = "#{Time.now.strftime("%Y%m%d%H%M%S")}/#{File.basename(files.first)}"
|
20
|
+
encrypted_file = encrypt(pack(files))
|
21
21
|
bucket.store("#{directory}/#{stored_file_name}", open(encrypted_file))
|
22
22
|
cleanup!
|
23
23
|
end
|
@@ -83,10 +83,10 @@ module S3BackupManager
|
|
83
83
|
@decrypted_filename
|
84
84
|
end
|
85
85
|
|
86
|
-
def pack(
|
87
|
-
@packed_filename = "#{random_string}_#{File.basename(
|
86
|
+
def pack(files)
|
87
|
+
@packed_filename = "#{random_string}_#{File.basename(files.first)}.tgz"
|
88
88
|
tgz = Zlib::GzipWriter.new(File.open(@packed_filename, 'wb'))
|
89
|
-
Archive::Tar::Minitar.pack(
|
89
|
+
Archive::Tar::Minitar.pack(files, tgz, recurse_directories = true)
|
90
90
|
@packed_filename
|
91
91
|
end
|
92
92
|
|
data/lib/s3backup-manager.rb
CHANGED