foreman_maintain 0.5.6 → 0.6.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 +5 -5
- data/definitions/checks/disk/performance.rb +1 -1
- data/definitions/features/dynflow_sidekiq.rb +39 -0
- data/definitions/features/foreman_proxy.rb +15 -4
- data/definitions/features/foreman_tasks.rb +3 -8
- data/definitions/features/instance.rb +6 -2
- data/definitions/features/katello.rb +0 -7
- data/definitions/features/mongo.rb +1 -1
- data/definitions/features/{pulp.rb → pulp2.rb} +1 -1
- data/definitions/features/pulp3.rb +22 -0
- data/definitions/features/puppet_server.rb +2 -6
- data/definitions/features/redis.rb +34 -0
- data/definitions/features/tar.rb +18 -18
- data/definitions/procedures/backup/config_files.rb +43 -13
- data/definitions/procedures/backup/prepare_directory.rb +1 -8
- data/definitions/procedures/backup/pulp.rb +3 -3
- data/definitions/procedures/backup/snapshot/logical_volume_confirmation.rb +1 -1
- data/definitions/procedures/backup/snapshot/mount_pulp.rb +3 -3
- data/definitions/procedures/content/prepare.rb +12 -0
- data/definitions/procedures/packages/installer_confirmation.rb +1 -1
- data/definitions/procedures/pulp/migrate.rb +1 -1
- data/definitions/procedures/restore/configs.rb +7 -0
- data/definitions/procedures/restore/extract_files.rb +0 -1
- data/definitions/procedures/restore/mongo_dump.rb +2 -2
- data/definitions/procedures/service/base.rb +1 -1
- data/definitions/scenarios/backup.rb +1 -2
- data/definitions/scenarios/packages.rb +3 -7
- data/extras/foreman_protector/foreman-protector.py +1 -1
- data/lib/foreman_maintain/cli/packages_command.rb +1 -1
- data/lib/foreman_maintain/concerns/downstream.rb +2 -1
- data/lib/foreman_maintain/concerns/system_helpers.rb +9 -7
- data/lib/foreman_maintain/feature.rb +0 -4
- data/lib/foreman_maintain/reporter/cli_reporter.rb +3 -3
- data/lib/foreman_maintain/utils/disk/io_device.rb +1 -1
- data/lib/foreman_maintain/utils/facter.rb +1 -1
- data/lib/foreman_maintain/utils/service/abstract.rb +2 -1
- data/lib/foreman_maintain/utils/service/systemd.rb +26 -2
- data/lib/foreman_maintain/version.rb +1 -1
- metadata +165 -163
- data/definitions/checks/foreman/check_duplicate_permission.rb +0 -33
- data/definitions/procedures/foreman/remove_duplicate_permissions.rb +0 -70
- data/definitions/procedures/packages/update_all_confirmation.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9cf2de71b1fd3ab00b7305e517b1529428af64ef
|
4
|
+
data.tar.gz: 5fe408d0a49b4e196c27d81cf9e732fd994358a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2588c117972fcc18c28fd503b945a9f00313906df3ac225af45ccb0a973e406d31bddd191d84937e3778718fae7e9a45cb7c2b57c812815a65f8922d29b0519b
|
7
|
+
data.tar.gz: 8973ea5b1105d668c3e493cb49e68c95e01bccb298f6fa7c2fa702dd629b781d460aca39a72a8a20d5e6e68e8c92adb6dd3e2678e960f1d976d9d23fcfd6708c
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Features::DynflowSidekiq < ForemanMaintain::Feature
|
2
|
+
metadata do
|
3
|
+
label :dynflow_sidekiq
|
4
|
+
|
5
|
+
confine do
|
6
|
+
server? && find_package('foreman-dynflow-sidekiq')
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def services
|
11
|
+
service_names.map { |service| system_service service, instance_priority(service) }
|
12
|
+
end
|
13
|
+
|
14
|
+
def config_files
|
15
|
+
# Workaround until foreman-installer can deploy scaled workers
|
16
|
+
service_symlinks = configured_services.map do |service|
|
17
|
+
"/etc/systemd/system/multi-user.target.wants/#{service}.service"
|
18
|
+
end
|
19
|
+
[
|
20
|
+
'/etc/foreman/dynflow',
|
21
|
+
service_symlinks
|
22
|
+
].flatten
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def instance_priority(instance)
|
28
|
+
# Orchestrator should be started before the workers are
|
29
|
+
instance.end_with?('@orchestrator') ? 30 : 31
|
30
|
+
end
|
31
|
+
|
32
|
+
def service_names
|
33
|
+
configured_instances.map { |instance| "dynflow-sidekiq@#{instance}" }
|
34
|
+
end
|
35
|
+
|
36
|
+
def configured_instances
|
37
|
+
Dir['/etc/foreman/dynflow/*'].map { |config| File.basename(config, '.yml') }
|
38
|
+
end
|
39
|
+
end
|
@@ -17,7 +17,7 @@ class Features::ForemanProxy < ForemanMaintain::Feature
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def with_content?
|
20
|
-
!!feature(:pulp
|
20
|
+
!!feature(:instance).pulp
|
21
21
|
end
|
22
22
|
|
23
23
|
def dhcpd_conf_exist?
|
@@ -79,17 +79,26 @@ class Features::ForemanProxy < ForemanMaintain::Feature
|
|
79
79
|
|
80
80
|
def content_module
|
81
81
|
return @content_module if @content_module_detected
|
82
|
+
|
82
83
|
@content_module_detected = true
|
83
84
|
answer = feature(:installer).answers.find do |_, config|
|
84
|
-
config.is_a?(Hash) && config.key?(
|
85
|
+
config.is_a?(Hash) && config.key?(certs_param_name[:param_key])
|
85
86
|
end
|
86
|
-
@content_module = answer.nil? ?
|
87
|
+
@content_module = answer.nil? ? certs_param_name[:param_section] : answer.first
|
87
88
|
logger.debug("foreman proxy content module detected: #{@content_module}")
|
88
89
|
@content_module
|
89
90
|
end
|
90
91
|
|
92
|
+
def certs_param_name
|
93
|
+
if check_min_version('foreman', '1.21')
|
94
|
+
return { :param_section => 'certs', :param_key => 'tar_file' }
|
95
|
+
end
|
96
|
+
|
97
|
+
{ :param_section => 'foreman_proxy_content', :param_key => 'certs_tar' }
|
98
|
+
end
|
99
|
+
|
91
100
|
def certs_tar
|
92
|
-
feature(:installer).answers[content_module][
|
101
|
+
feature(:installer).answers[content_module][certs_param_name[:param_section]] if content_module
|
93
102
|
end
|
94
103
|
|
95
104
|
def settings_file
|
@@ -136,6 +145,7 @@ class Features::ForemanProxy < ForemanMaintain::Feature
|
|
136
145
|
http_line = ''
|
137
146
|
array_output.each do |str|
|
138
147
|
next unless str.include?('HTTP')
|
148
|
+
|
139
149
|
http_line = str
|
140
150
|
end
|
141
151
|
msg = http_line.split(curl_http_status.to_s).last
|
@@ -195,6 +205,7 @@ class Features::ForemanProxy < ForemanMaintain::Feature
|
|
195
205
|
def lookup_dhcpd_config_file
|
196
206
|
dhcpd_config_file = lookup_using_dhcp_yml
|
197
207
|
raise "Couldn't find DHCP Configuration file" if dhcpd_config_file.nil?
|
208
|
+
|
198
209
|
dhcpd_config_file
|
199
210
|
end
|
200
211
|
|
@@ -108,7 +108,7 @@ class Features::ForemanTasks < ForemanMaintain::Feature
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def services
|
111
|
-
[system_service(service_name, 30)]
|
111
|
+
feature(:dynflow_sidekiq) ? [] : [system_service(service_name, 30)]
|
112
112
|
end
|
113
113
|
|
114
114
|
def service_name
|
@@ -162,13 +162,8 @@ class Features::ForemanTasks < ForemanMaintain::Feature
|
|
162
162
|
def export_csv(sql, file_name, state)
|
163
163
|
dir = prepare_for_backup(state)
|
164
164
|
filepath = "#{dir}/#{file_name}"
|
165
|
-
|
166
|
-
|
167
|
-
f.write(csv_output)
|
168
|
-
f.close
|
169
|
-
end
|
170
|
-
execute("bzip2 #{filepath} -c -9 > #{filepath}.bz2")
|
171
|
-
FileUtils.rm_rf(filepath)
|
165
|
+
execute("echo \"COPY (#{sql}) TO STDOUT WITH CSV;\" \
|
166
|
+
| su - postgres -c '/usr/bin/psql -d foreman' | bzip2 -9 > #{filepath}.bz2")
|
172
167
|
end
|
173
168
|
|
174
169
|
def old_tasks_condition(state = "'stopped', 'paused'")
|
@@ -64,6 +64,10 @@ class Features::Instance < ForemanMaintain::Feature
|
|
64
64
|
net
|
65
65
|
end
|
66
66
|
|
67
|
+
def pulp
|
68
|
+
feature(:pulp2) || feature(:pulp3)
|
69
|
+
end
|
70
|
+
|
67
71
|
private
|
68
72
|
|
69
73
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
@@ -137,8 +141,8 @@ class Features::Instance < ForemanMaintain::Feature
|
|
137
141
|
{
|
138
142
|
'candlepin_auth' => %w[candlepin candlepin_database],
|
139
143
|
'candlepin' => %w[candlepin candlepin_database],
|
140
|
-
'pulp_auth' => %w[
|
141
|
-
'pulp' => %w[
|
144
|
+
'pulp_auth' => %w[pulp2 mongo],
|
145
|
+
'pulp' => %w[pulp2 mongo],
|
142
146
|
'foreman_tasks' => %w[foreman_tasks]
|
143
147
|
}
|
144
148
|
end
|
@@ -52,13 +52,6 @@ class Features::Katello < ForemanMaintain::Feature
|
|
52
52
|
end
|
53
53
|
# rubocop:enable Metrics/MethodLength
|
54
54
|
|
55
|
-
def config_files_exclude_for_online
|
56
|
-
[
|
57
|
-
'/var/lib/qpidd',
|
58
|
-
'/var/lib/candlepin/activemq-artemis'
|
59
|
-
]
|
60
|
-
end
|
61
|
-
|
62
55
|
private
|
63
56
|
|
64
57
|
def installer_scenario_answers
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'foreman_maintain/utils/service/systemd'
|
2
|
+
|
3
|
+
class Features::Pulp3 < ForemanMaintain::Feature
|
4
|
+
metadata do
|
5
|
+
label :pulp3
|
6
|
+
|
7
|
+
confine do
|
8
|
+
ForemanMaintain::Utils::Service::Systemd.new('pulpcore-api', 0).exist?
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def services
|
13
|
+
[
|
14
|
+
system_service('pulpcore-api', 10),
|
15
|
+
system_service('pulpcore-content', 10),
|
16
|
+
system_service('pulpcore-resource-manager', 10),
|
17
|
+
system_service('pulpcore-worker@*', 20, :all => true, :skip_enablement => true),
|
18
|
+
system_service('rh-redis5-redis', 30),
|
19
|
+
system_service('httpd', 30)
|
20
|
+
]
|
21
|
+
end
|
22
|
+
end
|
@@ -29,7 +29,7 @@ class Features::PuppetServer < ForemanMaintain::Feature
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def puppet_version
|
32
|
-
version(execute!(
|
32
|
+
version(execute!('puppet --version'))
|
33
33
|
end
|
34
34
|
|
35
35
|
def find_empty_cacert_request_files
|
@@ -56,10 +56,6 @@ class Features::PuppetServer < ForemanMaintain::Feature
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def puppet_ssldir_path
|
59
|
-
execute!(
|
60
|
-
end
|
61
|
-
|
62
|
-
def puppet_path
|
63
|
-
'/opt/puppetlabs/bin/puppet'
|
59
|
+
execute!('puppet master --configprint ssldir')
|
64
60
|
end
|
65
61
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Features::Redis < ForemanMaintain::Feature
|
2
|
+
metadata do
|
3
|
+
label :redis
|
4
|
+
|
5
|
+
confine do
|
6
|
+
# Luckily, the service name is the same as the package providing it
|
7
|
+
server? && find_package(service_name)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def services
|
12
|
+
[system_service(self.class.service_name, 10)]
|
13
|
+
end
|
14
|
+
|
15
|
+
def config_files
|
16
|
+
%w[redis redis.conf].map { |config| File.join(self.class.etc_prefix, config) }
|
17
|
+
end
|
18
|
+
|
19
|
+
class << self
|
20
|
+
SCL_NAME = 'rh-redis5'.freeze
|
21
|
+
|
22
|
+
def etc_prefix
|
23
|
+
"/etc/opt/rh/#{SCL_NAME}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def scl_prefix
|
27
|
+
"#{SCL_NAME}-"
|
28
|
+
end
|
29
|
+
|
30
|
+
def service_name
|
31
|
+
"#{scl_prefix}redis"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/definitions/features/tar.rb
CHANGED
@@ -20,11 +20,24 @@ class Features::Tar < ForemanMaintain::Feature
|
|
20
20
|
# @option options [Boolean] :gzip filter the archive through gzip
|
21
21
|
# @option options [Boolean] :ignore_failed_read do not fail on missing files
|
22
22
|
# @option options [Boolean] :allow_changing_files do not fail on changing files
|
23
|
+
def run(options = {})
|
24
|
+
logger.debug("Invoking tar from #{options[:directory] || FileUtils.pwd}")
|
25
|
+
statuses = options[:allow_changing_files] ? [0, 1] : [0]
|
26
|
+
execute!(tar_command(options), :valid_exit_statuses => statuses)
|
27
|
+
end
|
28
|
+
|
29
|
+
def validate_volume_size(size)
|
30
|
+
if size.nil? || size !~ /^\d+[bBcGKkMPTw]?$/
|
31
|
+
raise ForemanMaintain::Error::Validation,
|
32
|
+
"Please specify size according to 'tar --tape-length' format."
|
33
|
+
end
|
34
|
+
true
|
35
|
+
end
|
36
|
+
|
23
37
|
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
24
38
|
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
25
|
-
def
|
39
|
+
def tar_command(options)
|
26
40
|
volume_size = options.fetch(:volume_size, nil)
|
27
|
-
absolute_names = options.fetch(:absolute_names, nil)
|
28
41
|
validate_volume_size(volume_size) unless volume_size.nil?
|
29
42
|
|
30
43
|
tar_command = ['tar']
|
@@ -32,10 +45,6 @@ class Features::Tar < ForemanMaintain::Feature
|
|
32
45
|
tar_command << "--#{options.fetch(:command, 'create')}"
|
33
46
|
tar_command << "--file=#{options.fetch(:archive)}"
|
34
47
|
|
35
|
-
if absolute_names
|
36
|
-
tar_command << '--absolute-names'
|
37
|
-
end
|
38
|
-
|
39
48
|
if volume_size
|
40
49
|
split_tar_script = default_split_tar_script
|
41
50
|
tar_command << "--tape-length=#{volume_size}"
|
@@ -66,29 +75,20 @@ class Features::Tar < ForemanMaintain::Feature
|
|
66
75
|
tar_command << options.fetch(:files, '*')
|
67
76
|
end
|
68
77
|
|
69
|
-
|
70
|
-
statuses = options[:allow_changing_files] ? [0, 1] : [0]
|
71
|
-
execute!(tar_command.join(' '), :valid_exit_statuses => statuses)
|
78
|
+
tar_command.join(' ')
|
72
79
|
end
|
73
80
|
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
74
81
|
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
75
82
|
|
76
|
-
def validate_volume_size(size)
|
77
|
-
if size.nil? || size !~ /^\d+[bBcGKkMPTw]?$/
|
78
|
-
raise ForemanMaintain::Error::Validation,
|
79
|
-
"Please specify size according to 'tar --tape-length' format."
|
80
|
-
end
|
81
|
-
true
|
82
|
-
end
|
83
|
-
|
84
83
|
private
|
85
84
|
|
86
85
|
def default_split_tar_script
|
87
|
-
utils_path = File.expand_path('
|
86
|
+
utils_path = File.expand_path('../../bin', __dir__)
|
88
87
|
split_tar_script = File.join(utils_path, 'foreman-maintain-rotate-tar')
|
89
88
|
unless File.executable?(split_tar_script)
|
90
89
|
raise ForemanMaintain::Error::Fail, "Script #{split_tar_script} is not executable"
|
91
90
|
end
|
91
|
+
|
92
92
|
split_tar_script
|
93
93
|
end
|
94
94
|
end
|
@@ -1,5 +1,8 @@
|
|
1
1
|
module Procedures::Backup
|
2
2
|
class ConfigFiles < ForemanMaintain::Procedure
|
3
|
+
MAX_RETRIES = 3
|
4
|
+
RETRY_DELAY = 10
|
5
|
+
|
3
6
|
metadata do
|
4
7
|
description 'Backup config files'
|
5
8
|
tags :backup
|
@@ -8,28 +11,39 @@ module Procedures::Backup
|
|
8
11
|
Checks::Backup::CertsTarExist.new
|
9
12
|
end
|
10
13
|
end
|
14
|
+
|
11
15
|
param :backup_dir, 'Directory where to backup to', :required => true
|
12
16
|
param :proxy_features, 'List of proxy features to backup (default: all)',
|
13
17
|
:array => true, :default => ['all']
|
14
18
|
param :ignore_changed_files, 'Should packing tar ignore changed files',
|
15
19
|
:flag => true, :default => false
|
16
|
-
param :online_backup, 'The config files are being prepared for an online backup',
|
17
|
-
:flag => true, :default => false
|
18
20
|
end
|
19
21
|
|
22
|
+
# rubocop:disable Metrics/MethodLength
|
20
23
|
def run
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
logger.debug("Invoking tar from #{FileUtils.pwd}")
|
25
|
+
tar_cmd = tar_command
|
26
|
+
attempt_no = 1
|
27
|
+
loop do
|
28
|
+
runner = nil
|
29
|
+
with_spinner('Collecting config files to backup') do
|
30
|
+
runner = execute_runner(tar_cmd, :valid_exit_statuses => [0, 1])
|
31
|
+
end
|
32
|
+
break if runner.exit_status == 0 || @ignore_changed_files
|
33
|
+
|
34
|
+
puts "WARNING: Attempt #{attempt_no}/#{MAX_RETRIES} to collect all config files failed!"
|
35
|
+
puts 'Some files were modified during creation of the archive.'
|
36
|
+
if attempt_no == MAX_RETRIES
|
37
|
+
raise runner.execution_error
|
38
|
+
else
|
39
|
+
attempt_no += 1
|
40
|
+
FileUtils.rm_rf(tarball_path)
|
41
|
+
puts "Waiting #{RETRY_DELAY} seconds before re-try"
|
42
|
+
sleep(RETRY_DELAY)
|
43
|
+
end
|
31
44
|
end
|
32
45
|
end
|
46
|
+
# rubocop:enable Metrics/MethodLength
|
33
47
|
|
34
48
|
# rubocop:disable Metrics/AbcSize
|
35
49
|
def config_files
|
@@ -41,7 +55,6 @@ module Procedures::Backup
|
|
41
55
|
|
42
56
|
configs += feature.config_files
|
43
57
|
exclude_configs += feature.config_files_to_exclude
|
44
|
-
exclude_configs += feature.config_files_exclude_for_online if @online_backup
|
45
58
|
end
|
46
59
|
|
47
60
|
if feature(:foreman_proxy)
|
@@ -54,5 +67,22 @@ module Procedures::Backup
|
|
54
67
|
[configs, exclude_configs]
|
55
68
|
end
|
56
69
|
# rubocop:enable Metrics/AbcSize
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
def tar_command
|
74
|
+
increments_path = File.join(@backup_dir, '.config.snar')
|
75
|
+
configs, to_exclude = config_files
|
76
|
+
|
77
|
+
feature(:tar).tar_command(
|
78
|
+
:command => 'create', :gzip => true, :archive => tarball_path,
|
79
|
+
:listed_incremental => increments_path, :ignore_failed_read => true,
|
80
|
+
:exclude => to_exclude, :files => configs.join(' ')
|
81
|
+
)
|
82
|
+
end
|
83
|
+
|
84
|
+
def tarball_path
|
85
|
+
@tarball_path ||= File.join(@backup_dir, 'config_files.tar.gz')
|
86
|
+
end
|
57
87
|
end
|
58
88
|
end
|
@@ -8,7 +8,6 @@ module Procedures::Backup
|
|
8
8
|
param :incremental_dir, 'Changes since specified backup only'
|
9
9
|
end
|
10
10
|
|
11
|
-
# rubocop:disable Metrics/MethodLength
|
12
11
|
def run
|
13
12
|
puts "Creating backup folder #{@backup_dir}"
|
14
13
|
|
@@ -23,14 +22,8 @@ module Procedures::Backup
|
|
23
22
|
|
24
23
|
FileUtils.rm(Dir.glob(File.join(@backup_dir, '.*.snar'))) if @preserve_dir
|
25
24
|
if @incremental_dir
|
26
|
-
|
27
|
-
raise "#{@incremental_dir}/*.snar files unavailable. "\
|
28
|
-
'Provide a valid previous backup directory'
|
29
|
-
else
|
30
|
-
FileUtils.cp(snar_files, @backup_dir)
|
31
|
-
end
|
25
|
+
FileUtils.cp(Dir.glob(File.join(@incremental_dir, '.*.snar')), @backup_dir)
|
32
26
|
end
|
33
27
|
end
|
34
|
-
# rubocop:enable Metrics/MethodLength
|
35
28
|
end
|
36
29
|
end
|
@@ -3,7 +3,7 @@ module Procedures::Backup
|
|
3
3
|
metadata do
|
4
4
|
description 'Backup Pulp data'
|
5
5
|
tags :backup
|
6
|
-
for_feature :
|
6
|
+
for_feature :pulp2
|
7
7
|
param :backup_dir, 'Directory where to backup to', :required => true
|
8
8
|
param :tar_volume_size, 'Size of tar volume (indicates splitting)'
|
9
9
|
param :ensure_unchanged, 'Ensure the data did not change during backup'
|
@@ -39,9 +39,9 @@ module Procedures::Backup
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def pulp_dir
|
42
|
-
return feature(:
|
42
|
+
return feature(:pulp2).data_dir if @mount_dir.nil?
|
43
43
|
mount_point = File.join(@mount_dir, 'pulp')
|
44
|
-
dir = feature(:
|
44
|
+
dir = feature(:pulp2).find_marked_directory(mount_point)
|
45
45
|
unless dir
|
46
46
|
raise ForemanMaintain::Error::Fail,
|
47
47
|
"Pulp base directory not found in the mount point (#{mount_point})"
|
@@ -12,7 +12,7 @@ module Procedures::Backup
|
|
12
12
|
backup_lv = get_lv_info(@backup_dir)
|
13
13
|
|
14
14
|
dbs = {}
|
15
|
-
dbs[:pulp] = 'Pulp' if feature(:
|
15
|
+
dbs[:pulp] = 'Pulp' if feature(:pulp2) && !@skip_pulp
|
16
16
|
dbs[:mongo] = 'Mongo' if db_local?(:mongo)
|
17
17
|
dbs[:candlepin_database] = 'Candlepin' if db_local?(:candlepin_database)
|
18
18
|
dbs[:foreman_database] = 'Foreman' if db_local?(:foreman_database)
|
@@ -5,7 +5,7 @@ module Procedures::Backup
|
|
5
5
|
metadata do
|
6
6
|
description 'Create and mount snapshot of Pulp data'
|
7
7
|
tags :backup
|
8
|
-
for_feature :
|
8
|
+
for_feature :pulp2
|
9
9
|
MountBase.common_params(self)
|
10
10
|
param :skip, 'Skip Pulp content during backup'
|
11
11
|
end
|
@@ -13,8 +13,8 @@ module Procedures::Backup
|
|
13
13
|
def run
|
14
14
|
skip if @skip
|
15
15
|
with_spinner('Creating snapshot of Pulp') do |spinner|
|
16
|
-
feature(:
|
17
|
-
lv_info = get_lv_info(feature(:
|
16
|
+
feature(:pulp2).with_marked_directory(feature(:pulp2).data_dir) do
|
17
|
+
lv_info = get_lv_info(feature(:pulp2).data_dir)
|
18
18
|
create_lv_snapshot('pulp-snap', @block_size, lv_info[0])
|
19
19
|
spinner.update("Mounting snapshot of Pulp on #{mount_location('pulp')}")
|
20
20
|
mount_snapshot('pulp', lv_info[1])
|
@@ -5,7 +5,7 @@ module Procedures::Packages
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def run
|
8
|
-
question = "
|
8
|
+
question = "WARNING: This script runs #{feature(:installer).installer_command} " \
|
9
9
|
"after the yum execution \n" \
|
10
10
|
"to ensure the #{feature(:instance).product_name} " \
|
11
11
|
"is in a consistent state.\n" \
|
@@ -14,6 +14,7 @@ module Procedures::Restore
|
|
14
14
|
spinner.update('Restoring configs')
|
15
15
|
clean_conflicting_data
|
16
16
|
restore_configs(backup)
|
17
|
+
reset_qpid_jrnls
|
17
18
|
reload_configs
|
18
19
|
end
|
19
20
|
end
|
@@ -45,5 +46,11 @@ module Procedures::Restore
|
|
45
46
|
# tar is unable to --overwrite dir with symlink
|
46
47
|
execute('rm -rf /usr/share/foreman-proxy/.ssh')
|
47
48
|
end
|
49
|
+
|
50
|
+
def reset_qpid_jrnls
|
51
|
+
# on restore without pulp data qpid fails to start
|
52
|
+
# https://access.redhat.com/solutions/4645231
|
53
|
+
execute('rm -rf /var/lib/qpidd/.qpidd/qls/dat2/__db.00*')
|
54
|
+
end
|
48
55
|
end
|
49
56
|
end
|
@@ -2,7 +2,7 @@ module Procedures::Restore
|
|
2
2
|
class MongoDump < ForemanMaintain::Procedure
|
3
3
|
metadata do
|
4
4
|
description 'Restore mongo dump'
|
5
|
-
for_feature :
|
5
|
+
for_feature :pulp2
|
6
6
|
param :backup_dir,
|
7
7
|
'Path to backup directory',
|
8
8
|
:required => true
|
@@ -10,7 +10,7 @@ module Procedures::Restore
|
|
10
10
|
[Checks::Mongo::DBUp.new, Checks::Mongo::ToolsInstalled.new]
|
11
11
|
end
|
12
12
|
confine do
|
13
|
-
feature(:mongo) && feature(:
|
13
|
+
feature(:mongo) && feature(:pulp2)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -15,7 +15,7 @@ module Procedures
|
|
15
15
|
|
16
16
|
def run_service_action(action, options)
|
17
17
|
action_noun = feature(:service).action_noun(action).capitalize
|
18
|
-
puts "#{action_noun} the following service(s)
|
18
|
+
puts "\n#{action_noun} the following service(s):"
|
19
19
|
services = feature(:service).filtered_services(options)
|
20
20
|
print_services(services)
|
21
21
|
|
@@ -186,8 +186,7 @@ module ForemanMaintain::Scenarios
|
|
186
186
|
# rubocop:enable Metrics/MethodLength
|
187
187
|
|
188
188
|
def add_online_backup_steps
|
189
|
-
add_step_with_context(Procedures::Backup::ConfigFiles, :ignore_changed_files => true
|
190
|
-
:online_backup => true)
|
189
|
+
add_step_with_context(Procedures::Backup::ConfigFiles, :ignore_changed_files => true)
|
191
190
|
add_step_with_context(Procedures::Backup::Pulp, :ensure_unchanged => true)
|
192
191
|
add_steps_with_context(
|
193
192
|
Procedures::Backup::Online::Mongo,
|
@@ -71,11 +71,8 @@ module ForemanMaintain::Scenarios
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def compose
|
74
|
-
|
75
|
-
|
76
|
-
Procedures::Packages::InstallerConfirmation,
|
77
|
-
Procedures::Packages::UnlockVersions
|
78
|
-
)
|
74
|
+
add_step_with_context(Procedures::Packages::InstallerConfirmation)
|
75
|
+
add_step_with_context(Procedures::Packages::UnlockVersions)
|
79
76
|
add_step_with_context(Procedures::Packages::Update, :force => true, :warn_on_errors => true)
|
80
77
|
add_step_with_context(Procedures::Installer::Run,
|
81
78
|
:arguments => '--upgrade --disable-system-checks')
|
@@ -84,8 +81,7 @@ module ForemanMaintain::Scenarios
|
|
84
81
|
|
85
82
|
def set_context_mapping
|
86
83
|
context.map(:packages,
|
87
|
-
Procedures::Packages::Update => :packages
|
88
|
-
Procedures::Packages::UpdateAllConfirmation => :packages)
|
84
|
+
Procedures::Packages::Update => :packages)
|
89
85
|
context.map(:assumeyes,
|
90
86
|
Procedures::Packages::Update => :assumeyes)
|
91
87
|
end
|
@@ -77,7 +77,7 @@ def exclude_hook(conduit):
|
|
77
77
|
else:
|
78
78
|
suffix = ''
|
79
79
|
conduit.info(1, '\n'
|
80
|
-
'WARNING: Excluding %d
|
80
|
+
'WARNING: Excluding %d update%s due to foreman-protector. \n'
|
81
81
|
'Use foreman-maintain packages install/update <package> \n'
|
82
82
|
'to safely install packages without restrictions.\n'
|
83
83
|
'Use foreman-maintain upgrade run for full upgrade.\n'
|