Class: MongoDbUtils::Cmd
- Inherits:
-
Object
- Object
- MongoDbUtils::Cmd
- Includes:
- Tools
- Defined in:
- lib/mongo-db-utils/cmd.rb
Class Method Summary collapse
- .backup(db, folder, final_path = nil, tar_it = true) ⇒ Object
- .backup_s3(backup_folder, db, bucket_name, access_key_id, secret_access_key) ⇒ Object
-
.copy(path, source, destination, halt_on_no_backup = true, skip_backup = false) ⇒ Object
With remote dbs you can’t do a copy_database if you’re not an admin.
- .delete_backup(backup_folder, backup) ⇒ Object
- .download_backup_from_s3(backup_folder, backup, bucket_name, access_key_id, secret_access_key) ⇒ Object
- .list_backup_folders(backup_folder, backup) ⇒ Object
- .list_backups(bucket_name, access_key_id, secret_access_key) ⇒ Object
- .list_downloaded_backups(backup_folder) ⇒ Object
- .restore_from_backup(backup_folder, db, backup, source_db) ⇒ Object
Class Method Details
.backup(db, folder, final_path = nil, tar_it = true) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/mongo-db-utils/cmd.rb', line 9 def self.backup(db, folder, final_path = nil, tar_it = true) puts ">> Backing up: #{db}, #{folder}, #{final_path}" unless (db_exists?(db)) return false end if (final_path.nil?) out_path = File.join(folder, db.to_host_s, db.name, ) else out_path = File.join(folder, final_path) end full_path = File.(out_path) puts ">> final backup path: #{full_path}" FileUtils.mkdir_p(full_path) Dump.new( db.to_host_s, db.name, full_path, db.username, db.password).run full_db_path = File.join(full_path, db.name) if (tar_it) Dir.chdir(full_path) `tar --create --verbose --file=#{db.name}.tar #{db.name}` delete_folder full_db_path "#{full_db_path}.tar" else full_db_path end end |
.backup_s3(backup_folder, db, bucket_name, access_key_id, secret_access_key) ⇒ Object
88 89 90 91 92 93 94 95 |
# File 'lib/mongo-db-utils/cmd.rb', line 88 def self.backup_s3(backup_folder, db, bucket_name, access_key_id, secret_access_key) tar_file = MongoDbUtils::Cmd.backup(db, backup_folder) name = tar_file.gsub(File.(backup_folder), '') MongoDbUtils::S3::put_file(tar_file, name, bucket_name, access_key_id, secret_access_key) file = File.basename(tar_file) folder = tar_file.gsub(file, '') delete_folder folder end |
.copy(path, source, destination, halt_on_no_backup = true, skip_backup = false) ⇒ Object
With remote dbs you can’t do a copy_database if you’re not an admin.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/mongo-db-utils/cmd.rb', line 47 def self.copy(path, source, destination, halt_on_no_backup = true, skip_backup = false) backup_made = if skip_backup true else backup(destination, path) end if !backup_made && halt_on_no_backup puts 'aborting - no backup was made' return end tmp_path = File.join(ConfigLoader::CONFIG_LOCATION, 'tmp') FileUtils.mkdir_p(tmp_path) puts "backup to: #{File.join(tmp_path, source.name)}" tmp_dump_path = backup(source, tmp_path, source.name, false) # if the destination db doesn't exist # we assume that the user has admin control of the server # eg its a local server (this needs to be thought through a bit more) username = '' password = '' if db_exists? destination username = destination.username password = destination.password end Restore.new( destination.to_host_s, destination.name, "#{tmp_dump_path}", username, password).run delete_folder tmp_path end |
.delete_backup(backup_folder, backup) ⇒ Object
139 140 141 |
# File 'lib/mongo-db-utils/cmd.rb', line 139 def self.delete_backup(backup_folder, backup) delete_folder File.join(backup_folder, backup) end |
.download_backup_from_s3(backup_folder, backup, bucket_name, access_key_id, secret_access_key) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/mongo-db-utils/cmd.rb', line 112 def self.download_backup_from_s3(backup_folder, backup, bucket_name, access_key_id, secret_access_key) if backup == 'latest' backup = get_latest_backup(bucket_name, access_key_id, secret_access_key) end backup_file = File.join(backup_folder, File.basename(backup)) puts "download_backup_from_s3 #{backup_file}" if File.exists? backup_file puts "File downloaded already #{backup_file}" else FileUtils.mkdir_p(backup_folder) puts "Downloading #{backup_file}" download_backup(backup_file, backup, bucket_name, access_key_id, secret_access_key) end backup end |
.list_backup_folders(backup_folder, backup) ⇒ Object
106 107 108 109 110 |
# File 'lib/mongo-db-utils/cmd.rb', line 106 def self.list_backup_folders(backup_folder, backup) puts "reading backup folders from #{backup_folder} #{backup}" folders = list_archive_folders(backup_folder, backup) folders.map { |a| a.slice! File.basename(backup, '.tgz'); a.delete '/' }.select { |a| a != '' } end |
.list_backups(bucket_name, access_key_id, secret_access_key) ⇒ Object
97 98 99 |
# File 'lib/mongo-db-utils/cmd.rb', line 97 def self.list_backups(bucket_name, access_key_id, secret_access_key) MongoDbUtils::S3::list_bucket(bucket_name, access_key_id, secret_access_key) end |
.list_downloaded_backups(backup_folder) ⇒ Object
101 102 103 104 |
# File 'lib/mongo-db-utils/cmd.rb', line 101 def self.list_downloaded_backups(backup_folder) FileUtils.mkdir_p(backup_folder) Dir.entries(backup_folder).select { |a| a.end_with? '.tgz' } end |
.restore_from_backup(backup_folder, db, backup, source_db) ⇒ Object
129 130 131 132 133 134 135 136 |
# File 'lib/mongo-db-utils/cmd.rb', line 129 def self.restore_from_backup(backup_folder, db, backup, source_db) Dir.mktmpdir do |dir| puts "Unzipping archive ..." unzip(File.join(backup_folder, backup), dir) puts "Restoring db ..." restore_db(db, File.join(dir, source_db )) end end |