foreman_maintain 0.6.2 → 0.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -0
  3. data/definitions/checks/check_hotfix_installed.rb +2 -1
  4. data/definitions/checks/disk/performance.rb +24 -9
  5. data/definitions/checks/env_proxy.rb +13 -0
  6. data/definitions/checks/foreman/check_corrupted_roles.rb +14 -2
  7. data/definitions/checks/foreman/validate_external_db_version.rb +28 -0
  8. data/definitions/checks/foreman_proxy/check_tftp_storage.rb +52 -0
  9. data/definitions/checks/original_assets.rb +1 -0
  10. data/definitions/checks/repositories/check_non_rh_repository.rb +23 -0
  11. data/definitions/checks/repositories/check_upstream_repository.rb +2 -1
  12. data/definitions/checks/repositories/validate.rb +2 -1
  13. data/definitions/features/apache.rb +19 -0
  14. data/definitions/features/capsule.rb +2 -1
  15. data/definitions/features/dynflow_sidekiq.rb +1 -1
  16. data/definitions/features/foreman_proxy.rb +30 -5
  17. data/definitions/features/foreman_server.rb +10 -4
  18. data/definitions/features/installer.rb +9 -2
  19. data/definitions/features/puppet_server.rb +6 -2
  20. data/definitions/features/service.rb +10 -3
  21. data/definitions/procedures/backup/metadata.rb +2 -0
  22. data/definitions/procedures/content/prepare.rb +1 -1
  23. data/definitions/procedures/content/switchover.rb +9 -4
  24. data/definitions/procedures/hammer_setup.rb +1 -1
  25. data/definitions/procedures/installer/run.rb +3 -1
  26. data/definitions/procedures/installer/upgrade.rb +6 -1
  27. data/definitions/procedures/packages/update.rb +1 -1
  28. data/definitions/procedures/restore/configs.rb +6 -0
  29. data/definitions/procedures/restore/regenerate_queues.rb +69 -0
  30. data/definitions/procedures/service/stop.rb +1 -1
  31. data/definitions/scenarios/backup.rb +1 -0
  32. data/definitions/scenarios/content.rb +27 -0
  33. data/definitions/scenarios/packages.rb +39 -16
  34. data/definitions/scenarios/restore.rb +17 -2
  35. data/definitions/scenarios/upgrade_to_capsule_6_8.rb +88 -0
  36. data/definitions/scenarios/upgrade_to_capsule_6_8_z.rb +88 -0
  37. data/definitions/scenarios/upgrade_to_satellite_6_2.rb +13 -5
  38. data/definitions/scenarios/upgrade_to_satellite_6_2_z.rb +13 -5
  39. data/definitions/scenarios/upgrade_to_satellite_6_3.rb +13 -5
  40. data/definitions/scenarios/upgrade_to_satellite_6_3_z.rb +13 -5
  41. data/definitions/scenarios/upgrade_to_satellite_6_4.rb +13 -5
  42. data/definitions/scenarios/upgrade_to_satellite_6_4_z.rb +13 -5
  43. data/definitions/scenarios/upgrade_to_satellite_6_5.rb +13 -5
  44. data/definitions/scenarios/upgrade_to_satellite_6_5_z.rb +13 -5
  45. data/definitions/scenarios/upgrade_to_satellite_6_6.rb +13 -5
  46. data/definitions/scenarios/upgrade_to_satellite_6_6_z.rb +13 -5
  47. data/definitions/scenarios/upgrade_to_satellite_6_7.rb +13 -5
  48. data/definitions/scenarios/upgrade_to_satellite_6_7_z.rb +13 -5
  49. data/definitions/scenarios/upgrade_to_satellite_6_8.rb +88 -0
  50. data/definitions/scenarios/upgrade_to_satellite_6_8_z.rb +88 -0
  51. data/lib/foreman_maintain.rb +31 -0
  52. data/lib/foreman_maintain/cli.rb +2 -0
  53. data/lib/foreman_maintain/cli/content_command.rb +17 -0
  54. data/lib/foreman_maintain/cli/restore_command.rb +2 -1
  55. data/lib/foreman_maintain/cli/upgrade_command.rb +10 -0
  56. data/lib/foreman_maintain/concerns/base_database.rb +11 -0
  57. data/lib/foreman_maintain/concerns/downstream.rb +10 -10
  58. data/lib/foreman_maintain/package_manager/dnf.rb +11 -5
  59. data/lib/foreman_maintain/package_manager/yum.rb +15 -5
  60. data/lib/foreman_maintain/reporter/cli_reporter.rb +3 -3
  61. data/lib/foreman_maintain/upgrade_runner.rb +20 -26
  62. data/lib/foreman_maintain/utils/backup.rb +4 -0
  63. data/lib/foreman_maintain/utils/facter.rb +1 -1
  64. data/lib/foreman_maintain/utils/service/abstract.rb +6 -0
  65. data/lib/foreman_maintain/version.rb +1 -1
  66. metadata +15 -4
  67. data/definitions/checks/check_epel_repository.rb +0 -21
@@ -87,8 +87,7 @@ module ForemanMaintain
87
87
  else
88
88
  "rhel-#{rh_version_major}-server-#{package_name}-#{full_version}-rpms"
89
89
  end
90
-
91
- if current_minor_version == '6.3' && server_version.to_s != '6.4' && (
90
+ if current_minor_version == '6.3' && full_version.to_s != '6.4' && (
92
91
  feature(:puppet_server) && feature(:puppet_server).puppet_version.major == 4)
93
92
  # TODO: confirm repo for capsule. It might be same repo
94
93
  repos << "rhel-#{rh_version_major}-server-satellite-tools-6.3-puppet4-rpms"
@@ -98,16 +97,17 @@ module ForemanMaintain
98
97
  end
99
98
 
100
99
  def common_repos(rh_version_major, full_version)
101
- tools_repo_id = "rhel-#{rh_version_major}-server-satellite-tools-#{full_version}-rpms"
102
- maintenance_repo_id = "rhel-#{rh_version_major}-server-satellite-maintenance-6-rpms"
100
+ repos_arrary = if ENV['FOREMAN_MAINTAIN_USE_BETA'] == '1'
101
+ ["rhel-#{rh_version_major}-server-satellite-maintenance-6-beta-rpms",
102
+ "rhel-#{rh_version_major}-server-satellite-tools-6-beta-rpms"]
103
+ else
104
+ ["rhel-#{rh_version_major}-server-satellite-maintenance-6-rpms",
105
+ "rhel-#{rh_version_major}-server-satellite-tools-#{full_version}-rpms"]
106
+ end
103
107
 
104
- # Override to use Beta repositories for sat version until GA
105
- if ENV['FOREMAN_MAINTAIN_USE_BETA'] == '1'
106
- tools_repo_id = "rhel-#{rh_version_major}-server-satellite-tools-6-beta-rpms"
107
- maintenance_repo_id = "rhel-#{rh_version_major}-server-satellite-maintenance-6-beta-rpms"
108
- end
108
+ return repos_arrary.first(1) if feature(:capsule)
109
109
 
110
- [tools_repo_id, maintenance_repo_id]
110
+ repos_arrary
111
111
  end
112
112
 
113
113
  def main_rh_repos(rh_version_major)
@@ -1,17 +1,23 @@
1
1
  module ForemanMaintain::PackageManager
2
2
  class Dnf < Yum
3
- def clean_cache
4
- dnf_action('clean', 'all')
3
+ def clean_cache(assumeyes: false)
4
+ dnf_action('clean', 'all', :assumeyes => assumeyes)
5
5
  super
6
6
  end
7
7
 
8
8
  private
9
9
 
10
- def dnf_action(action, packages, assumeyes: false)
10
+ def dnf_action(action, packages, with_status: false, assumeyes: false)
11
11
  yum_options = []
12
12
  yum_options << '-y' if assumeyes
13
- sys.execute!("dnf #{yum_options.join(' ')} #{action} #{packages.join(' ')}",
14
- :interactive => true)
13
+ if with_status
14
+ sys.execute_with_status("dnf #{yum_options.join(' ')} #{action} #{packages.join(' ')}",
15
+ :interactive => !assumeyes)
16
+ else
17
+ sys.execute!("dnf #{yum_options.join(' ')} #{action} #{packages.join(' ')}",
18
+ :interactive => !assumeyes)
19
+
20
+ end
15
21
  end
16
22
  end
17
23
  end
@@ -57,8 +57,13 @@ module ForemanMaintain::PackageManager
57
57
  yum_action('update', packages, :assumeyes => assumeyes)
58
58
  end
59
59
 
60
- def clean_cache
61
- yum_action('clean', 'all')
60
+ def clean_cache(assumeyes: false)
61
+ yum_action('clean', 'all', :assumeyes => assumeyes)
62
+ end
63
+
64
+ def update_available?(package)
65
+ cmd_output = yum_action('check-update -q', package, :with_status => true, :assumeyes => false)
66
+ cmd_output[0] == 100
62
67
  end
63
68
 
64
69
  def files_not_owned_by_package(directory)
@@ -96,14 +101,19 @@ module ForemanMaintain::PackageManager
96
101
  File.open(protector_config_file, 'w') { |file| file.puts config }
97
102
  end
98
103
 
99
- def yum_action(action, packages, assumeyes: false)
104
+ def yum_action(action, packages, with_status: false, assumeyes: false)
100
105
  yum_options = []
101
106
  packages = [packages].flatten(1)
102
107
  yum_options << '-y' if assumeyes
103
108
  yum_options_s = yum_options.empty? ? '' : ' ' + yum_options.join(' ')
104
109
  packages_s = packages.empty? ? '' : ' ' + packages.join(' ')
105
- sys.execute!("yum#{yum_options_s} #{action}#{packages_s}",
106
- :interactive => true)
110
+ if with_status
111
+ sys.execute_with_status("yum#{yum_options_s} #{action}#{packages_s}",
112
+ :interactive => !assumeyes)
113
+ else
114
+ sys.execute!("yum#{yum_options_s} #{action}#{packages_s}",
115
+ :interactive => !assumeyes)
116
+ end
107
117
  end
108
118
 
109
119
  def install_extras(src, dest, override: false)
@@ -16,7 +16,6 @@ module ForemanMaintain
16
16
  @spinner_chars = %w[| / - \\]
17
17
  @current_line = ''
18
18
  @puts_needed = false
19
- start_spinner
20
19
  end
21
20
 
22
21
  def update(line)
@@ -42,8 +41,6 @@ module ForemanMaintain
42
41
  end
43
42
  end
44
43
 
45
- private
46
-
47
44
  def start_spinner
48
45
  @thread = Thread.new do
49
46
  loop do
@@ -53,6 +50,8 @@ module ForemanMaintain
53
50
  end
54
51
  end
55
52
 
53
+ private
54
+
56
55
  def spin
57
56
  @mutex.synchronize do
58
57
  return unless @active
@@ -80,6 +79,7 @@ module ForemanMaintain
80
79
  @line_char = '-'
81
80
  @cell_char = '|'
82
81
  @spinner = Spinner.new(self)
82
+ @spinner.start_spinner if @stdout.tty?
83
83
  @last_line = ''
84
84
  end
85
85
 
@@ -15,29 +15,8 @@ module ForemanMaintain
15
15
  def available_targets
16
16
  # when some upgrade is in progress, we don't allow upgrade to different version
17
17
  return [current_target_version] if current_target_version
18
- versions_to_tags.inject([]) do |available_targets, (version, tag)|
19
- if !find_scenarios(:tags => [tag]).empty?
20
- available_targets << version
21
- else
22
- available_targets
23
- end
24
- end.sort
25
- end
26
-
27
- def versions_to_tags
28
- @versions_to_tags ||= {}
29
- end
30
-
31
- # registers target version to specific tag
32
- def register_version(version, tag)
33
- if versions_to_tags.key?(version) && versions_to_tags[version] != tag
34
- raise "Version #{version} already registered to tag #{versions_to_tags[version]}"
35
- end
36
- @versions_to_tags[version] = tag
37
- end
38
18
 
39
- def clear_register
40
- versions_to_tags.clear
19
+ find_scenarios(:tags => :upgrade_scenario).map(&:target_version).uniq.sort
41
20
  end
42
21
 
43
22
  def current_target_version
@@ -57,25 +36,35 @@ module ForemanMaintain
57
36
 
58
37
  def initialize(version, reporter, options = {})
59
38
  super(reporter, [], options)
60
- @tag = self.class.versions_to_tags[version]
61
- raise "Unknown version #{version}" unless tag
62
39
  @version = version
40
+ scenarios_present = find_scenarios(:tags => :upgrade_scenario).any?(&matching_version_test)
41
+ raise "Unknown version #{version}" unless scenarios_present
42
+
63
43
  @scenario_cache = {}
64
44
  self.phase = :pre_upgrade_checks
65
45
  end
66
46
 
67
47
  def scenario(phase)
68
48
  return @scenario_cache[phase] if @scenario_cache.key?(phase)
69
- condition = { :tags => [tag, phase] }
70
- matching_scenarios = find_all_scenarios(condition)
49
+
50
+ condition = { :tags => [:upgrade_scenario, phase] }
51
+ matching_scenarios = find_scenarios(condition).select(&matching_version_test)
71
52
  raise "Too many scenarios match #{condition.inspect}" if matching_scenarios.size > 1
53
+
72
54
  @scenario_cache[phase] = matching_scenarios.first
73
55
  end
74
56
 
57
+ def matching_version_test
58
+ proc do |scenario|
59
+ scenario.respond_to?(:target_version) && scenario.target_version == @version
60
+ end
61
+ end
62
+
75
63
  def run
76
64
  self.class.current_target_version = @version
77
65
  PHASES.each do |phase|
78
66
  return run_rollback if quit?
67
+
79
68
  if skip?(phase)
80
69
  skip_phase(phase)
81
70
  else
@@ -127,6 +116,7 @@ module ForemanMaintain
127
116
  # deserializes the state of the run from the storage
128
117
  def load
129
118
  return unless storage[:serialized]
119
+
130
120
  load_from_hash(storage[:serialized])
131
121
  end
132
122
 
@@ -134,6 +124,7 @@ module ForemanMaintain
134
124
  with_non_empty_scenario(phase) do |scenario|
135
125
  confirm_scenario(scenario)
136
126
  return if quit?
127
+
137
128
  self.phase = phase
138
129
  run_scenario(scenario)
139
130
  # if we started from the :pre_upgrade_checks, ensure to ask before
@@ -158,6 +149,7 @@ module ForemanMaintain
158
149
  # rubocop:disable Metrics/MethodLength
159
150
  def rollback_pre_migrations
160
151
  raise "Unexpected phase #{phase}, expecting pre_migrations" unless phase == :pre_migrations
152
+
161
153
  rollback_needed = scenario(:pre_migrations).steps.any? { |s| s.executed? && s.success? }
162
154
  if rollback_needed
163
155
  @quit = false
@@ -198,6 +190,7 @@ module ForemanMaintain
198
190
  unless @scenario_cache.empty?
199
191
  raise "Some scenarios are already initialized: #{@scenario_cache.keys}"
200
192
  end
193
+
201
194
  self.phase = hash[:phase]
202
195
  hash[:scenarios].each do |key, scenario_hash|
203
196
  @scenario_cache[key] = Scenario.new_from_hash(scenario_hash)
@@ -229,6 +222,7 @@ module ForemanMaintain
229
222
 
230
223
  def phase=(phase)
231
224
  raise "Unknown phase #{phase}" unless PHASES.include?(phase)
225
+
232
226
  @phase = phase
233
227
  end
234
228
  end
@@ -204,6 +204,10 @@ module ForemanMaintain
204
204
  def incremental?
205
205
  !!metadata.fetch('incremental', false)
206
206
  end
207
+
208
+ def online_backup?
209
+ !!metadata.fetch('online', false)
210
+ end
207
211
  end
208
212
  end
209
213
  end
@@ -5,7 +5,7 @@ module ForemanMaintain::Utils
5
5
  FACTER_FILES = %w[/usr/bin/facter /opt/puppetlabs/bin/facter].freeze
6
6
 
7
7
  def self.package
8
- puppet_version = version(execute!('puppet --version'))
8
+ puppet_version = version(execute!('/opt/puppetlabs/bin/puppet --version'))
9
9
 
10
10
  puppet_version.major >= 4 ? 'puppet-agent' : 'facter'
11
11
  end
@@ -10,6 +10,12 @@ module ForemanMaintain::Utils
10
10
  @options = options
11
11
  end
12
12
 
13
+ def socket
14
+ if @options[:socket]
15
+ self.class.new("#{@options[:socket]}.socket", priority)
16
+ end
17
+ end
18
+
13
19
  def <=>(other)
14
20
  prio_cmp = @priority <=> other.priority
15
21
  prio_cmp == 0 ? @name <=> other.name : prio_cmp
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '0.6.2'.freeze
2
+ VERSION = '0.6.7'.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: 0.6.2
4
+ version: 0.6.7
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: 2020-03-13 00:00:00.000000000 Z
11
+ date: 2020-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
@@ -122,17 +122,19 @@ files:
122
122
  - definitions/checks/backup/directory_ready.rb
123
123
  - definitions/checks/candlepin/db_up.rb
124
124
  - definitions/checks/candlepin/validate_db.rb
125
- - definitions/checks/check_epel_repository.rb
126
125
  - definitions/checks/check_hotfix_installed.rb
127
126
  - definitions/checks/check_tmout.rb
128
127
  - definitions/checks/disk/available_space.rb
129
128
  - definitions/checks/disk/performance.rb
129
+ - definitions/checks/env_proxy.rb
130
130
  - definitions/checks/foreman/check_corrupted_roles.rb
131
131
  - definitions/checks/foreman/check_duplicate_roles.rb
132
132
  - definitions/checks/foreman/db_up.rb
133
133
  - definitions/checks/foreman/facts_names.rb
134
134
  - definitions/checks/foreman/puppet_class_duplicates.rb
135
+ - definitions/checks/foreman/validate_external_db_version.rb
135
136
  - definitions/checks/foreman_openscap/invalid_report_associations.rb
137
+ - definitions/checks/foreman_proxy/check_tftp_storage.rb
136
138
  - definitions/checks/foreman_proxy/verify_dhcp_config_syntax.rb
137
139
  - definitions/checks/foreman_tasks/invalid/check_old.rb
138
140
  - definitions/checks/foreman_tasks/invalid/check_pending_state.rb
@@ -147,6 +149,7 @@ files:
147
149
  - definitions/checks/puppet/provide_upgrade_guide.rb
148
150
  - definitions/checks/puppet/verify_no_empty_cacert_requests.rb
149
151
  - definitions/checks/remote_execution/verify_settings_file_already_exists.rb
152
+ - definitions/checks/repositories/check_non_rh_repository.rb
150
153
  - definitions/checks/repositories/check_upstream_repository.rb
151
154
  - definitions/checks/repositories/validate.rb
152
155
  - definitions/checks/restore/validate_backup.rb
@@ -157,6 +160,7 @@ files:
157
160
  - definitions/checks/system_registration.rb
158
161
  - definitions/checks/version_locking_enabled.rb
159
162
  - definitions/checks/yum_exclude.rb
163
+ - definitions/features/apache.rb
160
164
  - definitions/features/candlepin.rb
161
165
  - definitions/features/candlepin_database.rb
162
166
  - definitions/features/capsule.rb
@@ -263,6 +267,7 @@ files:
263
267
  - definitions/procedures/restore/pg_global_objects.rb
264
268
  - definitions/procedures/restore/postgres_owner.rb
265
269
  - definitions/procedures/restore/pulpcore_dump.rb
270
+ - definitions/procedures/restore/regenerate_queues.rb
266
271
  - definitions/procedures/selinux/set_file_security.rb
267
272
  - definitions/procedures/service/base.rb
268
273
  - definitions/procedures/service/daemon_reload.rb
@@ -276,10 +281,13 @@ files:
276
281
  - definitions/procedures/sync_plans/disable.rb
277
282
  - definitions/procedures/sync_plans/enable.rb
278
283
  - definitions/scenarios/backup.rb
284
+ - definitions/scenarios/content.rb
279
285
  - definitions/scenarios/maintenance_mode.rb
280
286
  - definitions/scenarios/packages.rb
281
287
  - definitions/scenarios/restore.rb
282
288
  - definitions/scenarios/services.rb
289
+ - definitions/scenarios/upgrade_to_capsule_6_8.rb
290
+ - definitions/scenarios/upgrade_to_capsule_6_8_z.rb
283
291
  - definitions/scenarios/upgrade_to_satellite_6_2.rb
284
292
  - definitions/scenarios/upgrade_to_satellite_6_2_z.rb
285
293
  - definitions/scenarios/upgrade_to_satellite_6_3.rb
@@ -292,6 +300,8 @@ files:
292
300
  - definitions/scenarios/upgrade_to_satellite_6_6_z.rb
293
301
  - definitions/scenarios/upgrade_to_satellite_6_7.rb
294
302
  - definitions/scenarios/upgrade_to_satellite_6_7_z.rb
303
+ - definitions/scenarios/upgrade_to_satellite_6_8.rb
304
+ - definitions/scenarios/upgrade_to_satellite_6_8_z.rb
295
305
  - extras/foreman-maintain.sh
296
306
  - extras/foreman_protector/foreman-protector.conf
297
307
  - extras/foreman_protector/foreman-protector.py
@@ -309,6 +319,7 @@ files:
309
319
  - lib/foreman_maintain/cli/advanced_command.rb
310
320
  - lib/foreman_maintain/cli/backup_command.rb
311
321
  - lib/foreman_maintain/cli/base.rb
322
+ - lib/foreman_maintain/cli/content_command.rb
312
323
  - lib/foreman_maintain/cli/health_command.rb
313
324
  - lib/foreman_maintain/cli/maintenance_mode_command.rb
314
325
  - lib/foreman_maintain/cli/packages_command.rb
@@ -390,7 +401,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
390
401
  - !ruby/object:Gem::Version
391
402
  version: '0'
392
403
  requirements: []
393
- rubygems_version: 3.0.6
404
+ rubygems_version: 3.0.8
394
405
  signing_key:
395
406
  specification_version: 4
396
407
  summary: Foreman maintenance tool belt
@@ -1,21 +0,0 @@
1
- class Checks::CheckEpelRepository < ForemanMaintain::Check
2
- metadata do
3
- label :check_epel_repository
4
- description 'Check if EPEL repository enabled on system'
5
- tags :pre_upgrade
6
- confine do
7
- feature(:instance).downstream
8
- end
9
- end
10
-
11
- def run
12
- with_spinner('Checking for presence of EPEL repository') do
13
- assert(!epel_enabled?, 'System is subscribed to EPEL repository')
14
- end
15
- end
16
-
17
- def epel_enabled?
18
- system_repos = execute("yum repolist enabled -d 6 -e 0| grep -E 'Repo-baseurl|Repo-id'")
19
- system_repos.to_s.match(/\bepel\b/i)
20
- end
21
- end