foreman_maintain 1.6.12 → 1.6.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/definitions/checks/backup/incremental_parent_type.rb +3 -6
- data/definitions/checks/restore/validate_postgresql_dump_permissions.rb +1 -1
- data/definitions/procedures/backup/online/candlepin_db.rb +1 -1
- data/definitions/procedures/backup/online/foreman_db.rb +1 -1
- data/definitions/procedures/backup/online/pulpcore_db.rb +1 -1
- data/definitions/procedures/backup/online/safety_confirmation.rb +4 -7
- data/definitions/procedures/backup/prepare_directory.rb +1 -2
- data/definitions/scenarios/backup.rb +15 -32
- data/definitions/scenarios/update.rb +5 -0
- data/lib/foreman_maintain/cli/backup_command.rb +1 -3
- data/lib/foreman_maintain/version.rb +1 -1
- metadata +2 -5
- data/definitions/procedures/backup/offline/candlepin_db.rb +0 -53
- data/definitions/procedures/backup/offline/foreman_db.rb +0 -73
- data/definitions/procedures/backup/offline/pulpcore_db.rb +0 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e0b033f2189945ae0f5b3a005ee7513d7046f958ffa8bb8693ddc2c95521db1
|
4
|
+
data.tar.gz: 62ca2e1a8404fa3d30309feceafc53d659519f4595ab60cecbde58ad8e69290c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6f47ab3d231627d634fc8ce93d31853de8da33bb84ac02c483077bb71270bb413d90e9f721820237227c2ea6e3bdeb3df2bb610f33c8a9e5cae67e4bd13a73c
|
7
|
+
data.tar.gz: ad2f03840152f21a868b881973267fc48e511c8c48115666b5b5cfc4685c753bb18f27c4a6f476dda624f7ee0c69f57a1702759b7a0c3a5b874034bda04df90b
|
@@ -5,7 +5,6 @@ module Checks::Backup
|
|
5
5
|
tags :backup
|
6
6
|
param :incremental_dir, 'Path to existing backup directory'
|
7
7
|
param :online_backup, 'Select for online backup', :flag => true, :default => false
|
8
|
-
param :sql_tar, 'Will backup include PostgreSQL tarball', :flag => true, :default => false
|
9
8
|
manual_detection
|
10
9
|
end
|
11
10
|
|
@@ -25,11 +24,9 @@ module Checks::Backup
|
|
25
24
|
assert(existing_type == new_type, msg)
|
26
25
|
|
27
26
|
unless @online_backup
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
"but the new one will have a #{new_sql}."
|
32
|
-
assert(existing_sql == new_sql, msg)
|
27
|
+
msg = "The existing backup has PostgreSQL as a tarball, "\
|
28
|
+
"but the new one will have a dump."
|
29
|
+
assert(!backup.sql_tar_files_exist?, msg)
|
33
30
|
end
|
34
31
|
end
|
35
32
|
end
|
@@ -11,7 +11,7 @@ module Checks::Restore
|
|
11
11
|
|
12
12
|
def run
|
13
13
|
backup = ForemanMaintain::Utils::Backup.new(@backup_dir)
|
14
|
-
if feature(:instance).postgresql_local?
|
14
|
+
if feature(:instance).postgresql_local?
|
15
15
|
errors = []
|
16
16
|
[:candlepin_dump, :foreman_dump, :pulpcore_dump].each do |dump|
|
17
17
|
next unless backup.file_map[dump][:present]
|
@@ -2,7 +2,7 @@ module Procedures::Backup
|
|
2
2
|
module Online
|
3
3
|
class CandlepinDB < ForemanMaintain::Procedure
|
4
4
|
metadata do
|
5
|
-
description 'Backup Candlepin database
|
5
|
+
description 'Backup Candlepin database'
|
6
6
|
tags :backup
|
7
7
|
label :backup_online_candlepin_db
|
8
8
|
for_feature :candlepin_database
|
@@ -2,7 +2,7 @@ module Procedures::Backup
|
|
2
2
|
module Online
|
3
3
|
class ForemanDB < ForemanMaintain::Procedure
|
4
4
|
metadata do
|
5
|
-
description 'Backup Foreman database
|
5
|
+
description 'Backup Foreman database'
|
6
6
|
tags :backup
|
7
7
|
label :backup_online_foreman_db
|
8
8
|
for_feature :foreman_database
|
@@ -2,7 +2,7 @@ module Procedures::Backup
|
|
2
2
|
module Online
|
3
3
|
class PulpcoreDB < ForemanMaintain::Procedure
|
4
4
|
metadata do
|
5
|
-
description 'Backup Pulpcore database
|
5
|
+
description 'Backup Pulpcore database'
|
6
6
|
tags :backup
|
7
7
|
label :backup_online_pulpcore_db
|
8
8
|
for_feature :pulpcore_database
|
@@ -4,23 +4,20 @@ module Procedures::Backup
|
|
4
4
|
metadata do
|
5
5
|
description 'Data consistency warning'
|
6
6
|
tags :backup
|
7
|
-
param :include_db_dumps, 'Are database dumps included in backup', :flag => true,
|
8
|
-
:default => false
|
9
7
|
end
|
10
8
|
|
11
9
|
def run
|
12
|
-
answer = ask_decision(warning_message
|
10
|
+
answer = ask_decision(warning_message, actions_msg: 'y(yes), q(quit)')
|
13
11
|
abort! unless answer == :yes
|
14
12
|
end
|
15
13
|
|
16
|
-
def warning_message
|
17
|
-
|
18
|
-
"*** WARNING: The #{substr} is intended for making a copy of the data\n" \
|
14
|
+
def warning_message
|
15
|
+
"*** WARNING: The online backup is intended for making a copy of the data\n" \
|
19
16
|
'*** for debugging purposes only.' \
|
20
17
|
" The backup routine can not ensure 100% consistency while the\n" \
|
21
18
|
"*** backup is taking place as there is a chance there may be data mismatch between\n" \
|
22
19
|
'*** the databases while the services are live.' \
|
23
|
-
" If you wish to utilize the
|
20
|
+
" If you wish to utilize the online backup\n" \
|
24
21
|
'*** for production use you need to ensure that there are' \
|
25
22
|
" no modifications occurring during\n" \
|
26
23
|
"*** your backup run.\n\nDo you want to proceed?"
|
@@ -6,7 +6,6 @@ module Procedures::Backup
|
|
6
6
|
param :backup_dir, 'Directory where to backup to', :required => true
|
7
7
|
param :preserve_dir, 'Directory where to backup to', :flag => true
|
8
8
|
param :incremental_dir, 'Changes since specified backup only'
|
9
|
-
param :online_backup, 'Select for online backup', :flag => true, :default => false
|
10
9
|
end
|
11
10
|
|
12
11
|
# rubocop:disable Metrics/MethodLength
|
@@ -17,7 +16,7 @@ module Procedures::Backup
|
|
17
16
|
FileUtils.mkdir_p @backup_dir
|
18
17
|
FileUtils.chmod_R 0o770, @backup_dir
|
19
18
|
|
20
|
-
if feature(:instance).postgresql_local?
|
19
|
+
if feature(:instance).postgresql_local?
|
21
20
|
begin
|
22
21
|
FileUtils.chown_R(nil, 'postgres', @backup_dir)
|
23
22
|
rescue Errno::EPERM
|
@@ -8,7 +8,6 @@ module ForemanMaintain::Scenarios
|
|
8
8
|
param :strategy, 'Backup strategy. One of [:online, :offline]',
|
9
9
|
:required => true
|
10
10
|
param :backup_dir, 'Directory where to backup to', :required => true
|
11
|
-
param :include_db_dumps, 'Include dumps of local dbs as part of offline'
|
12
11
|
param :preserve_dir, 'Directory where to backup to'
|
13
12
|
param :incremental_dir, 'Changes since specified backup only'
|
14
13
|
param :proxy_features, 'List of proxy features to backup (default: all)', :array => true
|
@@ -19,12 +18,10 @@ module ForemanMaintain::Scenarios
|
|
19
18
|
def compose
|
20
19
|
check_valid_strategy
|
21
20
|
add_step_with_context(Checks::Backup::IncrementalParentType,
|
22
|
-
:online_backup => strategy == :online
|
23
|
-
:sql_tar => feature(:instance).postgresql_local?)
|
21
|
+
:online_backup => strategy == :online)
|
24
22
|
safety_confirmation
|
25
23
|
add_step_with_context(Procedures::Backup::AccessibilityConfirmation) if strategy == :offline
|
26
|
-
add_step_with_context(Procedures::Backup::PrepareDirectory
|
27
|
-
:online_backup => strategy == :online)
|
24
|
+
add_step_with_context(Procedures::Backup::PrepareDirectory)
|
28
25
|
add_step_with_context(Procedures::Backup::Metadata, :online_backup => strategy == :online)
|
29
26
|
|
30
27
|
case strategy
|
@@ -47,10 +44,7 @@ module ForemanMaintain::Scenarios
|
|
47
44
|
Procedures::Backup::Pulp => :backup_dir,
|
48
45
|
Procedures::Backup::Online::CandlepinDB => :backup_dir,
|
49
46
|
Procedures::Backup::Online::ForemanDB => :backup_dir,
|
50
|
-
Procedures::Backup::Online::PulpcoreDB => :backup_dir
|
51
|
-
Procedures::Backup::Offline::CandlepinDB => :backup_dir,
|
52
|
-
Procedures::Backup::Offline::ForemanDB => :backup_dir,
|
53
|
-
Procedures::Backup::Offline::PulpcoreDB => :backup_dir)
|
47
|
+
Procedures::Backup::Online::PulpcoreDB => :backup_dir)
|
54
48
|
context.map(:preserve_dir,
|
55
49
|
Procedures::Backup::PrepareDirectory => :preserve_dir)
|
56
50
|
context.map(:incremental_dir,
|
@@ -63,15 +57,13 @@ module ForemanMaintain::Scenarios
|
|
63
57
|
Procedures::Backup::Pulp => :skip)
|
64
58
|
context.map(:tar_volume_size,
|
65
59
|
Procedures::Backup::Pulp => :tar_volume_size)
|
66
|
-
context.map(:include_db_dumps,
|
67
|
-
Procedures::Backup::Online::SafetyConfirmation => :include_db_dumps)
|
68
60
|
end
|
69
61
|
# rubocop:enable Metrics/MethodLength
|
70
62
|
|
71
63
|
private
|
72
64
|
|
73
65
|
def safety_confirmation
|
74
|
-
if strategy == :online
|
66
|
+
if strategy == :online
|
75
67
|
add_step_with_context(Procedures::Backup::Online::SafetyConfirmation)
|
76
68
|
end
|
77
69
|
end
|
@@ -83,35 +75,30 @@ module ForemanMaintain::Scenarios
|
|
83
75
|
end
|
84
76
|
|
85
77
|
def add_offline_backup_steps
|
86
|
-
include_dumps if include_db_dumps?
|
87
78
|
add_step_with_context(Procedures::ForemanProxy::Features, :load_only => true)
|
88
79
|
add_steps_with_context(
|
89
80
|
Procedures::Service::Stop,
|
90
81
|
Procedures::Backup::ConfigFiles,
|
91
|
-
Procedures::Backup::Pulp
|
92
|
-
Procedures::Backup::Offline::CandlepinDB,
|
93
|
-
Procedures::Backup::Offline::ForemanDB,
|
94
|
-
Procedures::Backup::Offline::PulpcoreDB,
|
95
|
-
Procedures::Service::Start
|
82
|
+
Procedures::Backup::Pulp
|
96
83
|
)
|
97
|
-
end
|
98
84
|
|
99
|
-
|
100
|
-
|
101
|
-
add_step_with_context(Procedures::Backup::Online::CandlepinDB)
|
102
|
-
end
|
103
|
-
if feature(:instance).database_local?(:foreman_database)
|
104
|
-
add_step_with_context(Procedures::Backup::Online::ForemanDB)
|
105
|
-
end
|
106
|
-
if feature(:instance).database_local?(:pulpcore_database)
|
107
|
-
add_step_with_context(Procedures::Backup::Online::PulpcoreDB)
|
85
|
+
if feature(:instance).postgresql_local?
|
86
|
+
add_step(Procedures::Service::Start.new(:only => ['postgresql']))
|
108
87
|
end
|
88
|
+
|
89
|
+
add_database_backup_steps
|
90
|
+
|
91
|
+
add_steps_with_context(Procedures::Service::Start)
|
109
92
|
end
|
110
93
|
|
111
94
|
def add_online_backup_steps
|
112
95
|
add_step_with_context(Procedures::Backup::ConfigFiles, :ignore_changed_files => true,
|
113
96
|
:online_backup => true)
|
114
97
|
add_step_with_context(Procedures::Backup::Pulp, :ensure_unchanged => true)
|
98
|
+
add_database_backup_steps
|
99
|
+
end
|
100
|
+
|
101
|
+
def add_database_backup_steps
|
115
102
|
add_steps_with_context(
|
116
103
|
Procedures::Backup::Online::CandlepinDB,
|
117
104
|
Procedures::Backup::Online::ForemanDB,
|
@@ -122,10 +109,6 @@ module ForemanMaintain::Scenarios
|
|
122
109
|
def strategy
|
123
110
|
context.get(:strategy)
|
124
111
|
end
|
125
|
-
|
126
|
-
def include_db_dumps?
|
127
|
-
!!context.get(:include_db_dumps)
|
128
|
-
end
|
129
112
|
end
|
130
113
|
|
131
114
|
class BackupRescueCleanup < ForemanMaintain::Scenario
|
@@ -119,11 +119,9 @@ module ForemanMaintain
|
|
119
119
|
include BackupCommon
|
120
120
|
interactive_option
|
121
121
|
common_backup_options
|
122
|
-
option '--include-db-dumps', :flag, 'Also dump full database schema before offline backup'
|
123
122
|
|
124
123
|
def execute
|
125
|
-
perform_backup(:offline
|
126
|
-
:include_db_dumps => include_db_dumps?)
|
124
|
+
perform_backup(:offline)
|
127
125
|
end
|
128
126
|
end
|
129
127
|
|
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: 1.6.
|
4
|
+
version: 1.6.14
|
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: 2024-
|
11
|
+
date: 2024-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clamp
|
@@ -235,9 +235,6 @@ files:
|
|
235
235
|
- definitions/procedures/backup/compress_data.rb
|
236
236
|
- definitions/procedures/backup/config_files.rb
|
237
237
|
- definitions/procedures/backup/metadata.rb
|
238
|
-
- definitions/procedures/backup/offline/candlepin_db.rb
|
239
|
-
- definitions/procedures/backup/offline/foreman_db.rb
|
240
|
-
- definitions/procedures/backup/offline/pulpcore_db.rb
|
241
238
|
- definitions/procedures/backup/online/candlepin_db.rb
|
242
239
|
- definitions/procedures/backup/online/foreman_db.rb
|
243
240
|
- definitions/procedures/backup/online/pulpcore_db.rb
|
@@ -1,53 +0,0 @@
|
|
1
|
-
module Procedures::Backup
|
2
|
-
module Offline
|
3
|
-
class CandlepinDB < ForemanMaintain::Procedure
|
4
|
-
metadata do
|
5
|
-
description 'Backup Candlepin DB offline'
|
6
|
-
tags :backup
|
7
|
-
label :backup_offline_candlepin_db
|
8
|
-
for_feature :candlepin_database
|
9
|
-
preparation_steps { Checks::Candlepin::DBUp.new unless feature(:candlepin_database).local? }
|
10
|
-
param :backup_dir, 'Directory where to backup to', :required => true
|
11
|
-
param :tar_volume_size, 'Size of tar volume (indicates splitting)'
|
12
|
-
end
|
13
|
-
|
14
|
-
def run
|
15
|
-
if feature(:candlepin_database).local?
|
16
|
-
if File.exist?(pg_backup_file)
|
17
|
-
puts 'Already done'
|
18
|
-
else
|
19
|
-
local_backup
|
20
|
-
end
|
21
|
-
else
|
22
|
-
puts "Backup of #{pg_data_dir} is not supported for remote databases." \
|
23
|
-
' Doing postgres dump instead...'
|
24
|
-
with_spinner('Getting Candlepin DB dump') do
|
25
|
-
feature(:candlepin_database).dump_db(File.join(@backup_dir, 'candlepin.dump'))
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def local_backup
|
33
|
-
with_spinner("Collecting data from #{pg_data_dir}") do
|
34
|
-
feature(:candlepin_database).backup_local(
|
35
|
-
pg_backup_file,
|
36
|
-
:listed_incremental => File.join(@backup_dir, '.postgres.snar'),
|
37
|
-
:volume_size => @tar_volume_size,
|
38
|
-
:data_dir => pg_data_dir,
|
39
|
-
:restore_dir => feature(:candlepin_database).data_dir
|
40
|
-
)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def pg_backup_file
|
45
|
-
File.join(@backup_dir, 'pgsql_data.tar')
|
46
|
-
end
|
47
|
-
|
48
|
-
def pg_data_dir
|
49
|
-
feature(:candlepin_database).data_dir
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
module Procedures::Backup
|
2
|
-
module Offline
|
3
|
-
class ForemanDB < ForemanMaintain::Procedure
|
4
|
-
metadata do
|
5
|
-
description 'Backup Foreman DB offline'
|
6
|
-
tags :backup
|
7
|
-
label :backup_offline_foreman_db
|
8
|
-
for_feature :foreman_database
|
9
|
-
preparation_steps { Checks::Foreman::DBUp.new unless feature(:foreman_database).local? }
|
10
|
-
param :backup_dir, 'Directory where to backup to', :required => true
|
11
|
-
param :tar_volume_size, 'Size of tar volume (indicates splitting)'
|
12
|
-
end
|
13
|
-
|
14
|
-
def run
|
15
|
-
if feature(:foreman_database).local?
|
16
|
-
if File.exist?(pg_backup_file)
|
17
|
-
puts 'Already done'
|
18
|
-
else
|
19
|
-
local_backup
|
20
|
-
end
|
21
|
-
else
|
22
|
-
puts "Backup of #{pg_data_dirs.join(',')} is not supported for remote databases." \
|
23
|
-
' Doing postgres dump instead...'
|
24
|
-
with_spinner('Getting Foreman DB dump') do
|
25
|
-
feature(:foreman_database).dump_db(File.join(@backup_dir, 'foreman.dump'))
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def local_backup
|
33
|
-
with_spinner("Collecting data from #{pg_data_dirs.join(',')}") do
|
34
|
-
pg_data_dirs.each_with_index do |pg_dir, index|
|
35
|
-
do_backup(pg_dir, (index == 0) ? 'create' : 'append')
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def do_backup(pg_dir, cmd)
|
41
|
-
restore_dir = el? ? feature(:foreman_database).data_dir : pg_dir
|
42
|
-
feature(:foreman_database).backup_local(
|
43
|
-
pg_backup_file,
|
44
|
-
:listed_incremental => File.join(@backup_dir, '.postgres.snar'),
|
45
|
-
:volume_size => @tar_volume_size,
|
46
|
-
:data_dir => pg_dir,
|
47
|
-
:restore_dir => restore_dir,
|
48
|
-
:command => cmd
|
49
|
-
)
|
50
|
-
end
|
51
|
-
|
52
|
-
def pg_backup_file
|
53
|
-
File.join(@backup_dir, 'pgsql_data.tar')
|
54
|
-
end
|
55
|
-
|
56
|
-
def pg_data_dirs
|
57
|
-
el? ? [pg_data_dir_el] : pg_data_dirs_deb
|
58
|
-
end
|
59
|
-
|
60
|
-
def pg_data_dirs_deb
|
61
|
-
# The Debian based OSes support multiple installations of Postgresql
|
62
|
-
# There could be situations where Foreman db is either of these versions
|
63
|
-
# To be sure we backup the system correctly without missing anything
|
64
|
-
# we backup all of the Postgresql dirs
|
65
|
-
feature(:foreman_database).data_dir
|
66
|
-
end
|
67
|
-
|
68
|
-
def pg_data_dir_el
|
69
|
-
feature(:foreman_database).data_dir
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
module Procedures::Backup
|
2
|
-
module Offline
|
3
|
-
class PulpcoreDB < ForemanMaintain::Procedure
|
4
|
-
metadata do
|
5
|
-
description 'Backup Pulpcore DB offline'
|
6
|
-
tags :backup
|
7
|
-
label :backup_offline_pulpcore_db
|
8
|
-
for_feature :pulpcore_database
|
9
|
-
preparation_steps { Checks::Pulpcore::DBUp.new unless feature(:pulpcore_database).local? }
|
10
|
-
param :backup_dir, 'Directory where to backup to', :required => true
|
11
|
-
param :tar_volume_size, 'Size of tar volume (indicates splitting)'
|
12
|
-
end
|
13
|
-
|
14
|
-
def run
|
15
|
-
if feature(:pulpcore_database).local?
|
16
|
-
if File.exist?(pg_backup_file)
|
17
|
-
puts 'Already done'
|
18
|
-
else
|
19
|
-
local_backup
|
20
|
-
end
|
21
|
-
else
|
22
|
-
puts "Backup of #{pg_data_dir} is not supported for remote databases." \
|
23
|
-
' Doing postgres dump instead...'
|
24
|
-
with_spinner('Getting Pulpcore DB dump') do
|
25
|
-
feature(:pulpcore_database).dump_db(File.join(@backup_dir, 'pulpcore.dump'))
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def local_backup
|
33
|
-
with_spinner("Collecting data from #{pg_data_dir}") do
|
34
|
-
feature(:pulpcore_database).backup_local(
|
35
|
-
pg_backup_file,
|
36
|
-
:listed_incremental => File.join(@backup_dir, '.postgres.snar'),
|
37
|
-
:volume_size => @tar_volume_size,
|
38
|
-
:data_dir => pg_data_dir,
|
39
|
-
:restore_dir => feature(:pulpcore_database).data_dir
|
40
|
-
)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def pg_backup_file
|
45
|
-
File.join(@backup_dir, 'pgsql_data.tar')
|
46
|
-
end
|
47
|
-
|
48
|
-
def pg_data_dir
|
49
|
-
feature(:pulpcore_database).data_dir
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|