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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/definitions/checks/foreman/check_checkpoint_segments.rb +30 -22
- data/definitions/checks/package_manager/yum/validate_yum_config.rb +51 -0
- data/definitions/features/pulpcore.rb +23 -6
- data/definitions/procedures/backup/accessibility_confirmation.rb +1 -1
- data/definitions/procedures/backup/online/safety_confirmation.rb +1 -1
- data/definitions/procedures/backup/snapshot/logical_volume_confirmation.rb +1 -1
- data/definitions/procedures/content/migration_stats.rb +12 -0
- data/definitions/procedures/content/prepare.rb +0 -5
- data/definitions/procedures/content/prepare_abort.rb +12 -0
- data/definitions/procedures/content/switchover.rb +1 -1
- data/definitions/procedures/installer/upgrade_rake_task.rb +11 -0
- data/definitions/procedures/packages/installer_confirmation.rb +1 -1
- data/definitions/procedures/packages/update_all_confirmation.rb +1 -1
- data/definitions/procedures/prep_6_10_upgrade.rb +31 -0
- data/definitions/procedures/restore/confirmation.rb +1 -1
- data/definitions/procedures/restore/installer_reset.rb +10 -1
- data/definitions/scenarios/content.rb +50 -3
- data/definitions/scenarios/prep_6_10_upgrade.rb +13 -0
- data/definitions/scenarios/upgrade_to_capsule_6_9.rb +88 -0
- data/definitions/scenarios/upgrade_to_capsule_6_9_z.rb +88 -0
- data/definitions/scenarios/upgrade_to_satellite_6_8.rb +1 -0
- data/definitions/scenarios/upgrade_to_satellite_6_8_z.rb +1 -0
- data/definitions/scenarios/upgrade_to_satellite_6_9.rb +90 -0
- data/definitions/scenarios/upgrade_to_satellite_6_9_z.rb +89 -0
- data/extras/foreman_protector/foreman-protector.whitelist +1 -0
- data/lib/foreman_maintain.rb +1 -1
- data/lib/foreman_maintain/cli.rb +11 -2
- data/lib/foreman_maintain/cli/content_command.rb +17 -2
- data/lib/foreman_maintain/concerns/downstream.rb +4 -0
- data/lib/foreman_maintain/reporter.rb +18 -13
- data/lib/foreman_maintain/reporter/cli_reporter.rb +18 -9
- data/lib/foreman_maintain/runner.rb +6 -4
- data/lib/foreman_maintain/scenario.rb +4 -0
- data/lib/foreman_maintain/utils/service/systemd.rb +11 -1
- data/lib/foreman_maintain/version.rb +1 -1
- metadata +12 -3
- data/definitions/checks/yum_exclude.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4151b9d6dbc810f7f85aa093bdcfc4f967530dbeddcf7e13e88ce998125211dc
|
4
|
+
data.tar.gz: e7db5a3881d9652bae19c61f95ff95076745f36212c6e36f4cf582d4b5f33c8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56165e03d708aa74d5b370cd7f2ca96a0121b2b97d14f326372181ef2c464eb9856dbafd1f60ad99aea89c9a610a1579a334a4a69c12abee38b70d2eb84a899a
|
7
|
+
data.tar.gz: e43c42dbbe5aab6752e16429dae6fd70367510be2df57f026aa5ad53bb1efb9ef9e4eb2efc4331aef3823b93729412b789bc8c3e8396e03b4563bc82cf42199b
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Foreman
|
1
|
+
# Foreman Maintain [](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
|
-
|
22
|
-
|
23
|
-
if config
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
-
|
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
|
@@ -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
|
@@ -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 <<
|
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
|
-
|
12
|
-
|
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
|
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
|