Project

General

Profile

« Previous | Next » 

Revision b0337ee3

Added by Amit Upadhye over 1 year ago

Fixes #35058 - upgrade scenario for Foreman and Katello nightly (#633)

  • Fixes #35058 - upgrade scenario for Foreman and Katello nightly

View differences:

definitions/features/capsule.rb
class Features::Capsule < ForemanMaintain::Feature
include ForemanMaintain::Concerns::Downstream
include ForemanMaintain::Concerns::Versions
metadata do
label :capsule
definitions/features/foreman_1_11_x.rb
require 'features/foreman_1_7_x'
class Features::Foreman_1_11_x < Features::Foreman_1_7_x
metadata do
confine do
check_min_version('foreman', '1.11')
end
end
end
definitions/features/foreman_1_7_x.rb
class Features::Foreman_1_7_x < ForemanMaintain::Feature
metadata do
label :foreman
confine do
check_min_version('foreman', '1.7')
end
end
end
definitions/features/foreman_install.rb
class Features::ForemanInstall < ForemanMaintain::Feature
include ForemanMaintain::Concerns::Upstream
include ForemanMaintain::Concerns::Versions
metadata do
label :foreman_install
confine do
!feature(:instance).downstream && !feature(:katello) && feature(:foreman_server)
end
end
end
definitions/features/foreman_server.rb
module ForemanMaintain
module Features
class ForemanServer < ForemanMaintain::Feature
include ForemanMaintain::Concerns::Versions
metadata do
label :foreman_server
confine do
......
def services_running?
services.all?(&:running?)
end
def current_version
@current_version ||= package_version('foreman')
end
end
end
end
definitions/features/installer.rb
end
def run(arguments = '', exec_options = {})
out = execute!("LANG=en_US.utf-8 #{installer_command} #{arguments}".strip, exec_options)
out = execute!("#{installer_command} #{arguments}".strip, exec_options)
@configuration = nil
out
end
def run_with_status(arguments = '', exec_options = {})
cmd_with_arguments = "#{installer_command} #{arguments}".strip
cmd_status, out = execute_with_status(cmd_with_arguments, exec_options)
@configuration = nil
[cmd_status, out]
end
def upgrade(exec_options = {})
run(installer_arguments, exec_options)
end
......
installer_args = ''
if feature(:foreman_proxy) &&
feature(:foreman_proxy).with_content?
feature(:foreman_proxy).with_content? &&
check_max_version('foreman-installer', '3.4')
installer_args += ' --disable-system-checks'
end
unless check_min_version('foreman', '2.1') || check_min_version('foreman-proxy', '2.1')
unless check_min_version('foreman-installer', '2.1')
installer_args += ' --upgrade' if can_upgrade?
end
installer_args
end
definitions/features/instance.rb
end
end
def foreman_server_ssl_ca
@foreman_server_ssl_ca ||= feature(:installer).answers['foreman']['server_ssl_ca']
end
def server_connection
net = Net::HTTP.new(ForemanMaintain.config.foreman_url, ForemanMaintain.config.foreman_port)
net.ca_file = foreman_server_ssl_ca
net.use_ssl = true
net
end
definitions/features/katello.rb
class Features::Katello < ForemanMaintain::Feature
include ForemanMaintain::Concerns::Versions
metadata do
label :katello
definitions/features/katello_install.rb
class Features::KatelloInstall < ForemanMaintain::Feature
include ForemanMaintain::Concerns::Upstream
include ForemanMaintain::Concerns::Versions
metadata do
label :katello_install
confine do
!feature(:instance).downstream && feature(:katello)
end
end
end
definitions/features/satellite.rb
class Features::Satellite < ForemanMaintain::Feature
include ForemanMaintain::Concerns::Downstream
include ForemanMaintain::Concerns::Versions
metadata do
label :satellite
definitions/procedures/packages/enable_modules.rb
module Procedures::Packages
class EnableModules < ForemanMaintain::Procedure
metadata do
description 'Enable the given stream modules'
confine do
package_manager.class.name == 'ForemanMaintain::PackageManager::Dnf'
end
param :module_names, 'Module names', :array => true, :required => true
advanced_run false
end
def run
execute!("dnf module enable #{@module_names.join(' ')} -y")
end
end
end
definitions/scenarios/self_upgrade.rb
module ForemanMaintain::Scenarios
class SelfUpgradeBase < ForemanMaintain::Scenario
include ForemanMaintain::Concerns::Downstream
include ForemanMaintain::Concerns::Versions
def target_version
@target_version ||= Gem::Version.new(current_version).bump.to_s
end
definitions/scenarios/upgrade_to_foreman_nightly.rb
module Scenarios::Foreman_Nightly
class Abstract < ForemanMaintain::Scenario
def self.upgrade_metadata(&block)
metadata do
tags :upgrade_scenario
confine do
feature(:foreman_install) || ForemanMaintain.upgrade_in_progress == 'nightly'
end
instance_eval(&block)
end
end
def target_version
'nightly'
end
end
class PreUpgradeCheck < Abstract
upgrade_metadata do
description 'Checks before upgrading to Foreman nightly'
tags :pre_upgrade_checks
run_strategy :fail_slow
end
def compose
add_steps(find_checks(:default))
add_steps(find_checks(:pre_upgrade))
end
end
class PreMigrations < Abstract
upgrade_metadata do
description 'Procedures before upgrading to Foreman nightly'
tags :pre_migrations
end
def compose
add_steps(find_procedures(:pre_migrations))
end
end
class Migrations < Abstract
upgrade_metadata do
description 'Upgrade steps for Foreman nightly'
tags :migrations
run_strategy :fail_fast
end
def set_context_mapping
context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
end
def compose
add_step(Procedures::Repositories::Setup.new(:version => 'nightly'))
if el?
modules_to_enable = ["foreman:#{el_short_name}"]
add_step(Procedures::Packages::EnableModules.new(:module_names => modules_to_enable))
end
add_step(Procedures::Packages::Update.new(:assumeyes => true))
add_step_with_context(Procedures::Installer::Upgrade)
end
end
class PostMigrations < Abstract
upgrade_metadata do
description 'Post upgrade procedures for Foreman nightly'
tags :post_migrations
end
def compose
add_step(Procedures::RefreshFeatures)
add_step(Procedures::Service::Start.new)
add_steps(find_procedures(:post_migrations))
end
end
class PostUpgradeChecks < Abstract
upgrade_metadata do
description 'Checks after upgrading to Foreman nightly'
tags :post_upgrade_checks
run_strategy :fail_slow
end
def compose
add_steps(find_checks(:default))
add_steps(find_checks(:post_upgrade))
end
end
end
definitions/scenarios/upgrade_to_katello_nightly.rb
module Scenarios::Katello_Nightly
class Abstract < ForemanMaintain::Scenario
def self.upgrade_metadata(&block)
metadata do
tags :upgrade_scenario
confine do
feature(:katello_install) || ForemanMaintain.upgrade_in_progress == 'nightly'
end
instance_eval(&block)
end
end
def target_version
'nightly'
end
end
class PreUpgradeCheck < Abstract
upgrade_metadata do
description 'Checks before upgrading to Katello nightly'
tags :pre_upgrade_checks
run_strategy :fail_slow
end
def compose
add_steps(find_checks(:default))
add_steps(find_checks(:pre_upgrade))
end
end
class PreMigrations < Abstract
upgrade_metadata do
description 'Procedures before upgrading to Katello nightly'
tags :pre_migrations
end
def compose
add_steps(find_procedures(:pre_migrations))
end
end
class Migrations < Abstract
upgrade_metadata do
description 'Upgrade steps for Katello nightly'
tags :migrations
run_strategy :fail_fast
end
def set_context_mapping
context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
end
def compose
add_step(Procedures::Repositories::Setup.new(:version => 'nightly'))
modules_to_enable = ["katello:#{el_short_name}", "pulpcore:#{el_short_name}"]
add_step(Procedures::Packages::EnableModules.new(:module_names => modules_to_enable))
add_step(Procedures::Packages::Update.new(:assumeyes => true))
add_step_with_context(Procedures::Installer::Upgrade)
end
end
class PostMigrations < Abstract
upgrade_metadata do
description 'Post upgrade procedures for Katello nightly'
tags :post_migrations
end
def compose
add_step(Procedures::RefreshFeatures)
add_step(Procedures::Service::Start.new)
add_steps(find_procedures(:post_migrations))
end
end
class PostUpgradeChecks < Abstract
upgrade_metadata do
description 'Checks after upgrading to Katello nightly'
tags :post_upgrade_checks
run_strategy :fail_slow
end
def compose
add_steps(find_checks(:default))
add_steps(find_checks(:post_upgrade))
end
end
end
lib/foreman_maintain.rb
require 'foreman_maintain/concerns/hammer'
require 'foreman_maintain/concerns/base_database'
require 'foreman_maintain/concerns/directory_marker'
require 'foreman_maintain/concerns/versions'
require 'foreman_maintain/concerns/downstream'
require 'foreman_maintain/concerns/foreman_and_katello_version_map'
require 'foreman_maintain/concerns/upstream'
lib/foreman_maintain/concerns/downstream.rb
raise NotImplementedError
end
def less_than_version?(version)
Gem::Version.new(current_version) < Gem::Version.new(version)
end
def at_least_version?(version)
Gem::Version.new(current_version) >= Gem::Version.new(version)
end
def current_minor_version
current_version.to_s[/^\d+\.\d+/]
end
def repository_manager
ForemanMaintain.repository_manager
end
lib/foreman_maintain/concerns/versions.rb
module ForemanMaintain
module Concerns
module Versions
def less_than_version?(version)
Gem::Version.new(current_version) < Gem::Version.new(version)
end
def at_least_version?(version)
Gem::Version.new(current_version) >= Gem::Version.new(version)
end
def current_minor_version
current_version.to_s[/^\d+\.\d+/]
end
end
end
end
lib/foreman_maintain/scenario.rb
include Concerns::SystemHelpers
include Concerns::ScenarioMetadata
include Concerns::Finders
include Concerns::Versions
extend Concerns::Finders
attr_reader :steps, :context
test/definitions/features/installer_test.rb
it '#upgrade runs the installer with correct params' do
assume_feature_absent(:satellite)
installer_inst.expects(:'execute!').
with('LANG=en_US.utf-8 foreman-installer --disable-system-checks --upgrade',
with('foreman-installer --disable-system-checks --upgrade',
:interactive => true).
returns(true)
subject.upgrade(:interactive => true)
......
it '#upgrade runs the installer with correct params in satellite' do
assume_feature_present(:satellite)
installer_inst.expects(:'execute!').
with('LANG=en_US.utf-8 satellite-installer --disable-system-checks --upgrade',
with('satellite-installer --disable-system-checks --upgrade',
:interactive => true).
returns(true)
subject.upgrade(:interactive => true)
......
it 'runs the installer with correct params' do
assume_feature_absent(:satellite)
installer_inst.expects(:'execute!').
with('LANG=en_US.utf-8 foreman-installer --password=changeme', :interactive => true).
with('foreman-installer --password=changeme', :interactive => true).
returns(true)
subject.run('--password=changeme', :interactive => true)
end
......
it 'runs the installer with correct params in satellite' do
assume_feature_present(:satellite)
installer_inst.expects(:'execute!').
with('LANG=en_US.utf-8 satellite-installer --password=changeme', :interactive => true).
with('satellite-installer --password=changeme', :interactive => true).
returns(true)
subject.run('--password=changeme', :interactive => true)
end
test/lib/concerns/downstream_test.rb
class FakeSatelliteFeature
include ForemanMaintain::Concerns::SystemHelpers
include ForemanMaintain::Concerns::Downstream
include ForemanMaintain::Concerns::Versions
def package_name
'satellite'

Also available in: Unified diff