class MongoOplogBackup::Config

Attributes

options[R]

Public Class Methods

new(options) click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 7
def initialize(options)
  config_file = options.delete(:file)
  # Command line options take precedence
  @options = from_file(config_file).merge(options) 
end

Public Instance Methods

backup_dir() click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 33
def backup_dir
  options[:dir]
end
command_line_options() click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 41
def command_line_options
  args = []
  args << '--ssl' if options[:ssl]
  args << '--sslAllowInvalidCertificates' if options[:sslAllowInvalidCertificates]
  [:host, :port, :username, :password, :sslCAFile, :sslPEMKeyFile, :sslPEMKeyPassword].each do |option|
    args += ["--#{option}", options[option].strip] if options[option]
  end
  
  if options[:authenticationDatabase]
    args += ['--authenticationDatabase', options[:authenticationDatabase]]
  else
    args += ['--authenticationDatabase', 'admin'] if options[:username] && !options[:sslPEMKeyFile]
    args += ['--authenticationDatabase', '$external'] if options[:sslPEMKeyFile]
  end

  args += ['--authenticationMechanism', 'MONGODB-X509'] if options[:sslPEMKeyFile]

  args
end
command_string(cmd) click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 98
def command_string(cmd)
  previous = nil
  filtered = cmd.map do |token|
    pwd = (previous == '--password')
    previous = token
    if pwd
      '***'
    else
      token
    end
  end
  filtered.shelljoin
end
exec(cmd) click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 81
def exec(cmd)
  MongoOplogBackup.log.debug ">>> #{command_string(cmd)}"
  Command.execute(cmd)
end
from_file(file) click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 13
def from_file file
  options = {}
  unless file.nil?
    conf = YAML.load_file(file)
    options[:gzip] = conf["gzip"] unless conf["gzip"].nil?
    options[:ssl] = conf["ssl"] unless conf["ssl"].nil?
    options[:sslAllowInvalidCertificates] = conf["sslAllowInvalidCertificates"] unless conf["sslAllowInvalidCertificates"].nil?
    options[:sslCAFile] = conf["sslCAFile"] unless conf["sslCAFile"].nil?
    options[:sslPEMKeyFile] = conf["sslPEMKeyFile"] unless conf["sslPEMKeyFile"].nil?
    options[:sslPEMKeyPassword] = conf["sslPEMKeyPassword"] unless conf["sslPEMKeyPassword"].nil?
    options[:authenticationDatabase] = conf["authenticationDatabase"] unless conf["authenticationDatabase"].nil?
    options[:host] = conf["host"] unless conf["host"].nil?
    options[:port] = conf["port"].to_s unless conf["port"].nil?
    options[:username] = conf["username"] unless conf["username"].nil?
    options[:password] = conf["password"] unless conf["password"].nil?
  end

  options
end
global_lock_file() click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 77
def global_lock_file
  File.join(backup_dir, 'backup.lock')
end
global_state_file() click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 73
def global_state_file
  File.join(backup_dir, 'backup.json')
end
mongo(db, script) click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 90
def mongo(db, script)
  exec(['mongo'] + command_line_options + ['--quiet', '--norc', db, script])
end
mongodump(*args) click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 86
def mongodump(*args)
  exec(['mongodump'] + command_line_options + args.flatten)
end
mongorestore(*args) click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 94
def mongorestore(*args)
  exec(['mongorestore'] + command_line_options + args.flatten)
end
oplog_dump() click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 65
def oplog_dump
  if use_compression?
    File.join(oplog_dump_folder, 'local/oplog.rs.bson.gz')
  else
    File.join(oplog_dump_folder, 'local/oplog.rs.bson')
  end
end
oplog_dump_folder() click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 61
def oplog_dump_folder
  File.join(backup_dir, 'tmp-dump')
end
use_compression?() click to toggle source
# File lib/mongo_oplog_backup/config.rb, line 37
def use_compression?
  !!options[:gzip]
end