backup_checksum 3.0.23
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/.gitignore +7 -0
- data/.travis.yml +10 -0
- data/Gemfile +28 -0
- data/Gemfile.lock +130 -0
- data/Guardfile +21 -0
- data/LICENSE.md +24 -0
- data/README.md +476 -0
- data/backup_checksum.gemspec +32 -0
- data/bin/backup +11 -0
- data/lib/backup.rb +217 -0
- data/lib/backup/archive.rb +117 -0
- data/lib/backup/binder.rb +22 -0
- data/lib/backup/checksum/base.rb +44 -0
- data/lib/backup/checksum/shasum.rb +16 -0
- data/lib/backup/cleaner.rb +121 -0
- data/lib/backup/cli/helpers.rb +88 -0
- data/lib/backup/cli/utility.rb +247 -0
- data/lib/backup/compressor/base.rb +29 -0
- data/lib/backup/compressor/bzip2.rb +50 -0
- data/lib/backup/compressor/gzip.rb +47 -0
- data/lib/backup/compressor/lzma.rb +50 -0
- data/lib/backup/compressor/pbzip2.rb +56 -0
- data/lib/backup/config.rb +173 -0
- data/lib/backup/configuration/base.rb +15 -0
- data/lib/backup/configuration/checksum/base.rb +9 -0
- data/lib/backup/configuration/checksum/shasum.rb +9 -0
- data/lib/backup/configuration/compressor/base.rb +9 -0
- data/lib/backup/configuration/compressor/bzip2.rb +23 -0
- data/lib/backup/configuration/compressor/gzip.rb +23 -0
- data/lib/backup/configuration/compressor/lzma.rb +23 -0
- data/lib/backup/configuration/compressor/pbzip2.rb +28 -0
- data/lib/backup/configuration/database/base.rb +19 -0
- data/lib/backup/configuration/database/mongodb.rb +49 -0
- data/lib/backup/configuration/database/mysql.rb +42 -0
- data/lib/backup/configuration/database/postgresql.rb +41 -0
- data/lib/backup/configuration/database/redis.rb +39 -0
- data/lib/backup/configuration/database/riak.rb +29 -0
- data/lib/backup/configuration/encryptor/base.rb +9 -0
- data/lib/backup/configuration/encryptor/gpg.rb +17 -0
- data/lib/backup/configuration/encryptor/open_ssl.rb +32 -0
- data/lib/backup/configuration/helpers.rb +52 -0
- data/lib/backup/configuration/notifier/base.rb +28 -0
- data/lib/backup/configuration/notifier/campfire.rb +25 -0
- data/lib/backup/configuration/notifier/hipchat.rb +41 -0
- data/lib/backup/configuration/notifier/mail.rb +112 -0
- data/lib/backup/configuration/notifier/presently.rb +25 -0
- data/lib/backup/configuration/notifier/prowl.rb +23 -0
- data/lib/backup/configuration/notifier/twitter.rb +21 -0
- data/lib/backup/configuration/storage/base.rb +18 -0
- data/lib/backup/configuration/storage/cloudfiles.rb +25 -0
- data/lib/backup/configuration/storage/dropbox.rb +58 -0
- data/lib/backup/configuration/storage/ftp.rb +29 -0
- data/lib/backup/configuration/storage/local.rb +17 -0
- data/lib/backup/configuration/storage/ninefold.rb +20 -0
- data/lib/backup/configuration/storage/rsync.rb +29 -0
- data/lib/backup/configuration/storage/s3.rb +25 -0
- data/lib/backup/configuration/storage/scp.rb +25 -0
- data/lib/backup/configuration/storage/sftp.rb +25 -0
- data/lib/backup/configuration/syncer/base.rb +10 -0
- data/lib/backup/configuration/syncer/cloud.rb +23 -0
- data/lib/backup/configuration/syncer/cloud_files.rb +30 -0
- data/lib/backup/configuration/syncer/rsync/base.rb +28 -0
- data/lib/backup/configuration/syncer/rsync/local.rb +11 -0
- data/lib/backup/configuration/syncer/rsync/pull.rb +11 -0
- data/lib/backup/configuration/syncer/rsync/push.rb +31 -0
- data/lib/backup/configuration/syncer/s3.rb +23 -0
- data/lib/backup/database/base.rb +59 -0
- data/lib/backup/database/mongodb.rb +232 -0
- data/lib/backup/database/mysql.rb +163 -0
- data/lib/backup/database/postgresql.rb +146 -0
- data/lib/backup/database/redis.rb +139 -0
- data/lib/backup/database/riak.rb +69 -0
- data/lib/backup/dependency.rb +114 -0
- data/lib/backup/encryptor/base.rb +29 -0
- data/lib/backup/encryptor/gpg.rb +80 -0
- data/lib/backup/encryptor/open_ssl.rb +72 -0
- data/lib/backup/errors.rb +124 -0
- data/lib/backup/logger.rb +152 -0
- data/lib/backup/model.rb +386 -0
- data/lib/backup/notifier/base.rb +81 -0
- data/lib/backup/notifier/campfire.rb +168 -0
- data/lib/backup/notifier/hipchat.rb +99 -0
- data/lib/backup/notifier/mail.rb +206 -0
- data/lib/backup/notifier/presently.rb +88 -0
- data/lib/backup/notifier/prowl.rb +65 -0
- data/lib/backup/notifier/twitter.rb +70 -0
- data/lib/backup/package.rb +51 -0
- data/lib/backup/packager.rb +108 -0
- data/lib/backup/pipeline.rb +107 -0
- data/lib/backup/splitter.rb +75 -0
- data/lib/backup/storage/base.rb +119 -0
- data/lib/backup/storage/cloudfiles.rb +87 -0
- data/lib/backup/storage/cycler.rb +117 -0
- data/lib/backup/storage/dropbox.rb +181 -0
- data/lib/backup/storage/ftp.rb +119 -0
- data/lib/backup/storage/local.rb +82 -0
- data/lib/backup/storage/ninefold.rb +116 -0
- data/lib/backup/storage/rsync.rb +149 -0
- data/lib/backup/storage/s3.rb +94 -0
- data/lib/backup/storage/scp.rb +99 -0
- data/lib/backup/storage/sftp.rb +108 -0
- data/lib/backup/syncer/base.rb +42 -0
- data/lib/backup/syncer/cloud.rb +190 -0
- data/lib/backup/syncer/cloud_files.rb +56 -0
- data/lib/backup/syncer/rsync/base.rb +52 -0
- data/lib/backup/syncer/rsync/local.rb +53 -0
- data/lib/backup/syncer/rsync/pull.rb +38 -0
- data/lib/backup/syncer/rsync/push.rb +113 -0
- data/lib/backup/syncer/s3.rb +47 -0
- data/lib/backup/template.rb +46 -0
- data/lib/backup/version.rb +43 -0
- data/spec/archive_spec.rb +335 -0
- data/spec/cleaner_spec.rb +304 -0
- data/spec/cli/helpers_spec.rb +176 -0
- data/spec/cli/utility_spec.rb +363 -0
- data/spec/compressor/base_spec.rb +31 -0
- data/spec/compressor/bzip2_spec.rb +83 -0
- data/spec/compressor/gzip_spec.rb +83 -0
- data/spec/compressor/lzma_spec.rb +83 -0
- data/spec/compressor/pbzip2_spec.rb +124 -0
- data/spec/config_spec.rb +321 -0
- data/spec/configuration/base_spec.rb +35 -0
- data/spec/configuration/compressor/bzip2_spec.rb +29 -0
- data/spec/configuration/compressor/gzip_spec.rb +29 -0
- data/spec/configuration/compressor/lzma_spec.rb +29 -0
- data/spec/configuration/compressor/pbzip2_spec.rb +32 -0
- data/spec/configuration/database/base_spec.rb +17 -0
- data/spec/configuration/database/mongodb_spec.rb +56 -0
- data/spec/configuration/database/mysql_spec.rb +53 -0
- data/spec/configuration/database/postgresql_spec.rb +53 -0
- data/spec/configuration/database/redis_spec.rb +50 -0
- data/spec/configuration/database/riak_spec.rb +35 -0
- data/spec/configuration/encryptor/gpg_spec.rb +26 -0
- data/spec/configuration/encryptor/open_ssl_spec.rb +35 -0
- data/spec/configuration/notifier/base_spec.rb +32 -0
- data/spec/configuration/notifier/campfire_spec.rb +32 -0
- data/spec/configuration/notifier/hipchat_spec.rb +44 -0
- data/spec/configuration/notifier/mail_spec.rb +71 -0
- data/spec/configuration/notifier/presently_spec.rb +35 -0
- data/spec/configuration/notifier/prowl_spec.rb +29 -0
- data/spec/configuration/notifier/twitter_spec.rb +35 -0
- data/spec/configuration/storage/cloudfiles_spec.rb +41 -0
- data/spec/configuration/storage/dropbox_spec.rb +38 -0
- data/spec/configuration/storage/ftp_spec.rb +44 -0
- data/spec/configuration/storage/local_spec.rb +29 -0
- data/spec/configuration/storage/ninefold_spec.rb +32 -0
- data/spec/configuration/storage/rsync_spec.rb +41 -0
- data/spec/configuration/storage/s3_spec.rb +38 -0
- data/spec/configuration/storage/scp_spec.rb +41 -0
- data/spec/configuration/storage/sftp_spec.rb +41 -0
- data/spec/configuration/syncer/cloud_files_spec.rb +44 -0
- data/spec/configuration/syncer/rsync/base_spec.rb +33 -0
- data/spec/configuration/syncer/rsync/local_spec.rb +10 -0
- data/spec/configuration/syncer/rsync/pull_spec.rb +10 -0
- data/spec/configuration/syncer/rsync/push_spec.rb +43 -0
- data/spec/configuration/syncer/s3_spec.rb +38 -0
- data/spec/database/base_spec.rb +54 -0
- data/spec/database/mongodb_spec.rb +428 -0
- data/spec/database/mysql_spec.rb +335 -0
- data/spec/database/postgresql_spec.rb +278 -0
- data/spec/database/redis_spec.rb +260 -0
- data/spec/database/riak_spec.rb +108 -0
- data/spec/dependency_spec.rb +49 -0
- data/spec/encryptor/base_spec.rb +30 -0
- data/spec/encryptor/gpg_spec.rb +134 -0
- data/spec/encryptor/open_ssl_spec.rb +129 -0
- data/spec/errors_spec.rb +306 -0
- data/spec/logger_spec.rb +363 -0
- data/spec/model_spec.rb +649 -0
- data/spec/notifier/base_spec.rb +89 -0
- data/spec/notifier/campfire_spec.rb +199 -0
- data/spec/notifier/hipchat_spec.rb +188 -0
- data/spec/notifier/mail_spec.rb +280 -0
- data/spec/notifier/presently_spec.rb +181 -0
- data/spec/notifier/prowl_spec.rb +117 -0
- data/spec/notifier/twitter_spec.rb +132 -0
- data/spec/package_spec.rb +61 -0
- data/spec/packager_spec.rb +225 -0
- data/spec/pipeline_spec.rb +257 -0
- data/spec/spec_helper.rb +59 -0
- data/spec/splitter_spec.rb +120 -0
- data/spec/storage/base_spec.rb +160 -0
- data/spec/storage/cloudfiles_spec.rb +230 -0
- data/spec/storage/cycler_spec.rb +239 -0
- data/spec/storage/dropbox_spec.rb +370 -0
- data/spec/storage/ftp_spec.rb +247 -0
- data/spec/storage/local_spec.rb +235 -0
- data/spec/storage/ninefold_spec.rb +319 -0
- data/spec/storage/rsync_spec.rb +345 -0
- data/spec/storage/s3_spec.rb +221 -0
- data/spec/storage/scp_spec.rb +209 -0
- data/spec/storage/sftp_spec.rb +220 -0
- data/spec/syncer/base_spec.rb +22 -0
- data/spec/syncer/cloud_files_spec.rb +192 -0
- data/spec/syncer/rsync/base_spec.rb +118 -0
- data/spec/syncer/rsync/local_spec.rb +121 -0
- data/spec/syncer/rsync/pull_spec.rb +90 -0
- data/spec/syncer/rsync/push_spec.rb +327 -0
- data/spec/syncer/s3_spec.rb +192 -0
- data/spec/version_spec.rb +21 -0
- data/templates/cli/utility/archive +25 -0
- data/templates/cli/utility/compressor/bzip2 +7 -0
- data/templates/cli/utility/compressor/gzip +7 -0
- data/templates/cli/utility/compressor/lzma +7 -0
- data/templates/cli/utility/compressor/pbzip2 +7 -0
- data/templates/cli/utility/config +31 -0
- data/templates/cli/utility/database/mongodb +18 -0
- data/templates/cli/utility/database/mysql +21 -0
- data/templates/cli/utility/database/postgresql +17 -0
- data/templates/cli/utility/database/redis +16 -0
- data/templates/cli/utility/database/riak +11 -0
- data/templates/cli/utility/encryptor/gpg +12 -0
- data/templates/cli/utility/encryptor/openssl +9 -0
- data/templates/cli/utility/model.erb +23 -0
- data/templates/cli/utility/notifier/campfire +12 -0
- data/templates/cli/utility/notifier/hipchat +15 -0
- data/templates/cli/utility/notifier/mail +22 -0
- data/templates/cli/utility/notifier/presently +13 -0
- data/templates/cli/utility/notifier/prowl +11 -0
- data/templates/cli/utility/notifier/twitter +13 -0
- data/templates/cli/utility/splitter +7 -0
- data/templates/cli/utility/storage/cloud_files +22 -0
- data/templates/cli/utility/storage/dropbox +20 -0
- data/templates/cli/utility/storage/ftp +12 -0
- data/templates/cli/utility/storage/local +7 -0
- data/templates/cli/utility/storage/ninefold +9 -0
- data/templates/cli/utility/storage/rsync +11 -0
- data/templates/cli/utility/storage/s3 +19 -0
- data/templates/cli/utility/storage/scp +11 -0
- data/templates/cli/utility/storage/sftp +11 -0
- data/templates/cli/utility/syncer/cloud_files +48 -0
- data/templates/cli/utility/syncer/rsync_local +12 -0
- data/templates/cli/utility/syncer/rsync_pull +17 -0
- data/templates/cli/utility/syncer/rsync_push +17 -0
- data/templates/cli/utility/syncer/s3 +45 -0
- data/templates/general/links +11 -0
- data/templates/general/version.erb +2 -0
- data/templates/notifier/mail/failure.erb +9 -0
- data/templates/notifier/mail/success.erb +7 -0
- data/templates/notifier/mail/warning.erb +9 -0
- data/templates/storage/dropbox/authorization_url.erb +6 -0
- data/templates/storage/dropbox/authorized.erb +4 -0
- data/templates/storage/dropbox/cache_file_written.erb +10 -0
- metadata +311 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require File.expand_path('lib/backup/version')
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |gem|
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
# General configuration / information
|
|
9
|
+
gem.name = 'backup_checksum'
|
|
10
|
+
gem.version = Backup::Version.current
|
|
11
|
+
gem.platform = Gem::Platform::RUBY
|
|
12
|
+
gem.authors = 'Lukasz Kaniowski'
|
|
13
|
+
gem.email = 'lukasz.kaniowski@gmail.com'
|
|
14
|
+
gem.homepage = 'http://rubygems.org/gems/backup_checksum'
|
|
15
|
+
gem.summary = 'It is a clone of http://rubygems.org/gems/backup with checksum added'
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# Files and folder that need to be compiled in to the Ruby Gem
|
|
19
|
+
gem.files = %x[git ls-files].split("\n")
|
|
20
|
+
gem.test_files = %x[git ls-files -- {spec}/*].split("\n")
|
|
21
|
+
gem.require_path = 'lib'
|
|
22
|
+
|
|
23
|
+
##
|
|
24
|
+
# The Backup CLI executable
|
|
25
|
+
gem.executables = ['backup']
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
# Gem dependencies
|
|
29
|
+
gem.add_dependency 'thor', ['~> 0.14.6']
|
|
30
|
+
gem.add_dependency 'POpen4', ['~> 0.1.4']
|
|
31
|
+
|
|
32
|
+
end
|
data/bin/backup
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
4
|
+
# Load the Backup core library
|
|
5
|
+
require File.expand_path("../../lib/backup", __FILE__)
|
|
6
|
+
|
|
7
|
+
# Load the Backup command line interface utility
|
|
8
|
+
require File.expand_path("../../lib/backup/cli/utility", __FILE__)
|
|
9
|
+
|
|
10
|
+
# Initialize the Backup command line utility
|
|
11
|
+
Backup::CLI::Utility.start
|
data/lib/backup.rb
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
# Load Ruby Core Libraries
|
|
4
|
+
require 'rubygems'
|
|
5
|
+
require 'fileutils'
|
|
6
|
+
require 'tempfile'
|
|
7
|
+
require 'yaml'
|
|
8
|
+
require 'etc'
|
|
9
|
+
|
|
10
|
+
# Attempt load to POpen4 and Thor Libraries
|
|
11
|
+
begin
|
|
12
|
+
gem 'POpen4', '~> 0.1.4'
|
|
13
|
+
gem 'thor', '~> 0.14.6'
|
|
14
|
+
require 'popen4'
|
|
15
|
+
require 'thor'
|
|
16
|
+
rescue LoadError
|
|
17
|
+
puts "\nBackup requires Thor to load the CLI Utility (Command Line Interface Utility) and POpen4 to determine the status of the unix processes."
|
|
18
|
+
puts "Please install both the Thor and POpen4 libraries first:\n\ngem install thor -v '~> 0.14.6'\ngem install POpen4 -v '~> 0.1.4'"
|
|
19
|
+
exit 1
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
##
|
|
23
|
+
# The Backup Ruby Gem
|
|
24
|
+
module Backup
|
|
25
|
+
|
|
26
|
+
##
|
|
27
|
+
# Backup's internal paths
|
|
28
|
+
LIBRARY_PATH = File.join(File.dirname(__FILE__), 'backup')
|
|
29
|
+
CLI_PATH = File.join(LIBRARY_PATH, 'cli')
|
|
30
|
+
STORAGE_PATH = File.join(LIBRARY_PATH, 'storage')
|
|
31
|
+
DATABASE_PATH = File.join(LIBRARY_PATH, 'database')
|
|
32
|
+
COMPRESSOR_PATH = File.join(LIBRARY_PATH, 'compressor')
|
|
33
|
+
CHECKSUM_PATH = File.join(LIBRARY_PATH, 'checksum')
|
|
34
|
+
ENCRYPTOR_PATH = File.join(LIBRARY_PATH, 'encryptor')
|
|
35
|
+
NOTIFIER_PATH = File.join(LIBRARY_PATH, 'notifier')
|
|
36
|
+
SYNCER_PATH = File.join(LIBRARY_PATH, 'syncer')
|
|
37
|
+
CONFIGURATION_PATH = File.join(LIBRARY_PATH, 'configuration')
|
|
38
|
+
TEMPLATE_PATH = File.expand_path('../../templates', __FILE__)
|
|
39
|
+
|
|
40
|
+
##
|
|
41
|
+
# Autoload Backup CLI files
|
|
42
|
+
module CLI
|
|
43
|
+
autoload :Helpers, File.join(CLI_PATH, 'helpers')
|
|
44
|
+
autoload :Utility, File.join(CLI_PATH, 'utility')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
##
|
|
48
|
+
# Autoload Backup storage files
|
|
49
|
+
module Storage
|
|
50
|
+
autoload :Base, File.join(STORAGE_PATH, 'base')
|
|
51
|
+
autoload :Cycler, File.join(STORAGE_PATH, 'cycler')
|
|
52
|
+
autoload :S3, File.join(STORAGE_PATH, 's3')
|
|
53
|
+
autoload :CloudFiles, File.join(STORAGE_PATH, 'cloudfiles')
|
|
54
|
+
autoload :Ninefold, File.join(STORAGE_PATH, 'ninefold')
|
|
55
|
+
autoload :Dropbox, File.join(STORAGE_PATH, 'dropbox')
|
|
56
|
+
autoload :FTP, File.join(STORAGE_PATH, 'ftp')
|
|
57
|
+
autoload :SFTP, File.join(STORAGE_PATH, 'sftp')
|
|
58
|
+
autoload :SCP, File.join(STORAGE_PATH, 'scp')
|
|
59
|
+
autoload :RSync, File.join(STORAGE_PATH, 'rsync')
|
|
60
|
+
autoload :Local, File.join(STORAGE_PATH, 'local')
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
##
|
|
64
|
+
# Autoload Backup syncer files
|
|
65
|
+
module Syncer
|
|
66
|
+
autoload :Base, File.join(SYNCER_PATH, 'base')
|
|
67
|
+
autoload :Cloud, File.join(SYNCER_PATH, 'cloud')
|
|
68
|
+
autoload :CloudFiles, File.join(SYNCER_PATH, 'cloud_files')
|
|
69
|
+
autoload :S3, File.join(SYNCER_PATH, 's3')
|
|
70
|
+
module RSync
|
|
71
|
+
autoload :Base, File.join(SYNCER_PATH, 'rsync', 'base')
|
|
72
|
+
autoload :Local, File.join(SYNCER_PATH, 'rsync', 'local')
|
|
73
|
+
autoload :Push, File.join(SYNCER_PATH, 'rsync', 'push')
|
|
74
|
+
autoload :Pull, File.join(SYNCER_PATH, 'rsync', 'pull')
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
##
|
|
79
|
+
# Autoload Backup database files
|
|
80
|
+
module Database
|
|
81
|
+
autoload :Base, File.join(DATABASE_PATH, 'base')
|
|
82
|
+
autoload :MySQL, File.join(DATABASE_PATH, 'mysql')
|
|
83
|
+
autoload :PostgreSQL, File.join(DATABASE_PATH, 'postgresql')
|
|
84
|
+
autoload :MongoDB, File.join(DATABASE_PATH, 'mongodb')
|
|
85
|
+
autoload :Redis, File.join(DATABASE_PATH, 'redis')
|
|
86
|
+
autoload :Riak, File.join(DATABASE_PATH, 'riak')
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
##
|
|
90
|
+
# Autoload compressor files
|
|
91
|
+
module Compressor
|
|
92
|
+
autoload :Base, File.join(COMPRESSOR_PATH, 'base')
|
|
93
|
+
autoload :Gzip, File.join(COMPRESSOR_PATH, 'gzip')
|
|
94
|
+
autoload :Bzip2, File.join(COMPRESSOR_PATH, 'bzip2')
|
|
95
|
+
autoload :Pbzip2, File.join(COMPRESSOR_PATH, 'pbzip2')
|
|
96
|
+
autoload :Lzma, File.join(COMPRESSOR_PATH, 'lzma')
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
##
|
|
100
|
+
# Autoload Checksum files
|
|
101
|
+
module Checksum
|
|
102
|
+
autoload :Base, File.join(CHECKSUM_PATH, 'base')
|
|
103
|
+
autoload :Shasum, File.join(CHECKSUM_PATH, 'shasum')
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
##
|
|
107
|
+
# Autoload encryptor files
|
|
108
|
+
module Encryptor
|
|
109
|
+
autoload :Base, File.join(ENCRYPTOR_PATH, 'base')
|
|
110
|
+
autoload :OpenSSL, File.join(ENCRYPTOR_PATH, 'open_ssl')
|
|
111
|
+
autoload :GPG, File.join(ENCRYPTOR_PATH, 'gpg')
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
##
|
|
115
|
+
# Autoload notification files
|
|
116
|
+
module Notifier
|
|
117
|
+
autoload :Base, File.join(NOTIFIER_PATH, 'base')
|
|
118
|
+
autoload :Binder, File.join(NOTIFIER_PATH, 'binder')
|
|
119
|
+
autoload :Mail, File.join(NOTIFIER_PATH, 'mail')
|
|
120
|
+
autoload :Twitter, File.join(NOTIFIER_PATH, 'twitter')
|
|
121
|
+
autoload :Campfire, File.join(NOTIFIER_PATH, 'campfire')
|
|
122
|
+
autoload :Presently, File.join(NOTIFIER_PATH, 'presently')
|
|
123
|
+
autoload :Prowl, File.join(NOTIFIER_PATH, 'prowl')
|
|
124
|
+
autoload :Hipchat, File.join(NOTIFIER_PATH, 'hipchat')
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
##
|
|
128
|
+
# Autoload Backup configuration files
|
|
129
|
+
module Configuration
|
|
130
|
+
autoload :Base, File.join(CONFIGURATION_PATH, 'base')
|
|
131
|
+
autoload :Helpers, File.join(CONFIGURATION_PATH, 'helpers')
|
|
132
|
+
|
|
133
|
+
module Notifier
|
|
134
|
+
autoload :Base, File.join(CONFIGURATION_PATH, 'notifier', 'base')
|
|
135
|
+
autoload :Mail, File.join(CONFIGURATION_PATH, 'notifier', 'mail')
|
|
136
|
+
autoload :Twitter, File.join(CONFIGURATION_PATH, 'notifier', 'twitter')
|
|
137
|
+
autoload :Campfire, File.join(CONFIGURATION_PATH, 'notifier', 'campfire')
|
|
138
|
+
autoload :Presently, File.join(CONFIGURATION_PATH, 'notifier', 'presently')
|
|
139
|
+
autoload :Prowl, File.join(CONFIGURATION_PATH, 'notifier', 'prowl')
|
|
140
|
+
autoload :Hipchat, File.join(CONFIGURATION_PATH, 'notifier', 'hipchat')
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
module Encryptor
|
|
144
|
+
autoload :Base, File.join(CONFIGURATION_PATH, 'encryptor', 'base')
|
|
145
|
+
autoload :OpenSSL, File.join(CONFIGURATION_PATH, 'encryptor', 'open_ssl')
|
|
146
|
+
autoload :GPG, File.join(CONFIGURATION_PATH, 'encryptor', 'gpg')
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
module Compressor
|
|
150
|
+
autoload :Base, File.join(CONFIGURATION_PATH, 'compressor', 'base')
|
|
151
|
+
autoload :Gzip, File.join(CONFIGURATION_PATH, 'compressor', 'gzip')
|
|
152
|
+
autoload :Bzip2, File.join(CONFIGURATION_PATH, 'compressor', 'bzip2')
|
|
153
|
+
autoload :Pbzip2, File.join(CONFIGURATION_PATH, 'compressor', 'pbzip2')
|
|
154
|
+
autoload :Lzma, File.join(CONFIGURATION_PATH, 'compressor', 'lzma')
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
module Storage
|
|
158
|
+
autoload :Base, File.join(CONFIGURATION_PATH, 'storage', 'base')
|
|
159
|
+
autoload :S3, File.join(CONFIGURATION_PATH, 'storage', 's3')
|
|
160
|
+
autoload :CloudFiles, File.join(CONFIGURATION_PATH, 'storage', 'cloudfiles')
|
|
161
|
+
autoload :Ninefold, File.join(CONFIGURATION_PATH, 'storage', 'ninefold')
|
|
162
|
+
autoload :Dropbox, File.join(CONFIGURATION_PATH, 'storage', 'dropbox')
|
|
163
|
+
autoload :FTP, File.join(CONFIGURATION_PATH, 'storage', 'ftp')
|
|
164
|
+
autoload :SFTP, File.join(CONFIGURATION_PATH, 'storage', 'sftp')
|
|
165
|
+
autoload :SCP, File.join(CONFIGURATION_PATH, 'storage', 'scp')
|
|
166
|
+
autoload :RSync, File.join(CONFIGURATION_PATH, 'storage', 'rsync')
|
|
167
|
+
autoload :Local, File.join(CONFIGURATION_PATH, 'storage', 'local')
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
module Checksum
|
|
171
|
+
autoload :Base, File.join(CONFIGURATION_PATH, 'checksum', 'base')
|
|
172
|
+
autoload :Shasum, File.join(CONFIGURATION_PATH, 'checksum', 'shasum')
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
module Syncer
|
|
176
|
+
autoload :Base, File.join(CONFIGURATION_PATH, 'syncer', 'base')
|
|
177
|
+
autoload :Cloud, File.join(CONFIGURATION_PATH, 'syncer', 'cloud')
|
|
178
|
+
autoload :CloudFiles, File.join(CONFIGURATION_PATH, 'syncer', 'cloud_files')
|
|
179
|
+
autoload :S3, File.join(CONFIGURATION_PATH, 'syncer', 's3')
|
|
180
|
+
module RSync
|
|
181
|
+
autoload :Base, File.join(CONFIGURATION_PATH, 'syncer', 'rsync', 'base')
|
|
182
|
+
autoload :Local, File.join(CONFIGURATION_PATH, 'syncer', 'rsync', 'local')
|
|
183
|
+
autoload :Push, File.join(CONFIGURATION_PATH, 'syncer', 'rsync', 'push')
|
|
184
|
+
autoload :Pull, File.join(CONFIGURATION_PATH, 'syncer', 'rsync', 'pull')
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
module Database
|
|
189
|
+
autoload :Base, File.join(CONFIGURATION_PATH, 'database', 'base')
|
|
190
|
+
autoload :MySQL, File.join(CONFIGURATION_PATH, 'database', 'mysql')
|
|
191
|
+
autoload :PostgreSQL, File.join(CONFIGURATION_PATH, 'database', 'postgresql')
|
|
192
|
+
autoload :MongoDB, File.join(CONFIGURATION_PATH, 'database', 'mongodb')
|
|
193
|
+
autoload :Redis, File.join(CONFIGURATION_PATH, 'database', 'redis')
|
|
194
|
+
autoload :Riak, File.join(CONFIGURATION_PATH, 'database', 'riak')
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
##
|
|
199
|
+
# Require Backup base files
|
|
200
|
+
%w{
|
|
201
|
+
model
|
|
202
|
+
archive
|
|
203
|
+
packager
|
|
204
|
+
pipeline
|
|
205
|
+
package
|
|
206
|
+
cleaner
|
|
207
|
+
splitter
|
|
208
|
+
config
|
|
209
|
+
binder
|
|
210
|
+
template
|
|
211
|
+
dependency
|
|
212
|
+
logger
|
|
213
|
+
version
|
|
214
|
+
errors
|
|
215
|
+
}.each {|lib| require File.join(LIBRARY_PATH, lib) }
|
|
216
|
+
|
|
217
|
+
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
class Archive
|
|
5
|
+
include Backup::CLI::Helpers
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
# Stores the name of the archive
|
|
9
|
+
attr_accessor :name
|
|
10
|
+
|
|
11
|
+
##
|
|
12
|
+
# Stores an array of different paths/files to store
|
|
13
|
+
attr_accessor :paths
|
|
14
|
+
|
|
15
|
+
##
|
|
16
|
+
# Stores an array of different paths/files to exclude
|
|
17
|
+
attr_accessor :excludes
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# String of additional arguments for the `tar` command
|
|
21
|
+
attr_accessor :tar_args
|
|
22
|
+
|
|
23
|
+
##
|
|
24
|
+
# Takes the name of the archive and the configuration block
|
|
25
|
+
def initialize(model, name, &block)
|
|
26
|
+
@model = model
|
|
27
|
+
@name = name.to_s
|
|
28
|
+
@paths = Array.new
|
|
29
|
+
@excludes = Array.new
|
|
30
|
+
@tar_args = ''
|
|
31
|
+
|
|
32
|
+
instance_eval(&block) if block_given?
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
##
|
|
36
|
+
# Adds new paths to the @paths instance variable array
|
|
37
|
+
def add(path)
|
|
38
|
+
path = File.expand_path(path)
|
|
39
|
+
if File.exist?(path)
|
|
40
|
+
@paths << path
|
|
41
|
+
else
|
|
42
|
+
Logger.warn Errors::Archive::NotFoundError.new(<<-EOS)
|
|
43
|
+
The following path was not found:
|
|
44
|
+
#{ path }
|
|
45
|
+
This path will be omitted from the '#{ name }' Archive.
|
|
46
|
+
EOS
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
##
|
|
51
|
+
# Adds new paths to the @excludes instance variable array
|
|
52
|
+
def exclude(path)
|
|
53
|
+
@excludes << File.expand_path(path)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
##
|
|
57
|
+
# Adds the given String of +options+ to the `tar` command.
|
|
58
|
+
# e.g. '-h --xattrs'
|
|
59
|
+
def tar_options(options)
|
|
60
|
+
@tar_args = options
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
##
|
|
64
|
+
# Archives all the provided paths in to a single .tar file
|
|
65
|
+
# and places that .tar file in the folder which later will be packaged
|
|
66
|
+
# If the model is configured with a Compressor, the tar command output
|
|
67
|
+
# will be piped through the Compressor command and the file extension
|
|
68
|
+
# will be adjusted to indicate the type of compression used.
|
|
69
|
+
def perform!
|
|
70
|
+
Logger.message "#{ self.class } has started archiving:\n" +
|
|
71
|
+
paths.map {|path| " #{path}" }.join("\n")
|
|
72
|
+
|
|
73
|
+
archive_path = File.join(Config.tmp_path, @model.trigger, 'archives')
|
|
74
|
+
FileUtils.mkdir_p(archive_path)
|
|
75
|
+
|
|
76
|
+
archive_ext = 'tar'
|
|
77
|
+
pipeline = Pipeline.new
|
|
78
|
+
|
|
79
|
+
pipeline << "#{ utility(:tar) } #{ tar_args } -cPf - " +
|
|
80
|
+
"#{ paths_to_exclude } #{ paths_to_package }"
|
|
81
|
+
|
|
82
|
+
if @model.compressor
|
|
83
|
+
@model.compressor.compress_with do |command, ext|
|
|
84
|
+
pipeline << command
|
|
85
|
+
archive_ext << ext
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
pipeline << "cat > '#{ File.join(archive_path, "#{name}.#{archive_ext}") }'"
|
|
90
|
+
pipeline.run
|
|
91
|
+
if pipeline.success?
|
|
92
|
+
Logger.message "#{ self.class } Complete!"
|
|
93
|
+
else
|
|
94
|
+
raise Errors::Archive::PipelineError,
|
|
95
|
+
"Failed to Create Backup Archive\n" +
|
|
96
|
+
pipeline.error_messages
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
private
|
|
101
|
+
|
|
102
|
+
##
|
|
103
|
+
# Returns a "tar-ready" string of all the specified paths combined
|
|
104
|
+
def paths_to_package
|
|
105
|
+
paths.map {|path| "'#{path}'" }.join(' ')
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
##
|
|
109
|
+
# Returns a "tar-ready" string of all the specified excludes combined
|
|
110
|
+
def paths_to_exclude
|
|
111
|
+
if excludes.any?
|
|
112
|
+
excludes.map {|path| "--exclude='#{path}'" }.join(' ')
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
class Binder
|
|
5
|
+
|
|
6
|
+
##
|
|
7
|
+
# Creates a new Backup::Notifier::Binder instance. Loops through the provided
|
|
8
|
+
# Hash to set instance variables
|
|
9
|
+
def initialize(key_and_values)
|
|
10
|
+
key_and_values.each do |key, value|
|
|
11
|
+
instance_variable_set("@#{ key }", value)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
##
|
|
16
|
+
# Returns the binding (needs a wrapper method because #binding is a private method)
|
|
17
|
+
def get_binding
|
|
18
|
+
binding
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Backup
|
|
4
|
+
module Checksum
|
|
5
|
+
class Base
|
|
6
|
+
include Backup::CLI::Helpers
|
|
7
|
+
include Backup::Configuration::Helpers
|
|
8
|
+
|
|
9
|
+
def initialize
|
|
10
|
+
load_defaults!
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def process_checksum_file_before_transfer(file_names_hash, checksum_name, local_path)
|
|
14
|
+
file_names_hash.each do |local, remote|
|
|
15
|
+
replace_in_file(File.join(local_path, checksum_name), /#{File.join(local_path, local)}/) do |match|
|
|
16
|
+
remote
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
##
|
|
24
|
+
# Return the checksum name, with Backup namespace removed
|
|
25
|
+
def checksum_name
|
|
26
|
+
self.class.to_s.sub('Backup::', '')
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
##
|
|
30
|
+
# Logs a message to the console and log file to inform
|
|
31
|
+
# the client that Backup is using the compressor
|
|
32
|
+
def log!
|
|
33
|
+
Logger.message "Using #{ checksum_name } for checksum."
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def replace_in_file(filepath, regexp, *args, &block)
|
|
38
|
+
content = File.read(filepath).gsub(regexp, *args, &block)
|
|
39
|
+
File.open(filepath, 'wb') { |file| file.write(content) }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|