definitions/procedures/backup/metadata.rb
module Procedures::Backup
class Metadata < ForemanMaintain::Procedure
metadata do
description 'Generate metadata'
tags :backup
preparation_steps { Checks::Foreman::DBUp.new if feature(:foreman_server) }
param :backup_dir, 'Directory where to backup to', :required => true
param :incremental_dir, 'Changes since specified backup only'
param :online_backup, 'Select for online backup', :flag => true, :default => false
end
PROXY_CONFIG_ENTRIES = %w[dns dns_interface dhcp dhcp_interface].freeze
def run
with_spinner('Collecting metadata') do |spinner|
metadata = {}
metadata['os_version'] = release_info(spinner)
metadata['plugin_list'] = plugin_list(spinner) || []
metadata['proxy_features'] = proxy_feature_list(spinner) || []
installed_pkgs(metadata)
metadata['incremental'] = @incremental_dir || false
metadata['online'] = @online_backup
metadata['hostname'] = hostname
metadata['proxy_config'] = proxy_config(spinner)
save_metadata(metadata, spinner)
end
end
private
def installed_pkgs(metadata)
installed_pkgs = package_manager.list_installed_packages
if el?
metadata[:rpms] = installed_pkgs
else
metadata[:debs] = installed_pkgs
end
end
def save_metadata(metadata, spinner)
spinner.update('Saving metadata to metadata.yml')
File.open(File.join(@backup_dir, 'metadata.yml'), 'w') do |metadata_file|
metadata_file.puts metadata.to_yaml
end
end
def release_info(spinner)
spinner.update('Collecting system release info')
"#{os_name} #{os_version}"
end
def plugin_list(spinner)
if feature(:foreman_server)
spinner.update('Collecting list of plugins')
feature(:foreman_server).plugins
end
end
def proxy_feature_list(spinner)
if feature(:foreman_proxy)
spinner.update('Collecting list of proxy features')
feature(:foreman_proxy).features
end
end
def proxy_config(spinner)
if feature(:installer)
spinner.update('Collecting proxy configuration')
feature(:installer).answers['foreman_proxy'].select do |key, _|
PROXY_CONFIG_ENTRIES.include?(key)
end
end
end
end
end