foreman_dlm 1.1.0 → 3.0.0

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 (76) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -4
  3. data/Rakefile +4 -2
  4. data/app/controllers/api/v2/dlmlock_events_controller.rb +3 -0
  5. data/app/controllers/api/v2/dlmlocks_controller.rb +17 -13
  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 +6 -10
  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 +3 -0
  10. data/app/controllers/foreman_dlm/application_controller.rb +2 -0
  11. data/app/controllers/foreman_dlm/dlmlocks_controller.rb +4 -1
  12. data/app/helpers/foreman_dlm/dlmlock_helper.rb +4 -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 +3 -0
  16. data/app/models/concerns/foreman_dlm/host_extensions.rb +17 -8
  17. data/app/models/concerns/foreman_dlm/host_monitoring_extensions.rb +5 -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 +14 -11
  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/app/views/foreman_dlm/dlmlocks/index.html.erb +1 -1
  38. data/app/views/foreman_dlm/dlmlocks/show.html.erb +1 -1
  39. data/app/views/foreman_dlm/dlmlocks/welcome.html.erb +2 -2
  40. data/app/views/hosts/_dlmlocks_tab.html.erb +3 -3
  41. data/config/routes.rb +2 -0
  42. data/db/migrate/20170824084100_add_dlmlock.foreman_dlm.rb +2 -0
  43. data/db/migrate/20180627150003_rename_dlmlock_sti_models.rb +2 -0
  44. data/db/migrate/20180704162345_add_dlmlock_events.rb +2 -0
  45. data/db/migrate/20180711090022_add_hosts_fk_to_dlmlocks.rb +2 -0
  46. data/db/migrate/20180711111903_create_dlm_facets.foreman_dlm.rb +2 -0
  47. data/db/migrate/20180713113208_update_permissions_for_scoped_models.rb +2 -0
  48. data/lib/foreman_dlm/engine.rb +37 -33
  49. data/lib/foreman_dlm/version.rb +3 -1
  50. data/lib/foreman_dlm.rb +2 -0
  51. data/lib/tasks/dlmlock_events.rake +2 -0
  52. data/lib/tasks/foreman_dlm_tasks.rake +2 -20
  53. data/locale/gemspec.rb +3 -1
  54. data/test/controllers/api/v2/dlmlocks_controller_test.rb +22 -20
  55. data/test/controllers/api/v2/dlmlocks_dlmlock_events_controller_test.rb +2 -0
  56. data/test/controllers/api/v2/hosts_controller_test.rb +2 -0
  57. data/test/controllers/find_host_by_client_cert_test.rb +5 -3
  58. data/test/controllers/foreman_dlm/dlmlocks_test.rb +4 -2
  59. data/test/controllers/hosts_controller_test.rb +3 -1
  60. data/test/factories/dlm_facets.rb +2 -0
  61. data/test/factories/dlmlock.rb +3 -1
  62. data/test/factories/dlmlock_events.rb +3 -1
  63. data/test/factories/host.rb +2 -0
  64. data/test/integration/foreman_dlm/dlmlocks_test.rb +29 -0
  65. data/test/jobs/refresh_dlmlock_status_test.rb +2 -0
  66. data/test/models/foreman_dlm/dlm_facet_test.rb +2 -0
  67. data/test/models/foreman_dlm/dlmlock_event_test.rb +2 -0
  68. data/test/models/foreman_dlm/dlmlock_test.rb +41 -31
  69. data/test/models/host_managed_test.rb +20 -0
  70. data/test/models/host_monitoring_test.rb +2 -0
  71. data/test/models/host_status/dlmlock_status_test.rb +4 -8
  72. data/test/models/user_test.rb +2 -0
  73. data/test/test_plugin_helper.rb +6 -0
  74. data/test/unit/foreman_dlm/access_permissions_test.rb +18 -0
  75. metadata +36 -29
  76. data/app/models/settings/dlm.rb +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5be1f946127eae4cab43fdd6ec4337fc1b3980ed40de368aa895c89f0714c459
4
- data.tar.gz: 3f9df625f01d5c1bc64f36628388a5de2e1a38f84aac3f00be0a36c9b33a75f3
3
+ metadata.gz: cbea781adcb410612c6d6fde4e13f116f31f50f393ac518c55cdf8ff0bc0ab22
4
+ data.tar.gz: 201b1a484408da1971ebd7b33285d5738a1a707bd84ec06a04ed05510c85d065
5
5
  SHA512:
6
- metadata.gz: 752c99cf8b373c6aec85803c3bd8c16104bdb50cee490138da55dcf1e924174f27121308f3a319b9632c97843b2e8f69277fc6900f881a8159b2679d6bdacbbf
7
- data.tar.gz: 9b4d6b7903914234db467d42d44e33dd3d78126a3219a15b221e5a9080e84881e249b64f6fd506440fa3eb509d00e12eb3d5526445ab8bf455a0e7a5d57042e6
6
+ metadata.gz: 961720c5a51b86f720e61f1463bc9b413419be9876d93d36070053d14961db07b9f42f0a82c99c0b917f621296b401da1caf49f123882402e943d8994228f734
7
+ data.tar.gz: c9cab6e1b37b3321ce4d862dc8599f9af2d8b9b5ce911eaa4141f28816364cfed1d29e372cbe5a1583df2876d47681b7c4c66c70c11dc5ef3164611965ccd99b
data/README.md CHANGED
@@ -14,6 +14,8 @@ With this plugin servers can acquire a lock in Foreman to ensure only one server
14
14
  | --------------- | -------------- |
15
15
  | >= 1.15 | ~> 0.1 |
16
16
  | >= 1.17 | ~> 1.0 |
17
+ | >= 3.0 | ~> 2.0 |
18
+ | >= 3.9 | ~> 3.0 |
17
19
 
18
20
  ## Installation
19
21
 
@@ -34,6 +36,7 @@ Use the HTTP method `GET` to show a lock, `PUT` to acquire a lock and `DELETE` t
34
36
  Foreman will respond with the HTTP status code `200 OK` if the action was successful and `412 Precondition Failed` if the lock could not be acquired or release. This may happen, if the lock is taken by another host.
35
37
 
36
38
  To process the HTTP status code in a bash script, you can do something like this:
39
+
37
40
  ```
38
41
  curl --write-out %{http_code} -H 'Content-Type: application/json' -sS -o /dev/null -X PUT --key $(puppet config print hostprivkey) --cert $(puppet config print hostcert) https://foreman.example.com/api/dlmlocks/test/lock
39
42
  ```
@@ -59,17 +62,19 @@ $ brew link curl --force
59
62
  ```
60
63
 
61
64
  After that `curl --version` changes from
65
+
62
66
  ```
63
67
  $ curl --version
64
68
  curl 7.54.0 (x86_64-apple-darwin16.0) libcurl/7.54.0 SecureTransport zlib/1.2.8
65
69
  ```
70
+
66
71
  to
72
+
67
73
  ```
68
74
  $ curl --version
69
75
  curl 7.56.1 (x86_64-apple-darwin16.7.0) libcurl/7.56.1 OpenSSL/1.0.2m zlib/1.2.8
70
76
  ```
71
77
 
72
-
73
78
  ## Contributing
74
79
 
75
80
  Fork and send a Pull Request. Thanks!
@@ -85,9 +90,8 @@ the Free Software Foundation, either version 3 of the License, or
85
90
 
86
91
  This program is distributed in the hope that it will be useful,
87
92
  but WITHOUT ANY WARRANTY; without even the implied warranty of
88
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
93
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
89
94
  GNU General Public License for more details.
90
95
 
91
96
  You should have received a copy of the GNU General Public License
92
- along with this program. If not, see <http://www.gnu.org/licenses/>.
93
-
97
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
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
@@ -34,6 +36,7 @@ module Api
34
36
  def resource_class_for(resource)
35
37
  return ForemanDlm::Dlmlock if resource == 'dlmlock'
36
38
  return ForemanDlm::DlmlockEvent if resource == 'dlmlock_event'
39
+
37
40
  super
38
41
  end
39
42
  end
@@ -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')
@@ -73,7 +76,7 @@ module Api
73
76
 
74
77
  == Authentication & Host Identification
75
78
  The host is authenticated via a client certificate and identified via the CN of that certificate.
76
- DOCS
79
+ DOCS
77
80
 
78
81
  def acquire
79
82
  process_lock_response @dlmlock.acquire!(@host)
@@ -91,7 +94,7 @@ module Api
91
94
 
92
95
  == Authentication & Host Identification
93
96
  The host is authenticated via a client certificate and identified via the CN of that certificate.
94
- DOCS
97
+ DOCS
95
98
 
96
99
  def release
97
100
  process_lock_response @dlmlock.release!(@host)
@@ -108,6 +111,7 @@ module Api
108
111
  rescue ActiveRecord::RecordNotFound
109
112
  result = scope.find_by(:name => id)
110
113
  raise ActiveRecord::RecordNotFound unless result
114
+
111
115
  result
112
116
  end
113
117
 
@@ -132,16 +136,16 @@ module Api
132
136
  logger.info 'Denying access because no host could be detected.'
133
137
  if User.current
134
138
  render_error 'access_denied',
135
- :status => :forbidden,
136
- :locals => {
137
- :details => 'You need to authenticate with a valid client cert. The DN has to match a known host.'
138
- }
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
+ }
139
143
  else
140
144
  render_error 'unauthorized',
141
- :status => :unauthorized,
142
- :locals => {
143
- :user_login => get_client_cert_hostname
144
- }
145
+ :status => :unauthorized,
146
+ :locals => {
147
+ :user_login => get_client_cert_hostname,
148
+ }
145
149
  end
146
150
  end
147
151
  true
@@ -162,7 +166,7 @@ module Api
162
166
  deny_access
163
167
  else
164
168
  render_error 'precondition_failed', :status => :precondition_failed, :locals => {
165
- :message => 'Precondition failed. Lock is in invalid state for this operation.'
169
+ :message => 'Precondition failed. Lock is in invalid state for this operation.',
166
170
  }
167
171
  end
168
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
@@ -46,17 +48,11 @@ module ForemanDlm
46
48
  end
47
49
 
48
50
  def get_client_cert_hostname
49
- verify = request.env[Setting[:ssl_client_verify_env]]
50
- unless verify == 'SUCCESS'
51
- logger.info { "Client certificate is invalid: #{verify}" }
52
- return
53
- end
54
-
55
- dn = request.env[Setting[:ssl_client_dn_env]]
56
- return unless dn && dn =~ /CN=([^\s\/,]+)/i
51
+ client_certificate = Foreman::ClientCertificate.new(request: request)
52
+ return unless client_certificate.verified?
57
53
 
58
- hostname = Regexp.last_match(1).downcase
59
- logger.debug "Extracted hostname '#{hostname}' from client certificate."
54
+ hostname = client_certificate.subject
55
+ logger.debug "Extracted hostname '#{hostname}' from client certificate." if hostname
60
56
  hostname
61
57
  end
62
58
  end
@@ -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
@@ -13,6 +15,7 @@ module ForemanDlm
13
15
  # Updates the last_checkin timestamp of a user
14
16
  def update_detected_host_checkin_time
15
17
  return unless @detected_host
18
+
16
19
  facet = @detected_host.dlm_facet || @detected_host.build_dlm_facet
17
20
  facet.save unless facet.persisted?
18
21
  facet.touch(:last_checkin_at)
@@ -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
@@ -1,14 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  module DlmlockHelper
3
5
  def dlmlock_status_icon_class(lock)
4
6
  return 'ban' if lock.disabled?
5
7
  return 'lock' if lock.taken?
8
+
6
9
  'unlock'
7
10
  end
8
11
 
9
12
  def dlmlock_status_icon_color_class(lock)
10
13
  return 'text-danger' if lock.disabled?
11
14
  return 'text-success' if lock.taken?
15
+
12
16
  'text-info'
13
17
  end
14
18
 
@@ -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
@@ -22,6 +24,7 @@ module ForemanDlm
22
24
  total_count += count
23
25
 
24
26
  break if event_ids.blank?
27
+
25
28
  sleep sleep_time
26
29
  end
27
30
  duration = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time) / 60).to_i
@@ -1,24 +1,33 @@
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
20
22
  end
21
23
 
24
+ def can_acquire_update_locks?
25
+ param = host_param('can_acquire_update_locks')
26
+ return true if param.blank?
27
+
28
+ Foreman::Cast.to_bool(param)
29
+ end
30
+
22
31
  def refresh_dlmlock_status
23
32
  refresh_statuses([HostStatus::DlmlockStatus])
24
33
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ForemanDlm
2
4
  module HostMonitoringExtensions
3
5
  extend ActiveSupport::Concern
@@ -9,6 +11,7 @@ module ForemanDlm
9
11
 
10
12
  def add_lock_monitoring_downtime
11
13
  return unless monitored?
14
+
12
15
  logger.info "Setting Monitoring downtime for #{self}"
13
16
  monitoring.set_downtime_host(self, lock_monitoring_downtime_options)
14
17
  true
@@ -18,6 +21,7 @@ module ForemanDlm
18
21
 
19
22
  def remove_lock_monitoring_downtime
20
23
  return unless monitored?
24
+
21
25
  logger.info "Deleting Monitoring downtime for #{self}"
22
26
  monitoring.del_downtime_host(self, lock_monitoring_downtime_options)
23
27
  true
@@ -29,7 +33,7 @@ module ForemanDlm
29
33
  {
30
34
  comment: _('Host acquired lock.'),
31
35
  start_time: Time.current.to_i,
32
- end_time: Time.current.advance(:minutes => 180).to_i
36
+ end_time: Time.current.advance(:minutes => 180).to_i,
33
37
  }
34
38
  end
35
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
@@ -7,16 +9,15 @@ module ForemanDlm
7
9
  end
8
10
 
9
11
  def self.dlm_stale_time
10
- (Setting::General[:dlm_stale_time] || 4).hours
12
+ (Setting[:dlm_stale_time] || 4).hours
11
13
  end
12
14
 
13
15
  belongs_to_host
14
16
 
15
17
  has_many :dlmlock_events,
16
- class_name: '::ForemanDlm::DlmlockEvent',
17
- foreign_key: 'dlmlock_id',
18
- dependent: :destroy,
19
- inverse_of: :dlmlock
18
+ class_name: '::ForemanDlm::DlmlockEvent',
19
+ dependent: :destroy,
20
+ inverse_of: :dlmlock
20
21
 
21
22
  validates :name, presence: true, uniqueness: true
22
23
 
@@ -46,6 +47,8 @@ module ForemanDlm
46
47
  attr_accessor :old
47
48
 
48
49
  def acquire!(host)
50
+ return false unless host.can_acquire_update_locks?
51
+
49
52
  result = atomic_update(nil, host)
50
53
  ForemanDlm::RefreshDlmlockStatus.set(wait: self.class.dlm_stale_time).perform_later([host.id]) if result
51
54
  result
@@ -66,7 +69,7 @@ module ForemanDlm
66
69
  def locked_by?(host)
67
70
  self.host == host
68
71
  end
69
- alias acquired_by? locked_by?
72
+ alias_method :acquired_by?, :locked_by?
70
73
 
71
74
  def disabled?
72
75
  !enabled?
@@ -75,7 +78,7 @@ module ForemanDlm
75
78
  def locked?
76
79
  host.present?
77
80
  end
78
- alias taken? locked?
81
+ alias_method :taken?, :locked?
79
82
 
80
83
  def humanized_type
81
84
  _('Generic Lock')
@@ -90,7 +93,7 @@ module ForemanDlm
90
93
  query = {
91
94
  id: id,
92
95
  host_id: [new_host.try(:id), old_host.try(:id)],
93
- enabled: true
96
+ enabled: true,
94
97
  }
95
98
 
96
99
  updated = self.class.where(query).update(changes.merge(updated_at: Time.now.utc))
@@ -126,9 +129,9 @@ module ForemanDlm
126
129
  )
127
130
  end
128
131
 
129
- def run_callback(h, callback)
130
- h.run_callbacks callback do
131
- 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." }
132
135
  true
133
136
  end
134
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
@@ -1,2 +1,2 @@
1
- <% title _("Locks") %>
1
+ <% title _('Distributed Locks') %>
2
2
  <%= render :partial => 'list' %>
@@ -1,6 +1,6 @@
1
1
  <% title @dlmlock.name %>
2
2
  <% breadcrumbs(
3
- resource_url: api_dlmlocks_path
3
+ resource_url: api_dlmlocks_path
4
4
  ) if respond_to?(:breadcrumbs) # Requires Foreman >= 1.18 %>
5
5
 
6
6
  <%= title_actions link_to(_('Back'), foreman_dlm_dlmlocks_path, :class => 'btn btn-default'),
@@ -6,9 +6,9 @@
6
6
  <p>
7
7
  <%= _('You don\'t seem to have any locks.') %></br>
8
8
  <%= _('The distributed lock manager allows you to automatically schedule system updates across a cluster of hosts.') %>
9
- <%= link_to _('Learn more about this in the documentation.'), 'https://github.com/timogoebel/foreman_dlm', :rel => "external" %>.
9
+ <%= link_to _('Learn more about this in the documentation.'), 'https://github.com/dm-drogeriemarkt/foreman_dlm', :rel => "external" %>.
10
10
  </p>
11
11
  <div class="blank-slate-pf-main-action">
12
- <%= link_to _('Documentation'), 'https://github.com/timogoebel/foreman_dlm', :rel => 'external', :class => 'btn btn-primary btn-lg' %>
12
+ <%= link_to _('Documentation'), 'https://github.com/dm-drogeriemarkt/foreman_dlm', :rel => 'external', :class => 'btn btn-primary btn-lg' %>
13
13
  </div>
14
14
  </div>
@@ -2,14 +2,14 @@
2
2
  <%= alert class: 'alert-info',
3
3
  header: '',
4
4
  text: n_(
5
- 'This host holds %s lock.',
5
+ 'This host holds one lock.',
6
6
  'This host holds %s locks.',
7
7
  @host.dlmlocks.count
8
8
  ) % @host.dlmlocks.count
9
9
  %>
10
10
  <% end %>
11
11
 
12
- <table class="<%= table_css_classes %> table-fixed">
12
+ <table class="<%= table_css_classes %>">
13
13
  <thead>
14
14
  <tr>
15
15
  <th colspan="2"><%= _('Locks') %></th>
@@ -17,7 +17,7 @@
17
17
  </thead>
18
18
  <tbody>
19
19
  <tr>
20
- <td><%= _('Last checkin') %></td>
20
+ <td class="text-nowrap"><%= _('Last check-in') %></td>
21
21
  <td><%= @host.dlm_facet && @host.dlm_facet.last_checkin_at ? date_time_relative(@host.dlm_facet.last_checkin_at) : _('N/A') %></td>
22
22
  </tr>
23
23
  <tr>