foreman_maintain 1.4.2 → 1.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/definitions/checks/foreman_tasks/not_paused.rb +1 -1
  3. data/definitions/checks/katello_agent.rb +39 -0
  4. data/definitions/checks/package_manager/dnf/validate_dnf_config.rb +1 -1
  5. data/definitions/features/candlepin_database.rb +1 -1
  6. data/definitions/features/foreman_database.rb +1 -1
  7. data/definitions/features/installer.rb +0 -1
  8. data/definitions/features/pulpcore.rb +1 -1
  9. data/definitions/features/pulpcore_database.rb +1 -1
  10. data/definitions/features/service.rb +2 -2
  11. data/definitions/procedures/backup/offline/foreman_db.rb +1 -1
  12. data/definitions/procedures/backup/online/safety_confirmation.rb +1 -1
  13. data/definitions/procedures/backup/snapshot/mount_base.rb +1 -1
  14. data/definitions/procedures/foreman/fix_corrupted_roles.rb +1 -1
  15. data/definitions/procedures/maintenance_mode/is_enabled.rb +1 -1
  16. data/definitions/procedures/packages/check_for_reboot.rb +1 -1
  17. data/definitions/scenarios/backup.rb +1 -1
  18. data/lib/foreman_maintain/concerns/base_database.rb +1 -1
  19. data/lib/foreman_maintain/concerns/primary_checks.rb +2 -1
  20. data/lib/foreman_maintain/concerns/system_helpers.rb +1 -1
  21. data/lib/foreman_maintain/executable.rb +6 -2
  22. data/lib/foreman_maintain/reporter/cli_reporter.rb +3 -2
  23. data/lib/foreman_maintain/reporter.rb +1 -1
  24. data/lib/foreman_maintain/runner/execution.rb +4 -0
  25. data/lib/foreman_maintain/scenario.rb +8 -0
  26. data/lib/foreman_maintain/utils/service/abstract.rb +1 -1
  27. data/lib/foreman_maintain/version.rb +1 -1
  28. data/lib/foreman_maintain/yaml_storage.rb +1 -1
  29. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4d37937d8bc4cbf619ea0e654e6826ae92a96ecd74f1b260e5b402df7bcbdc68
4
- data.tar.gz: a0fcf7a0f6802f7547c26d640650ac29cafa3568f7fdbc648f31d3dbdbcf6a72
3
+ metadata.gz: b1c667552795ef78c81447baaad773108b77669a36ee84858e710634d4d51690
4
+ data.tar.gz: b45c8ff19cd462003a01b82114021c81ebc1891fbdb00e42b2fc48f07aeed2a1
5
5
  SHA512:
6
- metadata.gz: 2bab8216e974e96128a5f0fb88a201d1c8dd9da13d71b89efea76337c242f6459285e8af8a8dbcacbaa318f402c1b26cc7056e5e1d976946b8939f13bbaa4fda
7
- data.tar.gz: 59772c9b2ec381408458383f4e06bafb8bb3998f5c4cea60be7a2dc2a254803896a05aa2858aad48f34e54185b7db6a455534cafa5f671b6a52a69bbe0b07e74
6
+ metadata.gz: eeb24ce08dd3d3cf2dfddb3116719bc11365ab902111a8bc62a887bb3054c74ae062fa6028f8fdddce2b2153359cb8f4a290e4e300fd295e3f1ba87f0c9b22b5
7
+ data.tar.gz: 98bd38fda86ed2cf459f6bb3a404f13b9f078650301ef89e4e6872ca32e234313f4f8d12bf819bb8b8af57710226d5528cc0fa59ec0b9593fc56a18c8a1245ac
@@ -9,7 +9,7 @@ module Checks::ForemanTasks
9
9
  end
10
10
 
11
11
  def run
12
- paused_tasks_count = feature(:foreman_tasks).paused_tasks_count()
12
+ paused_tasks_count = feature(:foreman_tasks).paused_tasks_count
13
13
  assert(paused_tasks_count == 0,
14
14
  "There are currently #{paused_tasks_count} paused tasks in the system",
15
15
  :next_steps => next_procedures)
@@ -0,0 +1,39 @@
1
+ class Checks::CheckKatelloAgentEnabled < ForemanMaintain::Check
2
+ metadata do
3
+ label :check_katello_agent_enabled
4
+ description 'Check whether the katello-agent feature is enabled before upgrading'
5
+ tags :pre_upgrade
6
+
7
+ confine do
8
+ !feature(:capsule)
9
+ end
10
+ end
11
+
12
+ def run
13
+ instance_name = feature(:instance).downstream ? "Satellite" : "Katello"
14
+ instance_version = feature(:instance).downstream ? "6.15" : "4.10"
15
+ installer_command = feature(:instance).downstream ? "satellite-installer" : "foreman-installer"
16
+ maintain_command = feature(:instance).downstream ? "satellite-maintain" : "foreman-maintain"
17
+
18
+ assert(
19
+ !katello_agent_enabled?,
20
+ "The katello-agent feature is enabled on this system. As of #{instance_name}"\
21
+ " #{instance_version}, katello-agent is removed and will no longer function."\
22
+ " Before proceeding with the upgrade, you should ensure that you have deployed"\
23
+ " and configured an alternative tool for remote package management and patching"\
24
+ " for content hosts, such as Remote Execution (REX) with pull-based transport."\
25
+ " See the Managing Hosts guide in the #{instance_name} documentation for more info."\
26
+ " Disable katello-agent with the command"\
27
+ " `#{installer_command} --foreman-proxy-content-enable-katello-agent false`"\
28
+ " before proceeding with the upgrade. Alternatively, you may skip this check and proceed by"\
29
+ " running #{maintain_command} again with the `--whitelist` option, which will automatically"\
30
+ " uninstall katello-agent."
31
+ )
32
+ end
33
+
34
+ private
35
+
36
+ def katello_agent_enabled?
37
+ feature(:installer).answers['foreman_proxy_content']['enable_katello_agent']
38
+ end
39
+ end
@@ -19,7 +19,7 @@ module Checks::PackageManager
19
19
 
20
20
  # rubocop:disable Metrics/LineLength
21
21
  def failure_message(final_result)
22
- verb_string = final_result[:matched_keys].length > 1 ? 'are' : 'is'
22
+ verb_string = (final_result[:matched_keys].length > 1) ? 'are' : 'is'
23
23
 
24
24
  "#{final_result[:matched_keys].join(',')} #{verb_string} set in /etc/dnf/dnf.conf as below:"\
25
25
  "\n#{final_result[:grep_output]}"\
@@ -14,7 +14,7 @@ class Features::CandlepinDatabase < ForemanMaintain::Feature
14
14
  def services
15
15
  [
16
16
  system_service('postgresql', 10, :component => 'candlepin',
17
- :db_feature => feature(:candlepin_database)),
17
+ :db_feature => feature(:candlepin_database)),
18
18
  ]
19
19
  end
20
20
 
@@ -28,7 +28,7 @@ class Features::ForemanDatabase < ForemanMaintain::Feature
28
28
  def services
29
29
  [
30
30
  system_service('postgresql', 10, :component => 'foreman',
31
- :db_feature => feature(:foreman_database)),
31
+ :db_feature => feature(:foreman_database)),
32
32
  ]
33
33
  end
34
34
 
@@ -30,7 +30,6 @@ class Features::Installer < ForemanMaintain::Feature
30
30
  def config_files
31
31
  Dir.glob(File.join(config_directory, '**/*')) +
32
32
  [
33
- '/usr/local/bin/validate_postgresql_connection.sh',
34
33
  '/opt/puppetlabs/puppet/cache/foreman_cache_data',
35
34
  '/opt/puppetlabs/puppet/cache/pulpcore_cache_data',
36
35
  ]
@@ -19,7 +19,7 @@ class Features::Pulpcore < ForemanMaintain::Feature
19
19
  names = names.map { |f| File.basename(f) }
20
20
  names.map do |name|
21
21
  system_service(name, 20, :skip_enablement => true,
22
- :instance_parent_unit => 'pulpcore-worker@')
22
+ :instance_parent_unit => 'pulpcore-worker@')
23
23
  end
24
24
  end
25
25
 
@@ -20,7 +20,7 @@ class Features::PulpcoreDatabase < ForemanMaintain::Feature
20
20
  def services
21
21
  [
22
22
  system_service('postgresql', 10, :component => 'pulpcore',
23
- :db_feature => feature(:pulpcore_database)),
23
+ :db_feature => feature(:pulpcore_database)),
24
24
  ]
25
25
  end
26
26
 
@@ -15,7 +15,7 @@ class Features::Service < ForemanMaintain::Feature
15
15
  ForemanMaintain.available_features.flat_map(&:services).
16
16
  sort.
17
17
  inject([]) do |pool, service| # uniq(&:to_s) for ruby 1.8.7
18
- pool.last.nil? || !pool.last.matches?(service) ? pool << service : pool
18
+ (pool.last.nil? || !pool.last.matches?(service)) ? pool << service : pool
19
19
  end.
20
20
  select(&:exist?)
21
21
  end
@@ -109,7 +109,7 @@ class Features::Service < ForemanMaintain::Feature
109
109
  end
110
110
 
111
111
  def format_brief_status(exit_code)
112
- result = exit_code == 0 ? reporter.status_label(:success) : reporter.status_label(:fail)
112
+ result = (exit_code == 0) ? reporter.status_label(:success) : reporter.status_label(:fail)
113
113
  padding = reporter.max_length - reporter.last_line.to_s.length - 30
114
114
  "#{' ' * padding} #{result}"
115
115
  end
@@ -33,7 +33,7 @@ module Procedures::Backup
33
33
  def local_backup
34
34
  with_spinner("Collecting data from #{pg_data_dirs.join(',')}") do
35
35
  pg_data_dirs.each_with_index do |pg_dir, index|
36
- do_backup(pg_dir, index == 0 ? 'create' : 'append')
36
+ do_backup(pg_dir, (index == 0) ? 'create' : 'append')
37
37
  end
38
38
  end
39
39
  end
@@ -5,7 +5,7 @@ module Procedures::Backup
5
5
  description 'Data consistency warning'
6
6
  tags :backup
7
7
  param :include_db_dumps, 'Are database dumps included in backup', :flag => true,
8
- :default => false
8
+ :default => false
9
9
  end
10
10
 
11
11
  def run
@@ -14,7 +14,7 @@ module Procedures::Backup
14
14
 
15
15
  def mount_snapshot(database, lv_type)
16
16
  FileUtils.mkdir_p(mount_location(database))
17
- options = lv_type == 'xfs' ? '-onouuid,ro' : '-oro'
17
+ options = (lv_type == 'xfs') ? '-onouuid,ro' : '-oro'
18
18
  lv_name = "#{database}-snap"
19
19
  execute!("mount #{get_lv_path(lv_name)} #{mount_location(database)} #{options}")
20
20
  end
@@ -26,7 +26,7 @@ module Procedures::Foreman
26
26
 
27
27
  def find_records_to_update(inconsistent_sets)
28
28
  largest_set = inconsistent_sets.reduce([]) do |memo, set|
29
- set.count > memo.count ? set : memo
29
+ (set.count > memo.count) ? set : memo
30
30
  end
31
31
 
32
32
  inconsistent_sets.reject do |set|
@@ -12,7 +12,7 @@ module Procedures::MaintenanceMode
12
12
 
13
13
  def run
14
14
  @status_code = feature(:instance).firewall.maintenance_mode_status? ? 0 : 1
15
- puts "Maintenance mode is #{@status_code == 1 ? 'Off' : 'On'}"
15
+ puts "Maintenance mode is #{(@status_code == 1) ? 'Off' : 'On'}"
16
16
  end
17
17
  end
18
18
  end
@@ -7,7 +7,7 @@ module Procedures::Packages
7
7
  def run
8
8
  status, output = execute_with_status('dnf needs-restarting --reboothint')
9
9
  if status == 1
10
- set_status(:warning, output)
10
+ set_info_warn(output)
11
11
  else
12
12
  set_status(:success, output)
13
13
  end
@@ -195,7 +195,7 @@ module ForemanMaintain::Scenarios
195
195
 
196
196
  def add_online_backup_steps
197
197
  add_step_with_context(Procedures::Backup::ConfigFiles, :ignore_changed_files => true,
198
- :online_backup => true)
198
+ :online_backup => true)
199
199
  add_step_with_context(Procedures::Backup::Pulp, :ensure_unchanged => true)
200
200
  add_steps_with_context(
201
201
  Procedures::Backup::Online::CandlepinDB,
@@ -90,7 +90,7 @@ module ForemanMaintain
90
90
  ' --no-privileges --clean --disable-triggers -n public ' \
91
91
  "-d #{config['database']} #{file}"
92
92
  execute!(dump_cmd, :hidden_patterns => [config['password']],
93
- :valid_exit_statuses => [0, 1])
93
+ :valid_exit_statuses => [0, 1])
94
94
  end
95
95
  end
96
96
 
@@ -2,7 +2,8 @@ module ForemanMaintain
2
2
  module Concerns
3
3
  module PrimaryChecks
4
4
  def validate_downstream_packages
5
- return unless detector.feature(:installer)&.with_scenarios?
5
+ return unless detector.feature(:installer)
6
+
6
7
  if (package = package_name) && !package_manager.installed?(package)
7
8
  raise ForemanMaintain::Error::Fail,
8
9
  "Error: Important rpm package #{package} is not installed!"\
@@ -106,7 +106,7 @@ module ForemanMaintain
106
106
  package_manager.install(packages, :assumeyes => options[:assumeyes])
107
107
  when :update
108
108
  package_manager.update(packages, :assumeyes => options[:assumeyes],
109
- :dnf_options => options[:dnf_options])
109
+ :dnf_options => options[:dnf_options])
110
110
  when :remove
111
111
  package_manager.remove(packages, :assumeyes => options[:assumeyes])
112
112
  else
@@ -5,7 +5,7 @@ module ForemanMaintain
5
5
  attr_reader :options
6
6
 
7
7
  def_delegators :execution,
8
- :success?, :skipped?, :fail?, :aborted?, :warning?, :output,
8
+ :success?, :skipped?, :fail?, :aborted?, :warning?, :info_warning?, :output,
9
9
  :assumeyes?, :whitelisted?, :ask_decision,
10
10
  :execution, :puts, :print, :with_spinner, :ask, :storage
11
11
 
@@ -91,6 +91,10 @@ module ForemanMaintain
91
91
  set_status(:warning, message)
92
92
  end
93
93
 
94
+ def set_info_warn(message)
95
+ set_status(:info_warning, message)
96
+ end
97
+
94
98
  def set_skip(message)
95
99
  set_status(:skipped, message)
96
100
  end
@@ -173,7 +177,7 @@ module ForemanMaintain
173
177
  raise "The step is not matching the hash #{hash.inspect}" unless matches_hash?(hash)
174
178
  raise "Can't update step that was already executed" if @_execution
175
179
  @_execution = Runner::StoredExecution.new(self, :status => hash[:status],
176
- :output => hash[:output])
180
+ :output => hash[:output])
177
181
  end
178
182
 
179
183
  def inspect
@@ -228,7 +228,7 @@ module ForemanMaintain
228
228
  end
229
229
 
230
230
  until_valid_decision do
231
- actions = run_strategy == :fail_slow ? 'n(next)' : 'n(next), q(quit)'
231
+ actions = (run_strategy == :fail_slow) ? 'n(next)' : 'n(next), q(quit)'
232
232
  answer = ask("#{message}, [#{actions}]")
233
233
  if answer =~ /^\d+$/ && (answer.to_i - 1) < steps.size
234
234
  steps[answer.to_i - 1]
@@ -276,7 +276,8 @@ module ForemanMaintain
276
276
  :running => { :label => '[RUNNING]', :color => :blue },
277
277
  :skipped => { :label => '[SKIPPED]', :color => :yellow },
278
278
  :already_run => { :label => '[ALREADY RUN]', :color => :yellow },
279
- :warning => { :label => '[WARNING]', :color => :yellow } }
279
+ :warning => { :label => '[WARNING]', :color => :yellow },
280
+ :info_warning => { :label => '[WARNING]', :color => :yellow } }
280
281
  properties = mapping[status]
281
282
  if @plaintext
282
283
  properties[:label]
@@ -113,7 +113,7 @@ module ForemanMaintain
113
113
  return steps.first
114
114
  end
115
115
  until_valid_decision do
116
- actions = run_strategy == :fail_slow ? 'n(next)' : 'n(next), q(quit)'
116
+ actions = (run_strategy == :fail_slow) ? 'n(next)' : 'n(next), q(quit)'
117
117
 
118
118
  answer = ask("#{message}, [#{actions}]")
119
119
  if answer =~ /^\d+$/ && (answer.to_i - 1) < steps.size
@@ -63,6 +63,10 @@ module ForemanMaintain
63
63
  @status == :warning
64
64
  end
65
65
 
66
+ def info_warning?
67
+ @status == :info_warning
68
+ end
69
+
66
70
  # yaml storage to preserve key/value pairs between runs.
67
71
  def storage
68
72
  @storage || ForemanMaintain.storage(:default)
@@ -119,6 +119,10 @@ module ForemanMaintain
119
119
  filter_whitelisted(executed_steps.find_all(&:warning?), options)
120
120
  end
121
121
 
122
+ def steps_with_info_warning(options = {})
123
+ filter_whitelisted(executed_steps.find_all(&:info_warning?), options)
124
+ end
125
+
122
126
  def steps_with_skipped(options = {})
123
127
  filter_whitelisted(executed_steps.find_all(&:skipped?), options)
124
128
  end
@@ -143,6 +147,10 @@ module ForemanMaintain
143
147
  !steps_with_warning(:whitelisted => false).empty?
144
148
  end
145
149
 
150
+ def info_warning?
151
+ !steps_with_info_warning(:whitelisted => false).empty?
152
+ end
153
+
146
154
  def failed?
147
155
  !passed?
148
156
  end
@@ -18,7 +18,7 @@ module ForemanMaintain::Utils
18
18
 
19
19
  def <=>(other)
20
20
  prio_cmp = @priority <=> other.priority
21
- prio_cmp == 0 ? @name <=> other.name : prio_cmp
21
+ (prio_cmp == 0) ? @name <=> other.name : prio_cmp
22
22
  end
23
23
 
24
24
  def to_s
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '1.4.2'.freeze
2
+ VERSION = '1.4.4'.freeze
3
3
  end
@@ -47,7 +47,7 @@ module ForemanMaintain
47
47
  end
48
48
 
49
49
  def save_all
50
- storage_register.values.each(&:save)
50
+ storage_register.each_value(&:save)
51
51
  end
52
52
  end
53
53
  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.4.2
4
+ version: 1.4.4
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: 2023-10-26 00:00:00.000000000 Z
11
+ date: 2023-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
@@ -181,6 +181,7 @@ files:
181
181
  - definitions/checks/foreman_tasks/invalid/check_planning_state.rb
182
182
  - definitions/checks/foreman_tasks/not_paused.rb
183
183
  - definitions/checks/foreman_tasks/not_running.rb
184
+ - definitions/checks/katello_agent.rb
184
185
  - definitions/checks/maintenance_mode/check_consistency.rb
185
186
  - definitions/checks/non_rh_packages.rb
186
187
  - definitions/checks/package_manager/dnf/validate_dnf_config.rb