backup 3.11.0 → 4.0.0rc1
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 +4 -4
- data/README.md +4 -4
- data/lib/backup.rb +1 -4
- data/lib/backup/archive.rb +1 -1
- data/lib/backup/cli.rb +51 -107
- data/lib/backup/compressor/base.rb +2 -2
- data/lib/backup/compressor/bzip2.rb +0 -11
- data/lib/backup/compressor/gzip.rb +0 -11
- data/lib/backup/config.rb +45 -123
- data/lib/backup/config/dsl.rb +102 -0
- data/lib/backup/{configuration → config}/helpers.rb +23 -14
- data/lib/backup/database/base.rb +2 -2
- data/lib/backup/database/mongodb.rb +0 -18
- data/lib/backup/database/mysql.rb +6 -75
- data/lib/backup/database/postgresql.rb +0 -12
- data/lib/backup/database/redis.rb +85 -47
- data/lib/backup/database/riak.rb +0 -19
- data/lib/backup/encryptor/base.rb +2 -2
- data/lib/backup/encryptor/gpg.rb +1 -12
- data/lib/backup/logger/fog_adapter.rb +1 -2
- data/lib/backup/model.rb +3 -24
- data/lib/backup/notifier/base.rb +2 -17
- data/lib/backup/notifier/http_post.rb +1 -1
- data/lib/backup/notifier/mail.rb +5 -47
- data/lib/backup/notifier/prowl.rb +1 -1
- data/lib/backup/notifier/pushover.rb +1 -1
- data/lib/backup/packager.rb +1 -1
- data/lib/backup/pipeline.rb +1 -1
- data/lib/backup/splitter.rb +1 -1
- data/lib/backup/storage/base.rb +2 -14
- data/lib/backup/storage/cloud_files.rb +1 -0
- data/lib/backup/storage/cycler.rb +33 -88
- data/lib/backup/storage/dropbox.rb +19 -12
- data/lib/backup/storage/ftp.rb +1 -0
- data/lib/backup/storage/local.rb +1 -0
- data/lib/backup/storage/ninefold.rb +1 -0
- data/lib/backup/storage/rsync.rb +7 -41
- data/lib/backup/storage/s3.rb +1 -0
- data/lib/backup/storage/scp.rb +1 -0
- data/lib/backup/storage/sftp.rb +1 -0
- data/lib/backup/syncer/base.rb +2 -2
- data/lib/backup/syncer/cloud/cloud_files.rb +0 -16
- data/lib/backup/syncer/cloud/s3.rb +0 -16
- data/lib/backup/syncer/rsync/local.rb +0 -5
- data/lib/backup/syncer/rsync/pull.rb +0 -21
- data/lib/backup/syncer/rsync/push.rb +0 -21
- data/lib/backup/utilities.rb +2 -22
- data/lib/backup/version.rb +1 -1
- data/templates/cli/archive +0 -3
- data/templates/cli/compressor/custom +0 -4
- data/templates/cli/config +39 -17
- data/templates/cli/{database → databases}/mongodb +0 -0
- data/templates/cli/{database → databases}/mysql +0 -0
- data/templates/cli/{database → databases}/postgresql +0 -0
- data/templates/cli/databases/redis +16 -0
- data/templates/cli/{database → databases}/riak +0 -0
- data/templates/cli/{model.erb → model} +8 -5
- data/templates/cli/{notifier → notifiers}/campfire +0 -0
- data/templates/cli/{notifier → notifiers}/hipchat +0 -0
- data/templates/cli/{notifier → notifiers}/http_post +0 -3
- data/templates/cli/{notifier → notifiers}/mail +1 -2
- data/templates/cli/notifiers/nagios +13 -0
- data/templates/cli/{notifier → notifiers}/prowl +0 -0
- data/templates/cli/{notifier → notifiers}/pushover +0 -0
- data/templates/cli/{notifier → notifiers}/twitter +0 -0
- data/templates/cli/{storage → storages}/cloud_files +0 -2
- data/templates/cli/storages/dropbox +19 -0
- data/templates/cli/{storage → storages}/ftp +0 -0
- data/templates/cli/{storage → storages}/local +0 -0
- data/templates/cli/{storage → storages}/ninefold +0 -0
- data/templates/cli/{storage → storages}/rsync +0 -2
- data/templates/cli/{storage → storages}/s3 +0 -2
- data/templates/cli/{storage → storages}/scp +0 -0
- data/templates/cli/{storage → storages}/sftp +0 -0
- data/templates/cli/{syncer → syncers}/cloud_files +0 -2
- data/templates/cli/{syncer → syncers}/rsync_local +0 -0
- data/templates/cli/{syncer → syncers}/rsync_pull +0 -2
- data/templates/cli/{syncer → syncers}/rsync_push +0 -2
- data/templates/cli/{syncer → syncers}/s3 +0 -2
- data/templates/general/links +1 -1
- metadata +241 -69
- data/lib/backup/compressor/lzma.rb +0 -52
- data/lib/backup/compressor/pbzip2.rb +0 -59
- data/lib/backup/configuration.rb +0 -33
- data/lib/backup/configuration/store.rb +0 -24
- data/templates/cli/compressor/lzma +0 -10
- data/templates/cli/compressor/pbzip2 +0 -10
- data/templates/cli/database/redis +0 -18
- data/templates/cli/notifier/nagios +0 -13
- data/templates/cli/storage/dropbox +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0de2d8ea6ab6e4fe90e28b7044b2fcf35d615ca
|
4
|
+
data.tar.gz: 0f484316e417073db7987f67a46b283e4cd90ab9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76b53d8880bfdfd5d292f1ef42ee7c55abd25d548332c9b22e2006b7e1e56c1982986ad4caab35130949d67c73435351199a46c8fbfec7ffebea651df5fdfff2
|
7
|
+
data.tar.gz: 8ae5bc1f0bd537aad0eef034da5c0ebe65fd87a7ff8cc2e7963a07eb93c5b7715823d23d96338892ffe4895d6d2376c326487716bb96a2541da78ce59ae87603
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Backup
|
1
|
+
Backup v4.x
|
2
2
|
===========
|
3
3
|
|
4
4
|
Backup is a system utility for Linux and Mac OS X, distributed as a RubyGem, that allows you to easily perform backup
|
@@ -12,8 +12,8 @@ was built with modularity, extensibility and simplicity in mind.
|
|
12
12
|
**Copyright (c) 2009-2014 [Michael van Rooijen][] ( [@meskyanichi][] )**
|
13
13
|
Released under the **MIT** [License](LICENSE.md).
|
14
14
|
|
15
|
-
[Installation]: http://meskyanichi.github.io/backup/
|
16
|
-
[Release Notes]: http://meskyanichi.github.io/backup/
|
17
|
-
[Documentation]: http://meskyanichi.github.io/backup/
|
15
|
+
[Installation]: http://meskyanichi.github.io/backup/v4/installation
|
16
|
+
[Release Notes]: http://meskyanichi.github.io/backup/v4/release-notes
|
17
|
+
[Documentation]: http://meskyanichi.github.io/backup/v4
|
18
18
|
[Michael van Rooijen]: http://michaelvanrooijen.com
|
19
19
|
[@meskyanichi]: http://twitter.com/#!/meskyanichi
|
data/lib/backup.rb
CHANGED
@@ -85,8 +85,6 @@ module Backup
|
|
85
85
|
autoload :Gzip, File.join(COMPRESSOR_PATH, 'gzip')
|
86
86
|
autoload :Bzip2, File.join(COMPRESSOR_PATH, 'bzip2')
|
87
87
|
autoload :Custom, File.join(COMPRESSOR_PATH, 'custom')
|
88
|
-
autoload :Pbzip2, File.join(COMPRESSOR_PATH, 'pbzip2')
|
89
|
-
autoload :Lzma, File.join(COMPRESSOR_PATH, 'lzma')
|
90
88
|
end
|
91
89
|
|
92
90
|
##
|
@@ -120,10 +118,9 @@ module Backup
|
|
120
118
|
archive
|
121
119
|
binder
|
122
120
|
cleaner
|
121
|
+
model
|
123
122
|
config
|
124
123
|
cli
|
125
|
-
configuration
|
126
|
-
model
|
127
124
|
package
|
128
125
|
packager
|
129
126
|
pipeline
|
data/lib/backup/archive.rb
CHANGED
data/lib/backup/cli.rb
CHANGED
@@ -11,8 +11,8 @@ module Backup
|
|
11
11
|
# [Perform]
|
12
12
|
#
|
13
13
|
# The only required option is the --trigger [-t].
|
14
|
-
# If --config-file, --data-path, --
|
15
|
-
# they will fallback to defaults
|
14
|
+
# If --config-file, --data-path, --tmp-path or --log-path
|
15
|
+
# aren't specified they will fallback to defaults.
|
16
16
|
# If --root-path is given, it will be used as the base path for our defaults,
|
17
17
|
# as well as the base path for any option specified as a relative path.
|
18
18
|
# Any option given as an absolute path will be used "as-is".
|
@@ -41,8 +41,8 @@ module Backup
|
|
41
41
|
|
42
42
|
To use the current directory, use: `--root-path .`
|
43
43
|
|
44
|
-
Relative paths given for --config-file, --data-path, --
|
45
|
-
|
44
|
+
Relative paths given for --config-file, --data-path, --tmp-path,
|
45
|
+
and --log-path will be relative to --root-path.
|
46
46
|
|
47
47
|
Console log output may be forced using --no-quiet.
|
48
48
|
|
@@ -80,11 +80,6 @@ module Backup
|
|
80
80
|
:default => '',
|
81
81
|
:desc => "Path to store Backup's log file."
|
82
82
|
|
83
|
-
method_option :cache_path,
|
84
|
-
:type => :string,
|
85
|
-
:default => '',
|
86
|
-
:desc => "Path to store Dropbox's cached authorization."
|
87
|
-
|
88
83
|
method_option :tmp_path,
|
89
84
|
:type => :string,
|
90
85
|
:default => '',
|
@@ -130,13 +125,8 @@ module Backup
|
|
130
125
|
syslog.enabled = opts[:syslog]
|
131
126
|
end
|
132
127
|
|
133
|
-
#
|
134
|
-
|
135
|
-
Config.update(options)
|
136
|
-
|
137
|
-
# Load the user's +config.rb+ file (and all their Models).
|
138
|
-
# May update Logger (and Config) options.
|
139
|
-
Config.load_config!
|
128
|
+
# Load the user's +config.rb+ file and all their Models
|
129
|
+
Config.load(options)
|
140
130
|
|
141
131
|
# Identify all Models to be run for the given +triggers+.
|
142
132
|
triggers = options[:trigger].split(',').map(&:strip)
|
@@ -226,8 +216,7 @@ module Backup
|
|
226
216
|
|
227
217
|
def check
|
228
218
|
begin
|
229
|
-
Config.
|
230
|
-
Config.load_config!
|
219
|
+
Config.load(options)
|
231
220
|
rescue Exception => err
|
232
221
|
Logger.error Error.wrap(err)
|
233
222
|
end
|
@@ -255,13 +244,15 @@ module Backup
|
|
255
244
|
long_desc <<-EOS.gsub(/^ +/, '')
|
256
245
|
Generates a Backup model file.
|
257
246
|
|
258
|
-
|
247
|
+
If your configuration file is not in the default location at
|
248
|
+
#{ Config.config_file }
|
249
|
+
you must specify it's location using '--config-file'.
|
250
|
+
If no configuration file exists at this location, one will be created.
|
259
251
|
|
260
252
|
The model file will be created as '<config_path>/models/<trigger>.rb'
|
261
|
-
|
262
|
-
The default location would be:
|
263
|
-
|
264
|
-
#{ Config.root_path }/models/
|
253
|
+
Your model file will be created in a 'models/' sub-directory
|
254
|
+
where your config file is located. The default location would be:
|
255
|
+
#{ Config.root_path }/models/<trigger>.rb
|
265
256
|
EOS
|
266
257
|
|
267
258
|
method_option :trigger,
|
@@ -270,120 +261,73 @@ module Backup
|
|
270
261
|
:type => :string,
|
271
262
|
:desc => 'Trigger name for the Backup model'
|
272
263
|
|
273
|
-
method_option :
|
264
|
+
method_option :config_file,
|
274
265
|
:type => :string,
|
275
|
-
:desc => 'Path to your Backup configuration
|
266
|
+
:desc => 'Path to your Backup configuration file'
|
276
267
|
|
277
268
|
# options with their available values
|
278
|
-
%w{ databases storages syncers
|
279
|
-
|
280
|
-
|
281
|
-
method_option name, :type => :string, :desc =>
|
282
|
-
"(#{Dir[path + '/*'].sort.map {|p| File.basename(p) }.join(', ')})"
|
269
|
+
%w{ databases storages syncers encryptor compressor notifiers }.each do |name|
|
270
|
+
path = File.join(Backup::TEMPLATE_PATH, 'cli', name)
|
271
|
+
opts = Dir[path + '/*'].sort.map {|p| File.basename(p) }.join(', ')
|
272
|
+
method_option name, :type => :string, :desc => "(#{ opts })"
|
283
273
|
end
|
284
274
|
|
285
275
|
method_option :archives,
|
286
276
|
:type => :boolean,
|
287
277
|
:desc => 'Model will include tar archives.'
|
278
|
+
|
288
279
|
method_option :splitter,
|
289
280
|
:type => :boolean,
|
290
|
-
:default =>
|
291
|
-
:desc =>
|
292
|
-
|
293
|
-
define_method "generate:model" do
|
294
|
-
opts = options.merge(
|
295
|
-
:trigger => options[:trigger].gsub(/\W/, '_'),
|
296
|
-
:config_path => options[:config_path] ?
|
297
|
-
File.expand_path(options[:config_path]) : nil
|
298
|
-
)
|
299
|
-
config_path = opts[:config_path] || Config.root_path
|
300
|
-
models_path = File.join(config_path, "models")
|
301
|
-
config = File.join(config_path, "config.rb")
|
302
|
-
model = File.join(models_path, "#{opts[:trigger]}.rb")
|
303
|
-
|
304
|
-
if File.file?(config_path)
|
305
|
-
abort('--config-path should be a directory, not a file.')
|
306
|
-
end
|
281
|
+
:default => false,
|
282
|
+
:desc => 'Add Splitter to the model'
|
307
283
|
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
284
|
+
define_method 'generate:model' do
|
285
|
+
opts = options.merge(:trigger => options[:trigger].gsub(/\W/, '_'))
|
286
|
+
config_file = opts[:config_file] ?
|
287
|
+
File.expand_path(opts.delete(:config_file)) : Config.config_file
|
288
|
+
models_path = File.join(File.dirname(config_file), 'models')
|
289
|
+
model_file = File.join(models_path, "#{ opts[:trigger] }.rb")
|
290
|
+
|
291
|
+
unless File.exist?(config_file)
|
292
|
+
invoke 'generate:config', [], :config_file => config_file
|
316
293
|
end
|
317
294
|
|
318
|
-
|
319
|
-
|
320
|
-
|
295
|
+
FileUtils.mkdir_p(models_path)
|
296
|
+
if Helpers.overwrite?(model_file)
|
297
|
+
File.open(model_file, 'w') do |file|
|
298
|
+
file.write(Backup::Template.new({:options => opts}).result('cli/model'))
|
321
299
|
end
|
322
|
-
puts "Generated
|
300
|
+
puts "Generated model file: '#{ model_file }'."
|
323
301
|
end
|
324
302
|
end
|
325
303
|
|
326
304
|
##
|
327
305
|
# [Generate:Config]
|
328
306
|
# Generates the main configuration file
|
329
|
-
desc 'generate:config', 'Generates the main Backup
|
307
|
+
desc 'generate:config', 'Generates the main Backup configuration file'
|
330
308
|
|
331
309
|
long_desc <<-EOS.gsub(/^ +/, '')
|
332
|
-
Path to
|
310
|
+
Path to the Backup configuration file to generate.
|
333
311
|
|
334
|
-
|
312
|
+
Defaults to:
|
335
313
|
|
336
|
-
#{ Config.
|
314
|
+
#{ Config.config_file }
|
337
315
|
EOS
|
338
316
|
|
339
|
-
method_option :
|
317
|
+
method_option :config_file,
|
340
318
|
:type => :string,
|
341
|
-
:desc => 'Path to
|
319
|
+
:desc => 'Path to the Backup configuration file to generate.'
|
342
320
|
|
343
321
|
define_method 'generate:config' do
|
344
|
-
|
345
|
-
File.expand_path(options[:
|
346
|
-
config = File.join(config_path, "config.rb")
|
347
|
-
|
348
|
-
FileUtils.mkdir_p(config_path)
|
349
|
-
if Helpers.overwrite?(config)
|
350
|
-
File.open(config, "w") do |file|
|
351
|
-
file.write(Backup::Template.new.result("cli/config"))
|
352
|
-
end
|
353
|
-
puts "Generated configuration file: '#{ config }'."
|
354
|
-
end
|
355
|
-
end
|
322
|
+
config_file = options[:config_file] ?
|
323
|
+
File.expand_path(options[:config_file]) : Config.config_file
|
356
324
|
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
method_option :out, :type => :string, :required => true
|
364
|
-
method_option :base64, :type => :boolean, :default => false
|
365
|
-
method_option :password_file, :type => :string, :default => ''
|
366
|
-
method_option :salt, :type => :boolean, :default => false
|
367
|
-
|
368
|
-
def decrypt
|
369
|
-
case options[:encryptor].downcase
|
370
|
-
when 'openssl'
|
371
|
-
base64 = options[:base64] ? '-base64' : ''
|
372
|
-
password = options[:password_file].empty? ? '' :
|
373
|
-
"-pass file:#{ options[:password_file] }"
|
374
|
-
salt = options[:salt] ? '-salt' : ''
|
375
|
-
|
376
|
-
Helpers.exec!(
|
377
|
-
"openssl aes-256-cbc -d #{ base64 } #{ password } #{ salt } " +
|
378
|
-
"-in '#{ options[:in] }' -out '#{ options[:out] }'"
|
379
|
-
)
|
380
|
-
when 'gpg'
|
381
|
-
Helpers.exec!(
|
382
|
-
"gpg -o '#{ options[:out] }' -d '#{ options[:in] }'"
|
383
|
-
)
|
384
|
-
else
|
385
|
-
puts "Unknown encryptor: #{ options[:encryptor] }"
|
386
|
-
puts "Use either 'openssl' or 'gpg'."
|
325
|
+
FileUtils.mkdir_p(File.dirname(config_file))
|
326
|
+
if Helpers.overwrite?(config_file)
|
327
|
+
File.open(config_file, 'w') do |file|
|
328
|
+
file.write(Backup::Template.new.result('cli/config'))
|
329
|
+
end
|
330
|
+
puts "Generated configuration file: '#{ config_file }'."
|
387
331
|
end
|
388
332
|
end
|
389
333
|
|
@@ -15,17 +15,6 @@ module Backup
|
|
15
15
|
# The default `level` is 9.
|
16
16
|
attr_accessor :level
|
17
17
|
|
18
|
-
attr_deprecate :fast, :version => '3.0.24',
|
19
|
-
:message => 'Use Bzip2#level instead.',
|
20
|
-
:action => lambda {|klass, val|
|
21
|
-
klass.level = 1 if val
|
22
|
-
}
|
23
|
-
attr_deprecate :best, :version => '3.0.24',
|
24
|
-
:message => 'Use Bzip2#level instead.',
|
25
|
-
:action => lambda {|klass, val|
|
26
|
-
klass.level = 9 if val
|
27
|
-
}
|
28
|
-
|
29
18
|
##
|
30
19
|
# Creates a new instance of Backup::Compressor::Bzip2
|
31
20
|
def initialize(&block)
|
@@ -17,17 +17,6 @@ module Backup
|
|
17
17
|
# The default `level` is 6.
|
18
18
|
attr_accessor :level
|
19
19
|
|
20
|
-
attr_deprecate :fast, :version => '3.0.24',
|
21
|
-
:message => 'Use Gzip#level instead.',
|
22
|
-
:action => lambda {|klass, val|
|
23
|
-
klass.level = 1 if val
|
24
|
-
}
|
25
|
-
attr_deprecate :best, :version => '3.0.24',
|
26
|
-
:message => 'Use Gzip#level instead.',
|
27
|
-
:action => lambda {|klass, val|
|
28
|
-
klass.level = 9 if val
|
29
|
-
}
|
30
|
-
|
31
20
|
##
|
32
21
|
# Use the `--rsyncable` option with `gzip`.
|
33
22
|
#
|
data/lib/backup/config.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
require 'backup/config/dsl'
|
3
|
+
require 'backup/config/helpers'
|
2
4
|
|
3
5
|
module Backup
|
4
6
|
module Config
|
@@ -6,52 +8,45 @@ module Backup
|
|
6
8
|
|
7
9
|
DEFAULTS = {
|
8
10
|
:config_file => 'config.rb',
|
9
|
-
:data_path => 'data',
|
10
|
-
:cache_path => '.cache',
|
11
|
+
:data_path => '.data',
|
11
12
|
:tmp_path => '.tmp'
|
12
13
|
}
|
13
14
|
|
14
15
|
class << self
|
15
|
-
include
|
16
|
+
include Utilities::Helpers
|
16
17
|
|
17
|
-
attr_reader :user, :root_path, :config_file,
|
18
|
-
:data_path, :cache_path, :tmp_path
|
18
|
+
attr_reader :user, :root_path, :config_file, :data_path, :tmp_path
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
root_path = options[:root_path].to_s.strip
|
24
|
-
new_root = root_path.empty? ? false : set_root_path(root_path)
|
20
|
+
# Loads the user's +config.rb+ and all model files.
|
21
|
+
def load(options = {})
|
22
|
+
update(options) # from the command line
|
25
23
|
|
26
|
-
|
27
|
-
|
24
|
+
unless File.exist?(config_file)
|
25
|
+
raise Error, "Could not find configuration file: '#{config_file}'."
|
28
26
|
end
|
29
|
-
end
|
30
27
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
28
|
+
config = File.read(config_file)
|
29
|
+
version = Backup::VERSION.split('.').first
|
30
|
+
unless config =~ /^# Backup v#{ version }\.x Configuration$/
|
31
|
+
raise Error, <<-EOS
|
32
|
+
Invalid Configuration File
|
33
|
+
The configuration file at '#{ config_file }'
|
34
|
+
does not appear to be a Backup v#{ version }.x configuration file.
|
35
|
+
If you have upgraded to v#{ version }.x from a previous version,
|
36
|
+
you need to upgrade your configuration file.
|
37
|
+
Please see the instructions for upgrading in the Backup documentation.
|
38
|
+
EOS
|
36
39
|
end
|
37
40
|
|
38
|
-
|
39
|
-
|
41
|
+
dsl = DSL.new
|
42
|
+
dsl.instance_eval(config, config_file)
|
40
43
|
|
41
|
-
|
42
|
-
|
43
|
-
unless name.is_a?(String) && name =~ /^[A-Z]/
|
44
|
-
raise Error, "Preconfigured model names must be given as a string " +
|
45
|
-
" and start with a capital letter."
|
46
|
-
end
|
44
|
+
update(dsl._config_options) # from config.rb
|
45
|
+
update(options) # command line takes precedence
|
47
46
|
|
48
|
-
|
49
|
-
|
50
|
-
"and can not be used for a preconfigured model."
|
47
|
+
Dir[File.join(File.dirname(config_file), 'models', '*.rb')].each do |model|
|
48
|
+
dsl.instance_eval(File.read(model), model)
|
51
49
|
end
|
52
|
-
|
53
|
-
Backup.const_set(name, Class.new(Model))
|
54
|
-
Backup.const_get(name).preconfigure(&block)
|
55
50
|
end
|
56
51
|
|
57
52
|
def hostname
|
@@ -60,7 +55,17 @@ module Backup
|
|
60
55
|
|
61
56
|
private
|
62
57
|
|
63
|
-
|
58
|
+
# If :root_path is set in the options, all paths will be updated.
|
59
|
+
# Otherwise, only the paths given will be updated.
|
60
|
+
def update(options = {})
|
61
|
+
root_path = options[:root_path].to_s.strip
|
62
|
+
new_root = root_path.empty? ? false : set_root_path(root_path)
|
63
|
+
|
64
|
+
DEFAULTS.each do |name, ending|
|
65
|
+
set_path_variable(name, options[name], ending, new_root)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
64
69
|
# Sets the @root_path to the given +path+ and returns it.
|
65
70
|
# Raises an error if the given +path+ does not exist.
|
66
71
|
def set_root_path(path)
|
@@ -85,9 +90,15 @@ module Backup
|
|
85
90
|
# an absolute path, so we can match it against File.expand_path()
|
86
91
|
path = path.to_s.sub(/\/\s*$/, '').lstrip
|
87
92
|
new_path = false
|
93
|
+
# If no path is given, the variable will not be set/updated
|
94
|
+
# unless a root_path was given. In which case the value will
|
95
|
+
# be updated with our default ending.
|
88
96
|
if path.empty?
|
89
97
|
new_path = File.join(root_path, ending) if root_path
|
90
98
|
else
|
99
|
+
# When a path is given, the variable will be set/updated.
|
100
|
+
# If the path is relative, it will be joined with root_path (if given),
|
101
|
+
# or expanded relative to PWD.
|
91
102
|
new_path = File.expand_path(path)
|
92
103
|
unless path == new_path
|
93
104
|
new_path = File.join(root_path, path) if root_path
|
@@ -96,102 +107,13 @@ module Backup
|
|
96
107
|
instance_variable_set(:"@#{name}", new_path) if new_path
|
97
108
|
end
|
98
109
|
|
99
|
-
##
|
100
|
-
# Set default values for accessors
|
101
110
|
def reset!
|
102
111
|
@user = ENV['USER'] || Etc.getpwuid.name
|
103
112
|
@root_path = File.join(File.expand_path(ENV['HOME'] || ''), 'Backup')
|
104
113
|
update(:root_path => @root_path)
|
105
114
|
end
|
106
|
-
|
107
|
-
##
|
108
|
-
# List the available database, storage, syncer, compressor, encryptor
|
109
|
-
# and notifier constants. These are used to dynamically define these
|
110
|
-
# constant names inside Backup::Config to provide a nicer configuration
|
111
|
-
# file DSL syntax to the users. Adding existing constants to the arrays
|
112
|
-
# below will enable the user to use a constant instead of a string.
|
113
|
-
# Nested namespaces are represented using Hashs. Deep nesting supported.
|
114
|
-
#
|
115
|
-
# Example, instead of:
|
116
|
-
# database "MySQL" do |mysql|
|
117
|
-
# sync_with "RSync::Local" do |rsync|
|
118
|
-
#
|
119
|
-
# You can do:
|
120
|
-
# database MySQL do |mysql|
|
121
|
-
# sync_with RSync::Local do |rsync|
|
122
|
-
#
|
123
|
-
def add_dsl_constants!
|
124
|
-
create_modules(
|
125
|
-
self,
|
126
|
-
[ # Databases
|
127
|
-
['MySQL', 'PostgreSQL', 'MongoDB', 'Redis', 'Riak'],
|
128
|
-
# Storages
|
129
|
-
['S3', 'CloudFiles', 'Ninefold', 'Dropbox', 'FTP',
|
130
|
-
'SFTP', 'SCP', 'RSync', 'Local'],
|
131
|
-
# Compressors
|
132
|
-
['Gzip', 'Bzip2', 'Custom', 'Pbzip2', 'Lzma'],
|
133
|
-
# Encryptors
|
134
|
-
['OpenSSL', 'GPG'],
|
135
|
-
# Syncers
|
136
|
-
[
|
137
|
-
{ 'Cloud' => ['CloudFiles', 'S3'] },
|
138
|
-
{ 'RSync' => ['Push', 'Pull', 'Local'] }
|
139
|
-
],
|
140
|
-
# Notifiers
|
141
|
-
['Mail', 'Twitter', 'Campfire', 'Prowl',
|
142
|
-
'Hipchat', 'Pushover', 'HttpPost', 'Nagios']
|
143
|
-
]
|
144
|
-
)
|
145
|
-
end
|
146
|
-
|
147
|
-
def create_modules(scope, names)
|
148
|
-
names.flatten.each do |name|
|
149
|
-
if name.is_a?(Hash)
|
150
|
-
name.each do |key, val|
|
151
|
-
create_modules(get_or_create_empty_module(scope, key), [val])
|
152
|
-
end
|
153
|
-
else
|
154
|
-
get_or_create_empty_module(scope, name)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
def get_or_create_empty_module(scope, const)
|
160
|
-
if scope.const_defined?(const)
|
161
|
-
scope.const_get(const)
|
162
|
-
else
|
163
|
-
scope.const_set(const, Module.new)
|
164
|
-
end
|
165
|
-
end
|
166
115
|
end
|
167
116
|
|
168
|
-
|
169
|
-
# Add the DSL constants and set default values for accessors when loaded.
|
170
|
-
add_dsl_constants!
|
171
|
-
reset!
|
172
|
-
end
|
173
|
-
|
174
|
-
##
|
175
|
-
# Warn user of deprecated Backup::CONFIG_FILE constant reference
|
176
|
-
# in older config.rb files and return the proper Config.config_file value.
|
177
|
-
class << self
|
178
|
-
def const_missing(const)
|
179
|
-
if const.to_s == 'CONFIG_FILE'
|
180
|
-
Logger.warn Error.new(<<-EOS)
|
181
|
-
Configuration File Upgrade Needed
|
182
|
-
Your configuration file, located at #{ Config.config_file }
|
183
|
-
needs to be upgraded for this version of Backup.
|
184
|
-
The reference to 'Backup::CONFIG_FILE' in your current config.rb file
|
185
|
-
has been deprecated and needs to be replaced with 'Config.config_file'.
|
186
|
-
You may update this reference in your config.rb manually,
|
187
|
-
or generate a new config.rb using 'backup generate:config'.
|
188
|
-
* Note: if you have global configuration defaults set in config.rb,
|
189
|
-
be sure to transfer them to your new config.rb, should you choose
|
190
|
-
to generate a new config.rb file.
|
191
|
-
EOS
|
192
|
-
return Config.config_file
|
193
|
-
end
|
194
|
-
super
|
195
|
-
end
|
117
|
+
reset! # set defaults on load
|
196
118
|
end
|
197
119
|
end
|