backup 4.4.1 → 5.0.0.beta.1
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.
- checksums.yaml +5 -5
- data/LICENSE +19 -0
- data/README.md +1 -1
- data/lib/backup.rb +74 -78
- data/lib/backup/archive.rb +31 -32
- data/lib/backup/binder.rb +2 -6
- data/lib/backup/cleaner.rb +14 -18
- data/lib/backup/cli.rb +104 -108
- data/lib/backup/cloud_io/base.rb +4 -7
- data/lib/backup/cloud_io/cloud_files.rb +60 -62
- data/lib/backup/cloud_io/s3.rb +69 -76
- data/lib/backup/compressor/base.rb +4 -7
- data/lib/backup/compressor/bzip2.rb +3 -7
- data/lib/backup/compressor/custom.rb +2 -6
- data/lib/backup/compressor/gzip.rb +16 -17
- data/lib/backup/config.rb +17 -18
- data/lib/backup/config/dsl.rb +16 -17
- data/lib/backup/config/helpers.rb +10 -16
- data/lib/backup/database/base.rb +22 -21
- data/lib/backup/database/mongodb.rb +36 -37
- data/lib/backup/database/mysql.rb +40 -41
- data/lib/backup/database/openldap.rb +8 -10
- data/lib/backup/database/postgresql.rb +29 -30
- data/lib/backup/database/redis.rb +27 -30
- data/lib/backup/database/riak.rb +15 -18
- data/lib/backup/database/sqlite.rb +4 -6
- data/lib/backup/encryptor/base.rb +2 -4
- data/lib/backup/encryptor/gpg.rb +49 -59
- data/lib/backup/encryptor/open_ssl.rb +11 -14
- data/lib/backup/errors.rb +7 -12
- data/lib/backup/logger.rb +16 -18
- data/lib/backup/logger/console.rb +5 -8
- data/lib/backup/logger/fog_adapter.rb +2 -6
- data/lib/backup/logger/logfile.rb +10 -12
- data/lib/backup/logger/syslog.rb +2 -4
- data/lib/backup/model.rb +75 -40
- data/lib/backup/notifier/base.rb +24 -26
- data/lib/backup/notifier/campfire.rb +9 -11
- data/lib/backup/notifier/command.rb +0 -3
- data/lib/backup/notifier/datadog.rb +9 -12
- data/lib/backup/notifier/flowdock.rb +13 -17
- data/lib/backup/notifier/hipchat.rb +11 -13
- data/lib/backup/notifier/http_post.rb +11 -14
- data/lib/backup/notifier/mail.rb +44 -47
- data/lib/backup/notifier/nagios.rb +5 -9
- data/lib/backup/notifier/pagerduty.rb +10 -12
- data/lib/backup/notifier/prowl.rb +15 -15
- data/lib/backup/notifier/pushover.rb +7 -10
- data/lib/backup/notifier/ses.rb +34 -16
- data/lib/backup/notifier/slack.rb +39 -40
- data/lib/backup/notifier/twitter.rb +2 -5
- data/lib/backup/notifier/zabbix.rb +11 -14
- data/lib/backup/package.rb +5 -9
- data/lib/backup/packager.rb +16 -17
- data/lib/backup/pipeline.rb +17 -21
- data/lib/backup/splitter.rb +8 -11
- data/lib/backup/storage/base.rb +5 -8
- data/lib/backup/storage/cloud_files.rb +21 -23
- data/lib/backup/storage/cycler.rb +10 -15
- data/lib/backup/storage/dropbox.rb +15 -21
- data/lib/backup/storage/ftp.rb +8 -10
- data/lib/backup/storage/local.rb +5 -8
- data/lib/backup/storage/qiniu.rb +8 -8
- data/lib/backup/storage/rsync.rb +24 -26
- data/lib/backup/storage/s3.rb +27 -28
- data/lib/backup/storage/scp.rb +10 -12
- data/lib/backup/storage/sftp.rb +10 -12
- data/lib/backup/syncer/base.rb +5 -8
- data/lib/backup/syncer/cloud/base.rb +27 -30
- data/lib/backup/syncer/cloud/cloud_files.rb +16 -18
- data/lib/backup/syncer/cloud/local_file.rb +5 -8
- data/lib/backup/syncer/cloud/s3.rb +23 -24
- data/lib/backup/syncer/rsync/base.rb +6 -10
- data/lib/backup/syncer/rsync/local.rb +1 -5
- data/lib/backup/syncer/rsync/pull.rb +6 -10
- data/lib/backup/syncer/rsync/push.rb +18 -22
- data/lib/backup/template.rb +9 -14
- data/lib/backup/utilities.rb +82 -69
- data/lib/backup/version.rb +1 -3
- metadata +100 -660
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3e90aa060ddb761e49388d59c63e4a347ff31b10
|
4
|
+
data.tar.gz: 6daf2c1c7fc2522c806f8cee757d8dbbf024c099
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fec34c486f7f34829928cca1342ca9986dfd072dae3c3dffa05cfc247547dff113c72d53c9d354d9157d68bf20945b11f07787e02584cda4d28cb554e397cd0d
|
7
|
+
data.tar.gz: 37a71a5c1603c4a280874f07ebc5156daef997ebb0e931a031224d0a79c4af6d502ddc4b4512fb64f38b2624458135300adcf2579c77b9d9e6e284ebcf7203cc
|
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2009-2017 Michael van Rooijen
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
CHANGED
@@ -16,7 +16,7 @@ Please use the Backup features [issue tracker][Features] to suggest new features
|
|
16
16
|
Only use the Backup gem [issue tracker][Issues] for bugs and other issues.
|
17
17
|
We're also available on [Gitter] for questions and problems.
|
18
18
|
|
19
|
-
**Copyright (c) 2009-
|
19
|
+
**Copyright (c) 2009-2017 [Michael van Rooijen][] ( [@mrrooijen] )**
|
20
20
|
Released under the **MIT** [LICENSE](LICENSE).
|
21
21
|
|
22
22
|
[Installation]: http://backup.github.io/backup/v4/installation
|
data/lib/backup.rb
CHANGED
@@ -1,20 +1,18 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
# Load Ruby Core Libraries
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
2
|
+
require "time"
|
3
|
+
require "fileutils"
|
4
|
+
require "tempfile"
|
5
|
+
require "syslog"
|
6
|
+
require "yaml"
|
7
|
+
require "etc"
|
8
|
+
require "forwardable"
|
9
|
+
require "thread"
|
12
10
|
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
11
|
+
require "open4"
|
12
|
+
require "thor"
|
13
|
+
require "shellwords"
|
16
14
|
|
17
|
-
require
|
15
|
+
require "excon"
|
18
16
|
# Include response.inspect in error messages.
|
19
17
|
Excon.defaults[:debug_response] = true
|
20
18
|
# Excon should not retry failed requests. We handle that.
|
@@ -23,107 +21,106 @@ Excon.defaults[:middlewares].delete(Excon::Middleware::Idempotent)
|
|
23
21
|
##
|
24
22
|
# The Backup Ruby Gem
|
25
23
|
module Backup
|
26
|
-
|
27
24
|
##
|
28
25
|
# Backup's internal paths
|
29
|
-
LIBRARY_PATH = File.join(File.dirname(__FILE__),
|
30
|
-
STORAGE_PATH = File.join(LIBRARY_PATH,
|
31
|
-
SYNCER_PATH = File.join(LIBRARY_PATH,
|
32
|
-
DATABASE_PATH = File.join(LIBRARY_PATH,
|
33
|
-
COMPRESSOR_PATH = File.join(LIBRARY_PATH,
|
34
|
-
ENCRYPTOR_PATH = File.join(LIBRARY_PATH,
|
35
|
-
NOTIFIER_PATH = File.join(LIBRARY_PATH,
|
36
|
-
TEMPLATE_PATH = File.expand_path(
|
26
|
+
LIBRARY_PATH = File.join(File.dirname(__FILE__), "backup")
|
27
|
+
STORAGE_PATH = File.join(LIBRARY_PATH, "storage")
|
28
|
+
SYNCER_PATH = File.join(LIBRARY_PATH, "syncer")
|
29
|
+
DATABASE_PATH = File.join(LIBRARY_PATH, "database")
|
30
|
+
COMPRESSOR_PATH = File.join(LIBRARY_PATH, "compressor")
|
31
|
+
ENCRYPTOR_PATH = File.join(LIBRARY_PATH, "encryptor")
|
32
|
+
NOTIFIER_PATH = File.join(LIBRARY_PATH, "notifier")
|
33
|
+
TEMPLATE_PATH = File.expand_path("../../templates", __FILE__)
|
37
34
|
|
38
35
|
##
|
39
36
|
# Autoload Backup storage files
|
40
37
|
module Storage
|
41
|
-
autoload :Base, File.join(STORAGE_PATH,
|
42
|
-
autoload :Cycler, File.join(STORAGE_PATH,
|
43
|
-
autoload :S3, File.join(STORAGE_PATH,
|
44
|
-
autoload :CloudFiles, File.join(STORAGE_PATH,
|
45
|
-
autoload :Ninefold, File.join(STORAGE_PATH,
|
46
|
-
autoload :Dropbox, File.join(STORAGE_PATH,
|
47
|
-
autoload :FTP, File.join(STORAGE_PATH,
|
48
|
-
autoload :SFTP, File.join(STORAGE_PATH,
|
49
|
-
autoload :SCP, File.join(STORAGE_PATH,
|
50
|
-
autoload :RSync, File.join(STORAGE_PATH,
|
51
|
-
autoload :Local, File.join(STORAGE_PATH,
|
52
|
-
autoload :Qiniu, File.join(STORAGE_PATH,
|
38
|
+
autoload :Base, File.join(STORAGE_PATH, "base")
|
39
|
+
autoload :Cycler, File.join(STORAGE_PATH, "cycler")
|
40
|
+
autoload :S3, File.join(STORAGE_PATH, "s3")
|
41
|
+
autoload :CloudFiles, File.join(STORAGE_PATH, "cloud_files")
|
42
|
+
autoload :Ninefold, File.join(STORAGE_PATH, "ninefold")
|
43
|
+
autoload :Dropbox, File.join(STORAGE_PATH, "dropbox")
|
44
|
+
autoload :FTP, File.join(STORAGE_PATH, "ftp")
|
45
|
+
autoload :SFTP, File.join(STORAGE_PATH, "sftp")
|
46
|
+
autoload :SCP, File.join(STORAGE_PATH, "scp")
|
47
|
+
autoload :RSync, File.join(STORAGE_PATH, "rsync")
|
48
|
+
autoload :Local, File.join(STORAGE_PATH, "local")
|
49
|
+
autoload :Qiniu, File.join(STORAGE_PATH, "qiniu")
|
53
50
|
end
|
54
51
|
|
55
52
|
##
|
56
53
|
# Autoload Backup syncer files
|
57
54
|
module Syncer
|
58
|
-
autoload :Base, File.join(SYNCER_PATH,
|
55
|
+
autoload :Base, File.join(SYNCER_PATH, "base")
|
59
56
|
module Cloud
|
60
|
-
autoload :Base, File.join(SYNCER_PATH,
|
61
|
-
autoload :LocalFile, File.join(SYNCER_PATH,
|
62
|
-
autoload :CloudFiles, File.join(SYNCER_PATH,
|
63
|
-
autoload :S3, File.join(SYNCER_PATH,
|
57
|
+
autoload :Base, File.join(SYNCER_PATH, "cloud", "base")
|
58
|
+
autoload :LocalFile, File.join(SYNCER_PATH, "cloud", "local_file")
|
59
|
+
autoload :CloudFiles, File.join(SYNCER_PATH, "cloud", "cloud_files")
|
60
|
+
autoload :S3, File.join(SYNCER_PATH, "cloud", "s3")
|
64
61
|
end
|
65
62
|
module RSync
|
66
|
-
autoload :Base, File.join(SYNCER_PATH,
|
67
|
-
autoload :Local, File.join(SYNCER_PATH,
|
68
|
-
autoload :Push, File.join(SYNCER_PATH,
|
69
|
-
autoload :Pull, File.join(SYNCER_PATH,
|
63
|
+
autoload :Base, File.join(SYNCER_PATH, "rsync", "base")
|
64
|
+
autoload :Local, File.join(SYNCER_PATH, "rsync", "local")
|
65
|
+
autoload :Push, File.join(SYNCER_PATH, "rsync", "push")
|
66
|
+
autoload :Pull, File.join(SYNCER_PATH, "rsync", "pull")
|
70
67
|
end
|
71
68
|
end
|
72
69
|
|
73
70
|
##
|
74
71
|
# Autoload Backup database files
|
75
72
|
module Database
|
76
|
-
autoload :Base, File.join(DATABASE_PATH,
|
77
|
-
autoload :MySQL, File.join(DATABASE_PATH,
|
78
|
-
autoload :PostgreSQL, File.join(DATABASE_PATH,
|
79
|
-
autoload :MongoDB, File.join(DATABASE_PATH,
|
80
|
-
autoload :Redis, File.join(DATABASE_PATH,
|
81
|
-
autoload :Riak, File.join(DATABASE_PATH,
|
82
|
-
autoload :OpenLDAP, File.join(DATABASE_PATH,
|
83
|
-
autoload :SQLite, File.join(DATABASE_PATH,
|
73
|
+
autoload :Base, File.join(DATABASE_PATH, "base")
|
74
|
+
autoload :MySQL, File.join(DATABASE_PATH, "mysql")
|
75
|
+
autoload :PostgreSQL, File.join(DATABASE_PATH, "postgresql")
|
76
|
+
autoload :MongoDB, File.join(DATABASE_PATH, "mongodb")
|
77
|
+
autoload :Redis, File.join(DATABASE_PATH, "redis")
|
78
|
+
autoload :Riak, File.join(DATABASE_PATH, "riak")
|
79
|
+
autoload :OpenLDAP, File.join(DATABASE_PATH, "openldap")
|
80
|
+
autoload :SQLite, File.join(DATABASE_PATH, "sqlite")
|
84
81
|
end
|
85
82
|
|
86
83
|
##
|
87
84
|
# Autoload compressor files
|
88
85
|
module Compressor
|
89
|
-
autoload :Base, File.join(COMPRESSOR_PATH,
|
90
|
-
autoload :Gzip, File.join(COMPRESSOR_PATH,
|
91
|
-
autoload :Bzip2, File.join(COMPRESSOR_PATH,
|
92
|
-
autoload :Custom, File.join(COMPRESSOR_PATH,
|
86
|
+
autoload :Base, File.join(COMPRESSOR_PATH, "base")
|
87
|
+
autoload :Gzip, File.join(COMPRESSOR_PATH, "gzip")
|
88
|
+
autoload :Bzip2, File.join(COMPRESSOR_PATH, "bzip2")
|
89
|
+
autoload :Custom, File.join(COMPRESSOR_PATH, "custom")
|
93
90
|
end
|
94
91
|
|
95
92
|
##
|
96
93
|
# Autoload encryptor files
|
97
94
|
module Encryptor
|
98
|
-
autoload :Base, File.join(ENCRYPTOR_PATH,
|
99
|
-
autoload :OpenSSL, File.join(ENCRYPTOR_PATH,
|
100
|
-
autoload :GPG, File.join(ENCRYPTOR_PATH,
|
95
|
+
autoload :Base, File.join(ENCRYPTOR_PATH, "base")
|
96
|
+
autoload :OpenSSL, File.join(ENCRYPTOR_PATH, "open_ssl")
|
97
|
+
autoload :GPG, File.join(ENCRYPTOR_PATH, "gpg")
|
101
98
|
end
|
102
99
|
|
103
100
|
##
|
104
101
|
# Autoload notification files
|
105
102
|
module Notifier
|
106
|
-
autoload :Base, File.join(NOTIFIER_PATH,
|
107
|
-
autoload :Mail, File.join(NOTIFIER_PATH,
|
108
|
-
autoload :Twitter, File.join(NOTIFIER_PATH,
|
109
|
-
autoload :Campfire, File.join(NOTIFIER_PATH,
|
110
|
-
autoload :Prowl, File.join(NOTIFIER_PATH,
|
111
|
-
autoload :Hipchat, File.join(NOTIFIER_PATH,
|
112
|
-
autoload :PagerDuty, File.join(NOTIFIER_PATH,
|
113
|
-
autoload :Pushover, File.join(NOTIFIER_PATH,
|
114
|
-
autoload :Slack, File.join(NOTIFIER_PATH,
|
115
|
-
autoload :HttpPost, File.join(NOTIFIER_PATH,
|
116
|
-
autoload :Nagios, File.join(NOTIFIER_PATH,
|
117
|
-
autoload :FlowDock, File.join(NOTIFIER_PATH,
|
118
|
-
autoload :Zabbix, File.join(NOTIFIER_PATH,
|
119
|
-
autoload :DataDog, File.join(NOTIFIER_PATH,
|
120
|
-
autoload :Ses, File.join(NOTIFIER_PATH,
|
121
|
-
autoload :Command, File.join(NOTIFIER_PATH,
|
103
|
+
autoload :Base, File.join(NOTIFIER_PATH, "base")
|
104
|
+
autoload :Mail, File.join(NOTIFIER_PATH, "mail")
|
105
|
+
autoload :Twitter, File.join(NOTIFIER_PATH, "twitter")
|
106
|
+
autoload :Campfire, File.join(NOTIFIER_PATH, "campfire")
|
107
|
+
autoload :Prowl, File.join(NOTIFIER_PATH, "prowl")
|
108
|
+
autoload :Hipchat, File.join(NOTIFIER_PATH, "hipchat")
|
109
|
+
autoload :PagerDuty, File.join(NOTIFIER_PATH, "pagerduty")
|
110
|
+
autoload :Pushover, File.join(NOTIFIER_PATH, "pushover")
|
111
|
+
autoload :Slack, File.join(NOTIFIER_PATH, "slack")
|
112
|
+
autoload :HttpPost, File.join(NOTIFIER_PATH, "http_post")
|
113
|
+
autoload :Nagios, File.join(NOTIFIER_PATH, "nagios")
|
114
|
+
autoload :FlowDock, File.join(NOTIFIER_PATH, "flowdock")
|
115
|
+
autoload :Zabbix, File.join(NOTIFIER_PATH, "zabbix")
|
116
|
+
autoload :DataDog, File.join(NOTIFIER_PATH, "datadog")
|
117
|
+
autoload :Ses, File.join(NOTIFIER_PATH, "ses")
|
118
|
+
autoload :Command, File.join(NOTIFIER_PATH, "command")
|
122
119
|
end
|
123
120
|
|
124
121
|
##
|
125
122
|
# Require Backup base files
|
126
|
-
%w
|
123
|
+
%w[
|
127
124
|
errors
|
128
125
|
logger
|
129
126
|
utilities
|
@@ -139,6 +136,5 @@ module Backup
|
|
139
136
|
splitter
|
140
137
|
template
|
141
138
|
version
|
142
|
-
|
143
|
-
|
139
|
+
].each { |lib| require File.join(LIBRARY_PATH, lib) }
|
144
140
|
end
|
data/lib/backup/archive.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module Backup
|
4
2
|
class Archive
|
5
3
|
class Error < Backup::Error; end
|
@@ -55,45 +53,47 @@ module Backup
|
|
55
53
|
@model = model
|
56
54
|
@name = name.to_s
|
57
55
|
@options = {
|
58
|
-
:
|
59
|
-
:
|
60
|
-
:
|
61
|
-
:
|
62
|
-
:
|
56
|
+
sudo: false,
|
57
|
+
root: false,
|
58
|
+
paths: [],
|
59
|
+
excludes: [],
|
60
|
+
tar_options: ""
|
63
61
|
}
|
64
62
|
DSL.new(@options).instance_eval(&block)
|
65
63
|
end
|
66
64
|
|
67
65
|
def perform!
|
68
|
-
Logger.info "Creating Archive '#{
|
66
|
+
Logger.info "Creating Archive '#{name}'..."
|
69
67
|
|
70
|
-
path = File.join(Config.tmp_path, @model.trigger,
|
68
|
+
path = File.join(Config.tmp_path, @model.trigger, "archives")
|
71
69
|
FileUtils.mkdir_p(path)
|
72
70
|
|
73
71
|
pipeline = Pipeline.new
|
74
72
|
with_files_from(paths_to_package) do |files_from|
|
75
73
|
pipeline.add(
|
76
|
-
"#{
|
77
|
-
|
74
|
+
"#{tar_command} #{tar_options} -cPf -#{tar_root} " \
|
75
|
+
"#{paths_to_exclude} #{files_from}",
|
78
76
|
tar_success_codes
|
79
77
|
)
|
80
78
|
|
81
|
-
extension =
|
82
|
-
@model.compressor
|
83
|
-
|
84
|
-
|
85
|
-
|
79
|
+
extension = "tar"
|
80
|
+
if @model.compressor
|
81
|
+
@model.compressor.compress_with do |command, ext|
|
82
|
+
pipeline << command
|
83
|
+
extension << ext
|
84
|
+
end
|
85
|
+
end
|
86
86
|
|
87
|
-
pipeline << "#{
|
88
|
-
|
87
|
+
pipeline << "#{utility(:cat)} > " \
|
88
|
+
"'#{File.join(path, "#{name}.#{extension}")}'"
|
89
89
|
pipeline.run
|
90
90
|
end
|
91
91
|
|
92
92
|
if pipeline.success?
|
93
|
-
Logger.info "Archive '#{
|
93
|
+
Logger.info "Archive '#{name}' Complete!"
|
94
94
|
else
|
95
|
-
raise Error, "Failed to Create Archive '#{
|
96
|
-
|
95
|
+
raise Error, "Failed to Create Archive '#{name}'\n" +
|
96
|
+
pipeline.error_messages
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -101,30 +101,30 @@ module Backup
|
|
101
101
|
|
102
102
|
def tar_command
|
103
103
|
tar = utility(:tar)
|
104
|
-
options[:sudo] ? "#{
|
104
|
+
options[:sudo] ? "#{utility(:sudo)} -n #{tar}" : tar
|
105
105
|
end
|
106
106
|
|
107
107
|
def tar_root
|
108
|
-
options[:root] ? " -C '#{
|
108
|
+
options[:root] ? " -C '#{File.expand_path(options[:root])}'" : ""
|
109
109
|
end
|
110
110
|
|
111
111
|
def paths_to_package
|
112
|
-
options[:paths].map {|path| prepare_path(path) }
|
112
|
+
options[:paths].map { |path| prepare_path(path) }
|
113
113
|
end
|
114
114
|
|
115
115
|
def with_files_from(paths)
|
116
|
-
tmpfile = Tempfile.new(
|
117
|
-
paths.each {|path| tmpfile.puts path }
|
116
|
+
tmpfile = Tempfile.new("backup-archive-paths")
|
117
|
+
paths.each { |path| tmpfile.puts path }
|
118
118
|
tmpfile.close
|
119
|
-
yield "-T '#{
|
119
|
+
yield "-T '#{tmpfile.path}'"
|
120
120
|
ensure
|
121
121
|
tmpfile.delete
|
122
122
|
end
|
123
123
|
|
124
124
|
def paths_to_exclude
|
125
|
-
options[:excludes].map
|
126
|
-
"--exclude='#{
|
127
|
-
|
125
|
+
options[:excludes].map do |path|
|
126
|
+
"--exclude='#{prepare_path(path)}'"
|
127
|
+
end.join(" ")
|
128
128
|
end
|
129
129
|
|
130
130
|
def prepare_path(path)
|
@@ -133,7 +133,7 @@ module Backup
|
|
133
133
|
|
134
134
|
def tar_options
|
135
135
|
args = options[:tar_options]
|
136
|
-
gnu_tar? ? "--ignore-failed-read #{
|
136
|
+
gnu_tar? ? "--ignore-failed-read #{args}".strip : args
|
137
137
|
end
|
138
138
|
|
139
139
|
def tar_success_codes
|
@@ -165,6 +165,5 @@ module Backup
|
|
165
165
|
@options[:tar_options] = opts
|
166
166
|
end
|
167
167
|
end
|
168
|
-
|
169
168
|
end
|
170
169
|
end
|
data/lib/backup/binder.rb
CHANGED
@@ -1,14 +1,11 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module Backup
|
4
2
|
class Binder
|
5
|
-
|
6
3
|
##
|
7
4
|
# Creates a new Backup::Notifier::Binder instance. Loops through the provided
|
8
5
|
# Hash to set instance variables
|
9
6
|
def initialize(key_and_values)
|
10
7
|
key_and_values.each do |key, value|
|
11
|
-
instance_variable_set("@#{
|
8
|
+
instance_variable_set("@#{key}", value)
|
12
9
|
end
|
13
10
|
end
|
14
11
|
|
@@ -17,6 +14,5 @@ module Backup
|
|
17
14
|
def get_binding
|
18
15
|
binding
|
19
16
|
end
|
20
|
-
|
21
17
|
end
|
22
|
-
end
|
18
|
+
end
|
data/lib/backup/cleaner.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module Backup
|
4
2
|
module Cleaner
|
5
3
|
class Error < Backup::Error; end
|
6
4
|
|
7
5
|
class << self
|
8
|
-
|
9
6
|
##
|
10
7
|
# Logs warnings if any temporary files still exist
|
11
8
|
# from the last time this model/trigger was run,
|
@@ -17,7 +14,7 @@ module Backup
|
|
17
14
|
if File.exist?(packaging_folder)
|
18
15
|
messages << <<-EOS
|
19
16
|
The temporary packaging folder still exists!
|
20
|
-
'#{
|
17
|
+
'#{packaging_folder}'
|
21
18
|
It will now be removed.
|
22
19
|
EOS
|
23
20
|
FileUtils.rm_rf(packaging_folder)
|
@@ -27,23 +24,23 @@ module Backup
|
|
27
24
|
unless package_files.empty?
|
28
25
|
# the chances of the packaging folder AND
|
29
26
|
# the package files existing are practically nil
|
30
|
-
messages << (
|
27
|
+
messages << ("-" * 74) unless messages.empty?
|
31
28
|
|
32
29
|
messages << <<-EOS
|
33
|
-
The temporary backup folder '#{
|
30
|
+
The temporary backup folder '#{Config.tmp_path}'
|
34
31
|
appears to contain the package files from the previous backup!
|
35
|
-
#{
|
32
|
+
#{package_files.join("\n")}
|
36
33
|
These files will now be removed.
|
37
34
|
EOS
|
38
|
-
package_files.each {|file| FileUtils.rm_f(file) }
|
35
|
+
package_files.each { |file| FileUtils.rm_f(file) }
|
39
36
|
end
|
40
37
|
|
41
38
|
unless messages.empty?
|
42
39
|
Logger.warn Error.new(<<-EOS)
|
43
40
|
Cleanup Warning
|
44
|
-
#{
|
41
|
+
#{messages.join("\n")}
|
45
42
|
Please check the log for messages and/or your notifications
|
46
|
-
concerning this backup: '#{
|
43
|
+
concerning this backup: '#{model.label} (#{model.trigger})'
|
47
44
|
The temporary files which had to be removed should not have existed.
|
48
45
|
EOS
|
49
46
|
end
|
@@ -76,7 +73,7 @@ module Backup
|
|
76
73
|
if File.exist?(packaging_folder)
|
77
74
|
messages << <<-EOS
|
78
75
|
The temporary packaging folder still exists!
|
79
|
-
'#{
|
76
|
+
'#{packaging_folder}'
|
80
77
|
This folder may contain completed Archives and/or Database backups.
|
81
78
|
EOS
|
82
79
|
end
|
@@ -85,21 +82,21 @@ module Backup
|
|
85
82
|
unless package_files.empty?
|
86
83
|
# the chances of the packaging folder AND
|
87
84
|
# the package files existing are practically nil
|
88
|
-
messages << (
|
85
|
+
messages << ("-" * 74) unless messages.empty?
|
89
86
|
|
90
87
|
messages << <<-EOS
|
91
|
-
The temporary backup folder '#{
|
88
|
+
The temporary backup folder '#{Config.tmp_path}'
|
92
89
|
appears to contain the backup files which were to be stored:
|
93
|
-
#{
|
90
|
+
#{package_files.join("\n")}
|
94
91
|
EOS
|
95
92
|
end
|
96
93
|
|
97
94
|
unless messages.empty?
|
98
95
|
Logger.warn Error.new(<<-EOS)
|
99
96
|
Cleanup Warning
|
100
|
-
#{
|
97
|
+
#{messages.join("\n")}
|
101
98
|
Make sure you check these files before the next scheduled backup for
|
102
|
-
'#{
|
99
|
+
'#{model.label} (#{model.trigger})'
|
103
100
|
These files will be removed at that time!
|
104
101
|
EOS
|
105
102
|
end
|
@@ -108,9 +105,8 @@ module Backup
|
|
108
105
|
private
|
109
106
|
|
110
107
|
def package_files_for(trigger)
|
111
|
-
Dir[File.join(Config.tmp_path,"#{
|
108
|
+
Dir[File.join(Config.tmp_path, "#{trigger}.tar{,[.-]*}")]
|
112
109
|
end
|
113
|
-
|
114
110
|
end
|
115
111
|
end
|
116
112
|
end
|