nfm-backup 4.0.1a

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.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.md +24 -0
  3. data/README.md +20 -0
  4. data/bin/backup +5 -0
  5. data/lib/backup.rb +133 -0
  6. data/lib/backup/archive.rb +170 -0
  7. data/lib/backup/binder.rb +22 -0
  8. data/lib/backup/cleaner.rb +116 -0
  9. data/lib/backup/cli.rb +364 -0
  10. data/lib/backup/cloud_io/base.rb +41 -0
  11. data/lib/backup/cloud_io/cloud_files.rb +298 -0
  12. data/lib/backup/cloud_io/s3.rb +260 -0
  13. data/lib/backup/compressor/base.rb +35 -0
  14. data/lib/backup/compressor/bzip2.rb +39 -0
  15. data/lib/backup/compressor/custom.rb +53 -0
  16. data/lib/backup/compressor/gzip.rb +74 -0
  17. data/lib/backup/config.rb +119 -0
  18. data/lib/backup/config/dsl.rb +102 -0
  19. data/lib/backup/config/helpers.rb +143 -0
  20. data/lib/backup/database/base.rb +85 -0
  21. data/lib/backup/database/mongodb.rb +186 -0
  22. data/lib/backup/database/mysql.rb +123 -0
  23. data/lib/backup/database/postgresql.rb +133 -0
  24. data/lib/backup/database/redis.rb +179 -0
  25. data/lib/backup/database/riak.rb +82 -0
  26. data/lib/backup/encryptor/base.rb +29 -0
  27. data/lib/backup/encryptor/gpg.rb +747 -0
  28. data/lib/backup/encryptor/open_ssl.rb +72 -0
  29. data/lib/backup/errors.rb +58 -0
  30. data/lib/backup/logger.rb +199 -0
  31. data/lib/backup/logger/console.rb +51 -0
  32. data/lib/backup/logger/fog_adapter.rb +29 -0
  33. data/lib/backup/logger/logfile.rb +119 -0
  34. data/lib/backup/logger/syslog.rb +116 -0
  35. data/lib/backup/model.rb +454 -0
  36. data/lib/backup/notifier/base.rb +98 -0
  37. data/lib/backup/notifier/campfire.rb +69 -0
  38. data/lib/backup/notifier/hipchat.rb +93 -0
  39. data/lib/backup/notifier/http_post.rb +122 -0
  40. data/lib/backup/notifier/mail.rb +238 -0
  41. data/lib/backup/notifier/nagios.rb +69 -0
  42. data/lib/backup/notifier/prowl.rb +69 -0
  43. data/lib/backup/notifier/pushover.rb +80 -0
  44. data/lib/backup/notifier/slack.rb +149 -0
  45. data/lib/backup/notifier/twitter.rb +65 -0
  46. data/lib/backup/package.rb +51 -0
  47. data/lib/backup/packager.rb +101 -0
  48. data/lib/backup/pipeline.rb +124 -0
  49. data/lib/backup/splitter.rb +76 -0
  50. data/lib/backup/storage/base.rb +57 -0
  51. data/lib/backup/storage/cloud_files.rb +158 -0
  52. data/lib/backup/storage/cycler.rb +65 -0
  53. data/lib/backup/storage/dropbox.rb +236 -0
  54. data/lib/backup/storage/ftp.rb +98 -0
  55. data/lib/backup/storage/local.rb +64 -0
  56. data/lib/backup/storage/ninefold.rb +74 -0
  57. data/lib/backup/storage/rsync.rb +248 -0
  58. data/lib/backup/storage/s3.rb +154 -0
  59. data/lib/backup/storage/scp.rb +67 -0
  60. data/lib/backup/storage/sftp.rb +82 -0
  61. data/lib/backup/syncer/base.rb +70 -0
  62. data/lib/backup/syncer/cloud/base.rb +179 -0
  63. data/lib/backup/syncer/cloud/cloud_files.rb +83 -0
  64. data/lib/backup/syncer/cloud/local_file.rb +100 -0
  65. data/lib/backup/syncer/cloud/s3.rb +110 -0
  66. data/lib/backup/syncer/rsync/base.rb +48 -0
  67. data/lib/backup/syncer/rsync/local.rb +31 -0
  68. data/lib/backup/syncer/rsync/pull.rb +51 -0
  69. data/lib/backup/syncer/rsync/push.rb +205 -0
  70. data/lib/backup/template.rb +46 -0
  71. data/lib/backup/utilities.rb +221 -0
  72. data/lib/backup/version.rb +5 -0
  73. data/templates/cli/archive +28 -0
  74. data/templates/cli/compressor/bzip2 +4 -0
  75. data/templates/cli/compressor/custom +7 -0
  76. data/templates/cli/compressor/gzip +4 -0
  77. data/templates/cli/config +123 -0
  78. data/templates/cli/databases/mongodb +15 -0
  79. data/templates/cli/databases/mysql +18 -0
  80. data/templates/cli/databases/postgresql +16 -0
  81. data/templates/cli/databases/redis +16 -0
  82. data/templates/cli/databases/riak +17 -0
  83. data/templates/cli/encryptor/gpg +27 -0
  84. data/templates/cli/encryptor/openssl +9 -0
  85. data/templates/cli/model +26 -0
  86. data/templates/cli/notifiers/campfire +12 -0
  87. data/templates/cli/notifiers/hipchat +15 -0
  88. data/templates/cli/notifiers/http_post +32 -0
  89. data/templates/cli/notifiers/mail +21 -0
  90. data/templates/cli/notifiers/nagios +13 -0
  91. data/templates/cli/notifiers/prowl +11 -0
  92. data/templates/cli/notifiers/pushover +11 -0
  93. data/templates/cli/notifiers/twitter +13 -0
  94. data/templates/cli/splitter +7 -0
  95. data/templates/cli/storages/cloud_files +11 -0
  96. data/templates/cli/storages/dropbox +19 -0
  97. data/templates/cli/storages/ftp +12 -0
  98. data/templates/cli/storages/local +7 -0
  99. data/templates/cli/storages/ninefold +9 -0
  100. data/templates/cli/storages/rsync +17 -0
  101. data/templates/cli/storages/s3 +14 -0
  102. data/templates/cli/storages/scp +14 -0
  103. data/templates/cli/storages/sftp +14 -0
  104. data/templates/cli/syncers/cloud_files +22 -0
  105. data/templates/cli/syncers/rsync_local +20 -0
  106. data/templates/cli/syncers/rsync_pull +28 -0
  107. data/templates/cli/syncers/rsync_push +28 -0
  108. data/templates/cli/syncers/s3 +27 -0
  109. data/templates/general/links +3 -0
  110. data/templates/general/version.erb +2 -0
  111. data/templates/notifier/mail/failure.erb +16 -0
  112. data/templates/notifier/mail/success.erb +16 -0
  113. data/templates/notifier/mail/warning.erb +16 -0
  114. data/templates/storage/dropbox/authorization_url.erb +6 -0
  115. data/templates/storage/dropbox/authorized.erb +4 -0
  116. data/templates/storage/dropbox/cache_file_written.erb +10 -0
  117. metadata +688 -0
@@ -0,0 +1,15 @@
1
+ ##
2
+ # MongoDB [Database]
3
+ #
4
+ database MongoDB do |db|
5
+ db.name = "my_database_name"
6
+ db.username = "my_username"
7
+ db.password = "my_password"
8
+ db.host = "localhost"
9
+ db.port = 5432
10
+ db.ipv6 = false
11
+ db.only_collections = ["only", "these", "collections"]
12
+ db.additional_options = []
13
+ db.lock = false
14
+ db.oplog = false
15
+ end
@@ -0,0 +1,18 @@
1
+ ##
2
+ # MySQL [Database]
3
+ #
4
+ database MySQL do |db|
5
+ # To dump all databases, set `db.name = :all` (or leave blank)
6
+ db.name = "my_database_name"
7
+ db.username = "my_username"
8
+ db.password = "my_password"
9
+ db.host = "localhost"
10
+ db.port = 3306
11
+ db.socket = "/tmp/mysql.sock"
12
+ # Note: when using `skip_tables` with the `db.name = :all` option,
13
+ # table names should be prefixed with a database name.
14
+ # e.g. ["db_name.table_to_skip", ...]
15
+ db.skip_tables = ["skip", "these", "tables"]
16
+ db.only_tables = ["only", "these", "tables"]
17
+ db.additional_options = ["--quick", "--single-transaction"]
18
+ end
@@ -0,0 +1,16 @@
1
+ ##
2
+ # PostgreSQL [Database]
3
+ #
4
+ database PostgreSQL do |db|
5
+ # To dump all databases, set `db.name = :all` (or leave blank)
6
+ db.name = "my_database_name"
7
+ db.username = "my_username"
8
+ db.password = "my_password"
9
+ db.host = "localhost"
10
+ db.port = 5432
11
+ db.socket = "/tmp/pg.sock"
12
+ # When dumping all databases, `skip_tables` and `only_tables` are ignored.
13
+ db.skip_tables = ["skip", "these", "tables"]
14
+ db.only_tables = ["only", "these", "tables"]
15
+ db.additional_options = ["-xc", "-E=utf8"]
16
+ end
@@ -0,0 +1,16 @@
1
+ ##
2
+ # Redis [Database]
3
+ #
4
+ database Redis do |db|
5
+ db.mode = :copy # or :sync
6
+ # Full path to redis dump file for :copy mode.
7
+ db.rdb_path = '/var/lib/redis/dump.rdb'
8
+ # When :copy mode is used, perform a SAVE before
9
+ # copying the dump file specified by `rdb_path`.
10
+ db.invoke_save = false
11
+ db.host = 'localhost'
12
+ db.port = 6379
13
+ db.socket = '/tmp/redis.sock'
14
+ db.password = 'my_password'
15
+ db.additional_options = []
16
+ end
@@ -0,0 +1,17 @@
1
+ ##
2
+ # Riak [Database]
3
+ #
4
+ database Riak do |db|
5
+ ##
6
+ # The node from which to perform the backup.
7
+ # default: 'riak@127.0.0.1'
8
+ db.node = 'riak@hostname'
9
+ ##
10
+ # The Erlang cookie/shared secret used to connect to the node.
11
+ # default: 'riak'
12
+ db.cookie = 'cookie'
13
+ ##
14
+ # The user for the Riak instance.
15
+ # default: 'riak'
16
+ db.user = 'riak'
17
+ end
@@ -0,0 +1,27 @@
1
+ ##
2
+ # GPG [Encryptor]
3
+ #
4
+ # Setting up #keys, as well as #gpg_homedir and #gpg_config,
5
+ # would be best set in config.rb using Encryptor::GPG.defaults
6
+ #
7
+ encrypt_with GPG do |encryption|
8
+ # Setup public keys for #recipients
9
+ encryption.keys = {}
10
+ encryption.keys['user@domain.com'] = <<-KEY
11
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
12
+ Version: GnuPG v1.4.11 (Darwin)
13
+
14
+ <Your GPG Public Key Here>
15
+ -----END PGP PUBLIC KEY BLOCK-----
16
+ KEY
17
+
18
+ # Specify mode (:asymmetric, :symmetric or :both)
19
+ encryption.mode = :both # defaults to :asymmetric
20
+
21
+ # Specify recipients from #keys (for :asymmetric encryption)
22
+ encryption.recipients = ['user@domain.com']
23
+
24
+ # Specify passphrase or passphrase_file (for :symmetric encryption)
25
+ encryption.passphrase = 'a secret'
26
+ # encryption.passphrase_file = '~/backup_passphrase'
27
+ end
@@ -0,0 +1,9 @@
1
+ ##
2
+ # OpenSSL [Encryptor]
3
+ #
4
+ encrypt_with OpenSSL do |encryption|
5
+ encryption.password = "my_password" # From String
6
+ encryption.password_file = "/path/to/password/file" # Or from File
7
+ encryption.base64 = true
8
+ encryption.salt = true
9
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+ ##
4
+ # Backup Generated: <%= @options[:trigger] %>
5
+ # Once configured, you can run the backup with the following command:
6
+ #
7
+ # $ backup perform -t <%= @options[:trigger] %> [-c <path_to_configuration_file>]
8
+ #
9
+ # For more information about Backup's components, see the documentation at:
10
+ # http://meskyanichi.github.io/backup
11
+ #
12
+ Model.new(:<%= @options[:trigger] %>, 'Description for <%= @options[:trigger] %>') do
13
+ <% if @options[:splitter] %>
14
+ <%= Backup::Template.new.result('cli/splitter') %>
15
+ <% end; if @options[:archives] %>
16
+ <%= Backup::Template.new.result('cli/archive') %>
17
+ <% end; %w{ databases storages syncers encryptor compressor notifiers }.each do |item|
18
+ if @options[item]
19
+ @options[item].split(',').map(&:strip).uniq.each do |entry|
20
+ if File.exist?(File.join(Backup::TEMPLATE_PATH, 'cli', item, entry)) %>
21
+ <%= Backup::Template.new.result("cli/#{ item }/#{ entry }") %>
22
+ <% end
23
+ end
24
+ end
25
+ end %>
26
+ end
@@ -0,0 +1,12 @@
1
+ ##
2
+ # Campfire [Notifier]
3
+ #
4
+ notify_by Campfire do |campfire|
5
+ campfire.on_success = true
6
+ campfire.on_warning = true
7
+ campfire.on_failure = true
8
+
9
+ campfire.api_token = "my_api_authentication_token"
10
+ campfire.subdomain = "my_subdomain"
11
+ campfire.room_id = "my_room_id"
12
+ end
@@ -0,0 +1,15 @@
1
+ ##
2
+ # Hipchat [Notifier]
3
+ #
4
+ notify_by Hipchat do |hipchat|
5
+ hipchat.on_success = true
6
+ hipchat.on_warning = true
7
+ hipchat.on_failure = true
8
+
9
+ hipchat.token = "token"
10
+ hipchat.from = "DB Backup"
11
+ hipchat.rooms_notified = ["activity"]
12
+ hipchat.success_color = "green"
13
+ hipchat.warning_color = "yellow"
14
+ hipchat.failure_color = "red"
15
+ end
@@ -0,0 +1,32 @@
1
+ ##
2
+ # HttpPost [Notifier]
3
+ #
4
+ notify_by HttpPost do |post|
5
+ post.on_success = true
6
+ post.on_warning = true
7
+ post.on_failure = true
8
+
9
+ # URI to post the notification to.
10
+ # Port may be specified if needed.
11
+ # If Basic Authentication is required, supply user:pass.
12
+ post.uri = 'https://user:pass@your.domain.com:8443/path'
13
+
14
+ ##
15
+ # Optional
16
+ #
17
+ # Additional headers to send.
18
+ # post.headers = { 'Authentication' => 'my_auth_info' }
19
+ #
20
+ # Additional form params to post.
21
+ # post.params = { 'auth_token' => 'my_token' }
22
+ #
23
+ # Successful response codes. Default: 200
24
+ # post.success_codes = [200, 201, 204]
25
+ #
26
+ # Defaults to true on most systems.
27
+ # Force with +true+, disable with +false+
28
+ # post.ssl_verify_peer = false
29
+ #
30
+ # Supplied by default. Override with a custom 'cacert.pem' file.
31
+ # post.ssl_ca_file = '/my/cacert.pem'
32
+ end
@@ -0,0 +1,21 @@
1
+ ##
2
+ # Mail [Notifier]
3
+ #
4
+ # The default delivery method for Mail Notifiers is 'SMTP'.
5
+ # See the documentation for other delivery options.
6
+ #
7
+ notify_by Mail do |mail|
8
+ mail.on_success = true
9
+ mail.on_warning = true
10
+ mail.on_failure = true
11
+
12
+ mail.from = "sender@email.com"
13
+ mail.to = "receiver@email.com"
14
+ mail.address = "smtp.gmail.com"
15
+ mail.port = 587
16
+ mail.domain = "your.host.name"
17
+ mail.user_name = "sender@email.com"
18
+ mail.password = "my_password"
19
+ mail.authentication = "plain"
20
+ mail.encryption = :starttls
21
+ end
@@ -0,0 +1,13 @@
1
+ ##
2
+ # Nagios [Notifier]
3
+ #
4
+ notify_by Nagios do |nagios|
5
+ nagios.on_success = true
6
+ nagios.on_warning = true
7
+ nagios.on_failure = true
8
+
9
+ nagios.nagios_host = 'nagioshost'
10
+ nagios.nagios_port = 5667
11
+ nagios.service_name = 'My Backup'
12
+ nagios.service_host = 'backuphost'
13
+ end
@@ -0,0 +1,11 @@
1
+ ##
2
+ # Prowl [Notifier]
3
+ #
4
+ notify_by Prowl do |prowl|
5
+ prowl.on_success = true
6
+ prowl.on_warning = true
7
+ prowl.on_failure = true
8
+
9
+ prowl.application = "my_application"
10
+ prowl.api_key = "my_api_key"
11
+ end
@@ -0,0 +1,11 @@
1
+ ##
2
+ # Pushover [Notifier]
3
+ #
4
+ notify_by Pushover do |push|
5
+ push.on_success = true
6
+ push.on_warning = true
7
+ push.on_failure = true
8
+
9
+ push.user = "USER_TOKEN"
10
+ push.token = "APP_TOKEN"
11
+ end
@@ -0,0 +1,13 @@
1
+ ##
2
+ # Twitter [Notifier]
3
+ #
4
+ notify_by Twitter do |tweet|
5
+ tweet.on_success = true
6
+ tweet.on_warning = true
7
+ tweet.on_failure = true
8
+
9
+ tweet.consumer_key = "my_consumer_key"
10
+ tweet.consumer_secret = "my_consumer_secret"
11
+ tweet.oauth_token = "my_oauth_token"
12
+ tweet.oauth_token_secret = "my_oauth_token_secret"
13
+ end
@@ -0,0 +1,7 @@
1
+ ##
2
+ # Split [Splitter]
3
+ #
4
+ # Split the backup file in to chunks of 250 megabytes
5
+ # if the backup file size exceeds 250 megabytes
6
+ #
7
+ split_into_chunks_of 250
@@ -0,0 +1,11 @@
1
+ ##
2
+ # Rackspace Cloud Files [Storage]
3
+ #
4
+ store_with CloudFiles do |cf|
5
+ cf.api_key = 'my_api_key'
6
+ cf.username = 'my_username'
7
+ cf.container = 'my_container'
8
+ cf.segments_container = 'my_segments_container' # must be different than `container`
9
+ cf.segment_size = 5 # MiB
10
+ cf.path = 'path/to/backups' # path within the container
11
+ end
@@ -0,0 +1,19 @@
1
+ ##
2
+ # Dropbox [Storage]
3
+ #
4
+ # Your initial backup must be performed manually to authorize
5
+ # this machine with your Dropbox account. This authorized session
6
+ # will be stored in `cache_path` and used for subsequent backups.
7
+ #
8
+ store_with Dropbox do |db|
9
+ db.api_key = "my_api_key"
10
+ db.api_secret = "my_api_secret"
11
+ # Sets the path where the cached authorized session will be stored.
12
+ # Relative paths will be relative to ~/Backup, unless the --root-path
13
+ # is set on the command line or within your configuration file.
14
+ db.cache_path = ".cache"
15
+ # :app_folder (default) or :dropbox
16
+ db.access_type = :app_folder
17
+ db.path = "/path/to/my/backups"
18
+ db.keep = 25
19
+ end
@@ -0,0 +1,12 @@
1
+ ##
2
+ # FTP (File Transfer Protocol) [Storage]
3
+ #
4
+ store_with FTP do |server|
5
+ server.username = "my_username"
6
+ server.password = "my_password"
7
+ server.ip = "123.45.678.90"
8
+ server.port = 21
9
+ server.path = "~/backups/"
10
+ server.keep = 5
11
+ server.passive_mode = false
12
+ end
@@ -0,0 +1,7 @@
1
+ ##
2
+ # Local (Copy) [Storage]
3
+ #
4
+ store_with Local do |local|
5
+ local.path = "~/backups/"
6
+ local.keep = 5
7
+ end
@@ -0,0 +1,9 @@
1
+ ##
2
+ # Ninefold Cloud Storage [Storage]
3
+ #
4
+ store_with Ninefold do |nf|
5
+ nf.storage_token = "my_storage_token"
6
+ nf.storage_secret = "my_storage_secret"
7
+ nf.path = "/path/to/my/backups"
8
+ nf.keep = 10
9
+ end
@@ -0,0 +1,17 @@
1
+ ##
2
+ # RSync [Storage]
3
+ #
4
+ # The default `mode` is :ssh, which does not require the use
5
+ # of an rsync daemon on the remote. If you wish to connect
6
+ # directly to an rsync daemon, or via SSH using daemon features,
7
+ # :rsync_daemon and :ssh_daemon modes are also available.
8
+ #
9
+ # If no `host` is specified, the transfer will be a local
10
+ # operation. `mode` and `compress` will have no meaning.
11
+ #
12
+ store_with RSync do |rsync|
13
+ rsync.mode = :ssh
14
+ rsync.host = "123.45.678.90"
15
+ rsync.path = "~/backups/"
16
+ rsync.compress = true
17
+ end
@@ -0,0 +1,14 @@
1
+ ##
2
+ # Amazon Simple Storage Service [Storage]
3
+ #
4
+ store_with S3 do |s3|
5
+ # AWS Credentials
6
+ s3.access_key_id = "my_access_key_id"
7
+ s3.secret_access_key = "my_secret_access_key"
8
+ # Or, to use a IAM Profile:
9
+ # s3.use_iam_profile = true
10
+
11
+ s3.region = "us-east-1"
12
+ s3.bucket = "bucket-name"
13
+ s3.path = "path/to/backups"
14
+ end
@@ -0,0 +1,14 @@
1
+ ##
2
+ # SCP (Secure Copy) [Storage]
3
+ #
4
+ store_with SCP do |server|
5
+ server.username = "my_username"
6
+ server.password = "my_password"
7
+ server.ip = "123.45.678.90"
8
+ server.port = 22
9
+ server.path = "~/backups/"
10
+ server.keep = 5
11
+
12
+ # Additional options for the SSH connection.
13
+ # server.ssh_options = {}
14
+ end
@@ -0,0 +1,14 @@
1
+ ##
2
+ # SFTP (Secure File Transfer Protocol) [Storage]
3
+ #
4
+ store_with SFTP do |server|
5
+ server.username = "my_username"
6
+ server.password = "my_password"
7
+ server.ip = "123.45.678.90"
8
+ server.port = 22
9
+ server.path = "~/backups/"
10
+ server.keep = 5
11
+
12
+ # Additional options for the SSH connection.
13
+ # server.ssh_options = {}
14
+ end