backup 3.11.0 → 4.0.0rc1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|