foreman_maintain 0.8.19 → 0.9.2
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 +5 -3
- data/definitions/checks/disk/performance.rb +19 -8
- data/definitions/checks/foreman/check_https_proxies.rb +34 -0
- data/definitions/checks/repositories/validate.rb +1 -2
- data/definitions/checks/restore/validate_interfaces.rb +24 -0
- data/definitions/features/foreman_tasks.rb +11 -0
- data/definitions/procedures/backup/metadata.rb +11 -0
- data/definitions/procedures/content/prepare.rb +1 -1
- data/definitions/procedures/installer/upgrade_rake_task.rb +3 -1
- data/definitions/procedures/repositories/setup.rb +0 -4
- data/definitions/procedures/restore/configs.rb +5 -1
- data/definitions/scenarios/restore.rb +4 -0
- data/definitions/scenarios/upgrade_to_satellite_6_10.rb +1 -0
- data/lib/foreman_maintain/concerns/el_repos_manager_common.rb +20 -0
- data/lib/foreman_maintain/concerns/os_facts.rb +70 -0
- data/lib/foreman_maintain/concerns/system_helpers.rb +5 -29
- data/lib/foreman_maintain/repos_manager/dnf_config_manager.rb +13 -0
- data/lib/foreman_maintain/repos_manager/el_common.rb +0 -0
- data/lib/foreman_maintain/repos_manager/yum_config_manager.rb +20 -0
- data/lib/foreman_maintain/utils/backup.rb +36 -11
- data/lib/foreman_maintain/utils/command_runner.rb +2 -1
- data/lib/foreman_maintain/utils.rb +0 -1
- data/lib/foreman_maintain/version.rb +1 -1
- data/lib/foreman_maintain.rb +1 -0
- metadata +27 -7
- 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: 55215ac64deedb1ab1aafcef2f6b28392b48952a9f0923be2f95706aaa26d6b4
|
4
|
+
data.tar.gz: 0cadfaad877d10e17658ed3650ba483a8e7b8fdd9e898d383ee3871bf88ba498
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b2dbeddc647b557a0196fcea8e290e29a17e92a8ab38cee7acccbc165318bdd48cc43312232f928a30a2637dc290fd629fd07cfa27cdcb1808eb70b9903b261
|
7
|
+
data.tar.gz: 7dc280857da4485c5312d7b5047a94f1e0084da1c7e798964d2d66d7068daaced1268d34fcda1033e4fd73a6bd8caec8fa6450da7e5fb52f81866abb58bc0e04
|
@@ -33,9 +33,11 @@ class Checks::CheckForNewerPackages < ForemanMaintain::Check
|
|
33
33
|
end
|
34
34
|
|
35
35
|
unless packages_with_updates.empty?
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
command = ForemanMaintain.pkg_and_cmd_name[1]
|
37
|
+
fail! 'Required updates for some packages detected.'\
|
38
|
+
"\nPlease update to the latest #{@manual_confirmation_version}.z release "\
|
39
|
+
'before proceeding, using:'\
|
40
|
+
"\n# #{command} upgrade run --target-version #{@manual_confirmation_version}.z"
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
@@ -39,8 +39,8 @@ module Checks
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
def
|
43
|
-
@
|
42
|
+
def data_dirs
|
43
|
+
@data_dirs ||= %i[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,20 +48,32 @@ 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
|
+
|
51
58
|
def description
|
52
|
-
|
59
|
+
'Check recommended disk speed for '\
|
60
|
+
"#{[data_dirs.keys | pulp_dir.keys].join(', ')} directories."
|
61
|
+
end
|
62
|
+
|
63
|
+
def all_dirs
|
64
|
+
data_dirs.values | pulp_dir.values
|
53
65
|
end
|
54
66
|
|
55
67
|
def check_only_single_device?
|
56
|
-
|
68
|
+
all_dirs.each do |dir|
|
57
69
|
ForemanMaintain::Utils::Disk::Device.new(dir).name
|
58
70
|
end.uniq.length <= 1
|
59
71
|
end
|
60
72
|
|
61
73
|
def dirs_to_check
|
62
|
-
return
|
74
|
+
return all_dirs.first(1) if check_only_single_device?
|
63
75
|
|
64
|
-
|
76
|
+
all_dirs
|
65
77
|
end
|
66
78
|
|
67
79
|
private
|
@@ -74,11 +86,10 @@ module Checks
|
|
74
86
|
def compute_disk_speed(spinner)
|
75
87
|
success = true
|
76
88
|
io_obj = ForemanMaintain::Utils::Disk::NilDevice.new
|
77
|
-
|
78
89
|
dirs_to_check.each do |dir|
|
79
90
|
io_obj = ForemanMaintain::Utils::Disk::Device.new(dir)
|
80
91
|
|
81
|
-
spinner.update("[Speed check In-Progress] device
|
92
|
+
spinner.update("[Speed check In-Progress] device:#{io_obj.name}")
|
82
93
|
stats << io_obj
|
83
94
|
|
84
95
|
next if io_obj.read_speed >= EXPECTED_IO
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Checks
|
2
|
+
class CheckHttpsProxies < ForemanMaintain::Check
|
3
|
+
metadata do
|
4
|
+
label :https_proxies
|
5
|
+
for_feature :foreman_database
|
6
|
+
description 'Check for HTTPS proxies from the database'
|
7
|
+
manual_detection
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
https_proxies = find_https_proxies
|
12
|
+
unless https_proxies.empty?
|
13
|
+
https_proxy_names = https_proxies.map { |proxy| proxy['name'] }
|
14
|
+
question = "Syncing repositories through an 'HTTP Proxy' that uses the HTTPS\n"\
|
15
|
+
"protocol is not supported directly with Satellite 6.10.\n"\
|
16
|
+
"The following proxies use HTTPS: #{https_proxy_names.join(', ')}.\n"\
|
17
|
+
"For a suggested solution see https://access.redhat.com/solutions/6414991\n"\
|
18
|
+
'Continue upgrade?'
|
19
|
+
answer = ask_decision(question, actions_msg: 'y(yes), q(quit)')
|
20
|
+
abort! if answer != :yes
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def find_https_proxies
|
25
|
+
feature(:foreman_database).query(self.class.query_to_get_https_proxies)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.query_to_get_https_proxies
|
29
|
+
<<-SQL
|
30
|
+
SELECT \"http_proxies\".* FROM \"http_proxies\" WHERE (http_proxies.url ilike 'https://%')
|
31
|
+
SQL
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -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,6 +17,17 @@ 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
|
20
31
|
].freeze
|
21
32
|
|
22
33
|
metadata do
|
@@ -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
|
-
|
13
|
+
execute!("#{env_vars}foreman-rake katello:pulp3_migration", :interactive => true)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -5,7 +5,9 @@ module Procedures::Installer
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def run
|
8
|
-
|
8
|
+
# only run this in the Satellite scenario, as in others
|
9
|
+
# the installer runs this rake task for us already
|
10
|
+
execute!('foreman-rake upgrade:run') if feature(:satellite)
|
9
11
|
end
|
10
12
|
end
|
11
13
|
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,6 +43,8 @@ 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)
|
46
|
+
add_step(Procedures::Installer::Upgrade.new(:assumeyes => true))
|
47
|
+
add_step_with_context(Procedures::Installer::UpgradeRakeTask)
|
45
48
|
add_step_with_context(Procedures::Crond::Start) if feature(:cron)
|
46
49
|
end
|
47
50
|
# rubocop:enable Metrics/MethodLength,Metrics/AbcSize
|
@@ -87,6 +90,7 @@ module ForemanMaintain::Scenarios
|
|
87
90
|
context.map(:backup_dir,
|
88
91
|
Checks::Restore::ValidateBackup => :backup_dir,
|
89
92
|
Checks::Restore::ValidateHostname => :backup_dir,
|
93
|
+
Checks::Restore::ValidateInterfaces => :backup_dir,
|
90
94
|
Procedures::Restore::Configs => :backup_dir,
|
91
95
|
Procedures::Restore::DropDatabases => :backup_dir,
|
92
96
|
Procedures::Restore::PgGlobalObjects => :backup_dir,
|
@@ -29,6 +29,7 @@ module Scenarios::Satellite_6_10
|
|
29
29
|
add_step(Checks::CheckForNewerPackages.new(:packages => [foreman_plugin_name('katello'),
|
30
30
|
'python3-pulp-2to3-migration'],
|
31
31
|
:manual_confirmation_version => '6.9'))
|
32
|
+
add_step(Checks::CheckHttpsProxies)
|
32
33
|
add_steps(find_checks(:default))
|
33
34
|
add_steps(find_checks(:pre_upgrade))
|
34
35
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module ForemanMaintain
|
2
|
+
module Concerns
|
3
|
+
module ElReposManagerCommon
|
4
|
+
include ForemanMaintain::Concerns::OsFacts
|
5
|
+
|
6
|
+
def package_manager
|
7
|
+
return 'dnf' if el8?
|
8
|
+
|
9
|
+
'yum'
|
10
|
+
end
|
11
|
+
|
12
|
+
def enabled_repos_hash
|
13
|
+
repos = execute("#{package_manager} repolist enabled -d 6 -e 0 2> /dev/null | grep -E 'Repo-id|Repo-baseurl'")
|
14
|
+
return {} if repos.empty?
|
15
|
+
|
16
|
+
Hash[*repos.delete!(' ').split("\n")]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -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
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module ForemanMaintain::ReposManager
|
2
|
+
class DnfConfigManager
|
3
|
+
include ForemanMaintain::Concerns::ElReposManagerCommon
|
4
|
+
|
5
|
+
def disable_repos(repo_ids)
|
6
|
+
execute!("dnf config-manager --set-disabled #{repo_ids.join(',')}")
|
7
|
+
end
|
8
|
+
|
9
|
+
def enable_repos(repo_ids)
|
10
|
+
execute!("dnf config-manager --set-enabled #{repo_ids.join(',')}")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
File without changes
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module ForemanMaintain::ReposManager
|
2
|
+
class YumConfigManager
|
3
|
+
include ForemanMaintain::Concerns::ElReposManagerCommon
|
4
|
+
|
5
|
+
def disable_repos(repo_ids)
|
6
|
+
execute!("yum-config-manager --disable #{repo_ids.join(',')}")
|
7
|
+
end
|
8
|
+
|
9
|
+
def enable_repos(repo_ids)
|
10
|
+
execute!("yum-config-manager --enable #{repo_ids.join(',')}")
|
11
|
+
end
|
12
|
+
|
13
|
+
def enabled_repos_hash
|
14
|
+
repos = execute("yum repolist enabled -d 6 -e 0 2> /dev/null | grep -E 'Repo-id|Repo-baseurl'")
|
15
|
+
return {} if repos.empty?
|
16
|
+
|
17
|
+
Hash[*repos.delete!(' ').split("\n")]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -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.entries('/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,7 +66,8 @@ module ForemanMaintain
|
|
66
66
|
log_file = Tempfile.open('captured-output')
|
67
67
|
exit_file = Tempfile.open('captured-exit-code')
|
68
68
|
Kernel.system(
|
69
|
-
"bash -c '#{full_command}; echo $? > #{exit_file.path}'
|
69
|
+
"stdbuf -oL -eL bash -c '#{full_command}; echo $? > #{exit_file.path}'"\
|
70
|
+
"| tee -i #{log_file.path}"
|
70
71
|
)
|
71
72
|
File.open(log_file.path) { |f| @output = f.read }
|
72
73
|
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.2
|
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: 2021-10
|
11
|
+
date: 2021-11-10 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
|
@@ -134,6 +148,7 @@ files:
|
|
134
148
|
- definitions/checks/foreman/check_corrupted_roles.rb
|
135
149
|
- definitions/checks/foreman/check_duplicate_permission.rb
|
136
150
|
- definitions/checks/foreman/check_duplicate_roles.rb
|
151
|
+
- definitions/checks/foreman/check_https_proxies.rb
|
137
152
|
- definitions/checks/foreman/db_up.rb
|
138
153
|
- definitions/checks/foreman/facts_names.rb
|
139
154
|
- definitions/checks/foreman/puppet_class_duplicates.rb
|
@@ -162,6 +177,7 @@ files:
|
|
162
177
|
- definitions/checks/repositories/validate.rb
|
163
178
|
- definitions/checks/restore/validate_backup.rb
|
164
179
|
- definitions/checks/restore/validate_hostname.rb
|
180
|
+
- definitions/checks/restore/validate_interfaces.rb
|
165
181
|
- definitions/checks/root_user.rb
|
166
182
|
- definitions/checks/server_ping.rb
|
167
183
|
- definitions/checks/services_up.rb
|
@@ -358,10 +374,12 @@ files:
|
|
358
374
|
- lib/foreman_maintain/concerns/base_database.rb
|
359
375
|
- lib/foreman_maintain/concerns/directory_marker.rb
|
360
376
|
- lib/foreman_maintain/concerns/downstream.rb
|
377
|
+
- lib/foreman_maintain/concerns/el_repos_manager_common.rb
|
361
378
|
- lib/foreman_maintain/concerns/finders.rb
|
362
379
|
- lib/foreman_maintain/concerns/hammer.rb
|
363
380
|
- lib/foreman_maintain/concerns/logger.rb
|
364
381
|
- lib/foreman_maintain/concerns/metadata.rb
|
382
|
+
- lib/foreman_maintain/concerns/os_facts.rb
|
365
383
|
- lib/foreman_maintain/concerns/primary_checks.rb
|
366
384
|
- lib/foreman_maintain/concerns/pulp_common.rb
|
367
385
|
- lib/foreman_maintain/concerns/reporter.rb
|
@@ -385,6 +403,9 @@ files:
|
|
385
403
|
- lib/foreman_maintain/procedure.rb
|
386
404
|
- lib/foreman_maintain/reporter.rb
|
387
405
|
- lib/foreman_maintain/reporter/cli_reporter.rb
|
406
|
+
- lib/foreman_maintain/repos_manager/dnf_config_manager.rb
|
407
|
+
- lib/foreman_maintain/repos_manager/el_common.rb
|
408
|
+
- lib/foreman_maintain/repos_manager/yum_config_manager.rb
|
388
409
|
- lib/foreman_maintain/runner.rb
|
389
410
|
- lib/foreman_maintain/runner/execution.rb
|
390
411
|
- lib/foreman_maintain/runner/stored_execution.rb
|
@@ -401,7 +422,6 @@ files:
|
|
401
422
|
- lib/foreman_maintain/utils/disk/io_device.rb
|
402
423
|
- lib/foreman_maintain/utils/disk/nil_device.rb
|
403
424
|
- lib/foreman_maintain/utils/disk/stats.rb
|
404
|
-
- lib/foreman_maintain/utils/facter.rb
|
405
425
|
- lib/foreman_maintain/utils/hash_tools.rb
|
406
426
|
- lib/foreman_maintain/utils/mongo_core.rb
|
407
427
|
- lib/foreman_maintain/utils/response.rb
|
@@ -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
|