foreman_dlm 2.0.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/Rakefile +4 -2
  4. data/app/controllers/api/v2/dlmlock_events_controller.rb +2 -0
  5. data/app/controllers/api/v2/dlmlocks_controller.rb +14 -11
  6. data/app/controllers/concerns/foreman/controller/parameters/dlmlocks.rb +2 -0
  7. data/app/controllers/concerns/foreman_dlm/find_host_by_client_cert.rb +2 -0
  8. data/app/controllers/concerns/foreman_dlm/find_host_by_ip.rb +2 -0
  9. data/app/controllers/concerns/foreman_dlm/update_checkin_time.rb +2 -0
  10. data/app/controllers/foreman_dlm/application_controller.rb +2 -0
  11. data/app/controllers/foreman_dlm/dlmlocks_controller.rb +4 -10
  12. data/app/helpers/foreman_dlm/dlmlock_helper.rb +2 -0
  13. data/app/jobs/foreman_dlm/refresh_dlmlock_status.rb +2 -0
  14. data/app/models/concerns/foreman_dlm/dlm_facet_host_extensions.rb +2 -0
  15. data/app/models/concerns/foreman_dlm/expirable.rb +2 -0
  16. data/app/models/concerns/foreman_dlm/host_extensions.rb +10 -8
  17. data/app/models/concerns/foreman_dlm/host_monitoring_extensions.rb +3 -1
  18. data/app/models/concerns/foreman_dlm/user_extensions.rb +6 -4
  19. data/app/models/foreman_dlm/dlm_facet.rb +2 -0
  20. data/app/models/foreman_dlm/dlmlock/update.rb +2 -0
  21. data/app/models/foreman_dlm/dlmlock.rb +11 -9
  22. data/app/models/foreman_dlm/dlmlock_event.rb +2 -0
  23. data/app/models/host_status/dlmlock_status.rb +2 -0
  24. data/app/views/api/v2/dlmlock_events/index.json.rabl +2 -0
  25. data/app/views/api/v2/dlmlocks/acquire.json.rabl +2 -0
  26. data/app/views/api/v2/dlmlocks/base.json.rabl +2 -0
  27. data/app/views/api/v2/dlmlocks/create.json.rabl +2 -0
  28. data/app/views/api/v2/dlmlocks/index.json.rabl +2 -0
  29. data/app/views/api/v2/dlmlocks/main.json.rabl +2 -0
  30. data/app/views/api/v2/dlmlocks/release.json.rabl +2 -0
  31. data/app/views/api/v2/dlmlocks/show.json.rabl +2 -0
  32. data/app/views/api/v2/dlmlocks/update.json.rabl +2 -0
  33. data/app/views/api/v2/errors/precondition_failed.json.rabl +2 -0
  34. data/app/views/foreman_dlm/api/v2/dlm_facets/base.json.rabl +2 -0
  35. data/app/views/foreman_dlm/api/v2/dlm_facets/base_with_root.json.rabl +2 -0
  36. data/app/views/foreman_dlm/api/v2/dlm_facets/show.json.rabl +2 -0
  37. data/config/routes.rb +2 -0
  38. data/db/migrate/20170824084100_add_dlmlock.foreman_dlm.rb +2 -0
  39. data/db/migrate/20180627150003_rename_dlmlock_sti_models.rb +2 -0
  40. data/db/migrate/20180704162345_add_dlmlock_events.rb +2 -0
  41. data/db/migrate/20180711090022_add_hosts_fk_to_dlmlocks.rb +2 -0
  42. data/db/migrate/20180711111903_create_dlm_facets.foreman_dlm.rb +2 -0
  43. data/db/migrate/20180713113208_update_permissions_for_scoped_models.rb +2 -0
  44. data/lib/foreman_dlm/engine.rb +20 -18
  45. data/lib/foreman_dlm/version.rb +3 -1
  46. data/lib/foreman_dlm.rb +2 -0
  47. data/lib/tasks/dlmlock_events.rake +2 -0
  48. data/lib/tasks/foreman_dlm_tasks.rake +2 -20
  49. data/locale/gemspec.rb +3 -1
  50. data/test/controllers/api/v2/dlmlocks_controller_test.rb +12 -10
  51. data/test/controllers/api/v2/dlmlocks_dlmlock_events_controller_test.rb +2 -0
  52. data/test/controllers/api/v2/hosts_controller_test.rb +2 -0
  53. data/test/controllers/find_host_by_client_cert_test.rb +5 -3
  54. data/test/controllers/foreman_dlm/dlmlocks_test.rb +2 -0
  55. data/test/controllers/hosts_controller_test.rb +3 -1
  56. data/test/factories/dlm_facets.rb +2 -0
  57. data/test/factories/dlmlock.rb +2 -0
  58. data/test/factories/dlmlock_events.rb +2 -0
  59. data/test/factories/host.rb +2 -0
  60. data/test/integration/foreman_dlm/dlmlocks_test.rb +4 -3
  61. data/test/jobs/refresh_dlmlock_status_test.rb +2 -0
  62. data/test/models/foreman_dlm/dlm_facet_test.rb +2 -0
  63. data/test/models/foreman_dlm/dlmlock_event_test.rb +2 -0
  64. data/test/models/foreman_dlm/dlmlock_test.rb +26 -24
  65. data/test/models/host_managed_test.rb +2 -0
  66. data/test/models/host_monitoring_test.rb +2 -0
  67. data/test/models/host_status/dlmlock_status_test.rb +2 -2
  68. data/test/models/user_test.rb +2 -0
  69. data/test/test_plugin_helper.rb +2 -0
  70. data/test/unit/foreman_dlm/access_permissions_test.rb +18 -0
  71. metadata +12 -35
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46b88d4ab255520440c5a8aeb4222e8ab62e167027ca0a833eaa03bf4ee32885
4
- data.tar.gz: 9b953cde9907b2e7be6282aedbf44fad05d447f13d97e420c62ffd47a3ccf685
3
+ metadata.gz: cbea781adcb410612c6d6fde4e13f116f31f50f393ac518c55cdf8ff0bc0ab22
4
+ data.tar.gz: 201b1a484408da1971ebd7b33285d5738a1a707bd84ec06a04ed05510c85d065
5
5
  SHA512:
6
- metadata.gz: 3f07de80a511db25bbfdc37d01726a611678b8be5c360c1020ad6ff3e69fdac0d269fe2312fbed24770d8ebec21f05148eb5d629ea69e8b6f2298597adfdea1f
7
- data.tar.gz: 9ced134c94780300383e6096e968fdadf1035ac6323f053a0ffcffa8027c660447ce1fd49c830a9d9c103389c7412021e96243fe63e8581fbe743f314b8a605d
6
+ metadata.gz: 961720c5a51b86f720e61f1463bc9b413419be9876d93d36070053d14961db07b9f42f0a82c99c0b917f621296b401da1caf49f123882402e943d8994228f734
7
+ data.tar.gz: c9cab6e1b37b3321ce4d862dc8599f9af2d8b9b5ce911eaa4141f28816364cfed1d29e372cbe5a1583df2876d47681b7c4c66c70c11dc5ef3164611965ccd99b
data/README.md CHANGED
@@ -15,6 +15,7 @@ With this plugin servers can acquire a lock in Foreman to ensure only one server
15
15
  | >= 1.15 | ~> 0.1 |
16
16
  | >= 1.17 | ~> 1.0 |
17
17
  | >= 3.0 | ~> 2.0 |
18
+ | >= 3.9 | ~> 3.0 |
18
19
 
19
20
  ## Installation
20
21
 
data/Rakefile CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env rake
2
+ # frozen_string_literal: true
3
+
2
4
  begin
3
5
  require 'bundler/setup'
4
6
  rescue LoadError
@@ -20,7 +22,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
20
22
  rdoc.rdoc_files.include('lib/**/*.rb')
21
23
  end
22
24
 
23
- APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__)
25
+ APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
24
26
 
25
27
  Bundler::GemHelper.install_tasks
26
28
 
@@ -38,7 +40,7 @@ task default: :test
38
40
  begin
39
41
  require 'rubocop/rake_task'
40
42
  RuboCop::RakeTask.new
41
- rescue => _
43
+ rescue StandardError
42
44
  puts 'Rubocop not loaded.'
43
45
  end
44
46
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Api
2
4
  module V2
3
5
  class DlmlockEventsController < V2::BaseController
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Api
2
4
  module V2
3
5
  class DlmlocksController < V2::BaseController
@@ -37,7 +39,8 @@ module Api
37
39
  error 404, 'Lock could not be found.'
38
40
  param :id, String, :required => true, :desc => N_('Id or name of the DLM lock')
39
41
 
40
- def show; end
42
+ def show
43
+ end
41
44
 
42
45
  api :POST, '/dlmlocks', N_('Create a DLM lock')
43
46
  param_group :dlmlock, :as => :create
@@ -52,7 +55,7 @@ module Api
52
55
  param_group :dlmlock
53
56
 
54
57
  def update
55
- process_response @dlmlock.update_attributes(dlmlocks_params)
58
+ process_response @dlmlock.update(dlmlocks_params)
56
59
  end
57
60
 
58
61
  api :DELETE, '/dlmlocks/:id/', N_('Delete a DLM lock')
@@ -133,16 +136,16 @@ module Api
133
136
  logger.info 'Denying access because no host could be detected.'
134
137
  if User.current
135
138
  render_error 'access_denied',
136
- :status => :forbidden,
137
- :locals => {
138
- :details => 'You need to authenticate with a valid client cert. The DN has to match a known host.'
139
- }
139
+ :status => :forbidden,
140
+ :locals => {
141
+ :details => 'You need to authenticate with a valid client cert. The DN has to match a known host.',
142
+ }
140
143
  else
141
144
  render_error 'unauthorized',
142
- :status => :unauthorized,
143
- :locals => {
144
- :user_login => get_client_cert_hostname
145
- }
145
+ :status => :unauthorized,
146
+ :locals => {
147
+ :user_login => get_client_cert_hostname,
148
+ }
146
149
  end
147
150
  end
148
151
  true
@@ -163,7 +166,7 @@ module Api
163
166
  deny_access
164
167
  else
165
168
  render_error 'precondition_failed', :status => :precondition_failed, :locals => {
166
- :message => 'Precondition failed. Lock is in invalid state for this operation.'
169
+ :message => 'Precondition failed. Lock is in invalid state for this operation.',
167
170
  }
168
171
  end
169
172
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Foreman::Controller::Parameters::Dlmlocks
2
4
  extend ActiveSupport::Concern
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  module FindHostByClientCert
3
5
  extend ActiveSupport::Concern
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  module FindHostByIp
3
5
  extend ActiveSupport::Concern
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  module UpdateCheckinTime
3
5
  extend ActiveSupport::Concern
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  class ApplicationController < ::ApplicationController
3
5
  def resource_class
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  class DlmlocksController < ::ForemanDlm::ApplicationController
3
5
  include ::Foreman::Controller::AutoCompleteSearch
@@ -9,7 +11,8 @@ module ForemanDlm
9
11
  @dlmlocks = resource_base_search_and_page(:host)
10
12
  end
11
13
 
12
- def show; end
14
+ def show
15
+ end
13
16
 
14
17
  def destroy
15
18
  if @dlmlock.destroy
@@ -59,15 +62,6 @@ module ForemanDlm
59
62
  ForemanDlm::Dlmlock
60
63
  end
61
64
 
62
- # see https://projects.theforeman.org/issues/25976
63
- # can be removed for Foreman 1.22+
64
- def auto_complete_controller_name
65
- current_version = Gem::Version.new(Foreman::Version.new.notag)
66
- return '/foreman_dlm/dlmlocks' if current_version >= Gem::Version.new('1.20') && current_version < Gem::Version.new('1.22')
67
-
68
- controller_name
69
- end
70
-
71
65
  private
72
66
 
73
67
  def action_permission
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  module DlmlockHelper
3
5
  def dlmlock_status_icon_class(lock)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  class RefreshDlmlockStatus < ApplicationJob
3
5
  queue_as :refresh_dlmlock_status_queue
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  module DlmFacetHostExtensions
3
5
  extend ActiveSupport::Concern
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  module Expirable
3
5
  extend ActiveSupport::Concern
@@ -1,19 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  module HostExtensions
3
5
  extend ActiveSupport::Concern
4
6
 
5
7
  included do
6
8
  has_many :dlmlocks,
7
- class_name: 'ForemanDlm::Dlmlock',
8
- foreign_key: 'host_id',
9
- dependent: :nullify,
10
- inverse_of: :host
9
+ class_name: 'ForemanDlm::Dlmlock',
10
+ foreign_key: 'host_id',
11
+ dependent: :nullify,
12
+ inverse_of: :host
11
13
 
12
14
  has_many :dlmlock_events,
13
- class_name: 'ForemanDlm::DlmlockEvent',
14
- foreign_key: 'host_id',
15
- dependent: :destroy,
16
- inverse_of: :host
15
+ class_name: 'ForemanDlm::DlmlockEvent',
16
+ foreign_key: 'host_id',
17
+ dependent: :destroy,
18
+ inverse_of: :host
17
19
 
18
20
  define_model_callbacks :lock, :only => :after
19
21
  define_model_callbacks :unlock, :only => :after
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  module HostMonitoringExtensions
3
5
  extend ActiveSupport::Concern
@@ -31,7 +33,7 @@ module ForemanDlm
31
33
  {
32
34
  comment: _('Host acquired lock.'),
33
35
  start_time: Time.current.to_i,
34
- end_time: Time.current.advance(:minutes => 180).to_i
36
+ end_time: Time.current.advance(:minutes => 180).to_i,
35
37
  }
36
38
  end
37
39
  end
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  module UserExtensions
3
5
  extend ActiveSupport::Concern
4
6
 
5
7
  included do
6
8
  has_many :dlmlock_events,
7
- class_name: 'ForemanDlm::DlmlockEvent',
8
- foreign_key: 'user_id',
9
- dependent: :nullify,
10
- inverse_of: :user
9
+ class_name: 'ForemanDlm::DlmlockEvent',
10
+ foreign_key: 'user_id',
11
+ dependent: :nullify,
12
+ inverse_of: :user
11
13
  end
12
14
  end
13
15
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  class DlmFacet < ApplicationRecord
3
5
  include Facets::Base
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  class Dlmlock
3
5
  class Update < Dlmlock
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  class Dlmlock < ApplicationRecord
3
5
  include Authorizable
@@ -13,9 +15,9 @@ module ForemanDlm
13
15
  belongs_to_host
14
16
 
15
17
  has_many :dlmlock_events,
16
- class_name: '::ForemanDlm::DlmlockEvent',
17
- dependent: :destroy,
18
- inverse_of: :dlmlock
18
+ class_name: '::ForemanDlm::DlmlockEvent',
19
+ dependent: :destroy,
20
+ inverse_of: :dlmlock
19
21
 
20
22
  validates :name, presence: true, uniqueness: true
21
23
 
@@ -67,7 +69,7 @@ module ForemanDlm
67
69
  def locked_by?(host)
68
70
  self.host == host
69
71
  end
70
- alias acquired_by? locked_by?
72
+ alias_method :acquired_by?, :locked_by?
71
73
 
72
74
  def disabled?
73
75
  !enabled?
@@ -76,7 +78,7 @@ module ForemanDlm
76
78
  def locked?
77
79
  host.present?
78
80
  end
79
- alias taken? locked?
81
+ alias_method :taken?, :locked?
80
82
 
81
83
  def humanized_type
82
84
  _('Generic Lock')
@@ -91,7 +93,7 @@ module ForemanDlm
91
93
  query = {
92
94
  id: id,
93
95
  host_id: [new_host.try(:id), old_host.try(:id)],
94
- enabled: true
96
+ enabled: true,
95
97
  }
96
98
 
97
99
  updated = self.class.where(query).update(changes.merge(updated_at: Time.now.utc))
@@ -127,9 +129,9 @@ module ForemanDlm
127
129
  )
128
130
  end
129
131
 
130
- def run_callback(h, callback)
131
- h.run_callbacks callback do
132
- logger.debug { "custom hook after_#{callback} on #{h} will be executed if defined." }
132
+ def run_callback(host, callback)
133
+ host.run_callbacks callback do
134
+ logger.debug { "custom hook after_#{callback} on #{host} will be executed if defined." }
133
135
  true
134
136
  end
135
137
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  class DlmlockEvent < ApplicationRecord
3
5
  include Authorizable
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HostStatus
2
4
  class DlmlockStatus < Status
3
5
  OK = 0
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  collection @events
2
4
  attributes :id, :event_type, :created_at, :updated_at
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  object @dlmlock
2
4
 
3
5
  extends 'api/v2/dlmlocks/main'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  object @dlmlock
2
4
 
3
5
  attributes :id, :host_id, :name, :enabled, :type
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  object @dlmlock
2
4
 
3
5
  extends 'api/v2/dlmlocks/show'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  collection @dlmlocks
2
4
 
3
5
  extends 'api/v2/dlmlocks/main'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  object @dlmlock
2
4
 
3
5
  extends 'api/v2/dlmlocks/base'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  object @dlmlock
2
4
 
3
5
  extends 'api/v2/dlmlocks/main'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  object @dlmlock
2
4
 
3
5
  extends 'api/v2/dlmlocks/main'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  object @dlmlock
2
4
 
3
5
  extends 'api/v2/dlmlocks/show'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  object controller.get_resource
2
4
 
3
5
  attributes :id
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  attributes :id, :last_checkin_at
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  child :dlm_facet => :dlm_facet_attributes do |_dlm_facet|
2
4
  extends 'foreman_dlm/api/v2/dlm_facets/base'
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  child :dlm_facet => :dlm_facet_attributes do
2
4
  extends 'foreman_dlm/api/v2/dlm_facets/base'
3
5
  end
data/config/routes.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Rails.application.routes.draw do
2
4
  namespace :api, :defaults => { :format => 'json' } do
3
5
  scope '(:apiv)', :module => :v2,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AddDlmlock < ActiveRecord::Migration[4.2]
2
4
  def change
3
5
  create_table :dlmlocks do |t|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class RenameDlmlockStiModels < ActiveRecord::Migration[5.1]
2
4
  def up
3
5
  execute "UPDATE dlmlocks set type='ForemanDlm::Dlmlock::Update' where type='Dlmlock::Update';"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AddDlmlockEvents < ActiveRecord::Migration[5.1]
2
4
  def change
3
5
  create_table :dlmlock_events do |t|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AddHostsFkToDlmlocks < ActiveRecord::Migration[5.1]
2
4
  def change
3
5
  add_foreign_key :dlmlocks, :hosts
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class CreateDlmFacets < ActiveRecord::Migration[5.1]
2
4
  def change
3
5
  create_table :dlm_facets do |t|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class UpdatePermissionsForScopedModels < ActiveRecord::Migration[5.1]
2
4
  class FakePermission < ApplicationRecord
3
5
  self.table_name = 'permissions'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  class Engine < ::Rails::Engine
3
5
  engine_name 'foreman_dlm'
@@ -22,11 +24,11 @@ module ForemanDlm
22
24
  settings do
23
25
  category(:general) do
24
26
  setting('dlm_stale_time',
25
- type: :integer,
26
- default: 4,
27
- description: N_('Number of hours after which locked Distributed Lock is stale'),
28
- full_name: N_('Distributed Lock stale time'),
29
- validate: { numericality: { greater_than: 0 } })
27
+ type: :integer,
28
+ default: 4,
29
+ description: N_('Number of hours after which locked Distributed Lock is stale'),
30
+ full_name: N_('Distributed Lock stale time'),
31
+ validate: { numericality: { greater_than: 0 } })
30
32
  end
31
33
  end
32
34
 
@@ -34,25 +36,25 @@ module ForemanDlm
34
36
  security_block :foreman_dlm do
35
37
  permission :view_dlmlocks, {
36
38
  :'foreman_dlm/dlmlocks' => [:index, :show, :auto_complete_search],
37
- :'api/v2/dlmlocks' => [:index, :show]
39
+ :'api/v2/dlmlocks' => [:index, :show],
38
40
  }, :resource_type => 'ForemanDlm::Dlmlock'
39
41
 
40
42
  permission :create_dlmlocks, {
41
- :'api/v2/dlmlocks' => [:create]
43
+ :'api/v2/dlmlocks' => [:create],
42
44
  }, :resource_type => 'ForemanDlm::Dlmlock'
43
45
 
44
46
  permission :edit_dlmlocks, {
45
47
  :'foreman_dlm/dlmlocks' => [:release, :enable, :disable],
46
- :'api/v2/dlmlocks' => [:update, :acquire, :release]
48
+ :'api/v2/dlmlocks' => [:update, :acquire, :release],
47
49
  }, :resource_type => 'ForemanDlm::Dlmlock'
48
50
 
49
51
  permission :destroy_dlmlocks, {
50
52
  :'foreman_dlm/dlmlocks' => [:destroy],
51
- :'api/v2/dlmlocks' => [:destroy]
53
+ :'api/v2/dlmlocks' => [:destroy],
52
54
  }, :resource_type => 'ForemanDlm::Dlmlock'
53
55
 
54
56
  permission :view_dlmlock_events, {
55
- :'api/v2/dlmlock_events' => [:index]
57
+ :'api/v2/dlmlock_events' => [:index],
56
58
  }, :resource_type => 'ForemanDlm::DlmlockEvent'
57
59
  end
58
60
 
@@ -62,14 +64,14 @@ module ForemanDlm
62
64
  :edit_dlmlocks,
63
65
  :destroy_dlmlocks,
64
66
  :view_dlmlock_events],
65
- 'Role granting full access permissions to distributed locks'
67
+ 'Role granting full access permissions to distributed locks'
66
68
 
67
69
  # add menu entry
68
70
  menu :top_menu, :foreman_dlm_dlmlocks,
69
- url_hash: { controller: :'foreman_dlm/dlmlocks', action: :index },
70
- caption: N_('Distributed Locks'),
71
- parent: :monitor_menu,
72
- after: :audits
71
+ url_hash: { controller: :'foreman_dlm/dlmlocks', action: :index },
72
+ caption: N_('Distributed Locks'),
73
+ parent: :monitor_menu,
74
+ after: :audits
73
75
 
74
76
  # Dlm Facet
75
77
  register_facet(ForemanDlm::DlmFacet, :dlm_facet) do
@@ -81,9 +83,9 @@ module ForemanDlm
81
83
  # extend host show page
82
84
  extend_page('hosts/show') do |context|
83
85
  context.add_pagelet :main_tabs,
84
- :name => N_('Locks'),
85
- :partial => 'hosts/dlmlocks_tab',
86
- :onlyif => proc { |host| host.dlm_facet }
86
+ :name => N_('Locks'),
87
+ :partial => 'hosts/dlmlocks_tab',
88
+ :onlyif => proc { |host| host.dlm_facet }
87
89
  end
88
90
  end
89
91
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
- VERSION = '2.0.0'.freeze
4
+ VERSION = '3.0.0'
3
5
  end
data/lib/foreman_dlm.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'foreman_dlm/engine'
2
4
 
3
5
  module ForemanDlm
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  desc <<-TASK_DESCRIPTION
2
4
  Expire lock events automatically
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake/testtask'
2
4
 
3
5
  # Tests
@@ -12,24 +14,4 @@ namespace :test do
12
14
  end
13
15
  end
14
16
 
15
- namespace :foreman_dlm do
16
- task :rubocop do
17
- begin
18
- require 'rubocop/rake_task'
19
- RuboCop::RakeTask.new(:rubocop_foreman_dlm) do |task|
20
- task.patterns = ["#{ForemanDlm::Engine.root}/app/**/*.rb",
21
- "#{ForemanDlm::Engine.root}/lib/**/*.rb",
22
- "#{ForemanDlm::Engine.root}/test/**/*.rb"]
23
- end
24
- rescue StandardError
25
- puts 'Rubocop not loaded.'
26
- end
27
-
28
- Rake::Task['rubocop_foreman_dlm'].invoke
29
- end
30
- end
31
-
32
17
  Rake::Task[:test].enhance ['test:foreman_dlm']
33
-
34
- load 'tasks/jenkins.rake'
35
- Rake::Task['jenkins:unit'].enhance ['test:foreman_dlm', 'foreman_dlm:rubocop'] if Rake::Task.task_defined?(:'jenkins:unit')
data/locale/gemspec.rb CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Matches foreman_dlm.gemspec
2
- _('TODO: Description of ForemanDlm.')
4
+ _('Adds a Distributed Lock Manager to Foreman. This enables painless system updates for clusters.')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  class Api::V2::DlmlocksControllerTest < ActionController::TestCase
@@ -33,7 +35,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
33
35
  assert dlmlock
34
36
  assert_equal valid_attrs['name'], dlmlock.name
35
37
  assert_equal valid_attrs['type'], dlmlock.type
36
- assert_equal true, dlmlock.enabled
38
+ assert dlmlock.enabled
37
39
  assert_nil dlmlock.host
38
40
  end
39
41
  end
@@ -47,7 +49,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
47
49
  assert_not_empty body
48
50
  assert_equal dlmlock.name, body['name']
49
51
  assert_equal dlmlock.type, body['type']
50
- assert_equal true, body['enabled']
52
+ assert body['enabled']
51
53
  assert_equal host1.id, body['host_id']
52
54
  end
53
55
 
@@ -59,7 +61,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
59
61
  assert_not_empty body
60
62
  assert_equal dlmlock.name, body['name']
61
63
  assert_equal dlmlock.type, body['type']
62
- assert_equal false, body['enabled']
64
+ assert_not body['enabled']
63
65
  assert_nil body['host_id']
64
66
  end
65
67
 
@@ -91,7 +93,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
91
93
  dlmlock.reload
92
94
  assert_equal valid_attrs['name'], dlmlock.name
93
95
  assert_equal valid_attrs['type'], dlmlock.type
94
- assert_equal false, dlmlock.enabled
96
+ assert_not dlmlock.enabled
95
97
  assert_equal host1.id, dlmlock.host_id
96
98
  end
97
99
  end
@@ -181,7 +183,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
181
183
  assert_not_empty body
182
184
  assert_equal dlmlock.name, body['name']
183
185
  assert_equal dlmlock.type, body['type']
184
- assert_equal true, body['enabled']
186
+ assert body['enabled']
185
187
  assert_nil body['host_id']
186
188
  assert_nil body['host']
187
189
  end
@@ -194,12 +196,12 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
194
196
  assert_not_empty body
195
197
  assert_equal dlmlock.name, body['name']
196
198
  assert_equal dlmlock.type, body['type']
197
- assert_equal true, body['enabled']
199
+ assert body['enabled']
198
200
  assert_equal host1.id, body['host_id']
199
201
  host = body['host']
200
202
  assert host
201
203
  assert_equal host1.name, host['name']
202
- assert_equal true, host['self']
204
+ assert host['self']
203
205
  end
204
206
 
205
207
  test 'should show individual acquired lock by other' do
@@ -210,12 +212,12 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
210
212
  assert_not_empty body
211
213
  assert_equal dlmlock.name, body['name']
212
214
  assert_equal dlmlock.type, body['type']
213
- assert_equal true, body['enabled']
215
+ assert body['enabled']
214
216
  assert_equal host2.id, body['host_id']
215
217
  host = body['host']
216
218
  assert host
217
219
  assert_equal host2.name, host['name']
218
- assert_equal false, host['self']
220
+ assert_not host['self']
219
221
  end
220
222
 
221
223
  test 'should update checkin time' do
@@ -378,7 +380,7 @@ class Api::V2::DlmlocksControllerTest < ActionController::TestCase
378
380
  def valid_attrs
379
381
  {
380
382
  'name' => 'testlock',
381
- 'type' => 'ForemanDlm::Dlmlock::Update'
383
+ 'type' => 'ForemanDlm::Dlmlock::Update',
382
384
  }
383
385
  end
384
386
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  class Api::V2::DlmlockEventsControllerTest < ActionController::TestCase
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  class Api::V2::HostsControllerTest < ActionController::TestCase
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  class FindHostByClientCertTest < ActionController::TestCase
@@ -62,7 +64,7 @@ class FindHostByClientCertTest < ActionController::TestCase
62
64
 
63
65
  get :index
64
66
 
65
- assert_equal false, @controller.send(:require_client_cert_or_login)
67
+ assert_not @controller.send(:require_client_cert_or_login)
66
68
  assert_nil @controller.detected_host
67
69
  end
68
70
 
@@ -73,7 +75,7 @@ class FindHostByClientCertTest < ActionController::TestCase
73
75
 
74
76
  get :index
75
77
 
76
- assert_equal false, @controller.send(:require_client_cert_or_login)
78
+ assert_not @controller.send(:require_client_cert_or_login)
77
79
  assert_nil @controller.detected_host
78
80
  end
79
81
 
@@ -83,7 +85,7 @@ class FindHostByClientCertTest < ActionController::TestCase
83
85
 
84
86
  get :index
85
87
 
86
- assert_equal false, @controller.send(:require_client_cert_or_login)
88
+ assert_not @controller.send(:require_client_cert_or_login)
87
89
  assert_nil @controller.detected_host
88
90
  end
89
91
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  module ForemanDlm
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  class HostsControllerTest < ActionController::TestCase
@@ -7,6 +9,6 @@ class HostsControllerTest < ActionController::TestCase
7
9
  FactoryBot.create_list(:dlmlock, 2, host: host)
8
10
  get :show, params: { :id => host.to_param }, session: set_session_user
9
11
  assert_response :success
10
- assert @response.body.match(/id='pagelet-id-locks'/)
12
+ assert_match(/id='pagelet-id-locks'/, @response.body)
11
13
  end
12
14
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  FactoryBot.define do
2
4
  factory :dlm_facet, class: 'ForemanDlm::DlmFacet' do
3
5
  sequence(:last_checkin_at) { |n| n.minutes.ago }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  FactoryBot.define do
2
4
  factory :dlmlock, class: ::ForemanDlm::Dlmlock::Update do
3
5
  sequence(:name) { |n| "Lock #{n}" }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  FactoryBot.define do
2
4
  factory :dlmlock_event, class: ::ForemanDlm::DlmlockEvent do
3
5
  dlmlock
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  FactoryBot.modify do
2
4
  factory :host do
3
5
  trait :with_dlm_facet do
@@ -14,15 +14,16 @@ class DlmlocksTest < IntegrationTestWithJavascript
14
14
  end
15
15
 
16
16
  test 'the search bar has autocomplete' do
17
- skip if Gem::Version.new(Foreman::Version.new.notag) < Gem::Version.new('1.20')
18
17
  FactoryBot.create_list(:dlmlock, 10)
19
18
 
20
19
  visit foreman_dlm_dlmlocks_path
21
20
 
22
- search_bar = page.first('#search-bar')
21
+ search_bar = page.first('.foreman-search-bar')
23
22
  search_bar.first('input').set('ho')
24
23
 
25
- list = search_bar.find_all('a.dropdown-item').map(&:text)
24
+ autocomplete_list = page.first('div[data-ouia-component-id="search-autocomplete-menu"]')
25
+ list = autocomplete_list.find_all('span.pf-c-menu__item-text').map(&:text)
26
+
26
27
  assert_includes list, 'host'
27
28
  end
28
29
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  class RefreshDlmlockStatusTest < ActiveJob::TestCase
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  module ForemanDlm
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  module ForemanDlm
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  module ForemanDlm
@@ -45,10 +47,10 @@ module ForemanDlm
45
47
  let(:dlmlock) { FactoryBot.create(:dlmlock) }
46
48
 
47
49
  test 'should be enabled and unlocked' do
48
- assert_equal true, dlmlock.enabled?
49
- assert_equal false, dlmlock.disabled?
50
- assert_equal false, dlmlock.locked?
51
- assert_equal false, dlmlock.taken?
50
+ assert dlmlock.enabled?
51
+ assert_not dlmlock.disabled?
52
+ assert_not dlmlock.locked?
53
+ assert_not dlmlock.taken?
52
54
  end
53
55
 
54
56
  test 'can be acquired' do
@@ -100,21 +102,21 @@ module ForemanDlm
100
102
  let(:dlmlock) { FactoryBot.create(:dlmlock, :enabled => false) }
101
103
 
102
104
  test 'should be disabled and unlocked' do
103
- assert_equal false, dlmlock.enabled?
104
- assert_equal true, dlmlock.disabled?
105
- assert_equal false, dlmlock.locked?
106
- assert_equal false, dlmlock.taken?
105
+ assert_not dlmlock.enabled?
106
+ assert dlmlock.disabled?
107
+ assert_not dlmlock.locked?
108
+ assert_not dlmlock.taken?
107
109
  end
108
110
 
109
111
  test 'can not be acquired' do
110
112
  assert_nil dlmlock.host
111
- assert_equal false, dlmlock.acquire!(host1)
113
+ assert_not dlmlock.acquire!(host1)
112
114
  assert_nil dlmlock.reload.host
113
115
  end
114
116
 
115
117
  test 'can not be released' do
116
118
  assert_nil dlmlock.host
117
- assert_equal false, dlmlock.release!(host1)
119
+ assert_not dlmlock.release!(host1)
118
120
  assert_nil dlmlock.reload.host
119
121
  end
120
122
 
@@ -122,8 +124,8 @@ module ForemanDlm
122
124
  host = HostWithCallbacks.new
123
125
  host.name = 'test.example.com'
124
126
  host.save
125
- assert_equal false, dlmlock.release!(host)
126
- assert_equal [], host.callbacks
127
+ assert_not dlmlock.release!(host)
128
+ assert_empty host.callbacks
127
129
  end
128
130
  end
129
131
 
@@ -131,12 +133,12 @@ module ForemanDlm
131
133
  let(:dlmlock) { FactoryBot.create(:dlmlock, :host => host1) }
132
134
 
133
135
  test 'should be enabled and locked' do
134
- assert_equal true, dlmlock.enabled?
135
- assert_equal false, dlmlock.disabled?
136
- assert_equal true, dlmlock.locked?
137
- assert_equal true, dlmlock.taken?
138
- assert_equal true, dlmlock.locked_by?(host1)
139
- assert_equal true, dlmlock.acquired_by?(host1)
136
+ assert dlmlock.enabled?
137
+ assert_not dlmlock.disabled?
138
+ assert dlmlock.locked?
139
+ assert dlmlock.taken?
140
+ assert dlmlock.locked_by?(host1)
141
+ assert dlmlock.acquired_by?(host1)
140
142
  end
141
143
 
142
144
  test 'can be acquired by owner' do
@@ -147,7 +149,7 @@ module ForemanDlm
147
149
 
148
150
  test 'can not be acquired by other host' do
149
151
  assert_equal host1, dlmlock.host
150
- assert_equal false, dlmlock.acquire!(host2)
152
+ assert_not dlmlock.acquire!(host2)
151
153
  assert_equal host1, dlmlock.reload.host
152
154
  end
153
155
 
@@ -159,7 +161,7 @@ module ForemanDlm
159
161
 
160
162
  test 'can not be released by other host' do
161
163
  assert_equal host1, dlmlock.host
162
- assert_equal false, dlmlock.release!(host2)
164
+ assert_not dlmlock.release!(host2)
163
165
  assert_equal host1, dlmlock.reload.host
164
166
  end
165
167
 
@@ -196,16 +198,16 @@ module ForemanDlm
196
198
  assert host1_with_callbacks
197
199
  assert host2_with_callbacks
198
200
  dlmlock.update(:host => host1_with_callbacks)
199
- assert_equal false, dlmlock.release!(host2_with_callbacks)
200
- assert_equal [], host1_with_callbacks.callbacks
201
- assert_equal [], host2_with_callbacks.callbacks
201
+ assert_not dlmlock.release!(host2_with_callbacks)
202
+ assert_empty host1_with_callbacks.callbacks
203
+ assert_empty host2_with_callbacks.callbacks
202
204
  end
203
205
 
204
206
  test 'triggers no callbacks on acquiry attempt by owner' do
205
207
  assert host1_with_callbacks
206
208
  dlmlock.update(:host => host1_with_callbacks)
207
209
  assert dlmlock.acquire!(host1_with_callbacks)
208
- assert_equal [], host1_with_callbacks.callbacks
210
+ assert_empty host1_with_callbacks.callbacks
209
211
  end
210
212
  end
211
213
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  module Host
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  class HostMonitoringTest < ActiveSupport::TestCase
@@ -32,14 +32,14 @@ class DlmlockStatusTest < ActiveSupport::TestCase
32
32
  status = host.get_status(HostStatus::DlmlockStatus)
33
33
 
34
34
  assert_not_empty host.dlmlocks
35
- assert_equal true, status.relevant?
35
+ assert status.relevant?
36
36
  end
37
37
 
38
38
  test 'should return false if host has no dlmlocks' do
39
39
  status = host.get_status(HostStatus::DlmlockStatus)
40
40
 
41
41
  assert_empty host.dlmlocks
42
- assert_equal false, status.relevant?
42
+ assert_not status.relevant?
43
43
  end
44
44
  end
45
45
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_plugin_helper'
2
4
 
3
5
  class UserTest < ActiveSupport::TestCase
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This calls the main test_helper in Foreman-core
2
4
  require 'test_helper'
3
5
 
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_plugin_helper'
4
+ require 'unit/shared/access_permissions_test_base'
5
+
6
+ # Permissions are added in AccessPermissions with lists of controllers and
7
+ # actions that they enable access to. For non-admin users, we need to test
8
+ # that there are permissions available that cover every controller action, else
9
+ # it can't be delegated and this will lead to parts of the application that
10
+ # aren't functional for non-admin users.
11
+ #
12
+ # In particular, it's important that actions for AJAX requests are added to
13
+ # an appropriate permission so views using those requests function.
14
+ class AccessPermissionsTest < ActiveSupport::TestCase
15
+ include AccessPermissionsTestBase
16
+
17
+ check_routes(ForemanDlm::Engine.routes, [])
18
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_dlm
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Timo Goebel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-02 00:00:00.000000000 Z
11
+ date: 2024-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
@@ -25,47 +25,19 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rubocop
28
+ name: theforeman-rubocop
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.25.0
33
+ version: 0.1.2
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.25.0
41
- - !ruby/object:Gem::Dependency
42
- name: rubocop-performance
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 1.13.0
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 1.13.0
55
- - !ruby/object:Gem::Dependency
56
- name: rubocop-rails
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 2.9.1
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 2.9.1
40
+ version: 0.1.2
69
41
  description: Adds a Distributed Lock Manager to Foreman. This enables painless system
70
42
  updates for clusters.
71
43
  email:
@@ -154,6 +126,7 @@ files:
154
126
  - test/models/host_status/dlmlock_status_test.rb
155
127
  - test/models/user_test.rb
156
128
  - test/test_plugin_helper.rb
129
+ - test/unit/foreman_dlm/access_permissions_test.rb
157
130
  homepage: https://github.com/dm-drogeriemarkt/foreman_dlm
158
131
  licenses:
159
132
  - GPL-3.0
@@ -168,14 +141,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
168
141
  requirements:
169
142
  - - ">="
170
143
  - !ruby/object:Gem::Version
171
- version: '0'
144
+ version: '2.5'
145
+ - - "<"
146
+ - !ruby/object:Gem::Version
147
+ version: '4'
172
148
  required_rubygems_version: !ruby/object:Gem::Requirement
173
149
  requirements:
174
150
  - - ">="
175
151
  - !ruby/object:Gem::Version
176
152
  version: '0'
177
153
  requirements: []
178
- rubygems_version: 3.3.3
154
+ rubygems_version: 3.4.1
179
155
  signing_key:
180
156
  specification_version: 4
181
157
  summary: Distributed Lock Manager for Foreman.
@@ -200,3 +176,4 @@ test_files:
200
176
  - test/models/host_status/dlmlock_status_test.rb
201
177
  - test/models/user_test.rb
202
178
  - test/test_plugin_helper.rb
179
+ - test/unit/foreman_dlm/access_permissions_test.rb