class ForemanMaintain::Utils::Backup

Constants

OFFLINE_BACKUP
ONLINE_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 17
def initialize(backup_dir)
  # fpc stands for foreman proxy w/ content
  @backup_dir = backup_dir
  @standard_files = ['config_files.tar.gz']
  @foreman_online_files = ['foreman.dump']
  @foreman_offline_files = ['pgsql_data.tar.gz']
  @katello_online_files = @foreman_online_files + ['candlepin.dump', 'pulpcore.dump']
  @katello_offline_files = ['pgsql_data.tar.gz']
  @fpc_online_files = ['pulpcore.dump']
  @fpc_offline_files = ['pgsql_data.tar.gz']
end

Public Instance Methods

backup_type() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 267
def backup_type
  online_backup? ? ONLINE_BACKUP : OFFLINE_BACKUP
end
check_backup() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 59
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
check_file_existence(existence_map) click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 84
def check_file_existence(existence_map)
  existence_map[:present].each do |file|
    unless file_map[file][:present]
      return false
    end
  end

  existence_map[:absent].each do |file|
    if file_map[file][:present]
      return false
    end
  end

  true
end
different_source_os?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 263
def different_source_os?
  source_os_version != "#{os_name} #{os_version}"
end
dumps_for_hybrid_db_setup(dbs_hash) click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 168
def dumps_for_hybrid_db_setup(dbs_hash)
  present = []
  absent = []
  dbs_hash.each do |data_file, dbs|
    dbs.each do |db|
      feature_label = "#{db}_database"
      dump_file = "#{db}_dump"
      if feature(feature_label.to_sym).local?
        present |= [data_file]
        absent << dump_file.to_sym
      else
        present << dump_file.to_sym
      end
    end
    absent |= [data_file] unless present.include?(data_file)
  end
  [present, absent]
end
file_map() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 29
def file_map
  @file_map ||= {
    :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'),
    :config_files => map_file(@backup_dir, 'config_files.tar.gz'),
    :metadata => map_file(@backup_dir, 'metadata.yml'),
    :pulpcore_dump => map_file(@backup_dir, 'pulpcore.dump'),
  }
end
foreman_logical_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 163
def foreman_logical_backup?
  check_file_existence(:present => [:pgsql_data, :foreman_dump],
    :absent => [:candlepin_dump, :pulpcore_dump])
end
foreman_online_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 158
def foreman_online_backup?
  check_file_existence(:present => [:foreman_dump],
    :absent => [:candlepin_dump, :pgsql_data, :pulpcore_dump])
end
foreman_standard_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 153
def foreman_standard_backup?
  check_file_existence(:present => [:pgsql_data],
    :absent => [:candlepin_dump, :foreman_dump, :pulpcore_dump])
end
fpc_hybrid_db_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 146
def fpc_hybrid_db_backup?
  all_dbs = { :pgsql_data => ['pulpcore'] }
  present, absent = dumps_for_hybrid_db_setup(all_dbs)
  absent.concat [:candlepin_dump, :foreman_dump]
  check_file_existence(:present => present, :absent => absent)
end
fpc_logical_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 140
def fpc_logical_backup?
  present = [:pulpcore_dump, :pgsql_data]
  absent = [:candlepin_dump, :foreman_dump]
  check_file_existence(:present => present, :absent => absent)
end
fpc_online_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 134
def fpc_online_backup?
  present = [:pulpcore_dump]
  absent = [:pgsql_data, :candlepin_dump, :foreman_dump]
  check_file_existence(:present => present, :absent => absent)
end
fpc_standard_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 127
def fpc_standard_backup?
  present = [:pgsql_data]
  absent = [:candlepin_dump, :foreman_dump, :pulpcore_dump]
  check_file_existence(:present => present,
    :absent => absent)
end
incremental?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 243
def incremental?
  !!metadata.fetch('incremental', false)
end
installed_rpms() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 251
def installed_rpms
  metadata.fetch('rpms', metadata.fetch(:rpms, []))
end
katello_hybrid_db_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 121
def katello_hybrid_db_backup?
  all_dbs = { :pgsql_data => %w[candlepin foreman pulpcore] }
  present, absent = dumps_for_hybrid_db_setup(all_dbs)
  check_file_existence(:present => present, :absent => absent)
end
katello_logical_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 114
def katello_logical_backup?
  present = [:pgsql_data, :candlepin_dump, :foreman_dump, :pulpcore_dump]
  absent = []
  check_file_existence(:present => present,
    :absent => absent)
end
katello_online_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 107
def katello_online_backup?
  present = [:candlepin_dump, :foreman_dump, :pulpcore_dump]
  absent = [:pgsql_data]
  check_file_existence(:present => present,
    :absent => absent)
end
katello_standard_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 100
def katello_standard_backup?
  present = [:pgsql_data]
  absent = [:candlepin_dump, :foreman_dump, :pulpcore_dump]
  check_file_existence(:present => present,
    :absent => absent)
end
map_file(backup_dir, filename) click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 41
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 212
def metadata
  if file_map[:metadata][:present]
    YAML.load_file(file_map[:metadata][:path])
  else
    {}
  end
end
online_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 247
def online_backup?
  !!metadata.fetch('online', false)
end
present_files() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 50
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 220
def pulp_tar_split?
  File.exist?(File.join(@backup_dir, 'pulp_data.part0002'))
end
source_os_version() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 259
def source_os_version
  metadata.fetch('os_version', 'unknown')
end
sql_dump_files_exist?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 233
def sql_dump_files_exist?
  file_map[:foreman_dump][:present] ||
    file_map[:candlepin_dump][:present] ||
    file_map[:pulpcore_dump][:present]
end
sql_needs_dump_restore?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 239
def sql_needs_dump_restore?
  !sql_tar_files_exist? && sql_dump_files_exist?
end
sql_tar_files_exist?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 229
def sql_tar_files_exist?
  file_map[:pgsql_data][:present]
end
tar_backups_exist?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 224
def tar_backups_exist?
  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 55
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 80
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 69
def valid_fpc_backup?
  fpc_online_backup? || fpc_standard_backup? || fpc_logical_backup? || \
    fpc_hybrid_db_backup?
end
valid_katello_backup?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 74
def valid_katello_backup?
  katello_online_backup? || katello_standard_backup? || katello_logical_backup? || \
    # Katello can have setup where some of dbs are external but not all
    katello_hybrid_db_backup?
end
validate_hostname?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 187
def validate_hostname?
  # make sure that the system hostname is the same as the backup
  metadata.fetch('hostname', nil) == hostname
end
validate_interfaces() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 192
def validate_interfaces
  # I wanted to do `Socket.getifaddrs.map(&:name).uniq`,
  # but this has to work with Ruby 2.0, and Socket.getifaddrs is 2.1+
  errors = {}
  system_interfaces = Dir.entries('/sys/class/net') - ['.', '..']

  proxy_config = metadata.fetch('proxy_config', {})

  %w[dns dhcp].each do |feature|
    next unless proxy_config.fetch(feature, false)

    wanted_interface = proxy_config.fetch("#{feature}_interface", 'lo')
    unless system_interfaces.include?(wanted_interface)
      errors[feature] = { 'configured' => wanted_interface, 'available' => system_interfaces }
    end
  end

  return errors
end
with_puppetserver?() click to toggle source
# File lib/foreman_maintain/utils/backup.rb, line 255
def with_puppetserver?
  installed_rpms.any? { |rpm| rpm.start_with?('puppetserver-') }
end