foreman_maintain 1.6.14 → 1.7.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e0b033f2189945ae0f5b3a005ee7513d7046f958ffa8bb8693ddc2c95521db1
4
- data.tar.gz: 62ca2e1a8404fa3d30309feceafc53d659519f4595ab60cecbde58ad8e69290c
3
+ metadata.gz: ef8f53affe0970e853071b2568869c00aa94e850975b602538351cc9649dbc9e
4
+ data.tar.gz: 3a60a60c9be41bb3aa34a7abee49c4b7c66f6f91629986e2a0f5e31cac98e125
5
5
  SHA512:
6
- metadata.gz: a6f47ab3d231627d634fc8ce93d31853de8da33bb84ac02c483077bb71270bb413d90e9f721820237227c2ea6e3bdeb3df2bb610f33c8a9e5cae67e4bd13a73c
7
- data.tar.gz: ad2f03840152f21a868b881973267fc48e511c8c48115666b5b5cfc4685c753bb18f27c4a6f476dda624f7ee0c69f57a1702759b7a0c3a5b874034bda04df90b
6
+ metadata.gz: 68aa31aed572c7cec55cda60995e909f77b48028c9ed6708823b695d6373f07d3f94043eb5d8e4643f46f28363858bea362905a42f6ac7c1d8993ba6f6a5fc0d
7
+ data.tar.gz: c989d6302e5c47dcf4bb5465c8671af3a40ec497d56459765d67c600049a88476e9447c6fc4b2457b281942b65c881884ba55b6ea896e77a013765eda70879e2
@@ -31,7 +31,7 @@
31
31
 
32
32
  # Mention true/false.
33
33
  # Value true will to enable cron service stop/restart on maintenance-mode start/stop
34
- # :manage_crond: false
34
+ # :manage_crond: true
35
35
 
36
36
  # URL of the Foreman/Satellite server
37
37
  # :foreman_url:
@@ -28,4 +28,4 @@
28
28
 
29
29
  # Mention true/false.
30
30
  # Value true will to enable cron service stop/restart on maintenance-mode start/stop
31
- # :manage_crond: false
31
+ # :manage_crond: true
@@ -6,17 +6,17 @@ module Checks::ForemanTasks
6
6
  tags :pre_upgrade
7
7
  after :foreman_tasks_not_paused
8
8
  before :check_old_foreman_tasks
9
+ param :wait_for_tasks,
10
+ 'Wait for tasks to finish or fail directly',
11
+ :required => false,
12
+ :default => true
9
13
  end
10
14
 
11
15
  def run
12
16
  task_count = feature(:foreman_tasks).running_tasks_count
13
17
  assert(task_count == 0,
14
18
  failure_message(task_count),
15
- :next_steps =>
16
- [Procedures::ForemanTasks::FetchTasksStatus.new(:state => 'running'),
17
- Procedures::ForemanTasks::UiInvestigate.new(
18
- 'search_query' => search_query_for_running_tasks
19
- )])
19
+ :next_steps => calculate_next_steps)
20
20
  end
21
21
 
22
22
  private
@@ -30,5 +30,18 @@ module Checks::ForemanTasks
30
30
  "There are #{task_count} active task(s) in the system." \
31
31
  "\nPlease wait for these to complete or cancel them from the Monitor tab."
32
32
  end
33
+
34
+ def calculate_next_steps
35
+ steps = []
36
+ if @wait_for_tasks
37
+ steps << Procedures::ForemanTasks::FetchTasksStatus.new(:state => 'running')
38
+ unless assumeyes?
39
+ steps << Procedures::ForemanTasks::UiInvestigate.new(
40
+ 'search_query' => search_query_for_running_tasks
41
+ )
42
+ end
43
+ end
44
+ steps
45
+ end
33
46
  end
34
47
  end
@@ -48,7 +48,7 @@ module Checks::MaintenanceMode
48
48
  end
49
49
 
50
50
  def check_for_cron(is_mode_on)
51
- unless ForemanMaintain.config.manage_crond && feature(:cron)
51
+ unless feature(:cron)
52
52
  return ['cron jobs: not managed', []]
53
53
  end
54
54
 
@@ -0,0 +1,34 @@
1
+ module Checks::Pulpcore
2
+ class NoRunningTasks < ForemanMaintain::Check
3
+ metadata do
4
+ for_feature :pulpcore
5
+ description 'Check for running pulpcore tasks'
6
+ tags :pre_upgrade
7
+ param :wait_for_tasks,
8
+ 'Wait for tasks to finish or fail directly',
9
+ :required => false
10
+ end
11
+
12
+ def run
13
+ tasks = feature(:pulpcore).running_tasks
14
+ assert(
15
+ tasks.empty?,
16
+ failure_message(tasks.length),
17
+ :next_steps => calculate_next_steps
18
+ )
19
+ end
20
+
21
+ private
22
+
23
+ def failure_message(task_count)
24
+ <<~MSG
25
+ There are #{task_count} active task(s) in the system.
26
+ Please wait for these to complete.
27
+ MSG
28
+ end
29
+
30
+ def calculate_next_steps
31
+ @wait_for_tasks ? [Procedures::Pulpcore::WaitForTasks.new] : []
32
+ end
33
+ end
34
+ end
@@ -2,7 +2,7 @@ class Features::Cron < ForemanMaintain::Feature
2
2
  metadata do
3
3
  label :cron
4
4
  confine do
5
- ForemanMaintain.config.manage_crond && feature(:instance).downstream
5
+ ForemanMaintain.config.manage_crond
6
6
  end
7
7
  end
8
8
 
@@ -20,6 +20,10 @@ class Features::DynflowSidekiq < ForemanMaintain::Feature
20
20
  end
21
21
  end
22
22
 
23
+ def workers
24
+ services.reject { |service| service.name.end_with?('@orchestrator') }
25
+ end
26
+
23
27
  private
24
28
 
25
29
  def instance_priority(instance)
@@ -101,6 +101,10 @@ class Features::Instance < ForemanMaintain::Feature
101
101
  version.to_s[/^\d+\.\d+\.\d+/]
102
102
  end
103
103
 
104
+ def current_major_version
105
+ current_version.to_s[/^\d+\.\d+/]
106
+ end
107
+
104
108
  def target_version
105
109
  if feature(:instance).downstream
106
110
  Features::Satellite.new.target_version
@@ -3,8 +3,37 @@ require 'foreman_maintain/utils/service/systemd'
3
3
  class Features::Pulpcore < ForemanMaintain::Feature
4
4
  include ForemanMaintain::Concerns::PulpCommon
5
5
 
6
+ TIMEOUT_FOR_TASKS_STATUS = 300
7
+ RETRY_INTERVAL_FOR_TASKS_STATE = 10
8
+ PULP_SETTINGS = '/etc/pulp/settings.py'.freeze
9
+
6
10
  metadata do
7
11
  label :pulpcore
12
+
13
+ confine do
14
+ File.exist?(PULP_SETTINGS)
15
+ end
16
+ end
17
+
18
+ def cli(args)
19
+ parse_json(execute("pulp --format json #{args}"))
20
+ end
21
+
22
+ def running_tasks
23
+ cli('task list --state-in running --state-in canceling')
24
+ end
25
+
26
+ def wait_for_tasks(spinner, timeout_for_tasks_status = TIMEOUT_FOR_TASKS_STATUS)
27
+ Timeout.timeout(timeout_for_tasks_status) do
28
+ while (task_count = running_tasks.length) != 0
29
+ puts "\nThere are #{task_count} tasks."
30
+ spinner.update "Waiting #{RETRY_INTERVAL_FOR_TASKS_STATE} seconds before retry."
31
+ sleep RETRY_INTERVAL_FOR_TASKS_STATE
32
+ end
33
+ end
34
+ rescue Timeout::Error => e
35
+ logger.error(e.message)
36
+ puts "\nTimeout: #{e.message}. Try again."
8
37
  end
9
38
 
10
39
  def services
@@ -25,7 +54,7 @@ class Features::Pulpcore < ForemanMaintain::Feature
25
54
 
26
55
  def config_files
27
56
  [
28
- '/etc/pulp/settings.py',
57
+ PULP_SETTINGS,
29
58
  '/etc/pulp/certs/database_fields.symmetric.key',
30
59
  ]
31
60
  end
@@ -0,0 +1,15 @@
1
+ module Procedures::Pulpcore
2
+ class WaitForTasks < ForemanMaintain::Procedure
3
+ metadata do
4
+ for_feature :pulpcore
5
+ description 'Fetch tasks status and wait till they finish'
6
+ advanced_run false
7
+ end
8
+
9
+ def run
10
+ with_spinner("waiting for tasks to finish") do |spinner|
11
+ feature(:pulpcore).wait_for_tasks(spinner)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -13,13 +13,15 @@ module ForemanMaintain::Scenarios
13
13
  param :proxy_features, 'List of proxy features to backup (default: all)', :array => true
14
14
  param :skip_pulp_content, 'Skip Pulp content during backup'
15
15
  param :tar_volume_size, 'Size of tar volume (indicates splitting)'
16
+ param :wait_for_tasks, 'Wait for running tasks to complete instead of aborting'
16
17
  end
17
18
 
18
19
  def compose
19
20
  check_valid_strategy
20
21
  add_step_with_context(Checks::Backup::IncrementalParentType,
21
22
  :online_backup => strategy == :online)
22
- safety_confirmation
23
+ add_step(Checks::ForemanTasks::NotRunning.new(:wait_for_tasks => wait_for_tasks?))
24
+ add_step(Checks::Pulpcore::NoRunningTasks.new(:wait_for_tasks => wait_for_tasks?))
23
25
  add_step_with_context(Procedures::Backup::AccessibilityConfirmation) if strategy == :offline
24
26
  add_step_with_context(Procedures::Backup::PrepareDirectory)
25
27
  add_step_with_context(Procedures::Backup::Metadata, :online_backup => strategy == :online)
@@ -62,12 +64,6 @@ module ForemanMaintain::Scenarios
62
64
 
63
65
  private
64
66
 
65
- def safety_confirmation
66
- if strategy == :online
67
- add_step_with_context(Procedures::Backup::Online::SafetyConfirmation)
68
- end
69
- end
70
-
71
67
  def check_valid_strategy
72
68
  unless [:online, :offline].include? strategy
73
69
  raise ArgumentError, "Unsupported strategy '#{strategy}'"
@@ -92,6 +88,8 @@ module ForemanMaintain::Scenarios
92
88
  end
93
89
 
94
90
  def add_online_backup_steps
91
+ add_step(Procedures::Service::Stop.new(:only => online_workers)) unless online_workers.empty?
92
+
95
93
  add_step_with_context(Procedures::Backup::ConfigFiles, :ignore_changed_files => true,
96
94
  :online_backup => true)
97
95
  add_step_with_context(Procedures::Backup::Pulp, :ensure_unchanged => true)
@@ -104,11 +102,24 @@ module ForemanMaintain::Scenarios
104
102
  Procedures::Backup::Online::ForemanDB,
105
103
  Procedures::Backup::Online::PulpcoreDB
106
104
  )
105
+
106
+ add_step(Procedures::Service::Start.new(:only => online_workers)) unless online_workers.empty?
107
107
  end
108
108
 
109
109
  def strategy
110
110
  context.get(:strategy)
111
111
  end
112
+
113
+ def wait_for_tasks?
114
+ !!context.get(:wait_for_tasks)
115
+ end
116
+
117
+ def online_workers
118
+ services = []
119
+ services += feature(:dynflow_sidekiq).workers if feature(:dynflow_sidekiq)
120
+ services += feature(:pulpcore).configured_workers if feature(:pulpcore)
121
+ services
122
+ end
112
123
  end
113
124
 
114
125
  class BackupRescueCleanup < ForemanMaintain::Scenario
@@ -122,9 +133,7 @@ module ForemanMaintain::Scenarios
122
133
  end
123
134
 
124
135
  def compose
125
- if strategy == :offline
126
- add_step_with_context(Procedures::Service::Start)
127
- end
136
+ add_step_with_context(Procedures::Service::Start)
128
137
  add_step_with_context(Procedures::Backup::Clean)
129
138
  end
130
139
 
@@ -134,11 +143,5 @@ module ForemanMaintain::Scenarios
134
143
  context.map(:preserve_dir,
135
144
  Procedures::Backup::Clean => :preserve_dir)
136
145
  end
137
-
138
- private
139
-
140
- def strategy
141
- context.get(:strategy)
142
- end
143
146
  end
144
147
  end
@@ -48,6 +48,7 @@ module Scenarios::Foreman
48
48
  Checks::ForemanTasks::Invalid::CheckPendingState, # if foreman-tasks
49
49
  Checks::ForemanTasks::Invalid::CheckPlanningState, # if foreman-tasks
50
50
  Checks::ForemanTasks::NotRunning, # if foreman-tasks
51
+ Checks::Pulpcore::NoRunningTasks, # if pulpcore
51
52
  Checks::NonRhPackages,
52
53
  Checks::PackageManager::Dnf::ValidateDnfConfig,
53
54
  Checks::Repositories::CheckNonRhRepository,
@@ -28,7 +28,7 @@ module ForemanMaintain::Scenarios
28
28
  add_steps_with_context(Procedures::Restore::Confirmation,
29
29
  Procedures::Restore::RequiredPackages,
30
30
  Procedures::Restore::Configs)
31
- add_step_with_context(Procedures::Crond::Stop) if feature(:cron)
31
+ add_step_with_context(Procedures::Crond::Stop)
32
32
  unless backup.incremental?
33
33
  add_steps_with_context(Procedures::Restore::InstallerReset)
34
34
  end
@@ -48,7 +48,7 @@ module ForemanMaintain::Scenarios
48
48
 
49
49
  add_step(Procedures::Installer::Run.new(:assumeyes => true))
50
50
  add_step_with_context(Procedures::Installer::UpgradeRakeTask)
51
- add_step_with_context(Procedures::Crond::Start) if feature(:cron)
51
+ add_step_with_context(Procedures::Crond::Start)
52
52
  end
53
53
  # rubocop:enable Metrics/MethodLength,Metrics/AbcSize
54
54
 
@@ -93,7 +93,7 @@ module ForemanMaintain::Scenarios
93
93
  end
94
94
 
95
95
  def compose
96
- add_step_with_context(Procedures::Crond::Stop) if feature(:cron)
96
+ add_step_with_context(Procedures::Crond::Stop)
97
97
  end
98
98
  end
99
99
  end
@@ -48,6 +48,7 @@ module Scenarios::Satellite
48
48
  Checks::ForemanTasks::Invalid::CheckPendingState, # if foreman-tasks
49
49
  Checks::ForemanTasks::Invalid::CheckPlanningState, # if foreman-tasks
50
50
  Checks::ForemanTasks::NotRunning, # if foreman-tasks
51
+ Checks::Pulpcore::NoRunningTasks, # if pulpcore
51
52
  Checks::NonRhPackages,
52
53
  Checks::PackageManager::Dnf::ValidateDnfConfig,
53
54
  Checks::Repositories::CheckNonRhRepository,
@@ -5,7 +5,7 @@ module Scenarios::Update
5
5
  tags :update_scenario
6
6
 
7
7
  confine do
8
- feature(:instance).target_version == feature(:instance).current_version.to_s[/^\d+\.\d+/]
8
+ feature(:instance).target_version == feature(:instance).current_major_version
9
9
  end
10
10
 
11
11
  instance_eval(&block)
@@ -46,6 +46,7 @@ module Scenarios::Update
46
46
  Checks::ForemanTasks::Invalid::CheckPendingState, # if foreman-tasks
47
47
  Checks::ForemanTasks::Invalid::CheckPlanningState, # if foreman-tasks
48
48
  Checks::ForemanTasks::NotRunning, # if foreman-tasks
49
+ Checks::Pulpcore::NoRunningTasks, # if pulpcore
49
50
  Checks::NonRhPackages,
50
51
  Checks::PackageManager::Dnf::ValidateDnfConfig,
51
52
  Checks::Repositories::CheckNonRhRepository,
@@ -53,7 +53,7 @@ class ForemanProtector(dnf.Plugin):
53
53
  return final_query
54
54
 
55
55
  def sack(self):
56
- if self.cli is not None and self.cli.command._basecmd not in PROTECT_COMMANDS:
56
+ if self.cli is not None and self.cli.command is not None and self.cli.command._basecmd not in PROTECT_COMMANDS:
57
57
  return
58
58
  if os.environ.get('LEAPP_IPU_IN_PROGRESS') is not None:
59
59
  return
@@ -57,6 +57,7 @@ module ForemanMaintain
57
57
  option '--features', 'FEATURES',
58
58
  "#{proxy_name} features to include in the backup. " \
59
59
  'Valid features are tftp, dns, dhcp, openscap, and all.', :multivalued => true
60
+ option '--wait-for-tasks', :flag, 'Wait for running tasks to complete instead of aborting'
60
61
  end
61
62
  # rubocop:enable Metrics/MethodLength
62
63
 
@@ -89,6 +90,7 @@ module ForemanMaintain
89
90
  :tar_volume_size => split_pulp_tar,
90
91
  :skip_pulp_content => skip_pulp_content?,
91
92
  :incremental_dir => incremental,
93
+ :wait_for_tasks => wait_for_tasks?,
92
94
  }.merge(options))
93
95
  end
94
96
 
@@ -110,6 +112,13 @@ module ForemanMaintain
110
112
  interactive_option
111
113
  common_backup_options
112
114
 
115
+ banner <<-BANNER
116
+ Create a backup with most services still running.
117
+
118
+ The only services that are shut down are workers that can influence
119
+ the consistency of the backup.
120
+ BANNER
121
+
113
122
  def execute
114
123
  perform_backup(:online)
115
124
  end
@@ -120,14 +129,18 @@ module ForemanMaintain
120
129
  interactive_option
121
130
  common_backup_options
122
131
 
132
+ banner <<-BANNER
133
+ Create a backup with all services shut down.
134
+ BANNER
135
+
123
136
  def execute
124
137
  perform_backup(:offline)
125
138
  end
126
139
  end
127
140
 
128
141
  class BackupCommand < Base
129
- subcommand 'online', 'Keep services online during backup', OnlineBackupCommand
130
- subcommand 'offline', 'Shut down services to preserve consistent backup', OfflineBackupCommand
142
+ subcommand 'online', 'Create backup with most services still running', OnlineBackupCommand
143
+ subcommand 'offline', 'Create backup with all services shut down', OfflineBackupCommand
131
144
  end
132
145
  end
133
146
  end
@@ -1,85 +1,72 @@
1
1
  module ForemanMaintain
2
2
  module Cli
3
3
  class UpgradeCommand < Base
4
- def self.target_version_option
5
- option '--target-version', 'TARGET_VERSION', 'Target version of the upgrade',
6
- :required => false
7
- end
8
-
9
4
  def self.disable_self_upgrade_option
10
5
  option '--disable-self-upgrade', :flag, 'Disable automatic self upgrade',
11
6
  :default => false
12
7
  end
13
8
 
14
- def current_target_version
15
- current_target_version = ForemanMaintain::UpgradeRunner.current_target_version
16
- if current_target_version && target_version && target_version != current_target_version
17
- raise Error::UsageError,
18
- "Can't set target version #{target_version}, "\
19
- "#{current_target_version} already in progress"
20
- end
21
- @target_version = current_target_version if current_target_version
22
- return true if current_target_version
23
- end
24
-
25
- def validate_target_version!
26
- return if current_target_version
27
- unless UpgradeRunner.available_targets.include?(target_version)
28
- message_start = if target_version
29
- "Can't upgrade to #{target_version}"
30
- else
31
- '--target-version not specified'
32
- end
33
- message = <<~MESSAGE
34
- #{message_start}
35
- Possible target versions are:
36
- MESSAGE
37
- versions = UpgradeRunner.available_targets.join("\n")
38
- raise Error::UsageError, message + versions
39
- end
40
- end
41
-
42
9
  def upgrade_runner
43
10
  return @upgrade_runner if defined? @upgrade_runner
44
- validate_target_version!
45
- @upgrade_runner = ForemanMaintain::UpgradeRunner.new(target_version, reporter,
11
+ @upgrade_runner = ForemanMaintain::UpgradeRunner.new(reporter,
46
12
  :assumeyes => assumeyes?,
47
13
  :whitelist => whitelist || [],
48
14
  :force => force?).tap(&:load)
49
15
  end
50
16
 
51
- def print_versions(target_versions)
52
- target_versions.sort.each { |version| puts version }
53
- end
54
-
55
17
  def allow_self_upgrade?
56
18
  !disable_self_upgrade?
57
19
  end
58
20
 
21
+ def try_upgrade
22
+ if upgrade_runner.available?
23
+ yield
24
+ else
25
+ instance = ForemanMaintain.detector.feature(:instance)
26
+ msg = <<~BANNER
27
+
28
+ There are no upgrades available.
29
+ The current version of #{instance.product_name} is #{instance.current_major_version}.
30
+ Consider using the update command.
31
+ BANNER
32
+
33
+ puts msg
34
+ ForemanMaintain::UpgradeRunner::WARNING_EXIT_CODE
35
+ end
36
+ end
37
+
59
38
  subcommand 'check', 'Run pre-upgrade checks before upgrading to specified version' do
60
- target_version_option
61
39
  interactive_option
62
40
  disable_self_upgrade_option
63
41
 
64
42
  def execute
65
43
  ForemanMaintain.validate_downstream_packages
66
44
  ForemanMaintain.perform_self_upgrade if allow_self_upgrade?
67
- upgrade_runner.run_phase(:pre_upgrade_checks)
68
- exit upgrade_runner.exit_code
45
+
46
+ exit_code = try_upgrade do
47
+ upgrade_runner.run_phase(:pre_upgrade_checks)
48
+ upgrade_runner.exit_code
49
+ end
50
+
51
+ exit exit_code
69
52
  end
70
53
  end
71
54
 
72
55
  subcommand 'run', 'Run full upgrade to a specified version' do
73
- target_version_option
74
56
  interactive_option
75
57
  disable_self_upgrade_option
76
58
 
77
59
  def execute
78
60
  ForemanMaintain.validate_downstream_packages
79
61
  ForemanMaintain.perform_self_upgrade if allow_self_upgrade?
80
- upgrade_runner.run
81
- upgrade_runner.save
82
- exit upgrade_runner.exit_code
62
+
63
+ exit_code = try_upgrade do
64
+ upgrade_runner.run
65
+ upgrade_runner.save
66
+ upgrade_runner.exit_code
67
+ end
68
+
69
+ exit exit_code
83
70
  end
84
71
  end
85
72
  end
@@ -52,8 +52,8 @@ module ForemanMaintain
52
52
  end
53
53
 
54
54
  def load_cron_option
55
- opt_val = @options.fetch(:manage_crond, false)
56
- @manage_crond = boolean?(opt_val) ? opt_val : false
55
+ opt_val = @options.fetch(:manage_crond, true)
56
+ @manage_crond = boolean?(opt_val) ? opt_val : true
57
57
  end
58
58
 
59
59
  def load_config
@@ -4,6 +4,9 @@ module ForemanMaintain
4
4
  include Concerns::Logger
5
5
  attr_reader :reporter, :exit_code
6
6
 
7
+ WARNING_EXIT_CODE = 78
8
+ FAILURE_EXIT_CODE = 1
9
+
7
10
  require 'foreman_maintain/runner/execution'
8
11
  require 'foreman_maintain/runner/stored_execution'
9
12
  def initialize(reporter, scenarios, options = {})
@@ -61,8 +64,8 @@ module ForemanMaintain
61
64
  @last_scenario = scenario
62
65
  @last_scenario_continuation_confirmed = false
63
66
  end
64
- @exit_code = 78 if scenario.warning?
65
- @exit_code = 1 if scenario.failed?
67
+ @exit_code = WARNING_EXIT_CODE if scenario.warning?
68
+ @exit_code = FAILURE_EXIT_CODE if scenario.failed?
66
69
  end
67
70
 
68
71
  def whitelisted_step?(step)
@@ -34,32 +34,31 @@ module ForemanMaintain
34
34
 
35
35
  attr_reader :version, :tag, :phase
36
36
 
37
- def initialize(version, reporter, options = {})
37
+ def initialize(reporter, options = {})
38
38
  super(reporter, [], options)
39
- @version = version
40
- scenarios_present = find_scenarios(:tags => :upgrade_scenario).any?(&matching_version_test)
41
- raise "Unknown version #{version}" unless scenarios_present
42
-
43
39
  @scenario_cache = {}
44
- self.phase = :pre_upgrade_checks
40
+ @phase = :pre_upgrade_checks
41
+ condition = { :tags => [:upgrade_scenario, phase] }
42
+ matching_scenarios = find_scenarios(condition)
43
+ @version = matching_scenarios.first&.target_version
44
+ end
45
+
46
+ def available?
47
+ condition = { :tags => [:upgrade_scenario, :pre_upgrade_checks] }
48
+ matching_scenarios = find_scenarios(condition)
49
+ !matching_scenarios.empty?
45
50
  end
46
51
 
47
52
  def scenario(phase)
48
53
  return @scenario_cache[phase] if @scenario_cache.key?(phase)
49
54
 
50
55
  condition = { :tags => [:upgrade_scenario, phase] }
51
- matching_scenarios = find_scenarios(condition).select(&matching_version_test)
56
+ matching_scenarios = find_scenarios(condition)
52
57
  raise "Too many scenarios match #{condition.inspect}" if matching_scenarios.size > 1
53
58
 
54
59
  @scenario_cache[phase] = matching_scenarios.first
55
60
  end
56
61
 
57
- def matching_version_test
58
- proc do |scenario|
59
- scenario.respond_to?(:target_version) && scenario.target_version == @version
60
- end
61
- end
62
-
63
62
  def run
64
63
  self.class.current_target_version = @version
65
64
  PHASES.each do |phase|
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '1.6.14'.freeze
2
+ VERSION = '1.7.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_maintain
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.14
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nečas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-05 00:00:00.000000000 Z
11
+ date: 2024-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
@@ -187,6 +187,7 @@ files:
187
187
  - definitions/checks/non_rh_packages.rb
188
188
  - definitions/checks/package_manager/dnf/validate_dnf_config.rb
189
189
  - definitions/checks/pulpcore/db_up.rb
190
+ - definitions/checks/pulpcore/no_running_tasks.rb
190
191
  - definitions/checks/puppet/verify_no_empty_cacert_requests.rb
191
192
  - definitions/checks/repositories/check_non_rh_repository.rb
192
193
  - definitions/checks/repositories/check_upstream_repository.rb
@@ -238,7 +239,6 @@ files:
238
239
  - definitions/procedures/backup/online/candlepin_db.rb
239
240
  - definitions/procedures/backup/online/foreman_db.rb
240
241
  - definitions/procedures/backup/online/pulpcore_db.rb
241
- - definitions/procedures/backup/online/safety_confirmation.rb
242
242
  - definitions/procedures/backup/prepare_directory.rb
243
243
  - definitions/procedures/backup/pulp.rb
244
244
  - definitions/procedures/crond/start.rb
@@ -273,6 +273,7 @@ files:
273
273
  - definitions/procedures/packages/update.rb
274
274
  - definitions/procedures/packages/update_all_confirmation.rb
275
275
  - definitions/procedures/pulpcore/container_handle_image_metadata.rb
276
+ - definitions/procedures/pulpcore/wait_for_tasks.rb
276
277
  - definitions/procedures/puppet/delete_empty_ca_cert_request_files.rb
277
278
  - definitions/procedures/puppet/remove_puppet.rb
278
279
  - definitions/procedures/puppet/remove_puppet_data.rb
@@ -1,27 +0,0 @@
1
- module Procedures::Backup
2
- module Online
3
- class SafetyConfirmation < ForemanMaintain::Procedure
4
- metadata do
5
- description 'Data consistency warning'
6
- tags :backup
7
- end
8
-
9
- def run
10
- answer = ask_decision(warning_message, actions_msg: 'y(yes), q(quit)')
11
- abort! unless answer == :yes
12
- end
13
-
14
- def warning_message
15
- "*** WARNING: The online backup is intended for making a copy of the data\n" \
16
- '*** for debugging purposes only.' \
17
- " The backup routine can not ensure 100% consistency while the\n" \
18
- "*** backup is taking place as there is a chance there may be data mismatch between\n" \
19
- '*** the databases while the services are live.' \
20
- " If you wish to utilize the online backup\n" \
21
- '*** for production use you need to ensure that there are' \
22
- " no modifications occurring during\n" \
23
- "*** your backup run.\n\nDo you want to proceed?"
24
- end
25
- end
26
- end
27
- end