foreman_maintain 1.6.10 → 1.6.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/definitions/checks/backup/incremental_parent_type.rb +36 -0
  3. data/definitions/checks/foreman/check_tuning_requirements.rb +2 -2
  4. data/definitions/checks/system_registration.rb +1 -1
  5. data/definitions/features/capsule.rb +4 -0
  6. data/definitions/features/foreman_database.rb +6 -1
  7. data/definitions/features/satellite.rb +4 -0
  8. data/definitions/procedures/backup/prepare_directory.rb +17 -5
  9. data/definitions/procedures/foreman_tasks/ui_investigate.rb +1 -1
  10. data/definitions/procedures/knowledge_base_article.rb +1 -1
  11. data/definitions/procedures/packages/update_all_confirmation.rb +1 -1
  12. data/definitions/procedures/sync_plans/disable.rb +0 -1
  13. data/definitions/procedures/sync_plans/enable.rb +0 -2
  14. data/definitions/scenarios/backup.rb +6 -2
  15. data/definitions/scenarios/foreman_upgrade.rb +3 -1
  16. data/definitions/scenarios/restore.rb +1 -1
  17. data/definitions/scenarios/satellite_upgrade.rb +68 -23
  18. data/definitions/scenarios/services.rb +5 -5
  19. data/lib/foreman_maintain/cli/upgrade_command.rb +1 -1
  20. data/lib/foreman_maintain/concerns/base_database.rb +1 -1
  21. data/lib/foreman_maintain/concerns/finders.rb +0 -4
  22. data/lib/foreman_maintain/config.rb +5 -0
  23. data/lib/foreman_maintain/core_ext.rb +0 -12
  24. data/lib/foreman_maintain/detector.rb +1 -0
  25. data/lib/foreman_maintain/reporter/cli_reporter.rb +23 -23
  26. data/lib/foreman_maintain/reporter.rb +1 -1
  27. data/lib/foreman_maintain/update_runner.rb +4 -4
  28. data/lib/foreman_maintain/upgrade_runner.rb +7 -7
  29. data/lib/foreman_maintain/utils/backup.rb +7 -0
  30. data/lib/foreman_maintain/utils/service/systemd.rb +1 -5
  31. data/lib/foreman_maintain/version.rb +1 -1
  32. data/lib/foreman_maintain.rb +5 -4
  33. metadata +3 -4
  34. data/definitions/procedures/pulpcore/trim_rpm_changelogs.rb +0 -22
  35. data/definitions/procedures/restore/postgres_owner.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d9b63f8c0c837772d8b3970d21f05e1b1a10a8b4a85784c4aca8cf337668dd1
4
- data.tar.gz: 97034a6b9d3afef56fe2e996d7704e46c4eed61d9f86fc5cf9e9b62ddc425b96
3
+ metadata.gz: 7357cec0fa22b76e7ae0c7d2da85e2cb20f52aeb2ded53e9a2ddf21c56b7a037
4
+ data.tar.gz: 2116a2048dc315a55bb7fb8789e9961f2a4fc91a4afa5b614dd237eb7825da37
5
5
  SHA512:
6
- metadata.gz: cf9b2cf09d804f042cabb04f2215b088776ceee4987fb1aef6be1e09e19207e949b8fc028792729eef29445c8946c3103999bc4f43b07d4509106a1079f49cb0
7
- data.tar.gz: f50fc364c0d8d1bfd1dc14764381cabdcde43483e302571a96cc171b4a9c607fad71251424211ed771ebd17cce80559a396ed0345d2a998d26d3239877988d21
6
+ metadata.gz: 5a14594384dd60070ffde442e87423522ebde81e3f9580ac88c74028bb33a232bbe4bf57e7847d70768c82b375c5067509dfefed5ecc7c79023f66a2c904af11
7
+ data.tar.gz: 07fc2c9e32f3d16171a99839562dd01210190c00de03414859dfb84492401168d2127d84974ac750c7b5aaa47a927bd6ea42cc47237249c908ac56f96749e7d0
@@ -0,0 +1,36 @@
1
+ module Checks::Backup
2
+ class IncrementalParentType < ForemanMaintain::Check
3
+ metadata do
4
+ description 'Check if the incremental backup has the right type'
5
+ tags :backup
6
+ param :incremental_dir, 'Path to existing backup directory'
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
+ manual_detection
10
+ end
11
+
12
+ def run
13
+ return unless @incremental_dir
14
+
15
+ backup = ForemanMaintain::Utils::Backup.new(@incremental_dir)
16
+
17
+ existing_type = backup.backup_type
18
+ new_type = if @online_backup
19
+ ForemanMaintain::Utils::Backup::ONLINE_BACKUP
20
+ else
21
+ ForemanMaintain::Utils::Backup::OFFLINE_BACKUP
22
+ end
23
+ msg = "The existing backup is an #{existing_type} backup, "\
24
+ "but an #{new_type} backup was requested."
25
+ assert(existing_type == new_type, msg)
26
+
27
+ unless @online_backup
28
+ existing_sql = backup.sql_tar_files_exist? ? 'tarball' : 'dump'
29
+ new_sql = @sql_tar ? 'tarball' : 'dump'
30
+ msg = "The existing backup has PostgreSQL as a #{existing_sql}, "\
31
+ "but the new one will have a #{new_sql}."
32
+ assert(existing_sql == new_sql, msg)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -70,8 +70,8 @@ module Checks
70
70
  end
71
71
 
72
72
  def failure_message(tuning_profile)
73
- <<-MESSAGE.strip_heredoc
74
- \nERROR: The installer is configured to use the #{tuning_profile} tuning profile and does not meet the requirements.
73
+ <<~MESSAGE
74
+ \nERROR: The installer is configured to use the #{tuning_profile} tuning profile and does not meet the requirements.
75
75
  MESSAGE
76
76
  end
77
77
  end
@@ -5,7 +5,7 @@ class Checks::SystemRegistration < ForemanMaintain::Check
5
5
  tags :default
6
6
 
7
7
  confine do
8
- file_exists?('/etc/rhsm/rhsm.conf') && feature(:instance).downstream
8
+ feature(:instance).downstream
9
9
  end
10
10
  end
11
11
 
@@ -18,4 +18,8 @@ class Features::Capsule < ForemanMaintain::Feature
18
18
  def package_name
19
19
  'satellite-capsule'
20
20
  end
21
+
22
+ def module_name
23
+ 'satellite-capsule'
24
+ end
21
25
  end
@@ -35,7 +35,12 @@ class Features::ForemanDatabase < ForemanMaintain::Feature
35
35
  private
36
36
 
37
37
  def load_configuration
38
- config = YAML.load(File.read(FOREMAN_DB_CONFIG))
38
+ config = if File.exist?('/etc/foreman/database.yml')
39
+ YAML.load(File.read(FOREMAN_DB_CONFIG))
40
+ else
41
+ { 'production' => {} }
42
+ end
43
+
39
44
  @configuration = config['production']
40
45
  @configuration['host'] ||= 'localhost'
41
46
  @configuration
@@ -22,6 +22,10 @@ class Features::Satellite < ForemanMaintain::Feature
22
22
  'satellite'
23
23
  end
24
24
 
25
+ def module_name
26
+ 'satellite'
27
+ end
28
+
25
29
  private
26
30
 
27
31
  def version_from_source
@@ -6,18 +6,29 @@ 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
9
10
  end
10
11
 
12
+ # rubocop:disable Metrics/MethodLength
11
13
  def run
12
- puts "Creating backup folder #{@backup_dir}"
13
-
14
14
  unless @preserve_dir
15
+ puts "Creating backup folder #{@backup_dir}"
16
+
15
17
  FileUtils.mkdir_p @backup_dir
16
18
  FileUtils.chmod_R 0o770, @backup_dir
17
- end
18
19
 
19
- if feature(:instance).postgresql_local? && !@preserve_dir
20
- FileUtils.chown_R(nil, 'postgres', @backup_dir)
20
+ if feature(:instance).postgresql_local? && @online_backup
21
+ begin
22
+ FileUtils.chown_R(nil, 'postgres', @backup_dir)
23
+ rescue Errno::EPERM
24
+ warn_msg = <<~MSG
25
+ #{@backup_dir} could not be made readable by the 'postgres' user.
26
+ This won't affect the backup procedure, but you have to ensure that
27
+ the 'postgres' user can read the data during restore.
28
+ MSG
29
+ set_status(:warning, warn_msg)
30
+ end
31
+ end
21
32
  end
22
33
 
23
34
  FileUtils.rm(Dir.glob(File.join(@backup_dir, '.*.snar'))) if @preserve_dir
@@ -30,5 +41,6 @@ module Procedures::Backup
30
41
  end
31
42
  end
32
43
  end
44
+ # rubocop:enable Metrics/MethodLength
33
45
  end
34
46
  end
@@ -10,7 +10,7 @@ module Procedures::ForemanTasks
10
10
  attr_reader :search_query
11
11
 
12
12
  def run
13
- ask(<<-MESSAGE.strip_heredoc)
13
+ ask(<<~MESSAGE)
14
14
  Go to https://#{hostname}/foreman_tasks/tasks?search=#{CGI.escape(@search_query.to_s)}
15
15
  press ENTER after the tasks are resolved.
16
16
  MESSAGE
@@ -12,7 +12,7 @@ class Procedures::KnowledgeBaseArticle < ForemanMaintain::Procedure
12
12
  end
13
13
 
14
14
  def run
15
- ask(<<-MESSAGE.strip_heredoc)
15
+ ask(<<~MESSAGE)
16
16
  Go to #{kcs_documents[@doc]}
17
17
  please follow steps from above article to resolve this issue
18
18
  press ENTER once done.
@@ -20,7 +20,7 @@ module Procedures::Packages
20
20
  the recommendations?
21
21
  MSG
22
22
 
23
- answer = ask_decision(question, actions_msg: 'y(yes), q(quit)')
23
+ answer = ask_decision(question.strip, actions_msg: 'y(yes), q(quit)')
24
24
  abort! unless answer == :yes
25
25
  end
26
26
  end
@@ -4,7 +4,6 @@ module Procedures::SyncPlans
4
4
  metadata do
5
5
  for_feature :sync_plans
6
6
  description 'disable active sync plans'
7
- tags :pre_migrations, :maintenance_mode_on
8
7
 
9
8
  confine do
10
9
  feature(:katello)
@@ -4,8 +4,6 @@ module Procedures::SyncPlans
4
4
  metadata do
5
5
  for_feature :sync_plans
6
6
  description 're-enable sync plans'
7
- tags :post_migrations, :maintenance_mode_off
8
- before :disk_io
9
7
 
10
8
  confine do
11
9
  feature(:katello)
@@ -18,9 +18,13 @@ module ForemanMaintain::Scenarios
18
18
 
19
19
  def compose
20
20
  check_valid_strategy
21
+ add_step_with_context(Checks::Backup::IncrementalParentType,
22
+ :online_backup => strategy == :online,
23
+ :sql_tar => feature(:instance).postgresql_local?)
21
24
  safety_confirmation
22
25
  add_step_with_context(Procedures::Backup::AccessibilityConfirmation) if strategy == :offline
23
- add_step_with_context(Procedures::Backup::PrepareDirectory)
26
+ add_step_with_context(Procedures::Backup::PrepareDirectory,
27
+ :online_backup => strategy == :online)
24
28
  add_step_with_context(Procedures::Backup::Metadata, :online_backup => strategy == :online)
25
29
 
26
30
  case strategy
@@ -50,6 +54,7 @@ module ForemanMaintain::Scenarios
50
54
  context.map(:preserve_dir,
51
55
  Procedures::Backup::PrepareDirectory => :preserve_dir)
52
56
  context.map(:incremental_dir,
57
+ Checks::Backup::IncrementalParentType => :incremental_dir,
53
58
  Procedures::Backup::PrepareDirectory => :incremental_dir,
54
59
  Procedures::Backup::Metadata => :incremental_dir)
55
60
  context.map(:proxy_features,
@@ -136,7 +141,6 @@ module ForemanMaintain::Scenarios
136
141
  def compose
137
142
  if strategy == :offline
138
143
  add_step_with_context(Procedures::Service::Start)
139
- add_steps_with_context(find_procedures(:maintenance_mode_off))
140
144
  end
141
145
  add_step_with_context(Procedures::Backup::Clean)
142
146
  end
@@ -1,4 +1,4 @@
1
- module Scenarios::ForemanUpgrade
1
+ module Scenarios::Foreman
2
2
  class Abstract < ForemanMaintain::Scenario
3
3
  def self.upgrade_metadata(&block)
4
4
  metadata do
@@ -38,6 +38,7 @@ module Scenarios::ForemanUpgrade
38
38
  Checks::CheckUpstreamRepository,
39
39
  Checks::Disk::AvailableSpace,
40
40
  Checks::Disk::AvailableSpaceCandlepin, # if candlepin
41
+ Checks::Disk::AvailableSpacePostgresql13,
41
42
  Checks::Foreman::ValidateExternalDbVersion, # if external database
42
43
  Checks::Foreman::CheckCorruptedRoles,
43
44
  Checks::Foreman::CheckDuplicatePermissions,
@@ -50,6 +51,7 @@ module Scenarios::ForemanUpgrade
50
51
  Checks::NonRhPackages,
51
52
  Checks::PackageManager::Dnf::ValidateDnfConfig,
52
53
  Checks::Repositories::CheckNonRhRepository,
54
+ Checks::CheckOrganizationContentAccessMode,
53
55
  Checks::Repositories::Validate
54
56
  )
55
57
  end
@@ -14,7 +14,7 @@ module ForemanMaintain::Scenarios
14
14
  def compose
15
15
  backup = ForemanMaintain::Utils::Backup.new(context.get(:backup_dir))
16
16
 
17
- add_steps(find_checks(:root_user))
17
+ add_step(Checks::RootUser)
18
18
  add_steps_with_context(Checks::Restore::ValidateBackup,
19
19
  Checks::Restore::ValidateHostname,
20
20
  Checks::Restore::ValidateInterfaces,
@@ -4,7 +4,7 @@ module Scenarios::Satellite
4
4
  metadata do
5
5
  tags :upgrade_scenario
6
6
  confine do
7
- (feature(:instance).downstream.current_minor_version == '6.15' || \
7
+ (feature(:instance).downstream&.current_minor_version == '6.15' || \
8
8
  ForemanMaintain.upgrade_in_progress == '6.16')
9
9
  end
10
10
  instance_eval(&block)
@@ -23,14 +23,41 @@ module Scenarios::Satellite
23
23
  run_strategy :fail_slow
24
24
  end
25
25
 
26
+ # rubocop:disable Metrics/MethodLength
26
27
  def compose
27
- add_steps(find_checks(:default))
28
- add_steps(find_checks(:pre_upgrade))
29
- add_step(Checks::CheckIpv6Disable)
30
- add_step(Checks::Disk::AvailableSpacePostgresql13)
31
- add_step(Checks::Repositories::Validate.new(:version => target_version))
32
- add_step(Checks::CheckOrganizationContentAccessMode)
28
+ add_steps(
29
+ Checks::Foreman::FactsNames, # if Foreman database present
30
+ Checks::ForemanProxy::CheckTftpStorage, # if Satellite with foreman-proxy+tftp
31
+ Checks::ForemanProxy::VerifyDhcpConfigSyntax, # if foreman-proxy+dhcp-isc
32
+ Checks::ForemanTasks::NotPaused, # if foreman-tasks present
33
+ Checks::Puppet::VerifyNoEmptyCacertRequests, # if puppetserver
34
+ Checks::ServerPing,
35
+ Checks::ServicesUp,
36
+ Checks::SystemRegistration,
37
+ Checks::CheckHotfixInstalled,
38
+ Checks::CheckTmout,
39
+ Checks::CheckUpstreamRepository,
40
+ Checks::Disk::AvailableSpace,
41
+ Checks::Disk::AvailableSpaceCandlepin, # if candlepin
42
+ Checks::Foreman::ValidateExternalDbVersion, # if external database
43
+ Checks::Foreman::CheckCorruptedRoles,
44
+ Checks::Foreman::CheckDuplicatePermissions,
45
+ Checks::Foreman::TuningRequirements, # if katello present
46
+ Checks::ForemanOpenscap::InvalidReportAssociations, # if foreman-openscap
47
+ Checks::ForemanTasks::Invalid::CheckOld, # if foreman-tasks
48
+ Checks::ForemanTasks::Invalid::CheckPendingState, # if foreman-tasks
49
+ Checks::ForemanTasks::Invalid::CheckPlanningState, # if foreman-tasks
50
+ Checks::ForemanTasks::NotRunning, # if foreman-tasks
51
+ Checks::NonRhPackages,
52
+ Checks::PackageManager::Dnf::ValidateDnfConfig,
53
+ Checks::Repositories::CheckNonRhRepository,
54
+ Checks::CheckIpv6Disable,
55
+ Checks::Disk::AvailableSpacePostgresql13,
56
+ Checks::CheckOrganizationContentAccessMode,
57
+ Checks::Repositories::Validate.new(:version => target_version),
58
+ )
33
59
  end
60
+ # rubocop:enable Metrics/MethodLength
34
61
  end
35
62
 
36
63
  class PreMigrations < Abstract
@@ -40,7 +67,11 @@ module Scenarios::Satellite
40
67
  end
41
68
 
42
69
  def compose
43
- add_steps(find_procedures(:pre_migrations))
70
+ add_steps(
71
+ Procedures::MaintenanceMode::EnableMaintenanceMode,
72
+ Procedures::Crond::Stop,
73
+ Procedures::SyncPlans::Disable,
74
+ )
44
75
  end
45
76
  end
46
77
 
@@ -60,15 +91,17 @@ module Scenarios::Satellite
60
91
  if el8?
61
92
  modules_to_switch = ['postgresql:13']
62
93
  add_step(Procedures::Packages::SwitchModules.new(:module_names => modules_to_switch))
63
- modules_to_enable = ["satellite:#{el_short_name}"]
94
+ modules_to_enable = ["#{feature(:instance).downstream.module_name}:#{el_short_name}"]
64
95
  add_step(Procedures::Packages::EnableModules.new(:module_names => modules_to_enable))
65
96
  end
66
- add_step(Procedures::Packages::Update.new(
67
- :assumeyes => true,
68
- :download_only => true
69
- ))
70
- add_step(Procedures::Service::Stop.new)
71
- add_step(Procedures::Packages::Update.new(:assumeyes => true, :clean_cache => false))
97
+ add_steps(
98
+ Procedures::Packages::Update.new(
99
+ :assumeyes => true,
100
+ :download_only => true
101
+ ),
102
+ Procedures::Service::Stop,
103
+ Procedures::Packages::Update.new(:assumeyes => true, :clean_cache => false),
104
+ )
72
105
  add_step_with_context(Procedures::Installer::Run)
73
106
  add_step(Procedures::Installer::UpgradeRakeTask)
74
107
  end
@@ -81,9 +114,13 @@ module Scenarios::Satellite
81
114
  end
82
115
 
83
116
  def compose
84
- add_step(Procedures::RefreshFeatures)
85
- add_step(Procedures::Service::Start.new)
86
- add_steps(find_procedures(:post_migrations))
117
+ add_steps(
118
+ Procedures::RefreshFeatures,
119
+ Procedures::Service::Start,
120
+ Procedures::Crond::Start,
121
+ Procedures::SyncPlans::Enable,
122
+ Procedures::MaintenanceMode::DisableMaintenanceMode,
123
+ )
87
124
  end
88
125
  end
89
126
 
@@ -95,11 +132,19 @@ module Scenarios::Satellite
95
132
  end
96
133
 
97
134
  def compose
98
- add_steps(find_checks(:default))
99
- add_steps(find_checks(:post_upgrade))
100
- add_step(Procedures::Packages::CheckForReboot)
101
- add_step(Procedures::Pulpcore::ContainerHandleImageMetadata)
102
- add_step(Procedures::Repositories::IndexKatelloRepositoriesContainerMetatdata)
135
+ add_steps(
136
+ Checks::Foreman::FactsNames, # if Foreman database present
137
+ Checks::ForemanProxy::CheckTftpStorage, # if Satellite with foreman-proxy+tftp
138
+ Checks::ForemanProxy::VerifyDhcpConfigSyntax, # if foreman-proxy+dhcp-isc
139
+ Checks::ForemanTasks::NotPaused, # if foreman-tasks present
140
+ Checks::Puppet::VerifyNoEmptyCacertRequests, # if puppetserver
141
+ Checks::ServerPing,
142
+ Checks::ServicesUp,
143
+ Checks::SystemRegistration,
144
+ Procedures::Packages::CheckForReboot,
145
+ Procedures::Pulpcore::ContainerHandleImageMetadata,
146
+ Procedures::Repositories::IndexKatelloRepositoriesContainerMetatdata,
147
+ )
103
148
  end
104
149
  end
105
150
  end
@@ -8,7 +8,7 @@ module ForemanMaintain::Scenarios
8
8
  end
9
9
 
10
10
  def compose
11
- add_steps(find_checks(:root_user))
11
+ add_step(Checks::RootUser)
12
12
  add_steps_with_context(Procedures::Service::Restart)
13
13
  end
14
14
 
@@ -33,7 +33,7 @@ module ForemanMaintain::Scenarios
33
33
  end
34
34
 
35
35
  def compose
36
- add_steps(find_checks(:root_user))
36
+ add_step(Checks::RootUser)
37
37
  add_steps_with_context(Procedures::Service::Stop)
38
38
  end
39
39
 
@@ -55,7 +55,7 @@ module ForemanMaintain::Scenarios
55
55
  end
56
56
 
57
57
  def compose
58
- add_steps(find_checks(:root_user))
58
+ add_step(Checks::RootUser)
59
59
  add_steps_with_context(Procedures::Service::Start)
60
60
  end
61
61
 
@@ -98,7 +98,7 @@ module ForemanMaintain::Scenarios
98
98
  end
99
99
 
100
100
  def compose
101
- add_steps(find_checks(:root_user))
101
+ add_step(Checks::RootUser)
102
102
  add_steps_with_context(Procedures::Service::Enable)
103
103
  end
104
104
 
@@ -120,7 +120,7 @@ module ForemanMaintain::Scenarios
120
120
  end
121
121
 
122
122
  def compose
123
- add_steps(find_checks(:root_user))
123
+ add_step(Checks::RootUser)
124
124
  add_steps_with_context(Procedures::Service::Disable)
125
125
  end
126
126
 
@@ -30,7 +30,7 @@ module ForemanMaintain
30
30
  else
31
31
  '--target-version not specified'
32
32
  end
33
- message = <<-MESSAGE.strip_heredoc
33
+ message = <<~MESSAGE
34
34
  #{message_start}
35
35
  Possible target versions are:
36
36
  MESSAGE
@@ -42,7 +42,7 @@ module ForemanMaintain
42
42
  end
43
43
 
44
44
  def local?(config = configuration)
45
- ['localhost', '127.0.0.1', `hostname`.strip].include? config['host']
45
+ ['localhost', '127.0.0.1', `hostname`.strip].include?(config['host'])
46
46
  end
47
47
 
48
48
  def query(sql, config = configuration)
@@ -13,10 +13,6 @@ module ForemanMaintain
13
13
  ensure_one_object(:check, label)
14
14
  end
15
15
 
16
- def find_checks(conditions)
17
- detector.available_checks(conditions)
18
- end
19
-
20
16
  def procedure(label)
21
17
  ensure_one_object(:procedure, label)
22
18
  end
@@ -25,6 +25,11 @@ module ForemanMaintain
25
25
  @foreman_port = @options.fetch(:foreman_port, 443)
26
26
  end
27
27
 
28
+ def use_color?
29
+ ENV['TERM'] && ENV.fetch('NO_COLOR', '') == '' && \
30
+ system('command -v tput', out: File.open('/dev/null')) && `tput colors`.to_i > 0
31
+ end
32
+
28
33
  private
29
34
 
30
35
  def load_log_configs
@@ -1,17 +1,5 @@
1
1
  module ForemanMaintain
2
2
  module CoreExt
3
- module StripHeredoc
4
- def strip_heredoc
5
- indent = 0
6
- indented_lines = scan(/^[ \t]+(?=\S)/)
7
- unless indented_lines.empty?
8
- indent = indented_lines.min.size
9
- end
10
- gsub(/^[ \t]{#{indent}}/, '')
11
- end
12
- end
13
- String.include StripHeredoc
14
-
15
3
  module ValidateOptions
16
4
  def validate_options!(*valid_keys)
17
5
  valid_keys.flatten!
@@ -24,6 +24,7 @@ module ForemanMaintain
24
24
  @all_features_scanned = false
25
25
  @available_checks = nil
26
26
  @available_scenarios = nil
27
+ @available_procedures = nil
27
28
  @scenarios ||= Scenario.all_sub_classes.select(&:autodetect?)
28
29
  end
29
30
 
@@ -301,17 +301,17 @@ module ForemanMaintain
301
301
  return if scenario.passed? && !scenario.warning?
302
302
 
303
303
  message = []
304
- message << <<-MESSAGE.strip_heredoc
304
+ message << <<~MESSAGE
305
305
  Scenario [#{scenario.description}] failed.
306
306
  MESSAGE
307
307
  recommend = []
308
308
 
309
309
  steps_with_abort = scenario.steps_with_abort(:whitelisted => false)
310
310
  unless steps_with_abort.empty?
311
- message << format(<<-MESSAGE.strip_heredoc, format_steps(steps_with_abort, "\n", 2))
312
- The processing was aborted by user during the following steps:
311
+ message << format(<<~MESSAGE, format_steps(steps_with_abort, "\n", 2))
312
+ The processing was aborted by user during the following steps:
313
313
 
314
- %s
314
+ %s
315
315
  MESSAGE
316
316
  end
317
317
 
@@ -323,28 +323,28 @@ module ForemanMaintain
323
323
 
324
324
  steps_to_whitelist = steps_with_error + steps_with_skipped - not_skippable_steps
325
325
  unless steps_with_error.empty?
326
- message << format(<<-MESSAGE.strip_heredoc, format_steps(steps_with_error, "\n", 2))
327
- The following steps ended up in failing state:
326
+ message << format(<<~MESSAGE, format_steps(steps_with_error, "\n", 2))
327
+ The following steps ended up in failing state:
328
328
 
329
- %s
329
+ %s
330
330
  MESSAGE
331
331
  whitelist_labels = steps_to_whitelist.map(&:label_dashed).join(',')
332
332
  unless whitelist_labels.empty?
333
333
  recommend << if scenario.detector.feature(:instance).downstream
334
- format(<<-MESSAGE.strip_heredoc)
335
- Resolve the failed steps and rerun the command.
334
+ format(<<~MESSAGE)
335
+ Resolve the failed steps and rerun the command.
336
336
 
337
- If the situation persists and, you are unclear what to do next,
338
- contact #{scenario.detector.feature(:instance).project_support_entity}.
337
+ If the situation persists and, you are unclear what to do next,
338
+ contact #{scenario.detector.feature(:instance).project_support_entity}.
339
339
 
340
- In case the failures are false positives, use
341
- --whitelist="#{whitelist_labels}"
340
+ In case the failures are false positives, use
341
+ --whitelist="#{whitelist_labels}"
342
342
  MESSAGE
343
343
  else
344
- format(<<-MESSAGE.strip_heredoc)
345
- Resolve the failed steps and rerun the command.
346
- In case the failures are false positives, use
347
- --whitelist="#{whitelist_labels}"
344
+ format(<<~MESSAGE)
345
+ Resolve the failed steps and rerun the command.
346
+ In case the failures are false positives, use
347
+ --whitelist="#{whitelist_labels}"
348
348
  MESSAGE
349
349
  end
350
350
  end
@@ -352,15 +352,15 @@ module ForemanMaintain
352
352
 
353
353
  steps_with_warning = scenario.steps_with_warning(:whitelisted => false)
354
354
  unless steps_with_warning.empty?
355
- message << format(<<-MESSAGE.strip_heredoc, format_steps(steps_with_warning, "\n", 2))
356
- The following steps ended up in warning state:
355
+ message << format(<<~MESSAGE, format_steps(steps_with_warning, "\n", 2))
356
+ The following steps ended up in warning state:
357
357
 
358
- %s
358
+ %s
359
359
  MESSAGE
360
360
 
361
- recommend << <<-MESSAGE.strip_heredoc
362
- The steps in warning state itself might not mean there is an error,
363
- but it should be reviewed to ensure the behavior is expected
361
+ recommend << <<~MESSAGE
362
+ The steps in warning state itself might not mean there is an error,
363
+ but it should be reviewed to ensure the behavior is expected
364
364
  MESSAGE
365
365
  end
366
366
  puts((message + recommend).join("\n"))
@@ -67,7 +67,7 @@ module ForemanMaintain
67
67
  end
68
68
 
69
69
  until_valid_decision do
70
- filter_decision(ask("#{message}, [#{actions_msg}]"))
70
+ filter_decision(ask("#{message}\n[#{actions_msg}]"))
71
71
  end
72
72
  end
73
73
  # rubocop:enable Metrics/LineLength
@@ -133,10 +133,10 @@ module ForemanMaintain
133
133
  decision = super(scenario)
134
134
  # we have not asked the user already about next steps
135
135
  if decision.nil? && @ask_to_confirm_update
136
- response = reporter.ask_decision(<<-MESSAGE.strip_heredoc.strip)
137
- The pre-update checks indicate that the system is ready for update.
138
- It's recommended to perform a backup at this stage.
139
- Confirm to continue with the modification part of the update
136
+ response = reporter.ask_decision(<<~MESSAGE.strip)
137
+ The pre-update checks indicate that the system is ready for update.
138
+ It's recommended to perform a backup at this stage.
139
+ Confirm to continue with the modification part of the update
140
140
  MESSAGE
141
141
  if [:no, :quit].include?(response)
142
142
  ask_to_quit
@@ -94,7 +94,7 @@ module ForemanMaintain
94
94
  def finish_upgrade
95
95
  @finished = true
96
96
  @reporter.hline
97
- @reporter.puts <<-MESSAGE.strip_heredoc
97
+ @reporter.puts <<~MESSAGE
98
98
  Upgrade finished.
99
99
  MESSAGE
100
100
  end
@@ -136,7 +136,7 @@ module ForemanMaintain
136
136
  def skip_phase(skipped_phase)
137
137
  with_non_empty_scenario(skipped_phase) do |scenario|
138
138
  @reporter.before_scenario_starts(scenario)
139
- @reporter.puts <<-MESSAGE.strip_heredoc
139
+ @reporter.puts <<~MESSAGE
140
140
  Skipping #{skipped_phase} phase as it was already run before.
141
141
  To enforce to run the phase, use `upgrade run --phase #{skipped_phase}`
142
142
  MESSAGE
@@ -164,7 +164,7 @@ module ForemanMaintain
164
164
  end
165
165
  end
166
166
  self.phase = :pre_upgrade_checks # rollback finished
167
- @reporter.puts <<-MESSAGE.strip_heredoc
167
+ @reporter.puts <<~MESSAGE
168
168
  The upgrade failed and system was restored to pre-upgrade state.
169
169
  MESSAGE
170
170
  end
@@ -199,10 +199,10 @@ module ForemanMaintain
199
199
  decision = super(scenario)
200
200
  # we have not asked the user already about next steps
201
201
  if decision.nil? && @ask_to_confirm_upgrade
202
- response = reporter.ask_decision(<<-MESSAGE.strip_heredoc.strip)
203
- The pre-upgrade checks indicate that the system is ready for upgrade.
204
- It's recommended to perform a backup at this stage.
205
- Confirm to continue with the modification part of the upgrade
202
+ response = reporter.ask_decision(<<~MESSAGE.strip)
203
+ The pre-upgrade checks indicate that the system is ready for upgrade.
204
+ It's recommended to perform a backup at this stage.
205
+ Confirm to continue with the modification part of the upgrade
206
206
  MESSAGE
207
207
  if [:no, :quit].include?(response)
208
208
  ask_to_quit
@@ -11,6 +11,9 @@ module ForemanMaintain
11
11
  :foreman_online_files, :foreman_offline_files, :fpc_offline_files,
12
12
  :fpc_online_files
13
13
 
14
+ ONLINE_BACKUP = 'online'.freeze
15
+ OFFLINE_BACKUP = 'offline'.freeze
16
+
14
17
  def initialize(backup_dir)
15
18
  # fpc stands for foreman proxy w/ content
16
19
  @backup_dir = backup_dir
@@ -260,6 +263,10 @@ module ForemanMaintain
260
263
  def different_source_os?
261
264
  source_os_version != "#{os_name} #{os_version}"
262
265
  end
266
+
267
+ def backup_type
268
+ online_backup? ? ONLINE_BACKUP : OFFLINE_BACKUP
269
+ end
263
270
  end
264
271
  end
265
272
  end
@@ -50,11 +50,7 @@ module ForemanMaintain::Utils
50
50
  end
51
51
 
52
52
  def exist?
53
- if @sys.systemd_installed?
54
- ['enabled', 'disabled'].include?(service_enabled_status)
55
- else
56
- File.exist?("/etc/init.d/#{@name}")
57
- end
53
+ ['enabled', 'disabled'].include?(service_enabled_status)
58
54
  end
59
55
 
60
56
  def enabled?
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '1.6.10'.freeze
2
+ VERSION = '1.6.12'.freeze
3
3
  end
@@ -1,7 +1,3 @@
1
- if RUBY_VERSION <= '1.8.7'
2
- require 'rubygems'
3
- end
4
-
5
1
  require 'forwardable'
6
2
  require 'json'
7
3
  require 'logger'
@@ -68,6 +64,7 @@ module ForemanMaintain
68
64
 
69
65
  # using a queue, we can log the messages which are generated before initializing logger
70
66
  self.config = Config.new(options)
67
+ configure_highline
71
68
  load_definitions
72
69
  init_logger
73
70
  update_path
@@ -102,6 +99,10 @@ module ForemanMaintain
102
99
  end
103
100
  end
104
101
 
102
+ def configure_highline
103
+ HighLine.use_color = config.use_color?
104
+ end
105
+
105
106
  def cache
106
107
  ObjectCache.instance
107
108
  end
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.10
4
+ version: 1.6.12
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-06-17 00:00:00.000000000 Z
11
+ date: 2024-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
@@ -158,6 +158,7 @@ files:
158
158
  - config/foreman_maintain.yml.packaging
159
159
  - config/hammer.yml.example
160
160
  - definitions/checks/backup/certs_tar_exist.rb
161
+ - definitions/checks/backup/incremental_parent_type.rb
161
162
  - definitions/checks/candlepin/db_up.rb
162
163
  - definitions/checks/check_hotfix_installed.rb
163
164
  - definitions/checks/check_ipv6_disable.rb
@@ -275,7 +276,6 @@ files:
275
276
  - definitions/procedures/packages/update.rb
276
277
  - definitions/procedures/packages/update_all_confirmation.rb
277
278
  - definitions/procedures/pulpcore/container_handle_image_metadata.rb
278
- - definitions/procedures/pulpcore/trim_rpm_changelogs.rb
279
279
  - definitions/procedures/puppet/delete_empty_ca_cert_request_files.rb
280
280
  - definitions/procedures/puppet/remove_puppet.rb
281
281
  - definitions/procedures/puppet/remove_puppet_data.rb
@@ -293,7 +293,6 @@ files:
293
293
  - definitions/procedures/restore/extract_files.rb
294
294
  - definitions/procedures/restore/foreman_dump.rb
295
295
  - definitions/procedures/restore/installer_reset.rb
296
- - definitions/procedures/restore/postgres_owner.rb
297
296
  - definitions/procedures/restore/pulpcore_dump.rb
298
297
  - definitions/procedures/restore/reindex_databases.rb
299
298
  - definitions/procedures/restore/required_packages.rb
@@ -1,22 +0,0 @@
1
- module Procedures::Pulpcore
2
- class TrimRpmChangelogs < ForemanMaintain::Procedure
3
- include ForemanMaintain::Concerns::SystemService
4
- include ForemanMaintain::Concerns::PulpCommon
5
-
6
- metadata do
7
- description 'Trim RPM changelogs in the pulpcore db'
8
- for_feature :pulpcore
9
- end
10
-
11
- def run
12
- with_spinner('Trimming RPM changelogs in the pulpcore db') do |spinner|
13
- necessary_services = feature(:pulpcore_database).services
14
-
15
- feature(:service).handle_services(spinner, 'start', :only => necessary_services)
16
-
17
- spinner.update('Trimming RPM changelogs')
18
- execute!(pulpcore_manager('rpm-trim-changelogs'))
19
- end
20
- end
21
- end
22
- end
@@ -1,18 +0,0 @@
1
- module Procedures::Restore
2
- class PostgresOwner < ForemanMaintain::Procedure
3
- include ForemanMaintain::Concerns::SystemHelpers
4
- metadata do
5
- description 'Make postgres owner of backup directory'
6
-
7
- param :backup_dir,
8
- 'Path to backup directory',
9
- :required => true
10
- end
11
-
12
- def run
13
- if feature(:instance).foreman_proxy_with_content?
14
- FileUtils.chown(nil, 'postgres', @backup_dir)
15
- end
16
- end
17
- end
18
- end