backupit 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +6 -0
- data/VERSION +1 -1
- data/backupit.gemspec +5 -4
- data/lib/backup/configuration/base.rb +12 -0
- data/lib/backup/configuration/mysql.rb +1 -1
- data/lib/backup/configuration/storage.rb +1 -1
- data/lib/backup/storage.rb +33 -17
- metadata +6 -13
data/README.md
CHANGED
@@ -7,6 +7,8 @@
|
|
7
7
|
|
8
8
|
storage :file do
|
9
9
|
path '/opt/backup/'
|
10
|
+
mysql_check true
|
11
|
+
mysql_config({:host=>"localhost",:user=>"root",:password=>"test",:databases=>"checkdb"})
|
10
12
|
end
|
11
13
|
|
12
14
|
server 'delonghi' do
|
@@ -21,6 +23,7 @@
|
|
21
23
|
options '-h 192.168.1.100'
|
22
24
|
databases ['delonghi-staging', 'delonghi-production']
|
23
25
|
tables ['users','products'] # this would overwrite databases! `man mysqldump` for more help.
|
26
|
+
check true
|
24
27
|
end
|
25
28
|
end
|
26
29
|
|
@@ -31,6 +34,7 @@
|
|
31
34
|
user 'root'
|
32
35
|
password 'mytopsecret'
|
33
36
|
databases 'ot_staging'
|
37
|
+
check false
|
34
38
|
end
|
35
39
|
end
|
36
40
|
|
@@ -39,6 +43,8 @@
|
|
39
43
|
only backup server 'delonghi' (pretend to run)
|
40
44
|
2, backup -f /opt/backup/backup.rb
|
41
45
|
backup all servers
|
46
|
+
3, in storage , mysql_check(true | false) and mysql_config to check the backup can be restored
|
47
|
+
4, in every mysql role, check mean to check the backup or not
|
42
48
|
|
43
49
|
## Note on Patches/Pull Requests
|
44
50
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/backupit.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{backupit}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jinzhu"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-10-03}
|
13
13
|
s.default_executable = %q{backup}
|
14
14
|
s.description = %q{A tool to backup your servers}
|
15
15
|
s.email = %q{wosmvp@gmail.com}
|
@@ -39,13 +39,14 @@ Gem::Specification.new do |s|
|
|
39
39
|
]
|
40
40
|
s.homepage = %q{http://github.com/jinzhu/backupit}
|
41
41
|
s.require_paths = ["lib"]
|
42
|
-
s.rubygems_version = %q{1.6
|
42
|
+
s.rubygems_version = %q{1.3.6}
|
43
43
|
s.summary = %q{A tool to backup your servers}
|
44
44
|
|
45
45
|
if s.respond_to? :specification_version then
|
46
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
46
47
|
s.specification_version = 3
|
47
48
|
|
48
|
-
if Gem::Version.new(Gem::
|
49
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
49
50
|
s.add_runtime_dependency(%q<mail>, [">= 0"])
|
50
51
|
else
|
51
52
|
s.add_dependency(%q<mail>, [">= 0"])
|
@@ -28,6 +28,18 @@ module Backup
|
|
28
28
|
|
29
29
|
@servers
|
30
30
|
end
|
31
|
+
|
32
|
+
def check(name=nil,&block)
|
33
|
+
@check ||= {}
|
34
|
+
|
35
|
+
if block
|
36
|
+
name ||= "check_#{@check.keys.size}"
|
37
|
+
@check[name] = Backup::Configuration::Check.new
|
38
|
+
@check[name].instance_eval &block
|
39
|
+
end
|
40
|
+
|
41
|
+
@check
|
42
|
+
end
|
31
43
|
end
|
32
44
|
end
|
33
45
|
end
|
data/lib/backup/storage.rb
CHANGED
@@ -3,7 +3,7 @@ require 'tempfile'
|
|
3
3
|
module Backup
|
4
4
|
class Storage
|
5
5
|
extend Backup::Attribute
|
6
|
-
attr_accessor :name, :config, :changes
|
6
|
+
attr_accessor :name, :config, :changes, :subject_prefix
|
7
7
|
|
8
8
|
def initialize(name, config)
|
9
9
|
self.name = name
|
@@ -24,7 +24,7 @@ module Backup
|
|
24
24
|
backup_rsync
|
25
25
|
backup_mysql
|
26
26
|
commit_changes
|
27
|
-
|
27
|
+
send_mail(changes.join("\n"))
|
28
28
|
end
|
29
29
|
|
30
30
|
def backup_rsync
|
@@ -35,7 +35,7 @@ module Backup
|
|
35
35
|
@server_config.rsync.to_a.map do |path|
|
36
36
|
remote_path = path.is_a?(Hash) ? path.first[0] : path
|
37
37
|
target_name = File.basename(path.is_a?(Hash) ? path.first[1] : path)
|
38
|
-
|
38
|
+
run_with_changes("rsync -ravk #{@rsync_host}:#{remote_path.sub(/\/?$/,'/')} '#{File.join(target_path, target_name)}'")
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -52,32 +52,48 @@ module Backup
|
|
52
52
|
mysql_config += " #{mysql.options}" if mysql.options
|
53
53
|
|
54
54
|
tmpfile = Tempfile.new('mysql.sql')
|
55
|
-
(
|
56
|
-
(
|
57
|
-
(
|
55
|
+
run_with_changes("ssh #{@ssh_host} 'mysqldump #{mysql_config} > #{tmpfile.path}'") &&
|
56
|
+
run_with_changes("scp #{@scp_host}:#{tmpfile.path} '#{target_path}/#{key}.sql'") &&
|
57
|
+
run_with_changes("ssh #{@ssh_host} 'rm #{tmpfile.path}'"))
|
58
|
+
|
59
|
+
check_backuped_mysql(target_path, key) if config.mysql_check and (mysql.check || mysql.check.nil?)
|
58
60
|
end
|
59
61
|
end
|
60
62
|
|
61
|
-
def
|
63
|
+
def check_backuped_mysql(target_path, key)
|
64
|
+
self.changes << "DBCheck running -- checking #{target_path}/#{key}.sql #{Time.now}"
|
65
|
+
status = run_with_changes("mysql -h#{config.mysql_config[:host]} -u#{config.mysql_config[:user]} #{config.mysql_config[:databases]} < #{target_path}/#{key}.sql") ? "SUCCESSFUL" : "FAILURE"
|
66
|
+
self.changes << "DBCheck finished #{status} -- #{Time.now}"
|
67
|
+
end
|
68
|
+
|
69
|
+
def commit_changes
|
70
|
+
Dir.chdir(@backup_path) do
|
71
|
+
run_with_changes("git init") unless system("git status")
|
72
|
+
run_with_changes("git add .")
|
73
|
+
run_with_changes("git commit -am '#{Time.now.strftime("%Y-%m-%d %H:%M")}'")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def run_with_changes(shell)
|
78
|
+
self.changes << "== #{shell}"
|
79
|
+
result = Backup::Main.run(shell)
|
80
|
+
self.subject_prefix = "[ERROR]" unless result
|
81
|
+
self.changes << result
|
82
|
+
result
|
83
|
+
end
|
84
|
+
|
85
|
+
def send_mail(message)
|
62
86
|
Dir.chdir(@backup_path) do
|
63
87
|
smtp_config = config.smtp
|
64
88
|
Mail.defaults { delivery_method :smtp, smtp_config } if smtp_config
|
65
89
|
|
66
90
|
Backup::Main.email(:from => @server_config.email,
|
67
91
|
:to => @server_config.email,
|
68
|
-
:subject => "#{@server.name} backed up at #{Time.now}",
|
69
|
-
:body =>
|
92
|
+
:subject => "#{self.subject_prefix} #{@server.name} backed up at #{Time.now}",
|
93
|
+
:body => message,
|
70
94
|
:charset => 'utf-8', :content_type => 'text/plain; charset=utf-8'
|
71
95
|
) if @server_config.email
|
72
96
|
end
|
73
97
|
end
|
74
|
-
|
75
|
-
def commit_changes
|
76
|
-
Dir.chdir(@backup_path) do
|
77
|
-
(self.changes << Backup::Main.run("git init")) unless system("git status")
|
78
|
-
self.changes << Backup::Main.run("git add .")
|
79
|
-
self.changes << Backup::Main.run("git commit -am '#{Time.now.strftime("%Y-%m-%d %H:%M")}'")
|
80
|
-
end
|
81
|
-
end
|
82
98
|
end
|
83
99
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backupit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
4
|
+
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Jinzhu
|
@@ -15,18 +14,16 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-
|
17
|
+
date: 2011-10-03 00:00:00 +08:00
|
19
18
|
default_executable: backup
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: mail
|
23
22
|
prerelease: false
|
24
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
24
|
requirements:
|
27
25
|
- - ">="
|
28
26
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
27
|
segments:
|
31
28
|
- 0
|
32
29
|
version: "0"
|
@@ -69,27 +66,23 @@ rdoc_options: []
|
|
69
66
|
require_paths:
|
70
67
|
- lib
|
71
68
|
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
-
none: false
|
73
69
|
requirements:
|
74
70
|
- - ">="
|
75
71
|
- !ruby/object:Gem::Version
|
76
|
-
hash: 3
|
77
72
|
segments:
|
78
73
|
- 0
|
79
74
|
version: "0"
|
80
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
76
|
requirements:
|
83
77
|
- - ">="
|
84
78
|
- !ruby/object:Gem::Version
|
85
|
-
hash: 3
|
86
79
|
segments:
|
87
80
|
- 0
|
88
81
|
version: "0"
|
89
82
|
requirements: []
|
90
83
|
|
91
84
|
rubyforge_project:
|
92
|
-
rubygems_version: 1.6
|
85
|
+
rubygems_version: 1.3.6
|
93
86
|
signing_key:
|
94
87
|
specification_version: 3
|
95
88
|
summary: A tool to backup your servers
|