foreman_maintain 0.7.14 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/definitions/features/dynflow_sidekiq.rb +1 -1
- data/definitions/features/katello.rb +8 -3
- data/definitions/features/pulp2.rb +1 -7
- data/definitions/features/pulpcore.rb +2 -10
- data/definitions/features/service.rb +1 -1
- data/definitions/procedures/backup/pulp.rb +1 -1
- data/definitions/procedures/content/prepare.rb +1 -3
- data/definitions/scenarios/content.rb +4 -28
- data/definitions/scenarios/upgrade_to_satellite_6_8.rb +0 -1
- data/definitions/scenarios/upgrade_to_satellite_6_9.rb +0 -1
- data/lib/foreman_maintain/cli/content_command.rb +1 -13
- data/lib/foreman_maintain/runner.rb +2 -8
- data/lib/foreman_maintain/utils/command_runner.rb +1 -5
- data/lib/foreman_maintain/utils/disk/io_device.rb +0 -4
- data/lib/foreman_maintain/version.rb +1 -1
- metadata +2 -4
- data/definitions/checks/disk/available_space_postgresql12.rb +0 -45
- data/definitions/procedures/pulp/cleanup_old_metadata_files.rb +0 -75
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed8b16b2a22acb7bf2e2768976f2df46eb6a1b51b883904cbee0bb180869c5a4
|
4
|
+
data.tar.gz: 46473f96dba47ffc94f08fbb15fa031073852cdc234c8c701d5568a7727d269d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76da2fe52b25ac48af18295caaa92dad1e2cb106a8aaded53adc02804da1ef2c021a6d336e10e4abea87d6aed1f9950a9b994cc6dba075b8b116a31ea9c6b706
|
7
|
+
data.tar.gz: d25955e6f87bfb863d050935bf4ed253c2afa55e1552ec17edcc76500c6d563d7fe318b84d68877c942c63facdd3c93d973591df5e93fedd9fd445a4ff4c845a
|
@@ -37,6 +37,6 @@ class Features::DynflowSidekiq < ForemanMaintain::Feature
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def configured_instances
|
40
|
-
Dir['/etc/foreman/dynflow
|
40
|
+
Dir['/etc/foreman/dynflow/*'].map { |config| File.basename(config, '.yml') }
|
41
41
|
end
|
42
42
|
end
|
@@ -16,9 +16,14 @@ class Features::Katello < ForemanMaintain::Feature
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def services
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
if feature(:pulp2)
|
20
|
+
[]
|
21
|
+
else
|
22
|
+
[
|
23
|
+
system_service('qpidd', 10),
|
24
|
+
system_service('qdrouterd', 10)
|
25
|
+
]
|
26
|
+
end
|
22
27
|
end
|
23
28
|
|
24
29
|
# rubocop:disable Metrics/MethodLength
|
@@ -5,7 +5,7 @@ class Features::Pulp < ForemanMaintain::Feature
|
|
5
5
|
label :pulp2
|
6
6
|
|
7
7
|
confine do
|
8
|
-
find_package('pulp-server')
|
8
|
+
find_package('pulp-server') && !check_min_version('katello-common', '4.0')
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
@@ -34,10 +34,4 @@ class Features::Pulp < ForemanMaintain::Feature
|
|
34
34
|
'/etc/default/pulp_workers'
|
35
35
|
]
|
36
36
|
end
|
37
|
-
|
38
|
-
def exclude_from_backup
|
39
|
-
# Exclude /var/lib/pulp/katello-export and /var/lib/pulp/cache
|
40
|
-
# since the tar is run from /var/lib/pulp, list subdir paths only
|
41
|
-
['katello-export', 'cache']
|
42
|
-
end
|
43
37
|
end
|
@@ -11,21 +11,13 @@ class Features::Pulpcore < ForemanMaintain::Feature
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def services
|
14
|
-
self.class.pulpcore_common_services +
|
14
|
+
self.class.pulpcore_common_services + [
|
15
15
|
system_service('rh-redis5-redis', 5),
|
16
|
+
system_service('pulpcore-worker@*', 20, :all => true, :skip_enablement => true),
|
16
17
|
system_service('httpd', 30)
|
17
18
|
]
|
18
19
|
end
|
19
20
|
|
20
|
-
def configured_workers
|
21
|
-
names = Dir['/etc/systemd/system/multi-user.target.wants/pulpcore-worker@*.service']
|
22
|
-
names = names.map { |f| File.basename(f) }
|
23
|
-
names.map do |name|
|
24
|
-
system_service(name, 20, :skip_enablement => true,
|
25
|
-
:instance_parent_unit => 'pulpcore-worker@')
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
21
|
def self.pulpcore_migration_services
|
30
22
|
pulpcore_common_services + [
|
31
23
|
ForemanMaintain::Utils.system_service('pulpcore-worker@1', 20),
|
@@ -137,7 +137,7 @@ class Features::Service < ForemanMaintain::Feature
|
|
137
137
|
|
138
138
|
def filter_disabled_services!(action, service_list)
|
139
139
|
if %w[start stop restart status].include?(action)
|
140
|
-
service_list.select!
|
140
|
+
service_list.select!(&:enabled?)
|
141
141
|
end
|
142
142
|
service_list
|
143
143
|
end
|
@@ -30,7 +30,7 @@ module Procedures::Backup
|
|
30
30
|
feature(:tar).run(
|
31
31
|
:archive => File.join(@backup_dir, 'pulp_data.tar'),
|
32
32
|
:command => 'create',
|
33
|
-
:exclude =>
|
33
|
+
:exclude => ['var/lib/pulp/katello-export'],
|
34
34
|
:listed_incremental => File.join(@backup_dir, '.pulp.snar'),
|
35
35
|
:transform => 's,^,var/lib/pulp/,S',
|
36
36
|
:volume_size => @tar_volume_size,
|
@@ -3,13 +3,11 @@ module Procedures::Content
|
|
3
3
|
metadata do
|
4
4
|
description 'Prepare content for Pulp 3'
|
5
5
|
for_feature :pulpcore
|
6
|
-
param :quiet, 'Keep the output on a single line', :flag => true, :default => false
|
7
6
|
end
|
8
7
|
|
9
8
|
def run
|
10
9
|
# use interactive to get realtime output
|
11
|
-
|
12
|
-
puts execute!("#{env_vars}foreman-rake katello:pulp3_migration", :interactive => true)
|
10
|
+
puts execute!('foreman-rake katello:pulp3_migration', :interactive => true)
|
13
11
|
end
|
14
12
|
end
|
15
13
|
end
|
@@ -2,10 +2,11 @@ module ForemanMaintain::Scenarios
|
|
2
2
|
module Content
|
3
3
|
class ContentBase < ForemanMaintain::Scenario
|
4
4
|
def enable_and_start_services
|
5
|
+
add_step(Procedures::Service::Start)
|
5
6
|
add_step(Procedures::Service::Enable.
|
6
7
|
new(:only => Features::Pulpcore.pulpcore_migration_services))
|
7
8
|
add_step(Procedures::Service::Start.
|
8
|
-
new(:
|
9
|
+
new(:only => Features::Pulpcore.pulpcore_migration_services))
|
9
10
|
end
|
10
11
|
|
11
12
|
def disable_and_stop_services
|
@@ -26,18 +27,12 @@ module ForemanMaintain::Scenarios
|
|
26
27
|
def compose
|
27
28
|
if feature(:satellite) && feature(:satellite).at_least_version?('6.9')
|
28
29
|
enable_and_start_services
|
29
|
-
add_step(Procedures::Content::Prepare
|
30
|
+
add_step(Procedures::Content::Prepare)
|
30
31
|
disable_and_stop_services
|
31
32
|
elsif !feature(:satellite)
|
32
|
-
add_step(Procedures::Content::Prepare
|
33
|
+
add_step(Procedures::Content::Prepare)
|
33
34
|
end
|
34
35
|
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def quiet?
|
39
|
-
!!context.get(:quiet)
|
40
|
-
end
|
41
36
|
end
|
42
37
|
|
43
38
|
class Switchover < ContentBase
|
@@ -65,7 +60,6 @@ module ForemanMaintain::Scenarios
|
|
65
60
|
|
66
61
|
def compose
|
67
62
|
if !feature(:satellite) || feature(:satellite).at_least_version?('6.9')
|
68
|
-
enable_and_start_services if feature(:satellite)
|
69
63
|
add_step(Procedures::Content::PrepareAbort)
|
70
64
|
end
|
71
65
|
end
|
@@ -103,24 +97,6 @@ module ForemanMaintain::Scenarios
|
|
103
97
|
end
|
104
98
|
end
|
105
99
|
|
106
|
-
class CleanupRepositoryMetadata < ContentBase
|
107
|
-
metadata do
|
108
|
-
label :cleanup_repository_metadata
|
109
|
-
description 'Remove old leftover repository metadata'
|
110
|
-
param :remove_files, 'Actually remove the files? Otherwise a dryrun is performed.'
|
111
|
-
|
112
|
-
manual_detection
|
113
|
-
end
|
114
|
-
|
115
|
-
def compose
|
116
|
-
add_step_with_context(Procedures::Pulp::CleanupOldMetadataFiles)
|
117
|
-
end
|
118
|
-
|
119
|
-
def set_context_mapping
|
120
|
-
context.map(:remove_files, Procedures::Pulp::CleanupOldMetadataFiles => :remove_files)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
100
|
class RemovePulp2 < ContentBase
|
125
101
|
metadata do
|
126
102
|
label :content_remove_pulp2
|
@@ -28,7 +28,6 @@ module Scenarios::Satellite_6_8
|
|
28
28
|
add_steps(find_checks(:default))
|
29
29
|
add_steps(find_checks(:pre_upgrade))
|
30
30
|
add_step(Checks::Foreman::CheckpointSegments)
|
31
|
-
add_step(Checks::Disk::AvailableSpacePostgresql12)
|
32
31
|
add_step(Checks::Repositories::Validate.new(:version => '6.8'))
|
33
32
|
end
|
34
33
|
end
|
@@ -28,7 +28,6 @@ module Scenarios::Satellite_6_9
|
|
28
28
|
add_steps(find_checks(:default))
|
29
29
|
add_steps(find_checks(:pre_upgrade))
|
30
30
|
add_step(Checks::Foreman::CheckpointSegments)
|
31
|
-
add_step(Checks::Disk::AvailableSpacePostgresql12)
|
32
31
|
add_step(Checks::Repositories::Validate.new(:version => '6.9'))
|
33
32
|
end
|
34
33
|
end
|
@@ -2,9 +2,8 @@ module ForemanMaintain
|
|
2
2
|
module Cli
|
3
3
|
class ContentCommand < Base
|
4
4
|
subcommand 'prepare', 'Prepare content for Pulp 3' do
|
5
|
-
option ['-q', '--quiet'], :flag, 'Keep the output on a single line'
|
6
5
|
def execute
|
7
|
-
run_scenarios_and_exit(Scenarios::Content::Prepare.new
|
6
|
+
run_scenarios_and_exit(Scenarios::Content::Prepare.new)
|
8
7
|
end
|
9
8
|
end
|
10
9
|
|
@@ -35,17 +34,6 @@ module ForemanMaintain
|
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
38
|
-
subcommand 'cleanup-repository-metadata', 'Cleanup old repository metadata under Pulp 2' do
|
39
|
-
option ['-r', '--remove-files'], :flag, 'Remove the files instead of just listing them.',
|
40
|
-
:attribute_name => :remove_files
|
41
|
-
|
42
|
-
def execute
|
43
|
-
run_scenarios_and_exit(
|
44
|
-
Scenarios::Content::CleanupRepositoryMetadata.new(:remove_files => @remove_files)
|
45
|
-
)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
37
|
subcommand 'remove-pulp2', 'Remove pulp2 and mongodb packages and data' do
|
50
38
|
def execute
|
51
39
|
run_scenarios_and_exit(Scenarios::Content::RemovePulp2.new)
|
@@ -15,7 +15,6 @@ module ForemanMaintain
|
|
15
15
|
@reporter = reporter
|
16
16
|
@scenarios = Array(scenarios)
|
17
17
|
@quit = false
|
18
|
-
@rescue = false
|
19
18
|
@last_scenario = nil
|
20
19
|
@last_scenario_continuation_confirmed = false
|
21
20
|
@exit_code = 0
|
@@ -30,17 +29,12 @@ module ForemanMaintain
|
|
30
29
|
@assumeyes
|
31
30
|
end
|
32
31
|
|
33
|
-
def rescue?
|
34
|
-
@rescue
|
35
|
-
end
|
36
|
-
|
37
32
|
def run
|
38
33
|
@scenarios.each do |scenario|
|
39
34
|
run_scenario(scenario)
|
40
35
|
next unless @quit
|
41
36
|
|
42
37
|
if @rescue_scenario
|
43
|
-
@rescue = true
|
44
38
|
logger.debug('=== Rescue scenario found. Executing ===')
|
45
39
|
execute_scenario_steps(@rescue_scenario, true)
|
46
40
|
end
|
@@ -50,10 +44,10 @@ module ForemanMaintain
|
|
50
44
|
|
51
45
|
def run_scenario(scenario)
|
52
46
|
return if scenario.steps.empty?
|
53
|
-
raise 'The runner is already in quit state' if quit?
|
47
|
+
raise 'The runner is already in quit state' if quit?
|
54
48
|
|
55
49
|
confirm_scenario(scenario)
|
56
|
-
return if quit?
|
50
|
+
return if quit?
|
57
51
|
|
58
52
|
execute_scenario_steps(scenario)
|
59
53
|
ensure
|
@@ -59,15 +59,12 @@ module ForemanMaintain
|
|
59
59
|
|
60
60
|
private
|
61
61
|
|
62
|
-
# rubocop:disable Metrics/MethodLength
|
63
62
|
def run_interactively
|
64
63
|
# use tmp files to capture output and exit status of the command when
|
65
64
|
# running interactively
|
66
65
|
log_file = Tempfile.open('captured-output')
|
67
66
|
exit_file = Tempfile.open('captured-exit-code')
|
68
|
-
Kernel.system(
|
69
|
-
"bash -c '#{full_command}; echo $? > #{exit_file.path}' | tee -i #{log_file.path}"
|
70
|
-
)
|
67
|
+
Kernel.system("script -qc '#{full_command}; echo $? > #{exit_file.path}' #{log_file.path}")
|
71
68
|
File.open(log_file.path) { |f| @output = f.read }
|
72
69
|
File.open(exit_file.path) do |f|
|
73
70
|
exit_status = f.read.strip
|
@@ -81,7 +78,6 @@ module ForemanMaintain
|
|
81
78
|
log_file.close
|
82
79
|
exit_file.close
|
83
80
|
end
|
84
|
-
# rubocop:enable Metrics/MethodLength
|
85
81
|
|
86
82
|
def run_non_interactively
|
87
83
|
IO.popen(full_command, 'r+') do |f|
|
@@ -26,10 +26,6 @@ module ForemanMaintain
|
|
26
26
|
execute!("df #{dir}|awk {'print $5'}|tail -1").to_i
|
27
27
|
end
|
28
28
|
|
29
|
-
def space_used
|
30
|
-
convert_kb_to_mb(execute!("du -ks #{dir} | awk {'print $1'}").to_i)
|
31
|
-
end
|
32
|
-
|
33
29
|
private
|
34
30
|
|
35
31
|
# In fio command, --direct option bypass the cache page
|
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.8.0
|
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-09
|
11
|
+
date: 2021-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clamp
|
@@ -126,7 +126,6 @@ files:
|
|
126
126
|
- definitions/checks/check_tmout.rb
|
127
127
|
- definitions/checks/disk/available_space.rb
|
128
128
|
- definitions/checks/disk/available_space_candlepin.rb
|
129
|
-
- definitions/checks/disk/available_space_postgresql12.rb
|
130
129
|
- definitions/checks/disk/performance.rb
|
131
130
|
- definitions/checks/env_proxy.rb
|
132
131
|
- definitions/checks/foreman/check_checkpoint_segments.rb
|
@@ -260,7 +259,6 @@ files:
|
|
260
259
|
- definitions/procedures/packages/update_all_confirmation.rb
|
261
260
|
- definitions/procedures/passenger_recycler.rb
|
262
261
|
- definitions/procedures/prep_6_10_upgrade.rb
|
263
|
-
- definitions/procedures/pulp/cleanup_old_metadata_files.rb
|
264
262
|
- definitions/procedures/pulp/migrate.rb
|
265
263
|
- definitions/procedures/pulp/remove.rb
|
266
264
|
- definitions/procedures/pulpcore/migrate.rb
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module Checks
|
2
|
-
module Disk
|
3
|
-
class AvailableSpacePostgresql12 < ForemanMaintain::Check
|
4
|
-
metadata do
|
5
|
-
label :available_space_for_postgresql12
|
6
|
-
description 'Check to make sure PostgreSQL 12 work directory has enough space for upgrade'
|
7
|
-
confine do
|
8
|
-
(feature(:foreman_database) || feature(:candlepin_database)) && \
|
9
|
-
(file_exists?('/var/lib/pgsql') && \
|
10
|
-
file_exists?('/var/opt/rh/rh-postgresql12'))
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def run
|
15
|
-
assert(psql_12_available_space >= psql_9_consumed_space, warning_message, :warn => true)
|
16
|
-
end
|
17
|
-
|
18
|
-
def pgsql_dir(version)
|
19
|
-
if version == 9
|
20
|
-
'/var/lib/pgsql/'
|
21
|
-
elsif version == 12
|
22
|
-
'/var/opt/rh/rh-postgresql12/'
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def psql_9_consumed_space
|
27
|
-
io_obj = ForemanMaintain::Utils::Disk::IODevice.new(pgsql_dir(9))
|
28
|
-
io_obj.space_used
|
29
|
-
end
|
30
|
-
|
31
|
-
def psql_12_available_space
|
32
|
-
io_obj = ForemanMaintain::Utils::Disk::IODevice.new(pgsql_dir(12))
|
33
|
-
io_obj.available_space
|
34
|
-
end
|
35
|
-
|
36
|
-
def warning_message
|
37
|
-
sat_version = feature(:satellite).current_version.version[0..2]
|
38
|
-
"Satellite #{sat_version} uses PostgreSQL 12. \nThis changes PostgreSQL "\
|
39
|
-
"work directory to #{pgsql_dir(12)}\n"\
|
40
|
-
"The new work directory requires at least #{psql_9_consumed_space}"\
|
41
|
-
'MiB free space for upgrade!'
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require 'find'
|
2
|
-
require 'rexml/document'
|
3
|
-
|
4
|
-
module Procedures::Pulp
|
5
|
-
class CleanupOldMetadataFiles < ForemanMaintain::Procedure
|
6
|
-
metadata do
|
7
|
-
description 'Cleanup old and unneeded yum metadata files from /var/lib/pulp/'
|
8
|
-
confine do
|
9
|
-
check_max_version('katello-common', '4.0')
|
10
|
-
end
|
11
|
-
param :remove_files, 'If true, will actually delete files, otherwise will print them out.'
|
12
|
-
end
|
13
|
-
|
14
|
-
PULP_METADATA_DIR = '/var/lib/pulp/published/yum/master/yum_distributor/'.freeze
|
15
|
-
REPOMD_FILE = 'repomd.xml'.freeze
|
16
|
-
|
17
|
-
def run
|
18
|
-
return unless File.directory?(PULP_METADATA_DIR)
|
19
|
-
found = []
|
20
|
-
|
21
|
-
puts 'Warning: This command may cause reduced performance related to content operations.'
|
22
|
-
message = 'Locating repository metadata (this may take a while)'
|
23
|
-
with_spinner(message) do |spinner|
|
24
|
-
Find.find(PULP_METADATA_DIR) do |path|
|
25
|
-
next if File.basename(path) != REPOMD_FILE
|
26
|
-
found << path
|
27
|
-
spinner.update("#{message}: Found #{found.count} repos.")
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
found.each do |repo_md_path|
|
32
|
-
handle(repo_md_path, @remove_files)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def handle(repo_md_path, remove_files)
|
37
|
-
base_path = File.dirname(repo_md_path)
|
38
|
-
to_remove = list_existing_files(repo_md_path) - list_repomd_files(repo_md_path)
|
39
|
-
|
40
|
-
if to_remove.empty?
|
41
|
-
"Skipping #{base_path}, no files to remove."
|
42
|
-
elsif remove_files
|
43
|
-
puts '================================================================================'
|
44
|
-
puts "Removing #{to_remove.count} files from #{base_path}"
|
45
|
-
to_remove.each { |file| File.delete(File.join(base_path, file)) }
|
46
|
-
else
|
47
|
-
puts '================================================================================'
|
48
|
-
puts "For #{base_path} would remove, but --remove-files was not specified:"
|
49
|
-
to_remove.each { |file| puts " #{file}" }
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def list_repomd_files(repo_md_path)
|
54
|
-
doc = REXML::Document.new(File.new(repo_md_path))
|
55
|
-
filenames = []
|
56
|
-
doc.root.elements.each do |data|
|
57
|
-
locations = data.elements['location']
|
58
|
-
next unless locations
|
59
|
-
|
60
|
-
if locations.attributes
|
61
|
-
filenames << locations.attributes['href']
|
62
|
-
end
|
63
|
-
end
|
64
|
-
base_names(filenames.flatten)
|
65
|
-
end
|
66
|
-
|
67
|
-
def list_existing_files(repo_md_path)
|
68
|
-
base_names(Dir[File.dirname(repo_md_path) + '/*']) - [REPOMD_FILE]
|
69
|
-
end
|
70
|
-
|
71
|
-
def base_names(file_list)
|
72
|
-
file_list.map { |file| File.basename(file) }
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|