Project

General

Profile

« Previous | Next » 

Revision 1214e201

Added by Ivan Necas about 6 years ago

Fixes #22762 - Check availability of repositories before upgrade

View differences:

definitions/checks/repositories/validate.rb
module Checks::Repositories
class Validate < ForemanMaintain::Check
metadata do
description 'Validate availability of repositories'
confine do
feature(:downstream)
end
param :version,
'Version for which repositories needs to be validated',
:required => true
manual_detection
end
def run
with_spinner("Validating availability of repositories for #{@version}") do |spinner|
absent_repos = feature(:downstream).absent_repos(@version)
unless absent_repos.empty?
spinner.update('Some repositories missing, calling `subscription-manager refresh`')
feature(:downstream).rhsm_refresh
absent_repos = feature(:downstream).absent_repos(@version)
end
unless absent_repos.empty?
fail!(
"Following repositories are not available on your system: #{absent_repos.join(', ')}"
)
end
end
end
end
end
definitions/features/downstream.rb
execute!(%(subscription-manager register #{org_options}\
--activationkey #{shellescape(activation_key)} --force))
else
execute!(%(subscription-manager refresh))
execute!(%(subscription-manager repos --disable '*'))
enable_options = rh_repos(version).map { |r| "--enable=#{r}" }.join(' ')
execute!(%(subscription-manager repos #{enable_options}))
end
end
def absent_repos(version)
all_repo_lines = execute(%(LANG=en_US.utf-8 subscription-manager repos --list | ) +
%(grep '^Repo ID:')).split("\n")
all_repos = all_repo_lines.map { |line| line.split(/\s+/).last }
repos_required = rh_repos(version)
repos_found = repos_required & all_repos
repos_required - repos_found
end
def rhsm_refresh
execute!(%(subscription-manager refresh))
end
private
def rh_repos(sat_version)
definitions/scenarios/upgrade_to_satellite_6_2.rb
def compose
add_steps(find_checks(:default))
add_steps(find_checks(:pre_upgrade))
add_step(Checks::Repositories::Validate.new(:version => '6.2'))
end
end
definitions/scenarios/upgrade_to_satellite_6_2_z.rb
def compose
add_steps(find_checks(:default))
add_steps(find_checks(:pre_upgrade))
add_step(Checks::Repositories::Validate.new(:version => '6.2'))
end
end
definitions/scenarios/upgrade_to_satellite_6_3.rb
def compose
add_steps(find_checks(:default))
add_steps(find_checks(:pre_upgrade))
add_step(Checks::Repositories::Validate.new(:version => '6.3'))
end
end
definitions/scenarios/upgrade_to_satellite_6_3_z.rb
def compose
add_steps(find_checks(:default))
add_steps(find_checks(:pre_upgrade))
add_step(Checks::Repositories::Validate.new(:version => '6.3'))
end
end
lib/foreman_maintain/detector.rb
def find_present_classes(object_base_class)
object_base_class.all_sub_classes.reduce([]) do |array, object_class|
array << object_class if object_class.present?
array << object_class if object_class.autodetect? && object_class.present?
array
end
end

Also available in: Unified diff