foreman_dlm 0.1.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 (46) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +619 -0
  3. data/README.md +84 -0
  4. data/Rakefile +47 -0
  5. data/app/controllers/api/v2/dlmlocks_controller.rb +157 -0
  6. data/app/controllers/concerns/foreman/controller/parameters/dlmlocks.rb +15 -0
  7. data/app/controllers/concerns/foreman_dlm/find_host_by_client_cert.rb +63 -0
  8. data/app/controllers/concerns/foreman_dlm/find_host_by_ip.rb +54 -0
  9. data/app/controllers/dlmlocks_controller.rb +13 -0
  10. data/app/helpers/foreman_dlm/dlmlock_helper.rb +15 -0
  11. data/app/models/concerns/foreman_dlm/host_extensions.rb +14 -0
  12. data/app/models/concerns/foreman_dlm/host_monitoring_extensions.rb +36 -0
  13. data/app/models/dlmlock/update.rb +5 -0
  14. data/app/models/dlmlock.rb +79 -0
  15. data/app/views/api/v2/dlmlocks/acquire.json.rabl +3 -0
  16. data/app/views/api/v2/dlmlocks/base.json.rabl +3 -0
  17. data/app/views/api/v2/dlmlocks/create.json.rabl +3 -0
  18. data/app/views/api/v2/dlmlocks/index.json.rabl +3 -0
  19. data/app/views/api/v2/dlmlocks/main.json.rabl +7 -0
  20. data/app/views/api/v2/dlmlocks/release.json.rabl +3 -0
  21. data/app/views/api/v2/dlmlocks/show.json.rabl +8 -0
  22. data/app/views/api/v2/dlmlocks/update.json.rabl +3 -0
  23. data/app/views/api/v2/errors/precondition_failed.json.rabl +5 -0
  24. data/app/views/dlmlocks/_details.html.erb +35 -0
  25. data/app/views/dlmlocks/_list.html.erb +45 -0
  26. data/app/views/dlmlocks/index.html.erb +2 -0
  27. data/app/views/dlmlocks/show.html.erb +7 -0
  28. data/app/views/dlmlocks/welcome.html.erb +14 -0
  29. data/config/routes.rb +25 -0
  30. data/db/migrate/20170824084100_add_dlmlock.foreman_dlm.rb +12 -0
  31. data/lib/foreman_dlm/engine.rb +76 -0
  32. data/lib/foreman_dlm/version.rb +3 -0
  33. data/lib/foreman_dlm.rb +4 -0
  34. data/lib/tasks/foreman_dlm_tasks.rake +37 -0
  35. data/locale/Makefile +60 -0
  36. data/locale/en/foreman_dlm.po +19 -0
  37. data/locale/foreman_dlm.pot +19 -0
  38. data/locale/gemspec.rb +2 -0
  39. data/test/controllers/api/v2/dlmlocks_controller_test.rb +367 -0
  40. data/test/controllers/dlmlocks_test.rb +24 -0
  41. data/test/controllers/find_host_by_client_cert_test.rb +91 -0
  42. data/test/factories/dlmlock.rb +6 -0
  43. data/test/models/dlmlock_test.rb +201 -0
  44. data/test/models/host_monitoring_test.rb +42 -0
  45. data/test/test_plugin_helper.rb +9 -0
  46. metadata +124 -0
@@ -0,0 +1,42 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class HostMonitoringTest < ActiveSupport::TestCase
4
+ let(:host) { FactoryBot.create(:host, :managed, :with_monitoring) }
5
+ let(:monitoring_mock) { mock('monitoring') }
6
+ let(:exception) { ProxyAPI::ProxyException.new(host.monitoring_proxy.url, StandardError.new, 'Some error message') }
7
+
8
+ setup do
9
+ skip unless ForemanDlm.with_monitoring?
10
+ User.current = users(:admin)
11
+ Host::Managed.any_instance.stubs(:monitoring).returns(monitoring_mock)
12
+ monitoring_mock.stubs(:query_host).returns({})
13
+ end
14
+
15
+ context 'a free and enabled DLM lock' do
16
+ let(:dlmlock) { FactoryBot.create(:dlmlock) }
17
+
18
+ test 'creates monitoring downtime' do
19
+ monitoring_mock.expects(:set_downtime_host).once
20
+ assert dlmlock.acquire!(host)
21
+ end
22
+
23
+ test 'does not fail on monitoring proxy error' do
24
+ monitoring_mock.expects(:set_downtime_host).once.raises(exception)
25
+ assert dlmlock.acquire!(host)
26
+ end
27
+ end
28
+
29
+ context 'an acquired DLM lock' do
30
+ let(:dlmlock) { FactoryBot.create(:dlmlock, :host => host) }
31
+
32
+ test 'removes monitoring dowmtine' do
33
+ monitoring_mock.expects(:del_downtime_host).once
34
+ assert dlmlock.release!(host)
35
+ end
36
+
37
+ test 'does not fail on monitoring proxy error' do
38
+ monitoring_mock.expects(:del_downtime_host).once.raises(exception)
39
+ assert dlmlock.release!(host)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,9 @@
1
+ # This calls the main test_helper in Foreman-core
2
+ require 'test_helper'
3
+
4
+ # Add plugin to FactoryBot's paths
5
+ FactoryBot.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
6
+ if ForemanDlm.with_monitoring?
7
+ FactoryBot.definition_file_paths << "#{ForemanMonitoring::Engine.root}/test/factories"
8
+ end
9
+ FactoryBot.reload
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: foreman_dlm
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Timo Goebel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-04-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubocop
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Adds a Distributed Lock Manager to Foreman. This enables painless system
42
+ updates for clusters.
43
+ email:
44
+ - timo.goebel@dm.de
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - LICENSE
50
+ - README.md
51
+ - Rakefile
52
+ - app/controllers/api/v2/dlmlocks_controller.rb
53
+ - app/controllers/concerns/foreman/controller/parameters/dlmlocks.rb
54
+ - app/controllers/concerns/foreman_dlm/find_host_by_client_cert.rb
55
+ - app/controllers/concerns/foreman_dlm/find_host_by_ip.rb
56
+ - app/controllers/dlmlocks_controller.rb
57
+ - app/helpers/foreman_dlm/dlmlock_helper.rb
58
+ - app/models/concerns/foreman_dlm/host_extensions.rb
59
+ - app/models/concerns/foreman_dlm/host_monitoring_extensions.rb
60
+ - app/models/dlmlock.rb
61
+ - app/models/dlmlock/update.rb
62
+ - app/views/api/v2/dlmlocks/acquire.json.rabl
63
+ - app/views/api/v2/dlmlocks/base.json.rabl
64
+ - app/views/api/v2/dlmlocks/create.json.rabl
65
+ - app/views/api/v2/dlmlocks/index.json.rabl
66
+ - app/views/api/v2/dlmlocks/main.json.rabl
67
+ - app/views/api/v2/dlmlocks/release.json.rabl
68
+ - app/views/api/v2/dlmlocks/show.json.rabl
69
+ - app/views/api/v2/dlmlocks/update.json.rabl
70
+ - app/views/api/v2/errors/precondition_failed.json.rabl
71
+ - app/views/dlmlocks/_details.html.erb
72
+ - app/views/dlmlocks/_list.html.erb
73
+ - app/views/dlmlocks/index.html.erb
74
+ - app/views/dlmlocks/show.html.erb
75
+ - app/views/dlmlocks/welcome.html.erb
76
+ - config/routes.rb
77
+ - db/migrate/20170824084100_add_dlmlock.foreman_dlm.rb
78
+ - lib/foreman_dlm.rb
79
+ - lib/foreman_dlm/engine.rb
80
+ - lib/foreman_dlm/version.rb
81
+ - lib/tasks/foreman_dlm_tasks.rake
82
+ - locale/Makefile
83
+ - locale/en/foreman_dlm.po
84
+ - locale/foreman_dlm.pot
85
+ - locale/gemspec.rb
86
+ - test/controllers/api/v2/dlmlocks_controller_test.rb
87
+ - test/controllers/dlmlocks_test.rb
88
+ - test/controllers/find_host_by_client_cert_test.rb
89
+ - test/factories/dlmlock.rb
90
+ - test/models/dlmlock_test.rb
91
+ - test/models/host_monitoring_test.rb
92
+ - test/test_plugin_helper.rb
93
+ homepage: https://github.com/timogoebel/foreman_dlm
94
+ licenses:
95
+ - GPL-3.0
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.7.3
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: Distributed Lock Manager for Foreman.
117
+ test_files:
118
+ - test/models/host_monitoring_test.rb
119
+ - test/models/dlmlock_test.rb
120
+ - test/factories/dlmlock.rb
121
+ - test/test_plugin_helper.rb
122
+ - test/controllers/dlmlocks_test.rb
123
+ - test/controllers/api/v2/dlmlocks_controller_test.rb
124
+ - test/controllers/find_host_by_client_cert_test.rb