foreman_maintain 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
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