Revision b0337ee3
Added by Amit Upadhye over 1 year ago
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
Fixes #35058 - upgrade scenario for Foreman and Katello nightly (#633)