foreman_maintain 0.6.10 → 0.7.0

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/definitions/checks/foreman/check_checkpoint_segments.rb +30 -22
  4. data/definitions/checks/package_manager/yum/validate_yum_config.rb +51 -0
  5. data/definitions/features/pulpcore.rb +23 -6
  6. data/definitions/procedures/backup/accessibility_confirmation.rb +1 -1
  7. data/definitions/procedures/backup/online/safety_confirmation.rb +1 -1
  8. data/definitions/procedures/backup/snapshot/logical_volume_confirmation.rb +1 -1
  9. data/definitions/procedures/content/migration_stats.rb +12 -0
  10. data/definitions/procedures/content/prepare.rb +0 -5
  11. data/definitions/procedures/content/prepare_abort.rb +12 -0
  12. data/definitions/procedures/content/switchover.rb +1 -1
  13. data/definitions/procedures/installer/upgrade_rake_task.rb +11 -0
  14. data/definitions/procedures/packages/installer_confirmation.rb +1 -1
  15. data/definitions/procedures/packages/update_all_confirmation.rb +1 -1
  16. data/definitions/procedures/prep_6_10_upgrade.rb +31 -0
  17. data/definitions/procedures/restore/confirmation.rb +1 -1
  18. data/definitions/procedures/restore/installer_reset.rb +10 -1
  19. data/definitions/scenarios/content.rb +50 -3
  20. data/definitions/scenarios/prep_6_10_upgrade.rb +13 -0
  21. data/definitions/scenarios/upgrade_to_capsule_6_9.rb +88 -0
  22. data/definitions/scenarios/upgrade_to_capsule_6_9_z.rb +88 -0
  23. data/definitions/scenarios/upgrade_to_satellite_6_8.rb +1 -0
  24. data/definitions/scenarios/upgrade_to_satellite_6_8_z.rb +1 -0
  25. data/definitions/scenarios/upgrade_to_satellite_6_9.rb +90 -0
  26. data/definitions/scenarios/upgrade_to_satellite_6_9_z.rb +89 -0
  27. data/extras/foreman_protector/foreman-protector.whitelist +1 -0
  28. data/lib/foreman_maintain.rb +1 -1
  29. data/lib/foreman_maintain/cli.rb +11 -2
  30. data/lib/foreman_maintain/cli/content_command.rb +17 -2
  31. data/lib/foreman_maintain/concerns/downstream.rb +4 -0
  32. data/lib/foreman_maintain/reporter.rb +18 -13
  33. data/lib/foreman_maintain/reporter/cli_reporter.rb +18 -9
  34. data/lib/foreman_maintain/runner.rb +6 -4
  35. data/lib/foreman_maintain/scenario.rb +4 -0
  36. data/lib/foreman_maintain/utils/service/systemd.rb +11 -1
  37. data/lib/foreman_maintain/version.rb +1 -1
  38. metadata +12 -3
  39. data/definitions/checks/yum_exclude.rb +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e382b3653ec4332ef6bc891b83e92263874dfc079fb84c1f3db951696804832e
4
- data.tar.gz: 03b8467289528688c03ed6ad7b8361befee931c9eb0d51a897aa38a755b9ad8a
3
+ metadata.gz: 4151b9d6dbc810f7f85aa093bdcfc4f967530dbeddcf7e13e88ce998125211dc
4
+ data.tar.gz: e7db5a3881d9652bae19c61f95ff95076745f36212c6e36f4cf582d4b5f33c8f
5
5
  SHA512:
6
- metadata.gz: 0f9b4071adbda3fb4f39c84a6c02891aa4e54c0138d8245dfb2da93844bbc6b51e8db88a0424a006fde8563b7b4806b833176caeacaaa9c4b3101ef23824c4f0
7
- data.tar.gz: a00abc28ccc812b76de1ca75849f471bd16944fb3cd8bc7ead833f0c077c17e1860626ba6e9c52af834fa1f21c2a6c6b0c331551bc435d921926fdc694cda045
6
+ metadata.gz: 56165e03d708aa74d5b370cd7f2ca96a0121b2b97d14f326372181ef2c464eb9856dbafd1f60ad99aea89c9a610a1579a334a4a69c12abee38b70d2eb84a899a
7
+ data.tar.gz: e43c42dbbe5aab6752e16429dae6fd70367510be2df57f026aa5ad53bb1efb9ef9e4eb2efc4331aef3823b93729412b789bc8c3e8396e03b4563bc82cf42199b
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Foreman Maintenance [![Build Status](https://travis-ci.org/theforeman/foreman_maintain.svg?branch=master)](https://travis-ci.org/theforeman/foreman_maintain) <a href="https://codeclimate.com/github/theforeman/foreman_maintain"><img src="https://codeclimate.com/github/theforeman/foreman_maintain/badges/gpa.svg" /></a>
1
+ # Foreman Maintain [![Build Status](https://github.com/theforeman/foreman_maintain/workflows/Ruby%20Tests/badge.svg?event=pull_request)](https://github.com/theforeman/foreman_maintain/workflows/Ruby%20Tests/badge.svg?event=pull_request) <a href="https://codeclimate.com/github/theforeman/foreman_maintain"><img src="https://codeclimate.com/github/theforeman/foreman_maintain/badges/gpa.svg" /></a>
2
2
 
3
3
  The `foreman_maintain` aims to provide various features that helps keep the
4
4
  Foreman/Satellite up and running. It supports multiple versions and subparts
@@ -52,7 +52,7 @@ Subcommands:
52
52
  is-enabled Get maintenance-mode status code
53
53
 
54
54
  content Content related commands
55
- prepare Prepare content for Pulp 3
55
+ prepare Prepare content for Pulp 3
56
56
  switchover Switch support for certain content from Pulp 2 to Pulp 3
57
57
  ```
58
58
 
@@ -18,31 +18,39 @@ module Checks
18
18
  # rubocop:disable Metrics/MethodLength
19
19
  def check_custom_hiera
20
20
  hiera_file = feature(:installer).custom_hiera_file
21
- if (config = YAML.load_file(hiera_file)) &&
22
- config.key?('postgresql::server::config_entries')
23
- if config['postgresql::server::config_entries'].nil?
24
- return <<-MESSAGE.strip_heredoc
25
- ERROR: 'postgresql::server::config_entries' cannot be null.
26
- Please remove it from following file and re-run the command.
27
- - #{hiera_file}
28
- MESSAGE
29
- elsif config['postgresql::server::config_entries'].key?('checkpoint_segments')
30
- message = <<-MESSAGE.strip_heredoc
31
- ERROR: Tuning option 'checkpoint_segments' found.
32
- This option is no longer valid for PostgreSQL 9.5 or newer.
33
- Please remove it from following file and re-run the command.
34
- - #{hiera_file}
35
- MESSAGE
36
- if feature(:katello)
37
- message += <<-MESSAGE.strip_heredoc
38
- The presence of checkpoint_segments in #{hiera_file} indicates manual tuning.
39
- Manual tuning can override values provided by the --tuning parameter.
40
- Review #{hiera_file} for values that are already provided by the built in tuning profiles.
41
- Built in tuning profiles also provide a supported upgrade path.
21
+ begin
22
+ config = YAML.load_file(hiera_file)
23
+ if config.is_a?(Hash) && config.key?('postgresql::server::config_entries')
24
+ if config['postgresql::server::config_entries'].nil?
25
+ return <<-MESSAGE.strip_heredoc
26
+ ERROR: 'postgresql::server::config_entries' cannot be null.
27
+ Please remove it from following file and re-run the command.
28
+ - #{hiera_file}
42
29
  MESSAGE
30
+ elsif config['postgresql::server::config_entries'].key?('checkpoint_segments')
31
+ message = <<-MESSAGE.strip_heredoc
32
+ ERROR: Tuning option 'checkpoint_segments' found.
33
+ This option is no longer valid for PostgreSQL 9.5 or newer.
34
+ Please remove it from following file and re-run the command.
35
+ - #{hiera_file}
36
+ MESSAGE
37
+ if feature(:katello)
38
+ message += <<-MESSAGE.strip_heredoc
39
+ The presence of checkpoint_segments in #{hiera_file} indicates manual tuning.
40
+ Manual tuning can override values provided by the --tuning parameter.
41
+ Review #{hiera_file} for values that are already provided by the built in tuning profiles.
42
+ Built in tuning profiles also provide a supported upgrade path.
43
+ MESSAGE
44
+ end
45
+ return message
43
46
  end
44
- return message
47
+ elsif config.is_a?(String)
48
+ fail! "Error: File #{hiera_file} is not a yaml file."
49
+ exit 1
45
50
  end
51
+ rescue Psych::SyntaxError
52
+ fail! "Found syntax error in file: #{hiera_file}"
53
+ exit 1
46
54
  end
47
55
  end
48
56
  # rubocop:enable Metrics/MethodLength
@@ -0,0 +1,51 @@
1
+ module Checks::PackageManager
2
+ module Yum
3
+ class ValidateYumConfig < ForemanMaintain::Check
4
+ metadata do
5
+ label :validate_yum_config
6
+ description 'Check to validate yum configuration before upgrade'
7
+ tags :pre_upgrade
8
+ end
9
+
10
+ def run
11
+ final_result = verify_config_options
12
+ assert(
13
+ final_result[:matched_keys].empty?,
14
+ failure_message(final_result)
15
+ )
16
+ end
17
+
18
+ private
19
+
20
+ def failure_message(final_result)
21
+ verb_string = final_result[:matched_keys].length > 1 ? 'are' : 'is'
22
+
23
+ "#{final_result[:matched_keys].join(',')} #{verb_string} set in /etc/yum.conf as below:"\
24
+ "\n#{final_result[:grep_output]}"\
25
+ "\nUnset this configuration as it is risky while yum update or upgrade!"
26
+ end
27
+
28
+ def verify_config_options
29
+ result = {}
30
+ combined_regex = yum_config_options.values.join('|')
31
+ result[:grep_output] = execute_grep_cmd(combined_regex)
32
+ result[:matched_keys] = yum_config_options.keys.select do |key|
33
+ result[:grep_output].include?(key)
34
+ end
35
+ result
36
+ end
37
+
38
+ def execute_grep_cmd(regex_string)
39
+ execute_with_status("grep -iE '#{regex_string}' /etc/yum.conf")[1]
40
+ end
41
+
42
+ def yum_config_options
43
+ @yum_config_options ||= {
44
+ 'exclude' => '^exclude\s*=\s*\S+.*$',
45
+ 'clean_requirements_on_remove' =>
46
+ '^clean_requirements_on_remove\s*=\S*(1|yes|true)$'
47
+ }
48
+ end
49
+ end
50
+ end
51
+ end
@@ -5,24 +5,41 @@ class Features::Pulpcore < ForemanMaintain::Feature
5
5
  label :pulpcore
6
6
 
7
7
  confine do
8
- ForemanMaintain::Utils::Service::Systemd.new('pulpcore-api', 0).exist?
8
+ ForemanMaintain::Utils::Service::Systemd.new('pulpcore-api', 0).exist? &&
9
+ ForemanMaintain::Utils::Service::Systemd.new('pulpcore-api', 0).enabled?
9
10
  end
10
11
  end
11
12
 
12
13
  def services
13
- [
14
- system_service('rh-redis5-redis', 5),
15
- system_service('pulpcore-api', 10),
16
- system_service('pulpcore-content', 10),
17
- system_service('pulpcore-resource-manager', 10),
14
+ pulpcore_common_services + [
18
15
  system_service('pulpcore-worker@*', 20, :all => true, :skip_enablement => true),
19
16
  system_service('httpd', 30)
20
17
  ]
21
18
  end
22
19
 
20
+ def pulpcore_migration_services
21
+ pulpcore_common_services + [
22
+ system_service('pulpcore-worker@1', 20),
23
+ system_service('pulpcore-worker@2', 20),
24
+ system_service('pulpcore-worker@3', 20),
25
+ system_service('pulpcore-worker@4', 20)
26
+ ]
27
+ end
28
+
23
29
  def config_files
24
30
  [
25
31
  '/etc/pulp/settings.py'
26
32
  ]
27
33
  end
34
+
35
+ private
36
+
37
+ def pulpcore_common_services
38
+ [
39
+ system_service('rh-redis5-redis', 5),
40
+ system_service('pulpcore-api', 10, :socket => 'pulpcore-api'),
41
+ system_service('pulpcore-content', 10, :socket => 'pulpcore-content'),
42
+ system_service('pulpcore-resource-manager', 10)
43
+ ]
44
+ end
28
45
  end
@@ -7,7 +7,7 @@ module Procedures::Backup
7
7
 
8
8
  def run
9
9
  answer = ask_decision("WARNING: This script will stop your services.\n\n" \
10
- 'Do you want to proceed?', 'y(yes), q(quit)')
10
+ 'Do you want to proceed?', actions_msg: 'y(yes), q(quit)')
11
11
  abort! unless answer == :yes
12
12
  end
13
13
  end
@@ -16,7 +16,7 @@ module Procedures::Backup
16
16
  " If you wish to utilize the online backup\n" \
17
17
  '*** for production use you need to ensure that there are' \
18
18
  " no modifications occurring during\n" \
19
- "*** your backup run.\n\nDo you want to proceed?", 'y(yes), q(quit)'
19
+ "*** your backup run.\n\nDo you want to proceed?", actions_msg: 'y(yes), q(quit)'
20
20
  )
21
21
  abort! unless answer == :yes
22
22
  end
@@ -40,7 +40,7 @@ module Procedures::Backup
40
40
  '*** If you would like to continue, the snapshot size will be required to be at least' \
41
41
  " the size of the actual #{shared_lv.join(', ')} database.\n" \
42
42
  "*** You can skip this confirmation with the '-y' flag.\n\n" \
43
- 'Do you want to proceed?', 'y(yes), q(quit)')
43
+ 'Do you want to proceed?', actions_msg: 'y(yes), q(quit)')
44
44
  abort! unless answer == :yes
45
45
  end
46
46
  end
@@ -0,0 +1,12 @@
1
+ module Procedures::Content
2
+ class MigrationStats < ForemanMaintain::Procedure
3
+ metadata do
4
+ description 'Retrieve Pulp 2 to Pulp 3 migration statistics'
5
+ for_feature :pulpcore
6
+ end
7
+
8
+ def run
9
+ puts execute!('foreman-rake katello:pulp3_migration_stats')
10
+ end
11
+ end
12
+ end
@@ -3,11 +3,6 @@ module Procedures::Content
3
3
  metadata do
4
4
  description 'Prepare content for Pulp 3'
5
5
  for_feature :pulpcore
6
-
7
- confine do
8
- # FIXME: remove this condition on next downstream upgrade scenario
9
- !feature(:instance).downstream
10
- end
11
6
  end
12
7
 
13
8
  def run
@@ -0,0 +1,12 @@
1
+ module Procedures::Content
2
+ class PrepareAbort < ForemanMaintain::Procedure
3
+ metadata do
4
+ description 'Abort all running Pulp 2 to Pulp 3 migration tasks'
5
+ for_feature :pulpcore
6
+ end
7
+
8
+ def run
9
+ puts execute!('foreman-rake katello:pulp3_migration_abort')
10
+ end
11
+ end
12
+ end
@@ -5,7 +5,7 @@ module Procedures::Content
5
5
  for_feature :pulpcore
6
6
 
7
7
  confine do
8
- # FIXME: remove this condition on next downstream upgrade scenario
8
+ # FIXME: remove this condition for the 6.10 upgrade scenario
9
9
  !feature(:instance).downstream
10
10
  end
11
11
  end
@@ -0,0 +1,11 @@
1
+ module Procedures::Installer
2
+ class UpgradeRakeTask < ForemanMaintain::Procedure
3
+ metadata do
4
+ description 'Execute upgrade:run rake task'
5
+ end
6
+
7
+ def run
8
+ execute!('foreman-rake upgrade:run')
9
+ end
10
+ end
11
+ end
@@ -11,7 +11,7 @@ module Procedures::Packages
11
11
  "is in a consistent state.\n" \
12
12
  "As a result some of your services may be restarted. \n\n" \
13
13
  'Do you want to proceed?'
14
- answer = ask_decision(question, 'y(yes), q(quit)')
14
+ answer = ask_decision(question, actions_msg: 'y(yes), q(quit)')
15
15
  abort! unless answer == :yes
16
16
  end
17
17
  end
@@ -16,7 +16,7 @@ module Procedures::Packages
16
16
  "NOTE: --assumeyes is not applicable for this check\n\n" \
17
17
  "Do you want to proceed with update of everything regardless\n" \
18
18
  'of the recommendations?'
19
- answer = ask_decision(question, 'y(yes), q(quit)', ignore_assumeyes: true)
19
+ answer = ask_decision(question, actions_msg: 'y(yes), q(quit)', ignore_assumeyes: true)
20
20
  abort! unless answer == :yes
21
21
  end
22
22
  end
@@ -0,0 +1,31 @@
1
+ class Procedures::Prep610Upgrade < ForemanMaintain::Procedure
2
+ metadata do
3
+ description 'Preparations for the Satellite 6.10 upgrade'
4
+
5
+ confine do
6
+ ::Scenarios.const_defined?('Satellite_6_10') &&
7
+ feature(:satellite) &&
8
+ feature(:satellite).current_minor_version == '6.9'
9
+ end
10
+ end
11
+
12
+ def run
13
+ puts time_warning
14
+ with_spinner('Updating filesystem permissions for Pulp 3') do |spinner|
15
+ spinner.update('$ chmod -R g+rwX /var/lib/pulp/content')
16
+ FileUtils.chmod_R 'g=rwX', '/var/lib/pulp/content'
17
+ spinner.update("$ find /var/lib/pulp/content -type d -perm -g-s -exec chmod g+s {} \;")
18
+ execute!('find /var/lib/pulp/content -type d -perm -g-s -exec chmod g+s {} \;')
19
+ spinner.update('$ chown -R :pulp /var/lib/pulp/content')
20
+ FileUtils.chown_R nil, 'pulp', '/var/lib/pulp/content'
21
+ # TODO: Install Pulp 3 without starting services?
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def time_warning
28
+ "\e[33mprep-6.10-upgrade may take a while depending on the "\
29
+ "size of /var/lib/pulp/content\e[0m"
30
+ end
31
+ end
@@ -10,7 +10,7 @@ module Procedures::Restore
10
10
  "Your existing installation will be replaced with the backup database.\n" \
11
11
  "Once this operation is complete there is no going back.\n" \
12
12
  'Do you want to proceed?'
13
- answer = ask_decision(warning, 'y(yes), q(quit)')
13
+ answer = ask_decision(warning, actions_msg: 'y(yes), q(quit)')
14
14
  abort! unless answer == :yes
15
15
  end
16
16
  end
@@ -12,7 +12,7 @@ module Procedures::Restore
12
12
 
13
13
  def installer_cmd
14
14
  installer = "yes | #{feature(:installer).installer_command} "
15
- installer << '-v --reset '
15
+ installer << reset_option
16
16
  if feature(:instance).foreman_proxy_with_content?
17
17
  installer << '--foreman-proxy-register-in-foreman false '
18
18
  end
@@ -27,5 +27,14 @@ module Procedures::Restore
27
27
  end
28
28
  installer
29
29
  end
30
+
31
+ def reset_option
32
+ if check_min_version('foreman', '2.2') || \
33
+ check_min_version('foreman-proxy', '2.2')
34
+ return '-v --reset-data '
35
+ end
36
+
37
+ '-v --reset '
38
+ end
30
39
  end
31
40
  end
@@ -8,11 +8,29 @@ module ForemanMaintain::Scenarios
8
8
  end
9
9
 
10
10
  def compose
11
- # FIXME: remove this condition on next downstream upgrade scenario
12
- if Procedures::Content::Prepare.present?
11
+ if feature(:satellite) && feature(:satellite).at_least_version?('6.9')
12
+ enable_and_start_services
13
13
  add_step(Procedures::Content::Prepare)
14
+ disable_and_stop_services
14
15
  end
15
16
  end
17
+
18
+ private
19
+
20
+ def enable_and_start_services
21
+ add_step(Procedures::Service::Start)
22
+ add_step(Procedures::Service::Enable.
23
+ new(:only => feature(:pulpcore).pulpcore_migration_services))
24
+ add_step(Procedures::Service::Start.
25
+ new(:only => feature(:pulpcore).pulpcore_migration_services))
26
+ end
27
+
28
+ def disable_and_stop_services
29
+ add_step(Procedures::Service::Stop.
30
+ new(:only => feature(:pulpcore).pulpcore_migration_services))
31
+ add_step(Procedures::Service::Disable.
32
+ new(:only => feature(:pulpcore).pulpcore_migration_services))
33
+ end
16
34
  end
17
35
 
18
36
  class Switchover < ForemanMaintain::Scenario
@@ -23,9 +41,38 @@ module ForemanMaintain::Scenarios
23
41
  end
24
42
 
25
43
  def compose
26
- # FIXME: remove this condition on next downstream upgrade scenario
44
+ # FIXME: remove this condition for the 6.10 upgrade scenario
27
45
  if Procedures::Content::Switchover.present?
28
46
  add_step(Procedures::Content::Switchover)
47
+ add_step(Procedures::Foreman::ApipieCache)
48
+ end
49
+ end
50
+ end
51
+
52
+ class PrepareAbort < ForemanMaintain::Scenario
53
+ metadata do
54
+ label :content_prepare_abort
55
+ description 'Abort all running Pulp 2 to Pulp 3 migration tasks'
56
+ manual_detection
57
+ end
58
+
59
+ def compose
60
+ if feature(:satellite) && feature(:satellite).at_least_version?('6.9')
61
+ add_step(Procedures::Content::PrepareAbort)
62
+ end
63
+ end
64
+ end
65
+
66
+ class MigrationStats < ForemanMaintain::Scenario
67
+ metadata do
68
+ label :content_migration_stats
69
+ description 'Retrieve Pulp 2 to Pulp 3 migration statistics'
70
+ manual_detection
71
+ end
72
+
73
+ def compose
74
+ if feature(:satellite) && feature(:satellite).at_least_version?('6.9')
75
+ add_step(Procedures::Content::MigrationStats)
29
76
  end
30
77
  end
31
78
  end
@@ -0,0 +1,13 @@
1
+ module ForemanMaintain::Scenarios
2
+ class Prep610Upgrade < ForemanMaintain::Scenario
3
+ metadata do
4
+ label :prep_6_10_upgrade
5
+ description 'Preparations for the Satellite 6.10 upgrade'
6
+ manual_detection
7
+ end
8
+
9
+ def compose
10
+ add_step(Procedures::Prep610Upgrade)
11
+ end
12
+ end
13
+ end