class ForemanMaintain::Utils::Backup

Attributes

foreman_offline_files[RW]
foreman_online_files[RW]
fpc_offline_files[RW]
fpc_online_files[RW]
katello_offline_files[RW]
katello_online_files[RW]
standard_files[RW]

Public Class Methods

new(backup_dir) click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 14
def initialize(backup_dir)
  # fpc stands for foreman proxy w/ content
  @backup_dir = backup_dir
  @standard_files = ['config_files.tar.gz']
  @katello_online_files = ['mongo_dump', 'candlepin.dump', 'foreman.dump']
  @katello_offline_files = ['mongo_data.tar.gz', 'pgsql_data.tar.gz']
  @foreman_online_files = ['foreman.dump']
  @foreman_offline_files = ['pgsql_data.tar.gz']
  @fpc_online_files = ['mongo_dump']
  @fpc_offline_files = ['mongo_data.tar.gz']
end

Public Instance Methods

check_backup() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 58
def check_backup
  if feature(:instance).foreman_proxy_with_content?
    valid_fpc_backup?
  elsif feature(:katello)
    valid_katello_backup?
  else
    valid_foreman_backup?
  end
end
file_map() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 26
def file_map
  @file_map ||= {
    :mongo_data => map_file(@backup_dir, 'mongo_data.tar.gz'),
    :pgsql_data => map_file(@backup_dir, 'pgsql_data.tar.gz'),
    :pulp_data => map_file(@backup_dir, 'pulp_data.tar'),
    :foreman_dump => map_file(@backup_dir, 'foreman.dump'),
    :candlepin_dump => map_file(@backup_dir, 'candlepin.dump'),
    :mongo_dump => map_file(@backup_dir, 'mongo_dump'),
    :config_files => map_file(@backup_dir, 'config_files.tar.gz'),
    :pg_globals => map_file(@backup_dir, 'pg_globals.dump'),
    :metadata => map_file(@backup_dir, 'metadata.yml')
  }
end
foreman_logical_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 158
def foreman_logical_backup?
  file_map[:pgsql_data][:present] &&
    file_map[:foreman_dump][:present] &&
    !(
      file_map[:candlepin_dump][:present] ||
      file_map[:mongo_data][:present] ||
      file_map[:mongo_dump][:present]
    )
end
foreman_online_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 148
def foreman_online_backup?
  file_map[:foreman_dump][:present] &&
    !(
      file_map[:candlepin_dump][:present] ||
      file_map[:pgsql_data][:present] ||
      file_map[:mongo_data][:present] ||
      file_map[:mongo_dump][:present]
    )
end
foreman_standard_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 138
def foreman_standard_backup?
  file_map[:pgsql_data][:present] &&
    !(
      file_map[:candlepin_dump][:present] ||
      file_map[:foreman_dump][:present] ||
      file_map[:mongo_data][:present] ||
      file_map[:mongo_dump][:present]
    )
end
fpc_logical_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 128
def fpc_logical_backup?
  file_map[:mongo_dump][:present] &&
    file_map[:mongo_data][:present] &&
    !(
      file_map[:pgsql_data][:present] ||
      file_map[:candlepin_dump][:present] ||
      file_map[:foreman_dump][:present]
    )
end
fpc_online_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 118
def fpc_online_backup?
  file_map[:mongo_dump][:present] &&
    !(
      file_map[:mongo_data][:present] ||
      file_map[:pgsql_data][:present] ||
      file_map[:candlepin_dump][:present] ||
      file_map[:foreman_dump][:present]
    )
end
fpc_standard_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 108
def fpc_standard_backup?
  file_map[:mongo_data][:present] &&
    !(
      file_map[:pgsql_data][:present] ||
      file_map[:candlepin_dump][:present] ||
      file_map[:foreman_dump][:present] ||
      file_map[:mongo_dump][:present]
    )
end
incremental?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 208
def incremental?
  !!metadata.fetch('incremental', false)
end
katello_logical_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 100
def katello_logical_backup?
  file_map[:mongo_dump][:present] &&
    file_map[:mongo_data][:present] &&
    file_map[:pgsql_data][:present] &&
    file_map[:candlepin_dump][:present] &&
    file_map[:foreman_dump][:present]
end
katello_online_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 90
def katello_online_backup?
  file_map[:candlepin_dump][:present] &&
    file_map[:foreman_dump][:present] &&
    file_map[:mongo_dump][:present] &&
    !(
      file_map[:mongo_data][:present] ||
      file_map[:pgsql_data][:present]
    )
end
katello_standard_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 80
def katello_standard_backup?
  file_map[:mongo_data][:present] &&
    file_map[:pgsql_data][:present] &&
    !(
      file_map[:candlepin_dump][:present] ||
      file_map[:foreman_dump][:present] ||
      file_map[:mongo_dump][:present]
    )
end
map_file(backup_dir, filename) click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 40
def map_file(backup_dir, filename)
  file_path = File.join(backup_dir, filename)
  present = File.exist?(file_path)
  {
    :present => present,
    :path => file_path
  }
end
metadata() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 185
def metadata
  if file_map[:metadata][:present]
    YAML.load_file(file_map[:metadata][:path])
  else
    {}
  end
end
present_files() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 49
def present_files
  present_files = file_map.select { |_k, v| v[:present] }
  present_files.values.map { |f| File.basename(f[:path]) }
end
pulp_tar_split?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 193
def pulp_tar_split?
  File.exist?(File.join(@backup_dir, 'pulp_data.part0002'))
end
sql_dump_files_exist?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 203
def sql_dump_files_exist?
  file_map[:foreman_dump][:present] ||
    file_map[:candlepin_dump][:present]
end
tar_backups_exist?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 197
def tar_backups_exist?
  file_map[:mongo_data][:present] ||
    file_map[:pulp_data][:present] ||
    file_map[:pgsql_data][:present]
end
valid_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 54
def valid_backup?
  file_map[:config_files][:present] && check_backup
end
valid_foreman_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 76
def valid_foreman_backup?
  foreman_standard_backup? || foreman_online_backup? || foreman_logical_backup?
end
valid_fpc_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 68
def valid_fpc_backup?
  fpc_online_backup? || fpc_standard_backup? || fpc_logical_backup?
end
valid_katello_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 72
def valid_katello_backup?
  katello_online_backup? || katello_standard_backup? || katello_logical_backup?
end
validate_hostname?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 168
def validate_hostname?
  # make sure that the system hostname is the same as the backup
  config_tarball = file_map[:config_files][:path]
  tar_cmd = "tar zxf #{config_tarball} etc/httpd/conf/httpd.conf --to-stdout"
  status, httpd_config = execute_with_status(tar_cmd)

  # Incremental backups sometimes don't include httpd.conf. Since a "base" backup
  # is restored before an incremental, we can assume that the hostname is checked
  # during the base backup restore
  if status == 0
    match = httpd_config.match(/\s*ServerName\s+"*([^ "]+)"*\s*$/)
    match ? match[1] == hostname : false
  else
    true
  end
end