foreman_maintain 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -0
  3. data/definitions/checks/disk/performance.rb +16 -8
  4. data/definitions/checks/foreman/validate_external_db_version.rb +28 -0
  5. data/definitions/checks/original_assets.rb +1 -0
  6. data/definitions/features/installer.rb +9 -2
  7. data/definitions/procedures/content/prepare.rb +1 -1
  8. data/definitions/procedures/content/switchover.rb +7 -3
  9. data/definitions/procedures/restore/regenerate_missing_queues.rb +52 -0
  10. data/definitions/scenarios/content.rb +27 -0
  11. data/definitions/scenarios/packages.rb +2 -4
  12. data/definitions/scenarios/upgrade_to_capsule_6_7.rb +84 -0
  13. data/definitions/scenarios/upgrade_to_capsule_6_7_z.rb +84 -0
  14. data/definitions/scenarios/upgrade_to_capsule_6_8.rb +84 -0
  15. data/definitions/scenarios/upgrade_to_capsule_6_8_z.rb +84 -0
  16. data/definitions/scenarios/upgrade_to_satellite_6_2.rb +8 -4
  17. data/definitions/scenarios/upgrade_to_satellite_6_2_z.rb +8 -4
  18. data/definitions/scenarios/upgrade_to_satellite_6_3.rb +8 -4
  19. data/definitions/scenarios/upgrade_to_satellite_6_3_z.rb +8 -4
  20. data/definitions/scenarios/upgrade_to_satellite_6_4.rb +8 -4
  21. data/definitions/scenarios/upgrade_to_satellite_6_4_z.rb +8 -4
  22. data/definitions/scenarios/upgrade_to_satellite_6_5.rb +8 -4
  23. data/definitions/scenarios/upgrade_to_satellite_6_5_z.rb +8 -4
  24. data/definitions/scenarios/upgrade_to_satellite_6_6.rb +8 -4
  25. data/definitions/scenarios/upgrade_to_satellite_6_6_z.rb +8 -4
  26. data/definitions/scenarios/upgrade_to_satellite_6_7.rb +8 -4
  27. data/definitions/scenarios/upgrade_to_satellite_6_7_z.rb +8 -4
  28. data/definitions/scenarios/upgrade_to_satellite_6_8.rb +84 -0
  29. data/definitions/scenarios/upgrade_to_satellite_6_8_z.rb +84 -0
  30. data/lib/foreman_maintain.rb +4 -0
  31. data/lib/foreman_maintain/cli.rb +2 -0
  32. data/lib/foreman_maintain/cli/content_command.rb +17 -0
  33. data/lib/foreman_maintain/concerns/base_database.rb +11 -0
  34. data/lib/foreman_maintain/concerns/downstream.rb +13 -8
  35. data/lib/foreman_maintain/upgrade_runner.rb +20 -26
  36. data/lib/foreman_maintain/version.rb +1 -1
  37. metadata +13 -3
@@ -0,0 +1,84 @@
1
+ module Scenarios::Satellite_6_8_z
2
+ class Abstract < ForemanMaintain::Scenario
3
+ def self.upgrade_metadata(&block)
4
+ metadata do
5
+ tags :upgrade_scenario
6
+ confine do
7
+ feature(:satellite) &&
8
+ (feature(:satellite).current_minor_version == '6.8' || \
9
+ ForemanMaintain.upgrade_in_progress == '6.8.z')
10
+ end
11
+ instance_eval(&block)
12
+ end
13
+ end
14
+
15
+ def target_version
16
+ '6.8.z'
17
+ end
18
+ end
19
+
20
+ class PreUpgradeCheck < Abstract
21
+ upgrade_metadata do
22
+ description 'Checks before upgrading to Satellite 6.8.z'
23
+ tags :pre_upgrade_checks
24
+ run_strategy :fail_slow
25
+ end
26
+
27
+ def compose
28
+ add_steps(find_checks(:default))
29
+ add_steps(find_checks(:pre_upgrade))
30
+ add_step(Checks::Repositories::Validate.new(:version => '6.8'))
31
+ end
32
+ end
33
+
34
+ class PreMigrations < Abstract
35
+ upgrade_metadata do
36
+ description 'Procedures before migrating to Satellite 6.8.z'
37
+ tags :pre_migrations
38
+ end
39
+
40
+ def compose
41
+ add_steps(find_procedures(:pre_migrations))
42
+ add_step(Procedures::Service::Stop.new)
43
+ end
44
+ end
45
+
46
+ class Migrations < Abstract
47
+ upgrade_metadata do
48
+ description 'Migration scripts to Satellite 6.8.z'
49
+ tags :migrations
50
+ end
51
+
52
+ def compose
53
+ add_step(Procedures::Repositories::Setup.new(:version => '6.8'))
54
+ add_step(Procedures::Packages::UnlockVersions.new)
55
+ add_step(Procedures::Packages::Update.new(:assumeyes => true))
56
+ add_step(Procedures::Installer::Upgrade.new)
57
+ end
58
+ end
59
+
60
+ class PostMigrations < Abstract
61
+ upgrade_metadata do
62
+ description 'Procedures after migrating to Satellite 6.8.z'
63
+ tags :post_migrations
64
+ end
65
+
66
+ def compose
67
+ add_step(Procedures::Service::Start.new)
68
+ add_steps(find_procedures(:post_migrations))
69
+ end
70
+ end
71
+
72
+ class PostUpgradeChecks < Abstract
73
+ upgrade_metadata do
74
+ description 'Checks after upgrading to Satellite 6.8.z'
75
+ tags :post_upgrade_checks
76
+ run_strategy :fail_slow
77
+ end
78
+
79
+ def compose
80
+ add_steps(find_checks(:default))
81
+ add_steps(find_checks(:post_upgrade))
82
+ end
83
+ end
84
+ end
@@ -139,5 +139,9 @@ module ForemanMaintain
139
139
  rescue StandardError => e
140
140
  logger.error "Invalid Storage label i.e #{label}. Error - #{e.message}"
141
141
  end
142
+
143
+ def upgrade_in_progress
144
+ storage[:upgrade_target_version]
145
+ end
142
146
  end
143
147
  end
@@ -10,6 +10,7 @@ require 'foreman_maintain/cli/service_command'
10
10
  require 'foreman_maintain/cli/restore_command'
11
11
  require 'foreman_maintain/cli/maintenance_mode_command'
12
12
  require 'foreman_maintain/cli/packages_command'
13
+ require 'foreman_maintain/cli/content_command'
13
14
 
14
15
  module ForemanMaintain
15
16
  module Cli
@@ -23,6 +24,7 @@ module ForemanMaintain
23
24
  subcommand 'restore', 'Restore a backup', RestoreCommand
24
25
  subcommand 'packages', 'Lock/Unlock package protection, install, update', PackagesCommand
25
26
  subcommand 'advanced', 'Advanced tools for server maintenance', AdvancedCommand
27
+ subcommand 'content', 'Content related commands', ContentCommand
26
28
  subcommand 'maintenance-mode', 'Control maintenance-mode for application',
27
29
  MaintenanceModeCommand
28
30
 
@@ -0,0 +1,17 @@
1
+ module ForemanMaintain
2
+ module Cli
3
+ class ContentCommand < Base
4
+ subcommand 'prepare', 'Prepare content for Pulp 3' do
5
+ def execute
6
+ run_scenarios_and_exit(Scenarios::Content::Prepare.new)
7
+ end
8
+ end
9
+
10
+ subcommand 'switchover', 'Switch support for certain content from Pulp 2 to Pulp 3' do
11
+ def execute
12
+ run_scenarios_and_exit(Scenarios::Content::Switchover.new)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -150,6 +150,17 @@ module ForemanMaintain
150
150
  end
151
151
  end
152
152
 
153
+ def db_version(config = configuration)
154
+ if ping(config)
155
+ # Note - t removes headers, -A removes alignment whitespace
156
+ server_version_cmd = psql_command(config) + ' -c "SHOW server_version" -t -A'
157
+ version_string = execute!(server_version_cmd, :hidden_patterns => [config['password']])
158
+ version(version_string)
159
+ else
160
+ raise_service_error
161
+ end
162
+ end
163
+
153
164
  private
154
165
 
155
166
  def base_command(config, command = 'psql')
@@ -98,16 +98,21 @@ module ForemanMaintain
98
98
  end
99
99
 
100
100
  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"
101
+ repos_arrary = common_repos_array(rh_version_major, full_version)
102
+ return repos_arrary.first(1) if feature(:capsule)
103
103
 
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
104
+ repos_arrary
105
+ end
106
+
107
+ def common_repos_array(rh_version_major, full_version)
108
+ ["rhel-#{rh_version_major}-server-satellite-maintenance-6#{use_beta}-rpms",
109
+ "rhel-#{rh_version_major}-server-satellite-tools-#{full_version}#{use_beta}-rpms"]
110
+ end
111
+
112
+ def use_beta
113
+ return '-beta' if ENV['FOREMAN_MAINTAIN_USE_BETA'] == '1'
109
114
 
110
- [tools_repo_id, maintenance_repo_id]
115
+ nil
111
116
  end
112
117
 
113
118
  def main_rh_repos(rh_version_major)
@@ -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
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '0.6.2'.freeze
2
+ VERSION = '0.6.3'.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.3
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-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
@@ -132,6 +132,7 @@ files:
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
136
137
  - definitions/checks/foreman_proxy/verify_dhcp_config_syntax.rb
137
138
  - definitions/checks/foreman_tasks/invalid/check_old.rb
@@ -263,6 +264,7 @@ files:
263
264
  - definitions/procedures/restore/pg_global_objects.rb
264
265
  - definitions/procedures/restore/postgres_owner.rb
265
266
  - definitions/procedures/restore/pulpcore_dump.rb
267
+ - definitions/procedures/restore/regenerate_missing_queues.rb
266
268
  - definitions/procedures/selinux/set_file_security.rb
267
269
  - definitions/procedures/service/base.rb
268
270
  - definitions/procedures/service/daemon_reload.rb
@@ -276,10 +278,15 @@ files:
276
278
  - definitions/procedures/sync_plans/disable.rb
277
279
  - definitions/procedures/sync_plans/enable.rb
278
280
  - definitions/scenarios/backup.rb
281
+ - definitions/scenarios/content.rb
279
282
  - definitions/scenarios/maintenance_mode.rb
280
283
  - definitions/scenarios/packages.rb
281
284
  - definitions/scenarios/restore.rb
282
285
  - definitions/scenarios/services.rb
286
+ - definitions/scenarios/upgrade_to_capsule_6_7.rb
287
+ - definitions/scenarios/upgrade_to_capsule_6_7_z.rb
288
+ - definitions/scenarios/upgrade_to_capsule_6_8.rb
289
+ - definitions/scenarios/upgrade_to_capsule_6_8_z.rb
283
290
  - definitions/scenarios/upgrade_to_satellite_6_2.rb
284
291
  - definitions/scenarios/upgrade_to_satellite_6_2_z.rb
285
292
  - definitions/scenarios/upgrade_to_satellite_6_3.rb
@@ -292,6 +299,8 @@ files:
292
299
  - definitions/scenarios/upgrade_to_satellite_6_6_z.rb
293
300
  - definitions/scenarios/upgrade_to_satellite_6_7.rb
294
301
  - definitions/scenarios/upgrade_to_satellite_6_7_z.rb
302
+ - definitions/scenarios/upgrade_to_satellite_6_8.rb
303
+ - definitions/scenarios/upgrade_to_satellite_6_8_z.rb
295
304
  - extras/foreman-maintain.sh
296
305
  - extras/foreman_protector/foreman-protector.conf
297
306
  - extras/foreman_protector/foreman-protector.py
@@ -309,6 +318,7 @@ files:
309
318
  - lib/foreman_maintain/cli/advanced_command.rb
310
319
  - lib/foreman_maintain/cli/backup_command.rb
311
320
  - lib/foreman_maintain/cli/base.rb
321
+ - lib/foreman_maintain/cli/content_command.rb
312
322
  - lib/foreman_maintain/cli/health_command.rb
313
323
  - lib/foreman_maintain/cli/maintenance_mode_command.rb
314
324
  - lib/foreman_maintain/cli/packages_command.rb
@@ -390,7 +400,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
390
400
  - !ruby/object:Gem::Version
391
401
  version: '0'
392
402
  requirements: []
393
- rubygems_version: 3.0.6
403
+ rubygems_version: 3.0.8
394
404
  signing_key:
395
405
  specification_version: 4
396
406
  summary: Foreman maintenance tool belt