foreman_maintain 0.6.4 → 0.6.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e51a96d2df37cf98881bc81a1b67f33dca283ea34b226f2f434273984e6baa59
4
- data.tar.gz: ad6c47b27ba7e5c2869354c0a60885e8da2158cc3b6feb04df614ccc78c395d5
3
+ metadata.gz: 78da2357707f4caa6c3a4aa295c75a07abfff9370800b51b0f03647b2f3abb7f
4
+ data.tar.gz: 592c818c90870337f4fdc866a29e09e9f9b483f712603d18b84cc5533563d615
5
5
  SHA512:
6
- metadata.gz: ddd22571061620757eaa7d814c34c7c4d06801361ebba1296b5089a345ed61ac91c41fbaa97f643bb8535bf5644d5e96065dccbd66681d6b3516963462f1d940
7
- data.tar.gz: 9f0023b28042b0f5145a7c2b60b91a8194216eeaa5936987cb91504c49a502a9dfd03c21d3d527cc7487a14a7abe2d8513dcc66a7f47454fa9f3bdc61debdb85
6
+ metadata.gz: 64cf4d1dee1a471a0082fb6daf6ec23812b50ecfb7a32620966c790c2bf976d75fb1b86ae14e73fbda169393abea261fba30c07c00fad589c19ea5ea9902584b
7
+ data.tar.gz: 94611d55110abfcb196b9bd758af79352930aa977d36a1deb2c08f412730f596fbfeea19585f03ed671797028e2f7a3e6e4484ecec6e77541c73645260fa1a4c
@@ -14,14 +14,22 @@ module Checks
14
14
  def run
15
15
  items = find_filter_permissions
16
16
  assert(items.empty?,
17
- 'There are user roles with inconsistent filters',
17
+ error_message(items),
18
18
  :next_steps => Procedures::Foreman::FixCorruptedRoles.new)
19
19
  end
20
20
 
21
+ def error_message(items)
22
+ roles = items.map { |item| item['role_name'] }.uniq
23
+ 'There are filters having permissions with multiple resource types. ' \
24
+ 'Roles with such filters are:' \
25
+ "\n#{roles.join("\n")}"
26
+ end
27
+
21
28
  def find_filter_permissions
22
29
  feature(:foreman_database).query(self.class.inconsistent_filter_perms)
23
30
  end
24
31
 
32
+ # rubocop:disable Metrics/MethodLength
25
33
  def self.inconsistent_filter_perms
26
34
  subquery = <<-SQL
27
35
  SELECT filters.id AS filter_id,
@@ -32,14 +40,17 @@ module Checks
32
40
  filterings.id AS filtering_id,
33
41
  permissions.id AS permission_id,
34
42
  permissions.name AS permission_name,
35
- permissions.resource_type
43
+ permissions.resource_type,
44
+ roles.name AS role_name
36
45
  FROM filters INNER JOIN filterings ON filters.id = filterings.filter_id
37
46
  INNER JOIN permissions ON permissions.id = filterings.permission_id
47
+ INNER JOIN roles ON filters.role_id = roles.id
38
48
  SQL
39
49
 
40
50
  <<-SQL
41
51
  SELECT DISTINCT first.filter_id,
42
52
  first.role_id,
53
+ first.role_name,
43
54
  first.filtering_id,
44
55
  first.permission_id,
45
56
  first.permission_name,
@@ -54,6 +65,7 @@ module Checks
54
65
  OR (first.resource_type != second.resource_type))
55
66
  SQL
56
67
  end
68
+ # rubocop:enable Metrics/MethodLength
57
69
  end
58
70
  end
59
71
  end
@@ -6,6 +6,7 @@ module Procedures::Backup
6
6
  preparation_steps { Checks::Foreman::DBUp.new if feature(:foreman_server) }
7
7
  param :backup_dir, 'Directory where to backup to', :required => 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
 
11
12
  def run
@@ -16,6 +17,7 @@ module Procedures::Backup
16
17
  metadata['proxy_features'] = proxy_feature_list(spinner) || []
17
18
  metadata['rpms'] = rpms(spinner)
18
19
  metadata['incremental'] = @incremental_dir || false
20
+ metadata['online'] = @online_backup
19
21
  save_metadata(metadata, spinner)
20
22
  end
21
23
  end
@@ -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
@@ -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
@@ -36,8 +36,10 @@ module ForemanMaintain::Scenarios
36
36
  end
37
37
  restore_mongo_dump(backup)
38
38
  add_steps_with_context(Procedures::Pulp::Migrate,
39
- Procedures::Pulpcore::Migrate,
40
- Procedures::Service::Start,
39
+ Procedures::Pulpcore::Migrate)
40
+
41
+ add_steps_with_context(Procedures::Restore::RegenerateQueues) if backup.online_backup?
42
+ add_steps_with_context(Procedures::Service::Start,
41
43
  Procedures::Service::DaemonReload)
42
44
  end
43
45
  # rubocop:enable Metrics/MethodLength,Metrics/AbcSize
@@ -204,6 +204,10 @@ module ForemanMaintain
204
204
  def incremental?
205
205
  !!metadata.fetch('incremental', false)
206
206
  end
207
+
208
+ def online_backup?
209
+ !!metadata.fetch('online', false)
210
+ end
207
211
  end
208
212
  end
209
213
  end
@@ -1,3 +1,3 @@
1
1
  module ForemanMaintain
2
- VERSION = '0.6.4'.freeze
2
+ VERSION = '0.6.5'.freeze
3
3
  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: 0.6.4
4
+ version: 0.6.5
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: 2020-05-27 00:00:00.000000000 Z
11
+ date: 2020-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clamp
@@ -265,6 +265,7 @@ files:
265
265
  - definitions/procedures/restore/pg_global_objects.rb
266
266
  - definitions/procedures/restore/postgres_owner.rb
267
267
  - definitions/procedures/restore/pulpcore_dump.rb
268
+ - definitions/procedures/restore/regenerate_queues.rb
268
269
  - definitions/procedures/selinux/set_file_security.rb
269
270
  - definitions/procedures/service/base.rb
270
271
  - definitions/procedures/service/daemon_reload.rb