Project

General

Profile

Download (3.77 KB) Statistics
| Branch: | Tag: | Revision:
module ForemanMaintain
module Cli
class UpgradeCommand < Base
def self.target_version_option
option '--target-version', 'TARGET_VERSION', 'Target version of the upgrade',
:required => false
end

def self.disable_self_upgrade_option
option '--disable-self-upgrade', :flag, 'Disable automatic self upgrade',
:default => false
end

def current_target_version
current_target_version = ForemanMaintain::UpgradeRunner.current_target_version
if current_target_version && target_version && target_version != current_target_version
raise Error::UsageError,
"Can't set target version #{target_version}, "\
"#{current_target_version} already in progress"
end
@target_version = current_target_version if current_target_version
return true if current_target_version
end

def validate_target_version!
return if current_target_version
unless UpgradeRunner.available_targets.include?(target_version)
message_start = if target_version
"Can't upgrade to #{target_version}"
else
'--target-version not specified'
end
message = <<-MESSAGE.strip_heredoc
#{message_start}
Possible target versions are:
MESSAGE
versions = UpgradeRunner.available_targets.join("\n")
raise Error::UsageError, message + versions
end
end

def upgrade_runner
return @upgrade_runner if defined? @upgrade_runner
validate_target_version!
@upgrade_runner = ForemanMaintain::UpgradeRunner.new(target_version, reporter,
:assumeyes => assumeyes?,
:whitelist => whitelist || [],
:force => force?).tap(&:load)
end

def print_versions(target_versions)
target_versions.sort.each { |version| puts version }
end

def allow_self_upgrade?
!disable_self_upgrade?
end

subcommand 'list-versions', 'List versions this system is upgradable to' do
disable_self_upgrade_option

def execute
ForemanMaintain.validate_downstream_packages
ForemanMaintain.perform_self_upgrade if allow_self_upgrade?
print_versions(UpgradeRunner.available_targets)
end
end

subcommand 'check', 'Run pre-upgrade checks before upgrading to specified version' do
target_version_option
interactive_option
disable_self_upgrade_option

def execute
ForemanMaintain.validate_downstream_packages
ForemanMaintain.perform_self_upgrade if allow_self_upgrade?
upgrade_runner.run_phase(:pre_upgrade_checks)
exit upgrade_runner.exit_code
end
end

subcommand 'run', 'Run full upgrade to a specified version' do
target_version_option
interactive_option
disable_self_upgrade_option

option '--phase', 'phase', 'run only a specific phase', :required => false do |phase|
unless UpgradeRunner::PHASES.include?(phase.to_sym)
raise Error::UsageError, "Unknown phase #{phase}"
end
phase
end

def execute
ForemanMaintain.validate_downstream_packages
ForemanMaintain.perform_self_upgrade if allow_self_upgrade?
if phase
upgrade_runner.run_phase(phase.to_sym)
else
upgrade_runner.run
end
upgrade_runner.save
exit upgrade_runner.exit_code
end
end
end
end
end
(13-13/13)