foreman_maintain 0.6.3 → 0.6.8

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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/definitions/checks/check_hotfix_installed.rb +2 -1
  3. data/definitions/checks/disk/performance.rb +9 -2
  4. data/definitions/checks/env_proxy.rb +13 -0
  5. data/definitions/checks/foreman/check_corrupted_roles.rb +14 -2
  6. data/definitions/checks/foreman_proxy/check_tftp_storage.rb +52 -0
  7. data/definitions/checks/repositories/check_non_rh_repository.rb +23 -0
  8. data/definitions/checks/repositories/check_upstream_repository.rb +2 -1
  9. data/definitions/checks/repositories/validate.rb +2 -1
  10. data/definitions/features/apache.rb +19 -0
  11. data/definitions/features/capsule.rb +2 -1
  12. data/definitions/features/dynflow_sidekiq.rb +1 -1
  13. data/definitions/features/foreman_proxy.rb +30 -5
  14. data/definitions/features/foreman_server.rb +10 -4
  15. data/definitions/features/puppet_server.rb +6 -2
  16. data/definitions/features/service.rb +10 -3
  17. data/definitions/procedures/backup/metadata.rb +2 -0
  18. data/definitions/procedures/backup/snapshot/logical_volume_confirmation.rb +1 -1
  19. data/definitions/procedures/content/switchover.rb +2 -1
  20. data/definitions/procedures/hammer_setup.rb +1 -1
  21. data/definitions/procedures/installer/run.rb +3 -1
  22. data/definitions/procedures/installer/upgrade.rb +6 -1
  23. data/definitions/procedures/packages/update.rb +1 -1
  24. data/definitions/procedures/restore/configs.rb +6 -0
  25. data/definitions/procedures/restore/regenerate_queues.rb +69 -0
  26. data/definitions/procedures/service/stop.rb +1 -1
  27. data/definitions/scenarios/backup.rb +1 -0
  28. data/definitions/scenarios/packages.rb +39 -14
  29. data/definitions/scenarios/restore.rb +17 -2
  30. data/definitions/scenarios/upgrade_to_capsule_6_8.rb +5 -1
  31. data/definitions/scenarios/upgrade_to_capsule_6_8_z.rb +5 -1
  32. data/definitions/scenarios/upgrade_to_satellite_6_2.rb +5 -1
  33. data/definitions/scenarios/upgrade_to_satellite_6_2_z.rb +5 -1
  34. data/definitions/scenarios/upgrade_to_satellite_6_3.rb +5 -1
  35. data/definitions/scenarios/upgrade_to_satellite_6_3_z.rb +5 -1
  36. data/definitions/scenarios/upgrade_to_satellite_6_4.rb +5 -1
  37. data/definitions/scenarios/upgrade_to_satellite_6_4_z.rb +5 -1
  38. data/definitions/scenarios/upgrade_to_satellite_6_5.rb +5 -1
  39. data/definitions/scenarios/upgrade_to_satellite_6_5_z.rb +5 -1
  40. data/definitions/scenarios/upgrade_to_satellite_6_6.rb +5 -1
  41. data/definitions/scenarios/upgrade_to_satellite_6_6_z.rb +5 -1
  42. data/definitions/scenarios/upgrade_to_satellite_6_7.rb +5 -1
  43. data/definitions/scenarios/upgrade_to_satellite_6_7_z.rb +5 -1
  44. data/definitions/scenarios/upgrade_to_satellite_6_8.rb +5 -1
  45. data/definitions/scenarios/upgrade_to_satellite_6_8_z.rb +5 -1
  46. data/lib/foreman_maintain.rb +27 -0
  47. data/lib/foreman_maintain/cli/restore_command.rb +2 -1
  48. data/lib/foreman_maintain/cli/upgrade_command.rb +10 -0
  49. data/lib/foreman_maintain/concerns/downstream.rb +9 -14
  50. data/lib/foreman_maintain/package_manager/dnf.rb +11 -5
  51. data/lib/foreman_maintain/package_manager/yum.rb +15 -5
  52. data/lib/foreman_maintain/reporter/cli_reporter.rb +3 -3
  53. data/lib/foreman_maintain/utils/backup.rb +4 -0
  54. data/lib/foreman_maintain/utils/facter.rb +1 -1
  55. data/lib/foreman_maintain/utils/service/abstract.rb +6 -0
  56. data/lib/foreman_maintain/version.rb +1 -1
  57. metadata +7 -6
  58. data/definitions/checks/check_epel_repository.rb +0 -21
  59. data/definitions/procedures/restore/regenerate_missing_queues.rb +0 -52
  60. data/definitions/scenarios/upgrade_to_capsule_6_7.rb +0 -84
  61. data/definitions/scenarios/upgrade_to_capsule_6_7_z.rb +0 -84
@@ -2,10 +2,12 @@ module Procedures::Installer
2
2
  class Run < ForemanMaintain::Procedure
3
3
  metadata do
4
4
  param :arguments, 'Arguments passed to installer'
5
+ param :assumeyes, 'Do not ask for confirmation'
5
6
  end
6
7
 
7
8
  def run
8
- feature(:installer).run(@arguments, :interactive => true)
9
+ assumeyes_val = @assumeyes.nil? ? assumeyes? : @assumeyes
10
+ feature(:installer).run(@arguments, :interactive => !assumeyes_val)
9
11
  end
10
12
 
11
13
  def description
@@ -1,7 +1,12 @@
1
1
  module Procedures::Installer
2
2
  class Upgrade < ForemanMaintain::Procedure
3
+ metadata do
4
+ param :assumeyes, 'Do not ask for confirmation'
5
+ end
6
+
3
7
  def run
4
- feature(:installer).upgrade(:interactive => true)
8
+ assumeyes_val = @assumeyes.nil? ? assumeyes? : @assumeyes
9
+ feature(:installer).run(@arguments, :interactive => !assumeyes_val)
5
10
  end
6
11
  end
7
12
  end
@@ -10,7 +10,7 @@ module Procedures::Packages
10
10
 
11
11
  def run
12
12
  assumeyes_val = @assumeyes.nil? ? assumeyes? : @assumeyes
13
- package_manager.clean_cache
13
+ package_manager.clean_cache(:assumeyes => assumeyes_val)
14
14
  packages_action(:update, @packages, :assumeyes => assumeyes_val)
15
15
  rescue ForemanMaintain::Error::ExecutionError => e
16
16
  if @warn_on_errors
@@ -19,10 +19,15 @@ module Procedures::Restore
19
19
  end
20
20
  end
21
21
 
22
+ # rubocop:disable Metrics/MethodLength
22
23
  def restore_configs(backup)
23
24
  exclude = ForemanMaintain.available_features.each_with_object([]) do |feat, cfgs|
25
+ if backup.online_backup?
26
+ feat.config_files_exclude_for_online.each { |f| cfgs << f.gsub(%r{^/}, '') }
27
+ end
24
28
  feat.config_files_to_exclude.each { |f| cfgs << f.gsub(%r{^/}, '') }
25
29
  end
30
+
26
31
  tar_options = {
27
32
  :overwrite => true,
28
33
  :listed_incremental => '/dev/null',
@@ -35,6 +40,7 @@ module Procedures::Restore
35
40
 
36
41
  feature(:tar).run(tar_options)
37
42
  end
43
+ # rubocop:enable Metrics/MethodLength
38
44
 
39
45
  def reload_configs
40
46
  feature(:mongo).reload_db_config if feature(:mongo)
@@ -0,0 +1,69 @@
1
+ module Procedures::Restore
2
+ class RegenerateQueues < ForemanMaintain::Procedure
3
+ metadata do
4
+ advanced_run false
5
+ description 'Regenerate required activemq and qpidd queues while restoring online backup'
6
+ confine do
7
+ feature(:pulp2)
8
+ end
9
+ end
10
+
11
+ def qpid_router_broker_port
12
+ @qpid_router_broker_port ||= feature(:installer).
13
+ answers['foreman_proxy_content']['qpid_router_broker_port']
14
+ end
15
+
16
+ def qpid_configs
17
+ @qpid_configs ||= {
18
+ 'ssl_cert' => "/etc/pki/katello/certs/#{hostname}-qpid-broker.crt",
19
+ 'ssl_key' => "/etc/pki/katello/private/#{hostname}-qpid-broker.key",
20
+ 'amqps_url' => "amqps://localhost:#{qpid_router_broker_port}"
21
+ }
22
+ end
23
+
24
+ def katello_events
25
+ %w[compliance.created
26
+ entitlement.created
27
+ entitlement.deleted
28
+ pool.created
29
+ pool.deleted]
30
+ end
31
+
32
+ def run
33
+ with_spinner('Resetting the queues') do |spinner|
34
+ regenerate_activemq_queues(spinner)
35
+ regenerate_qpidd_queues(spinner)
36
+ spinner.update('Queues created successfully')
37
+ end
38
+ end
39
+
40
+ def regenerate_activemq_queues(spinner)
41
+ # The activemq queues(/var/lib/candlepin/activemq-artemis) regenerate on tomcat restart.
42
+ # After stopping the tomcat here, service start is triggered from the restore scenario.
43
+ spinner.update('Stopping tomcat service')
44
+ feature(:candlepin).services.select(&:exist?).first.stop
45
+ spinner.update('Recreating activemq queues')
46
+ execute!('rm -rf /var/lib/candlepin/activemq-artemis/')
47
+ end
48
+
49
+ def run_qpid_command(opts)
50
+ execute!("qpid-config --ssl-certificate #{qpid_configs['ssl_cert']} \\
51
+ --ssl-key #{qpid_configs['ssl_key']} -b #{qpid_configs['amqps_url']} #{opts}")
52
+ end
53
+
54
+ def regenerate_qpidd_queues(spinner)
55
+ feature(:service).handle_services(spinner, 'stop', :only => ['qpidd'])
56
+ execute!('rm -rf /var/lib/qpidd/.qpidd/qls')
57
+ spinner.update('Starting qpidd service')
58
+ feature(:service).handle_services(spinner, 'start', :only => ['qpidd'])
59
+ spinner.update('Service qpidd started, waiting 60 seconds to start it completely')
60
+ sleep 60
61
+ spinner.update('Recreating qpidd queues')
62
+ run_qpid_command('add exchange topic event --durable')
63
+ run_qpid_command('add queue katello_event_queue --durable')
64
+ katello_events.each do |event|
65
+ run_qpid_command("bind event katello_event_queue #{event}")
66
+ end
67
+ end
68
+ end
69
+ end
@@ -8,7 +8,7 @@ module Procedures::Service
8
8
  end
9
9
 
10
10
  def run
11
- run_service_action('stop', common_options)
11
+ run_service_action('stop', common_options.merge(:include_sockets => true))
12
12
  end
13
13
  end
14
14
  end
@@ -210,6 +210,7 @@ module ForemanMaintain::Scenarios
210
210
  Procedures::Backup::Online::ForemanDB,
211
211
  Procedures::Backup::Online::PulpcoreDB
212
212
  )
213
+ add_step_with_context(Procedures::Backup::Metadata, :online_backup => true)
213
214
  end
214
215
 
215
216
  def strategy
@@ -1,5 +1,19 @@
1
1
  module ForemanMaintain::Scenarios
2
2
  module Packages
3
+ def self.skip_installer_run?(packages_list)
4
+ if packages_list.is_a?(String)
5
+ packages_list = packages_list.split(',').map(&:strip)
6
+ end
7
+ packages_list ||= []
8
+
9
+ return false unless packages_list.any? { |p| p.include?('foreman_maintain') }
10
+ return true if packages_list.length == 1
11
+
12
+ fm_pkg = ForemanMaintain.main_package_name
13
+ puts "ERROR: install or update '#{fm_pkg}' package individually."
14
+ exit 1
15
+ end
16
+
3
17
  class Status < ForemanMaintain::Scenario
4
18
  metadata do
5
19
  label :packages_status
@@ -45,12 +59,17 @@ module ForemanMaintain::Scenarios
45
59
  end
46
60
 
47
61
  def compose
48
- add_step_with_context(Procedures::Packages::InstallerConfirmation)
49
- add_step_with_context(Procedures::Packages::UnlockVersions)
50
- add_step_with_context(Procedures::Packages::Install,
51
- :force => true, :warn_on_errors => true)
52
- add_step_with_context(Procedures::Installer::Upgrade)
53
- add_step(Procedures::Packages::LockingStatus)
62
+ if Packages.skip_installer_run?(context.get(:packages))
63
+ add_step_with_context(Procedures::Packages::Install,
64
+ :force => true, :warn_on_errors => true)
65
+ else
66
+ add_step_with_context(Procedures::Packages::InstallerConfirmation)
67
+ add_step_with_context(Procedures::Packages::UnlockVersions)
68
+ add_step_with_context(Procedures::Packages::Install,
69
+ :force => true, :warn_on_errors => true)
70
+ add_step_with_context(Procedures::Installer::Upgrade)
71
+ add_step(Procedures::Packages::LockingStatus)
72
+ end
54
73
  end
55
74
 
56
75
  def set_context_mapping
@@ -70,14 +89,20 @@ module ForemanMaintain::Scenarios
70
89
  end
71
90
 
72
91
  def compose
73
- add_steps_with_context(
74
- Procedures::Packages::UpdateAllConfirmation,
75
- Procedures::Packages::InstallerConfirmation,
76
- Procedures::Packages::UnlockVersions
77
- )
78
- add_step_with_context(Procedures::Packages::Update, :force => true, :warn_on_errors => true)
79
- add_step_with_context(Procedures::Installer::Upgrade)
80
- add_step(Procedures::Packages::LockingStatus)
92
+ if Packages.skip_installer_run?(context.get(:packages))
93
+ add_step_with_context(Procedures::Packages::Update,
94
+ :force => true, :warn_on_errors => true)
95
+ else
96
+ add_steps_with_context(
97
+ Procedures::Packages::UpdateAllConfirmation,
98
+ Procedures::Packages::InstallerConfirmation,
99
+ Procedures::Packages::UnlockVersions
100
+ )
101
+ add_step_with_context(Procedures::Packages::Update,
102
+ :force => true, :warn_on_errors => true)
103
+ add_step_with_context(Procedures::Installer::Upgrade)
104
+ add_step(Procedures::Packages::LockingStatus)
105
+ end
81
106
  end
82
107
 
83
108
  def set_context_mapping
@@ -20,6 +20,7 @@ module ForemanMaintain::Scenarios
20
20
  Checks::Restore::ValidateHostname,
21
21
  Procedures::Selinux::SetFileSecurity,
22
22
  Procedures::Restore::Configs)
23
+ add_step_with_context(Procedures::Crond::Stop) if feature(:cron)
23
24
  unless backup.incremental?
24
25
  add_steps_with_context(Procedures::Restore::EnsureMongoEngineMatches,
25
26
  Procedures::Restore::InstallerReset)
@@ -36,9 +37,12 @@ module ForemanMaintain::Scenarios
36
37
  end
37
38
  restore_mongo_dump(backup)
38
39
  add_steps_with_context(Procedures::Pulp::Migrate,
39
- Procedures::Pulpcore::Migrate,
40
- Procedures::Service::Start,
40
+ Procedures::Pulpcore::Migrate)
41
+
42
+ add_steps_with_context(Procedures::Restore::RegenerateQueues) if backup.online_backup?
43
+ add_steps_with_context(Procedures::Service::Start,
41
44
  Procedures::Service::DaemonReload)
45
+ add_step_with_context(Procedures::Crond::Start) if feature(:cron)
42
46
  end
43
47
  # rubocop:enable Metrics/MethodLength,Metrics/AbcSize
44
48
 
@@ -96,4 +100,15 @@ module ForemanMaintain::Scenarios
96
100
  Procedures::Selinux::SetFileSecurity => :incremental_backup)
97
101
  end
98
102
  end
103
+
104
+ class RestoreRescue < ForemanMaintain::Scenario
105
+ metadata do
106
+ description 'Resuce Restore backup'
107
+ manual_detection
108
+ end
109
+
110
+ def compose
111
+ add_step_with_context(Procedures::Crond::Stop) if feature(:cron)
112
+ end
113
+ end
99
114
  end
@@ -49,11 +49,15 @@ module Scenarios::Capsule_6_8
49
49
  tags :migrations
50
50
  end
51
51
 
52
+ def set_context_mapping
53
+ context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
54
+ end
55
+
52
56
  def compose
53
57
  add_step(Procedures::Repositories::Setup.new(:version => '6.8'))
54
58
  add_step(Procedures::Packages::UnlockVersions.new)
55
59
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
56
- add_step(Procedures::Installer::Upgrade.new)
60
+ add_step_with_context(Procedures::Installer::Upgrade)
57
61
  end
58
62
  end
59
63
 
@@ -49,11 +49,15 @@ module Scenarios::Capsule_6_8_z
49
49
  tags :migrations
50
50
  end
51
51
 
52
+ def set_context_mapping
53
+ context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
54
+ end
55
+
52
56
  def compose
53
57
  add_step(Procedures::Repositories::Setup.new(:version => '6.8'))
54
58
  add_step(Procedures::Packages::UnlockVersions.new)
55
59
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
56
- add_step(Procedures::Installer::Upgrade.new)
60
+ add_step_with_context(Procedures::Installer::Upgrade)
57
61
  end
58
62
  end
59
63
 
@@ -49,11 +49,15 @@ module Scenarios::Satellite_6_2
49
49
  tags :migrations
50
50
  end
51
51
 
52
+ def set_context_mapping
53
+ context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
54
+ end
55
+
52
56
  def compose
53
57
  add_step(Procedures::Repositories::Setup.new(:version => '6.2'))
54
58
  add_step(Procedures::Packages::UnlockVersions.new)
55
59
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
56
- add_step(Procedures::Installer::Upgrade.new)
60
+ add_step_with_context(Procedures::Installer::Upgrade)
57
61
  end
58
62
  end
59
63
 
@@ -49,11 +49,15 @@ module Scenarios::Satellite_6_2_z
49
49
  tags :migrations
50
50
  end
51
51
 
52
+ def set_context_mapping
53
+ context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
54
+ end
55
+
52
56
  def compose
53
57
  add_step(Procedures::Repositories::Setup.new(:version => '6.2'))
54
58
  add_step(Procedures::Packages::UnlockVersions.new)
55
59
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
56
- add_step(Procedures::Installer::Upgrade.new)
60
+ add_step_with_context(Procedures::Installer::Upgrade)
57
61
  end
58
62
  end
59
63
 
@@ -50,11 +50,15 @@ module Scenarios::Satellite_6_3
50
50
  tags :migrations
51
51
  end
52
52
 
53
+ def set_context_mapping
54
+ context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
55
+ end
56
+
53
57
  def compose
54
58
  add_step(Procedures::Repositories::Setup.new(:version => '6.3'))
55
59
  add_step(Procedures::Packages::UnlockVersions.new)
56
60
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
57
- add_step(Procedures::Installer::Upgrade.new)
61
+ add_step_with_context(Procedures::Installer::Upgrade)
58
62
  end
59
63
  end
60
64
 
@@ -49,11 +49,15 @@ module Scenarios::Satellite_6_3_z
49
49
  tags :migrations
50
50
  end
51
51
 
52
+ def set_context_mapping
53
+ context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
54
+ end
55
+
52
56
  def compose
53
57
  add_step(Procedures::Repositories::Setup.new(:version => '6.3'))
54
58
  add_step(Procedures::Packages::UnlockVersions.new)
55
59
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
56
- add_step(Procedures::Installer::Upgrade.new)
60
+ add_step_with_context(Procedures::Installer::Upgrade)
57
61
  end
58
62
  end
59
63
 
@@ -50,11 +50,15 @@ module Scenarios::Satellite_6_4
50
50
  tags :migrations
51
51
  end
52
52
 
53
+ def set_context_mapping
54
+ context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
55
+ end
56
+
53
57
  def compose
54
58
  add_step(Procedures::Repositories::Setup.new(:version => '6.4'))
55
59
  add_step(Procedures::Packages::UnlockVersions.new)
56
60
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
57
- add_step(Procedures::Installer::Upgrade.new)
61
+ add_step_with_context(Procedures::Installer::Upgrade)
58
62
  end
59
63
  end
60
64
 
@@ -49,11 +49,15 @@ module Scenarios::Satellite_6_4_z
49
49
  tags :migrations
50
50
  end
51
51
 
52
+ def set_context_mapping
53
+ context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
54
+ end
55
+
52
56
  def compose
53
57
  add_step(Procedures::Repositories::Setup.new(:version => '6.4'))
54
58
  add_step(Procedures::Packages::UnlockVersions.new)
55
59
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
56
- add_step(Procedures::Installer::Upgrade.new)
60
+ add_step_with_context(Procedures::Installer::Upgrade)
57
61
  end
58
62
  end
59
63
 
@@ -49,11 +49,15 @@ module Scenarios::Satellite_6_5
49
49
  tags :migrations
50
50
  end
51
51
 
52
+ def set_context_mapping
53
+ context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
54
+ end
55
+
52
56
  def compose
53
57
  add_step(Procedures::Repositories::Setup.new(:version => '6.5'))
54
58
  add_step(Procedures::Packages::UnlockVersions.new)
55
59
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
56
- add_step(Procedures::Installer::Upgrade.new)
60
+ add_step_with_context(Procedures::Installer::Upgrade)
57
61
  end
58
62
  end
59
63
 
@@ -49,11 +49,15 @@ module Scenarios::Satellite_6_5_z
49
49
  tags :migrations
50
50
  end
51
51
 
52
+ def set_context_mapping
53
+ context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
54
+ end
55
+
52
56
  def compose
53
57
  add_step(Procedures::Repositories::Setup.new(:version => '6.5'))
54
58
  add_step(Procedures::Packages::UnlockVersions.new)
55
59
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
56
- add_step(Procedures::Installer::Upgrade.new)
60
+ add_step_with_context(Procedures::Installer::Upgrade)
57
61
  end
58
62
  end
59
63
 
@@ -49,11 +49,15 @@ module Scenarios::Satellite_6_6
49
49
  tags :migrations
50
50
  end
51
51
 
52
+ def set_context_mapping
53
+ context.map(:assumeyes, Procedures::Installer::Upgrade => :assumeyes)
54
+ end
55
+
52
56
  def compose
53
57
  add_step(Procedures::Repositories::Setup.new(:version => '6.6'))
54
58
  add_step(Procedures::Packages::UnlockVersions.new)
55
59
  add_step(Procedures::Packages::Update.new(:assumeyes => true))
56
- add_step(Procedures::Installer::Upgrade.new)
60
+ add_step_with_context(Procedures::Installer::Upgrade)
57
61
  end
58
62
  end
59
63