foreman_maintain 0.8.27 → 0.9.1
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/definitions/checks/check_for_newer_packages.rb +3 -5
- data/definitions/checks/disk/performance.rb +8 -19
- data/definitions/checks/repositories/validate.rb +1 -2
- data/definitions/checks/restore/validate_interfaces.rb +24 -0
- data/definitions/features/foreman_tasks.rb +7 -25
- data/definitions/features/system_repos.rb +0 -8
- data/definitions/procedures/backup/metadata.rb +11 -0
- data/definitions/procedures/content/prepare.rb +1 -1
- data/definitions/procedures/installer/upgrade_rake_task.rb +1 -3
- data/definitions/procedures/pulp/remove.rb +13 -61
- data/definitions/procedures/repositories/setup.rb +0 -4
- data/definitions/procedures/restore/configs.rb +5 -1
- data/definitions/scenarios/restore.rb +2 -2
- data/definitions/scenarios/upgrade_to_satellite_6_10.rb +8 -1
- data/lib/foreman_maintain/cli.rb +0 -2
- data/lib/foreman_maintain/concerns/os_facts.rb +70 -0
- data/lib/foreman_maintain/concerns/system_helpers.rb +5 -29
- data/lib/foreman_maintain/utils/backup.rb +36 -11
- data/lib/foreman_maintain/utils/command_runner.rb +1 -2
- data/lib/foreman_maintain/utils.rb +0 -1
- data/lib/foreman_maintain/version.rb +1 -1
- data/lib/foreman_maintain.rb +1 -0
- metadata +22 -12
- data/definitions/checks/pulpcore/group_ownership_check.rb +0 -18
- data/definitions/procedures/repositories/backup_enabled_repos.rb +0 -16
- data/definitions/procedures/repositories/enable.rb +0 -13
- data/definitions/scenarios/self_upgrade.rb +0 -102
- data/lib/foreman_maintain/cli/self_upgrade_command.rb +0 -39
- data/lib/foreman_maintain/utils/facter.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e995fb504729078ae910121820a8f286d1256b4319d07d25f27a17768ba515af
|
4
|
+
data.tar.gz: 8fb3b6231928b49a6c6cd8375a14394b31839452ead4c0a7e3dbc198f405912d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12ff59c3185962df60825149e3f34892c6bc42071fb39b35aa701b891dd34eb71843784c161e64d0218e669e66a2f85715991f76a319f48f6fb4dbeba55ddf2f
|
7
|
+
data.tar.gz: 747024ed62640c6c49406f573557253e6ea96037921633ca94489c20f34f32a1a233c4f6a9bb67bdac45aa9dd8af9bb727733f7531c8d0c5303f56ce59a8ce60
|
@@ -33,11 +33,9 @@ class Checks::CheckForNewerPackages < ForemanMaintain::Check
|
|
33
33
|
end
|
34
34
|
|
35
35
|
unless packages_with_updates.empty?
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
'before proceeding, using:'\
|
40
|
-
"\n# #{command} upgrade run --target-version #{@manual_confirmation_version}.z"
|
36
|
+
failure_message = 'An update is available for package(s): '\
|
37
|
+
"#{packages_with_updates.join(',')}. Please update before proceeding!"
|
38
|
+
fail! failure_message
|
41
39
|
end
|
42
40
|
end
|
43
41
|
|
@@ -39,8 +39,8 @@ module Checks
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
def
|
43
|
-
@
|
42
|
+
def default_dirs
|
43
|
+
@default_dirs ||= %i[pulp2 pulpcore_database mongo foreman_database].inject({}) do |dirs, f|
|
44
44
|
if feature(f) && File.directory?(feature(f).data_dir)
|
45
45
|
dirs[feature(f).label_dashed] = feature(f).data_dir
|
46
46
|
end
|
@@ -48,32 +48,20 @@ module Checks
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
def pulp_dir
|
52
|
-
@pulp_dir ||= begin
|
53
|
-
pulp_feature = feature(:pulp2) || feature(:pulpcore_database)
|
54
|
-
{ pulp_feature.label_dashed => pulp_feature.pulp_data_dir }
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
51
|
def description
|
59
|
-
|
60
|
-
"#{[data_dirs.keys | pulp_dir.keys].join(', ')} directories."
|
61
|
-
end
|
62
|
-
|
63
|
-
def all_dirs
|
64
|
-
data_dirs.values | pulp_dir.values
|
52
|
+
"Check recommended disk speed for #{default_dirs.keys.join(', ')} directories."
|
65
53
|
end
|
66
54
|
|
67
55
|
def check_only_single_device?
|
68
|
-
|
56
|
+
default_dirs.values do |dir|
|
69
57
|
ForemanMaintain::Utils::Disk::Device.new(dir).name
|
70
58
|
end.uniq.length <= 1
|
71
59
|
end
|
72
60
|
|
73
61
|
def dirs_to_check
|
74
|
-
return
|
62
|
+
return default_dirs.values.first(1) if check_only_single_device?
|
75
63
|
|
76
|
-
|
64
|
+
default_dirs.values
|
77
65
|
end
|
78
66
|
|
79
67
|
private
|
@@ -86,10 +74,11 @@ module Checks
|
|
86
74
|
def compute_disk_speed(spinner)
|
87
75
|
success = true
|
88
76
|
io_obj = ForemanMaintain::Utils::Disk::NilDevice.new
|
77
|
+
|
89
78
|
dirs_to_check.each do |dir|
|
90
79
|
io_obj = ForemanMaintain::Utils::Disk::Device.new(dir)
|
91
80
|
|
92
|
-
spinner.update("[Speed check In-Progress] device
|
81
|
+
spinner.update("[Speed check In-Progress] device: #{io_obj.name}")
|
93
82
|
stats << io_obj
|
94
83
|
|
95
84
|
next if io_obj.read_speed >= EXPECTED_IO
|
@@ -3,8 +3,7 @@ module Checks::Repositories
|
|
3
3
|
metadata do
|
4
4
|
description 'Validate availability of repositories'
|
5
5
|
preparation_steps do
|
6
|
-
|
7
|
-
Procedures::Packages::Install.new(:packages => [ForemanMaintain::Utils::Facter.package])]
|
6
|
+
Checks::Repositories::CheckNonRhRepository.new
|
8
7
|
end
|
9
8
|
|
10
9
|
confine do
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'foreman_maintain/utils/backup'
|
2
|
+
|
3
|
+
module Checks::Restore
|
4
|
+
class ValidateInterfaces < ForemanMaintain::Check
|
5
|
+
metadata do
|
6
|
+
description 'Validate network interfaces match the backup'
|
7
|
+
|
8
|
+
param :backup_dir,
|
9
|
+
'Path to backup directory',
|
10
|
+
:required => true
|
11
|
+
manual_detection
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
backup = ForemanMaintain::Utils::Backup.new(@backup_dir)
|
16
|
+
invalid_interfaces = backup.validate_interfaces
|
17
|
+
msg = 'The following features are enabled in the backup, '\
|
18
|
+
"\nbut the system does not have the interfaces used by these features: "
|
19
|
+
msg << invalid_interfaces.map { |k, v| "#{k} (#{v['configured']})" }.join(', ')
|
20
|
+
msg << '.'
|
21
|
+
assert(backup.validate_interfaces.empty?, msg)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -17,17 +17,6 @@ class Features::ForemanTasks < ForemanMaintain::Feature
|
|
17
17
|
Actions::Candlepin::ListenOnCandlepinEvents
|
18
18
|
Actions::Katello::EventQueue::Monitor
|
19
19
|
Actions::Insights::EmailPoller
|
20
|
-
ForemanInventoryUpload::Async::GenerateReportJob
|
21
|
-
ForemanInventoryUpload::Async::QueueForUploadJob
|
22
|
-
ForemanInventoryUpload::Async::UploadReportJob
|
23
|
-
InsightsCloud::Async::InsightsClientStatusAging
|
24
|
-
InsightsCloud::Async::InsightsFullSync
|
25
|
-
InsightsCloud::Async::InsightsResolutionsSync
|
26
|
-
InsightsCloud::Async::InsightsRulesSync
|
27
|
-
InventorySync::Async::InventoryFullSync
|
28
|
-
InventorySync::Async::InventoryHostsSync
|
29
|
-
InventorySync::Async::InventoryScheduledSync
|
30
|
-
InventorySync::Async::InventorySelfHostSync
|
31
20
|
].freeze
|
32
21
|
|
33
22
|
metadata do
|
@@ -82,22 +71,15 @@ class Features::ForemanTasks < ForemanMaintain::Feature
|
|
82
71
|
def delete(state)
|
83
72
|
tasks_condition = condition(state)
|
84
73
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
74
|
+
feature(:foreman_database).psql(<<-SQL)
|
75
|
+
BEGIN;
|
76
|
+
DELETE FROM dynflow_steps USING foreman_tasks_tasks WHERE (foreman_tasks_tasks.external_id = dynflow_steps.execution_plan_uuid::varchar) AND #{tasks_condition};
|
77
|
+
DELETE FROM dynflow_actions USING foreman_tasks_tasks WHERE (foreman_tasks_tasks.external_id = dynflow_actions.execution_plan_uuid::varchar) AND #{tasks_condition};
|
78
|
+
DELETE FROM dynflow_execution_plans USING foreman_tasks_tasks WHERE (foreman_tasks_tasks.external_id = dynflow_execution_plans.uuid::varchar) AND #{tasks_condition};
|
79
|
+
DELETE FROM foreman_tasks_tasks WHERE #{tasks_condition};
|
80
|
+
COMMIT;
|
92
81
|
SQL
|
93
82
|
|
94
|
-
if check_min_version(foreman_plugin_name('foreman-tasks'), '4.0.0')
|
95
|
-
sql += 'DELETE FROM foreman_tasks_links as ftl ' \
|
96
|
-
'where ftl.task_id NOT IN (SELECT id FROM foreman_tasks_tasks);'
|
97
|
-
end
|
98
|
-
|
99
|
-
feature(:foreman_database).psql("BEGIN; #{sql}; COMMIT;")
|
100
|
-
|
101
83
|
count(state)
|
102
84
|
end
|
103
85
|
|
@@ -21,10 +21,6 @@ class Features::SystemRepos < ForemanMaintain::Feature
|
|
21
21
|
Hash[*repos.delete!(' ').split("\n")]
|
22
22
|
end
|
23
23
|
|
24
|
-
def enabled_repos_ids
|
25
|
-
trim_repoids(enabled_repos_hash.keys)
|
26
|
-
end
|
27
|
-
|
28
24
|
def upstream_repos_ids
|
29
25
|
trim_repoids(upstream_repos.keys)
|
30
26
|
end
|
@@ -33,10 +29,6 @@ class Features::SystemRepos < ForemanMaintain::Feature
|
|
33
29
|
execute!("yum-config-manager --disable #{repo_ids.join(',')}")
|
34
30
|
end
|
35
31
|
|
36
|
-
def enable_repos(repo_ids)
|
37
|
-
execute!("yum-config-manager --enable #{repo_ids.join(',')}")
|
38
|
-
end
|
39
|
-
|
40
32
|
private
|
41
33
|
|
42
34
|
def trim_repoids(repos)
|
@@ -9,6 +9,8 @@ module Procedures::Backup
|
|
9
9
|
param :online_backup, 'Select for online backup', :flag => true, :default => false
|
10
10
|
end
|
11
11
|
|
12
|
+
PROXY_CONFIG_ENTRIES = %w[dns dns_interface dhcp dhcp_interface].freeze
|
13
|
+
|
12
14
|
def run
|
13
15
|
with_spinner('Collecting metadata') do |spinner|
|
14
16
|
metadata = {}
|
@@ -18,6 +20,8 @@ module Procedures::Backup
|
|
18
20
|
metadata['rpms'] = rpms(spinner)
|
19
21
|
metadata['incremental'] = @incremental_dir || false
|
20
22
|
metadata['online'] = @online_backup
|
23
|
+
metadata['hostname'] = hostname
|
24
|
+
metadata['proxy_config'] = proxy_config(spinner)
|
21
25
|
save_metadata(metadata, spinner)
|
22
26
|
end
|
23
27
|
end
|
@@ -54,5 +58,12 @@ module Procedures::Backup
|
|
54
58
|
feature(:foreman_proxy).features
|
55
59
|
end
|
56
60
|
end
|
61
|
+
|
62
|
+
def proxy_config(spinner)
|
63
|
+
spinner.update('Collecting proxy configuration')
|
64
|
+
feature(:installer).answers['foreman_proxy'].select do |key, _|
|
65
|
+
PROXY_CONFIG_ENTRIES.include?(key)
|
66
|
+
end
|
67
|
+
end
|
57
68
|
end
|
58
69
|
end
|
@@ -10,7 +10,7 @@ module Procedures::Content
|
|
10
10
|
sleep(20) # in satellite 6.9 the services are still coming up
|
11
11
|
# use interactive to get realtime output
|
12
12
|
env_vars = @quiet ? '' : 'preserve_output=true '
|
13
|
-
execute!("#{env_vars}foreman-rake katello:pulp3_migration", :interactive => true)
|
13
|
+
puts execute!("#{env_vars}foreman-rake katello:pulp3_migration", :interactive => true)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -5,9 +5,7 @@ module Procedures::Installer
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def run
|
8
|
-
|
9
|
-
# the installer runs this rake task for us already
|
10
|
-
execute!('foreman-rake upgrade:run') if feature(:satellite)
|
8
|
+
execute!('foreman-rake upgrade:run')
|
11
9
|
end
|
12
10
|
end
|
13
11
|
end
|
@@ -23,15 +23,7 @@ module Procedures::Pulp
|
|
23
23
|
'/var/lib/pulp/uploads',
|
24
24
|
'/var/lib/mongodb/',
|
25
25
|
'/var/cache/pulp'
|
26
|
-
]
|
27
|
-
end
|
28
|
-
|
29
|
-
def pulp_data_dirs_mountpoints
|
30
|
-
pulp_data_dirs.select { |d| Pathname(d).mountpoint? }
|
31
|
-
end
|
32
|
-
|
33
|
-
def deletable_pulp_dirs
|
34
|
-
@deletable_pulp_dirs ||= pulp_data_dirs - pulp_data_dirs_mountpoints
|
26
|
+
]
|
35
27
|
end
|
36
28
|
|
37
29
|
# rubocop:disable Metrics/MethodLength
|
@@ -60,12 +52,11 @@ module Procedures::Pulp
|
|
60
52
|
@installed_pulp_packages
|
61
53
|
end
|
62
54
|
|
63
|
-
def data_dir_removal_cmds
|
64
|
-
|
55
|
+
def data_dir_removal_cmds
|
56
|
+
pulp_data_dirs.select { |dir| File.directory?(dir) }.map { |dir| "rm -rf #{dir}" }
|
65
57
|
end
|
66
58
|
|
67
|
-
def ask_to_proceed
|
68
|
-
rm_cmds = data_dir_removal_cmds(pulp_data_dirs)
|
59
|
+
def ask_to_proceed(rm_cmds)
|
69
60
|
question = "\nWARNING: All pulp2 packages will be removed with the following commands:\n"
|
70
61
|
question += "\n# rpm -e #{pulp_packages.join(' ')}" if pulp_packages.any?
|
71
62
|
question += "\n# yum remove rh-mongodb34-*"
|
@@ -78,9 +69,11 @@ module Procedures::Pulp
|
|
78
69
|
end
|
79
70
|
|
80
71
|
def run
|
72
|
+
rm_cmds = data_dir_removal_cmds
|
73
|
+
|
81
74
|
assumeyes_val = @assumeyes.nil? ? assumeyes? : @assumeyes
|
82
75
|
|
83
|
-
ask_to_proceed unless assumeyes_val
|
76
|
+
ask_to_proceed(rm_cmds) unless assumeyes_val
|
84
77
|
|
85
78
|
remove_pulp if pulp_packages.any?
|
86
79
|
|
@@ -92,9 +85,7 @@ module Procedures::Pulp
|
|
92
85
|
|
93
86
|
drop_migrations
|
94
87
|
|
95
|
-
delete_pulp_data
|
96
|
-
|
97
|
-
restart_pulpcore_services
|
88
|
+
delete_pulp_data(rm_cmds) if rm_cmds.any?
|
98
89
|
end
|
99
90
|
|
100
91
|
def remove_pulp
|
@@ -169,51 +160,12 @@ module Procedures::Pulp
|
|
169
160
|
end
|
170
161
|
# rubocop:enable Metrics/BlockLength
|
171
162
|
|
172
|
-
def delete_pulp_data
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
if non_mountpoints.any?
|
177
|
-
spinner.update('Deleting pulp2 data directories.')
|
178
|
-
non_mountpoints.each do |cmd|
|
179
|
-
execute!(cmd)
|
180
|
-
end
|
181
|
-
msg_for_del_non_mountpoints(mountpoints, spinner)
|
182
|
-
end
|
183
|
-
if mountpoints.any?
|
184
|
-
msg_for_del_mountpoints(mountpoints, spinner)
|
163
|
+
def delete_pulp_data(rm_cmds)
|
164
|
+
with_spinner('Deleting pulp2 data directories') do |spinner|
|
165
|
+
rm_cmds.each do |cmd|
|
166
|
+
execute!(cmd)
|
185
167
|
end
|
186
|
-
|
187
|
-
end
|
188
|
-
|
189
|
-
def msg_for_del_non_mountpoints(mountpoints, spinner)
|
190
|
-
if mountpoints.empty?
|
191
|
-
spinner.update('Done deleting all pulp2 data directories.')
|
192
|
-
else
|
193
|
-
spinner.update("Deleted: #{deletable_pulp_dirs.join("\n")}")
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
def msg_for_del_mountpoints(mountpoints, spinner)
|
198
|
-
_, cmd_name = ForemanMaintain.pkg_and_cmd_name
|
199
|
-
if mountpoints.count > 1
|
200
|
-
spinner.update("The directories #{mountpoints.join(',')} are individual mountpoints.")
|
201
|
-
puts "\nThe #{cmd_name} won't delete these directories.\n"\
|
202
|
-
'You need to remove content and these directories on your own.'
|
203
|
-
else
|
204
|
-
spinner.update("The directory #{mountpoints.join(',')} is individual mountpoint.")
|
205
|
-
puts "\nThe #{cmd_name} won't delete the directory.\n"\
|
206
|
-
'You need to remove content and the directory on your own.'
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
def restart_pulpcore_services
|
211
|
-
with_spinner('Restarting pulpcore services') do |spinner|
|
212
|
-
pulp_services = feature(:pulpcore).services
|
213
|
-
|
214
|
-
feature(:service).handle_services(spinner, 'stop', :only => pulp_services)
|
215
|
-
feature(:service).handle_services(spinner, 'start', :only => pulp_services)
|
216
|
-
spinner.update('Done restarting pulpcore services')
|
168
|
+
spinner.update('Done deleting pulp2 data directories')
|
217
169
|
end
|
218
170
|
end
|
219
171
|
end
|
@@ -2,10 +2,6 @@ module Procedures::Repositories
|
|
2
2
|
class Setup < ForemanMaintain::Procedure
|
3
3
|
metadata do
|
4
4
|
description 'Setup repositories'
|
5
|
-
preparation_steps do
|
6
|
-
Procedures::Packages::Install.new(:packages => [ForemanMaintain::Utils::Facter.package])
|
7
|
-
end
|
8
|
-
|
9
5
|
confine do
|
10
6
|
feature(:instance).downstream || feature(:upstream)
|
11
7
|
end
|
@@ -56,7 +56,11 @@ module Procedures::Restore
|
|
56
56
|
def reset_qpid_jrnls
|
57
57
|
# on restore without pulp data qpid fails to start
|
58
58
|
# https://access.redhat.com/solutions/4645231
|
59
|
-
|
59
|
+
['/var/lib/qpidd/.qpidd/', '/var/lib/qpidd/'].each do |qpidd_path|
|
60
|
+
if Dir.exist?("#{qpidd_path}/qls/dat2/")
|
61
|
+
execute("rm -rf #{qpidd_path}/qls/dat2/__db.00*")
|
62
|
+
end
|
63
|
+
end
|
60
64
|
end
|
61
65
|
end
|
62
66
|
end
|
@@ -18,6 +18,7 @@ module ForemanMaintain::Scenarios
|
|
18
18
|
add_steps_with_context(Checks::Restore::ValidateBackup,
|
19
19
|
Procedures::Restore::Confirmation,
|
20
20
|
Checks::Restore::ValidateHostname,
|
21
|
+
Checks::Restore::ValidateInterfaces,
|
21
22
|
Procedures::Selinux::SetFileSecurity,
|
22
23
|
Procedures::Restore::Configs)
|
23
24
|
add_step_with_context(Procedures::Crond::Stop) if feature(:cron)
|
@@ -42,8 +43,6 @@ module ForemanMaintain::Scenarios
|
|
42
43
|
add_steps_with_context(Procedures::Restore::RegenerateQueues) if backup.online_backup?
|
43
44
|
add_steps_with_context(Procedures::Service::Start,
|
44
45
|
Procedures::Service::DaemonReload)
|
45
|
-
add_step(Procedures::Installer::Upgrade.new(:assumeyes => true))
|
46
|
-
add_step_with_context(Procedures::Installer::UpgradeRakeTask)
|
47
46
|
add_step_with_context(Procedures::Crond::Start) if feature(:cron)
|
48
47
|
end
|
49
48
|
# rubocop:enable Metrics/MethodLength,Metrics/AbcSize
|
@@ -89,6 +88,7 @@ module ForemanMaintain::Scenarios
|
|
89
88
|
context.map(:backup_dir,
|
90
89
|
Checks::Restore::ValidateBackup => :backup_dir,
|
91
90
|
Checks::Restore::ValidateHostname => :backup_dir,
|
91
|
+
Checks::Restore::ValidateInterfaces => :backup_dir,
|
92
92
|
Procedures::Restore::Configs => :backup_dir,
|
93
93
|
Procedures::Restore::DropDatabases => :backup_dir,
|
94
94
|
Procedures::Restore::PgGlobalObjects => :backup_dir,
|
@@ -25,7 +25,6 @@ module Scenarios::Satellite_6_10
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def compose
|
28
|
-
add_step(Checks::Pulpcore::GroupOwnershipCheck)
|
29
28
|
add_step(Checks::Puppet::WarnAboutPuppetRemoval)
|
30
29
|
add_step(Checks::CheckForNewerPackages.new(:packages => [foreman_plugin_name('katello'),
|
31
30
|
'python3-pulp-2to3-migration'],
|
@@ -62,6 +61,13 @@ module Scenarios::Satellite_6_10
|
|
62
61
|
context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
|
63
62
|
end
|
64
63
|
|
64
|
+
def check_var_lib_pulp
|
65
|
+
group_id = File.stat('/var/lib/pulp/').gid
|
66
|
+
if Etc.getgrgid(group_id).name != 'pulp'
|
67
|
+
raise "Please run 'foreman-maintain prep-6.10-upgrade' prior to upgrading."
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
65
71
|
def pulp3_switchover_steps
|
66
72
|
add_step(Procedures::Service::Enable.
|
67
73
|
new(:only => Features::Pulpcore.pulpcore_migration_services))
|
@@ -73,6 +79,7 @@ module Scenarios::Satellite_6_10
|
|
73
79
|
end
|
74
80
|
|
75
81
|
def compose
|
82
|
+
check_var_lib_pulp
|
76
83
|
unless check_min_version(foreman_plugin_name('katello'), '4.0')
|
77
84
|
pulp3_switchover_steps
|
78
85
|
end
|
data/lib/foreman_maintain/cli.rb
CHANGED
@@ -11,7 +11,6 @@ require 'foreman_maintain/cli/restore_command'
|
|
11
11
|
require 'foreman_maintain/cli/maintenance_mode_command'
|
12
12
|
require 'foreman_maintain/cli/packages_command'
|
13
13
|
require 'foreman_maintain/cli/content_command'
|
14
|
-
require 'foreman_maintain/cli/self_upgrade_command'
|
15
14
|
|
16
15
|
module ForemanMaintain
|
17
16
|
module Cli
|
@@ -26,7 +25,6 @@ module ForemanMaintain
|
|
26
25
|
subcommand 'packages', 'Lock/Unlock package protection, install, update', PackagesCommand
|
27
26
|
subcommand 'advanced', 'Advanced tools for server maintenance', AdvancedCommand
|
28
27
|
subcommand 'content', 'Content related commands', ContentCommand
|
29
|
-
subcommand 'self-upgrade', 'Perform major version self upgrade', SelfUpgradeCommand
|
30
28
|
subcommand 'maintenance-mode', 'Control maintenance-mode for application',
|
31
29
|
MaintenanceModeCommand
|
32
30
|
if ForemanMaintain.detector.feature(:satellite) &&
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module ForemanMaintain
|
2
|
+
module Concerns
|
3
|
+
module OsFacts
|
4
|
+
OS_RELEASE_FILE = '/etc/os-release'.freeze
|
5
|
+
FALLBACK_OS_RELEASE_FILE = '/usr/lib/os-release'.freeze
|
6
|
+
|
7
|
+
def os_release_file
|
8
|
+
if File.file?(OS_RELEASE_FILE)
|
9
|
+
return OS_RELEASE_FILE
|
10
|
+
elsif File.file?(FALLBACK_OS_RELEASE_FILE)
|
11
|
+
return FALLBACK_OS_RELEASE_FILE
|
12
|
+
else
|
13
|
+
puts "The #{OS_RELEASE_FILE} and #{FALLBACK_OS_RELEASE_FILE} files are missing! "\
|
14
|
+
"Can't continue the execution without Operating System's facts!"
|
15
|
+
exit 1
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def facts
|
20
|
+
unless defined?(@facts)
|
21
|
+
@facts = {}
|
22
|
+
regex = /^(["'])(.*)(\1)$/
|
23
|
+
File.open(os_release_file) do |file|
|
24
|
+
file.readlines.each do |line|
|
25
|
+
line.strip! # drop any whitespace, including newlines from start and end of the line
|
26
|
+
next if line.start_with?('#') # ignore comments
|
27
|
+
# split at most into 2 items, if the value ever contains an =
|
28
|
+
key, value = line.split('=', 2)
|
29
|
+
next unless key && value
|
30
|
+
@facts[key] = value.gsub(regex, '\2').delete('\\')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
@facts
|
35
|
+
end
|
36
|
+
|
37
|
+
def os_version_id
|
38
|
+
facts.fetch('VERSION_ID')
|
39
|
+
end
|
40
|
+
|
41
|
+
def os_id
|
42
|
+
facts.fetch('ID')
|
43
|
+
end
|
44
|
+
|
45
|
+
def os_id_like_list
|
46
|
+
facts.fetch('ID_LIKE', '').split
|
47
|
+
end
|
48
|
+
|
49
|
+
def el?
|
50
|
+
File.exist?('/etc/redhat-release')
|
51
|
+
end
|
52
|
+
|
53
|
+
def debian?
|
54
|
+
File.exist?('/etc/debian_version')
|
55
|
+
end
|
56
|
+
|
57
|
+
def el7?
|
58
|
+
el_major_version == 7
|
59
|
+
end
|
60
|
+
|
61
|
+
def el8?
|
62
|
+
el_major_version == 8
|
63
|
+
end
|
64
|
+
|
65
|
+
def el_major_version
|
66
|
+
return os_version_id.to_i if el?
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -8,6 +8,7 @@ module ForemanMaintain
|
|
8
8
|
module SystemHelpers
|
9
9
|
include Logger
|
10
10
|
include Concerns::Finders
|
11
|
+
include ForemanMaintain::Concerns::OsFacts
|
11
12
|
|
12
13
|
def self.included(klass)
|
13
14
|
klass.extend(self)
|
@@ -184,38 +185,13 @@ module ForemanMaintain
|
|
184
185
|
ForemanMaintain.package_manager
|
185
186
|
end
|
186
187
|
|
187
|
-
def os_facts
|
188
|
-
facter = ForemanMaintain::Utils::Facter.path
|
189
|
-
@os_facts ||= JSON.parse(execute("#{facter} -j os"))
|
190
|
-
end
|
191
|
-
|
192
|
-
def el?
|
193
|
-
os_facts['os']['family'] == 'RedHat'
|
194
|
-
end
|
195
|
-
|
196
|
-
def debian?
|
197
|
-
os_facts['os']['family'] == 'Debian'
|
198
|
-
end
|
199
|
-
|
200
|
-
def el7?
|
201
|
-
os_facts['os']['release']['major'] == '7' && el?
|
202
|
-
end
|
203
|
-
|
204
|
-
def el8?
|
205
|
-
os_facts['os']['release']['major'] == '8' && el?
|
206
|
-
end
|
207
|
-
|
208
|
-
def el_major_version
|
209
|
-
return os_facts['os']['release']['major'] if el?
|
210
|
-
end
|
211
|
-
|
212
188
|
def ruby_prefix(scl = true)
|
213
|
-
if
|
189
|
+
if debian?
|
190
|
+
'ruby-'
|
191
|
+
elsif el7? && scl
|
214
192
|
'tfm-rubygem-'
|
215
|
-
|
193
|
+
else
|
216
194
|
'rubygem-'
|
217
|
-
elsif debian?
|
218
|
-
'ruby-'
|
219
195
|
end
|
220
196
|
end
|
221
197
|
|
@@ -267,21 +267,46 @@ module ForemanMaintain
|
|
267
267
|
|
268
268
|
def validate_hostname?
|
269
269
|
# make sure that the system hostname is the same as the backup
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
# Incremental backups sometimes don't include httpd.conf. Since a "base" backup
|
275
|
-
# is restored before an incremental, we can assume that the hostname is checked
|
276
|
-
# during the base backup restore
|
277
|
-
if status == 0
|
278
|
-
match = httpd_config.match(/\s*ServerName\s+"*([^ "]+)"*\s*$/)
|
279
|
-
match ? match[1] == hostname : false
|
270
|
+
hostname_from_metadata = metadata.fetch('hostname', nil)
|
271
|
+
if hostname_from_metadata
|
272
|
+
hostname_from_metadata == hostname
|
280
273
|
else
|
281
|
-
|
274
|
+
config_tarball = file_map[:config_files][:path]
|
275
|
+
tar_cmd = "tar zxf #{config_tarball} etc/httpd/conf/httpd.conf --to-stdout --occurrence=1"
|
276
|
+
status, httpd_config = execute_with_status(tar_cmd)
|
277
|
+
|
278
|
+
# Incremental backups sometimes don't include httpd.conf. Since a "base" backup
|
279
|
+
# is restored before an incremental, we can assume that the hostname is checked
|
280
|
+
# during the base backup restore
|
281
|
+
if status == 0
|
282
|
+
match = httpd_config.match(/\s*ServerName\s+"*([^ "]+)"*\s*$/)
|
283
|
+
match ? match[1] == hostname : false
|
284
|
+
else
|
285
|
+
true
|
286
|
+
end
|
282
287
|
end
|
283
288
|
end
|
284
289
|
|
290
|
+
def validate_interfaces
|
291
|
+
# I wanted to do `Socket.getifaddrs.map(&:name).uniq`,
|
292
|
+
# but this has to work with Ruby 2.0, and Socket.getifaddrs is 2.1+
|
293
|
+
errors = {}
|
294
|
+
system_interfaces = Dir.children('/sys/class/net')
|
295
|
+
|
296
|
+
proxy_config = metadata.fetch('proxy_config', {})
|
297
|
+
|
298
|
+
%w[dns dhcp].each do |feature|
|
299
|
+
next unless proxy_config.fetch(feature, false)
|
300
|
+
|
301
|
+
wanted_interface = proxy_config.fetch("#{feature}_interface", 'lo')
|
302
|
+
unless system_interfaces.include?(wanted_interface)
|
303
|
+
errors[feature] = { 'configured' => wanted_interface, 'available' => system_interfaces }
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
307
|
+
return errors
|
308
|
+
end
|
309
|
+
|
285
310
|
def metadata
|
286
311
|
if file_map[:metadata][:present]
|
287
312
|
YAML.load_file(file_map[:metadata][:path])
|
@@ -66,8 +66,7 @@ module ForemanMaintain
|
|
66
66
|
log_file = Tempfile.open('captured-output')
|
67
67
|
exit_file = Tempfile.open('captured-exit-code')
|
68
68
|
Kernel.system(
|
69
|
-
"
|
70
|
-
"| tee -i #{log_file.path}"
|
69
|
+
"bash -c '#{full_command}; echo $? > #{exit_file.path}' | tee -i #{log_file.path}"
|
71
70
|
)
|
72
71
|
File.open(log_file.path) { |f| @output = f.read }
|
73
72
|
File.open(exit_file.path) do |f|
|
data/lib/foreman_maintain.rb
CHANGED
@@ -15,6 +15,7 @@ module ForemanMaintain
|
|
15
15
|
require 'foreman_maintain/concerns/finders'
|
16
16
|
require 'foreman_maintain/concerns/metadata'
|
17
17
|
require 'foreman_maintain/concerns/scenario_metadata'
|
18
|
+
require 'foreman_maintain/concerns/os_facts'
|
18
19
|
require 'foreman_maintain/concerns/system_helpers'
|
19
20
|
require 'foreman_maintain/concerns/system_service'
|
20
21
|
require 'foreman_maintain/concerns/hammer'
|
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.
|
4
|
+
version: 0.9.1
|
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:
|
11
|
+
date: 2021-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clamp
|
@@ -84,16 +84,30 @@ dependencies:
|
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '='
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
103
|
+
version: 0.50.0
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- -
|
108
|
+
- - '='
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
110
|
+
version: 0.50.0
|
97
111
|
description: Provides various features that helps keeping the Foreman/Satellite up
|
98
112
|
and running.
|
99
113
|
email: inecas@redhat.com
|
@@ -154,7 +168,6 @@ files:
|
|
154
168
|
- definitions/checks/original_assets.rb
|
155
169
|
- definitions/checks/package_manager/yum/validate_yum_config.rb
|
156
170
|
- definitions/checks/pulpcore/db_up.rb
|
157
|
-
- definitions/checks/pulpcore/group_ownership_check.rb
|
158
171
|
- definitions/checks/puppet/provide_upgrade_guide.rb
|
159
172
|
- definitions/checks/puppet/verify_no_empty_cacert_requests.rb
|
160
173
|
- definitions/checks/puppet/warn_about_puppet_removal.rb
|
@@ -164,6 +177,7 @@ files:
|
|
164
177
|
- definitions/checks/repositories/validate.rb
|
165
178
|
- definitions/checks/restore/validate_backup.rb
|
166
179
|
- definitions/checks/restore/validate_hostname.rb
|
180
|
+
- definitions/checks/restore/validate_interfaces.rb
|
167
181
|
- definitions/checks/root_user.rb
|
168
182
|
- definitions/checks/server_ping.rb
|
169
183
|
- definitions/checks/services_up.rb
|
@@ -274,9 +288,7 @@ files:
|
|
274
288
|
- definitions/procedures/puppet/delete_empty_ca_cert_request_files.rb
|
275
289
|
- definitions/procedures/refresh_features.rb
|
276
290
|
- definitions/procedures/remote_execution/remove_existing_settingsd.rb
|
277
|
-
- definitions/procedures/repositories/backup_enabled_repos.rb
|
278
291
|
- definitions/procedures/repositories/disable.rb
|
279
|
-
- definitions/procedures/repositories/enable.rb
|
280
292
|
- definitions/procedures/repositories/setup.rb
|
281
293
|
- definitions/procedures/restore/candlepin_dump.rb
|
282
294
|
- definitions/procedures/restore/configs.rb
|
@@ -309,7 +321,6 @@ files:
|
|
309
321
|
- definitions/scenarios/packages.rb
|
310
322
|
- definitions/scenarios/prep_6_10_upgrade.rb
|
311
323
|
- definitions/scenarios/restore.rb
|
312
|
-
- definitions/scenarios/self_upgrade.rb
|
313
324
|
- definitions/scenarios/services.rb
|
314
325
|
- definitions/scenarios/upgrade_to_capsule_6_10.rb
|
315
326
|
- definitions/scenarios/upgrade_to_capsule_6_10_z.rb
|
@@ -357,7 +368,6 @@ files:
|
|
357
368
|
- lib/foreman_maintain/cli/maintenance_mode_command.rb
|
358
369
|
- lib/foreman_maintain/cli/packages_command.rb
|
359
370
|
- lib/foreman_maintain/cli/restore_command.rb
|
360
|
-
- lib/foreman_maintain/cli/self_upgrade_command.rb
|
361
371
|
- lib/foreman_maintain/cli/service_command.rb
|
362
372
|
- lib/foreman_maintain/cli/transform_clamp_options.rb
|
363
373
|
- lib/foreman_maintain/cli/upgrade_command.rb
|
@@ -368,6 +378,7 @@ files:
|
|
368
378
|
- lib/foreman_maintain/concerns/hammer.rb
|
369
379
|
- lib/foreman_maintain/concerns/logger.rb
|
370
380
|
- lib/foreman_maintain/concerns/metadata.rb
|
381
|
+
- lib/foreman_maintain/concerns/os_facts.rb
|
371
382
|
- lib/foreman_maintain/concerns/primary_checks.rb
|
372
383
|
- lib/foreman_maintain/concerns/pulp_common.rb
|
373
384
|
- lib/foreman_maintain/concerns/reporter.rb
|
@@ -407,7 +418,6 @@ files:
|
|
407
418
|
- lib/foreman_maintain/utils/disk/io_device.rb
|
408
419
|
- lib/foreman_maintain/utils/disk/nil_device.rb
|
409
420
|
- lib/foreman_maintain/utils/disk/stats.rb
|
410
|
-
- lib/foreman_maintain/utils/facter.rb
|
411
421
|
- lib/foreman_maintain/utils/hash_tools.rb
|
412
422
|
- lib/foreman_maintain/utils/mongo_core.rb
|
413
423
|
- lib/foreman_maintain/utils/response.rb
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Checks
|
2
|
-
module Pulpcore
|
3
|
-
class GroupOwnershipCheck < ForemanMaintain::Check
|
4
|
-
metadata do
|
5
|
-
description 'Check the group owner of /var/lib/pulp directory'
|
6
|
-
label :group_ownership_check_of_pulp_content
|
7
|
-
manual_detection
|
8
|
-
end
|
9
|
-
|
10
|
-
def run
|
11
|
-
group_id = File.stat('/var/lib/pulp/').gid
|
12
|
-
if Etc.getgrgid(group_id).name != 'pulp'
|
13
|
-
fail! "Please run 'foreman-maintain prep-6.10-upgrade' prior to upgrading."
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module Procedures::Repositories
|
2
|
-
class BackupEnabledRepos < ForemanMaintain::Procedure
|
3
|
-
metadata do
|
4
|
-
label :backup_enabled_repos
|
5
|
-
description 'Stores enabled repositories in yaml file'
|
6
|
-
end
|
7
|
-
|
8
|
-
def run
|
9
|
-
enabled_repos_ids = feature(:system_repos).enabled_repos_ids
|
10
|
-
unless enabled_repos_ids.empty?
|
11
|
-
backup_dir = File.expand_path(ForemanMaintain.config.backup_dir)
|
12
|
-
File.write(File.join(backup_dir, 'enabled_repos.yml'), enabled_repos_ids.to_yaml)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
module Procedures::Repositories
|
2
|
-
class Enable < ForemanMaintain::Procedure
|
3
|
-
metadata do
|
4
|
-
param :repos, 'List of repositories to enable'
|
5
|
-
description 'Enable repositories'
|
6
|
-
end
|
7
|
-
def run
|
8
|
-
with_spinner('Enabling repositories') do
|
9
|
-
feature(:system_repos).enable_repos(@repos)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,102 +0,0 @@
|
|
1
|
-
module ForemanMaintain::Scenarios
|
2
|
-
class SelfUpgradeBase < ForemanMaintain::Scenario
|
3
|
-
def enabled_system_repos_id
|
4
|
-
feature(:system_repos).enabled_repos_ids
|
5
|
-
end
|
6
|
-
|
7
|
-
def enable_repos(repo_ids = stored_enabled_repos_ids)
|
8
|
-
add_step(Procedures::Repositories::Enable.new(repos: repo_ids))
|
9
|
-
end
|
10
|
-
|
11
|
-
def disable_repos(repo_ids = stored_enabled_repos_ids)
|
12
|
-
add_step(Procedures::Repositories::Disable.new(repos: repo_ids))
|
13
|
-
end
|
14
|
-
|
15
|
-
def target_version
|
16
|
-
@target_version ||= context.get(:target_version)
|
17
|
-
end
|
18
|
-
|
19
|
-
def current_version
|
20
|
-
feature(:instance).downstream.current_minor_version
|
21
|
-
end
|
22
|
-
|
23
|
-
def maintenance_repo_id(version)
|
24
|
-
if (repo = ENV['maintenance_repo'])
|
25
|
-
return repo unless repo.empty?
|
26
|
-
end
|
27
|
-
|
28
|
-
maintenance_repo(version)
|
29
|
-
end
|
30
|
-
|
31
|
-
def maintenance_repo(version)
|
32
|
-
if el7?
|
33
|
-
"rhel-#{el_major_version}-server-satellite-maintenance-#{version}-rpms"
|
34
|
-
else
|
35
|
-
"satellite-maintenance-#{version}-for-rhel-#{el_major_version}-x86_64-rpms"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def maintenance_repo_version
|
40
|
-
return '6' if current_version == '6.10'
|
41
|
-
|
42
|
-
current_version
|
43
|
-
end
|
44
|
-
|
45
|
-
def stored_enabled_repos_ids
|
46
|
-
@stored_enabled_repos_ids ||= begin
|
47
|
-
path = File.expand_path('enabled_repos.yml', ForemanMaintain.config.backup_dir)
|
48
|
-
@stored_enabled_repos_ids = File.file?(path) ? YAML.load(File.read(path)) : []
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def all_maintenance_repos
|
53
|
-
repo_regex = if el7?
|
54
|
-
/rhel-\d-server-satellite-maintenance-\d.\d-rpms/
|
55
|
-
else
|
56
|
-
/satellite-maintenance-\d.\d-for-rhel-\d-x86_64-rpms/
|
57
|
-
end
|
58
|
-
stored_enabled_repos_ids.select { |id| !id.match(repo_regex).nil? }
|
59
|
-
end
|
60
|
-
|
61
|
-
def repos_ids_to_reenable
|
62
|
-
repos_ids_to_reenable = stored_enabled_repos_ids - all_maintenance_repos
|
63
|
-
repos_ids_to_reenable << maintenance_repo(maintenance_repo_version)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
class SelfUpgrade < SelfUpgradeBase
|
68
|
-
metadata do
|
69
|
-
label :self_upgrade_foreman_maintain
|
70
|
-
description "Enables the specified version's maintenance repository and,"\
|
71
|
-
"\nupdates the satellite-maintain packages"
|
72
|
-
manual_detection
|
73
|
-
end
|
74
|
-
|
75
|
-
def compose
|
76
|
-
if check_min_version('foreman', '2.5') || check_min_version('foreman-proxy', '2.5')
|
77
|
-
pkgs_to_update = %w[satellite-maintain rubygem-foreman_maintain]
|
78
|
-
add_step(Procedures::Repositories::BackupEnabledRepos.new)
|
79
|
-
disable_repos
|
80
|
-
add_step(Procedures::Repositories::Enable.new(repos: [maintenance_repo_id(target_version)]))
|
81
|
-
add_step(Procedures::Packages::Update.new(packages: pkgs_to_update, assumeyes: true))
|
82
|
-
enable_repos(repos_ids_to_reenable)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
class SelfUpgradeRescue < SelfUpgradeBase
|
88
|
-
metadata do
|
89
|
-
label :rescue_self_upgrade
|
90
|
-
description 'Disables all version specific maintenance repositories and,'\
|
91
|
-
"\nenables the repositories which were configured prior to self upgrade"
|
92
|
-
manual_detection
|
93
|
-
run_strategy :fail_slow
|
94
|
-
end
|
95
|
-
|
96
|
-
def compose
|
97
|
-
if check_min_version('foreman', '2.5') || check_min_version('foreman-proxy', '2.5')
|
98
|
-
enable_repos(repos_ids_to_reenable)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
module ForemanMaintain
|
2
|
-
module Cli
|
3
|
-
class SelfUpgradeCommand < Base
|
4
|
-
option ['--target-version'], 'TARGET_VERSION',\
|
5
|
-
'Major version of the Satellite or Capsule'\
|
6
|
-
', e.g 7.0', :required => true
|
7
|
-
def execute
|
8
|
-
allow_major_version_upgrade_only
|
9
|
-
run_scenario(upgrade_scenario, upgrade_rescue_scenario)
|
10
|
-
end
|
11
|
-
|
12
|
-
def upgrade_scenario
|
13
|
-
Scenarios::SelfUpgrade.new(target_version: target_version)
|
14
|
-
end
|
15
|
-
|
16
|
-
def upgrade_rescue_scenario
|
17
|
-
Scenarios::SelfUpgradeRescue.new(target_version: target_version)
|
18
|
-
end
|
19
|
-
|
20
|
-
def current_downstream_version
|
21
|
-
ForemanMaintain.detector.feature(:instance).downstream.current_version
|
22
|
-
end
|
23
|
-
|
24
|
-
def allow_major_version_upgrade_only
|
25
|
-
begin
|
26
|
-
next_version = Gem::Version.new(target_version)
|
27
|
-
rescue ArgumentError => err
|
28
|
-
raise Error::UsageError, "Invalid version! #{err}"
|
29
|
-
end
|
30
|
-
if current_downstream_version >= next_version
|
31
|
-
message = "The target-version #{target_version} should be "\
|
32
|
-
"greater than existing version #{current_downstream_version},"\
|
33
|
-
"\nand self-upgrade should be used for major version upgrades only!"
|
34
|
-
raise Error::UsageError, message
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module ForemanMaintain::Utils
|
2
|
-
module Facter
|
3
|
-
include ForemanMaintain::Concerns::SystemHelpers
|
4
|
-
|
5
|
-
FACTER_FILES = %w[/usr/bin/facter /opt/puppetlabs/bin/facter].freeze
|
6
|
-
|
7
|
-
def self.package
|
8
|
-
puppet_version = version(execute!('/opt/puppetlabs/bin/puppet --version'))
|
9
|
-
|
10
|
-
puppet_version.major >= 4 ? 'puppet-agent' : 'facter'
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.path
|
14
|
-
FACTER_FILES.find { |path| File.exist?(path) }
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|