poise-monit-compat 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/.foodcritic +1 -0
  3. data/.gitignore +11 -0
  4. data/.kitchen.yml +8 -0
  5. data/.travis.yml +20 -0
  6. data/.yardopts +7 -0
  7. data/Berksfile +30 -0
  8. data/CHANGELOG.md +9 -0
  9. data/Gemfile +36 -0
  10. data/LICENSE +201 -0
  11. data/README.md +139 -0
  12. data/Rakefile +17 -0
  13. data/chef/attributes/default.rb +63 -0
  14. data/chef/recipes/default.rb +47 -0
  15. data/chef/recipes/postfix.rb +31 -0
  16. data/chef/recipes/postgresql.rb +32 -0
  17. data/chef/recipes/rabbitmq.rb +31 -0
  18. data/chef/recipes/resque.rb +25 -0
  19. data/chef/recipes/resque_scheduler.rb +30 -0
  20. data/chef/recipes/ssh.rb +30 -0
  21. data/chef/recipes/unicorn.rb +25 -0
  22. data/chef/templates/compat.conf.erb +43 -0
  23. data/chef/templates/resque.conf.erb +21 -0
  24. data/chef/templates/unicorn.conf.erb +17 -0
  25. data/lib/poise_monit_compat.rb +21 -0
  26. data/lib/poise_monit_compat/cheftie.rb +17 -0
  27. data/lib/poise_monit_compat/resources.rb +26 -0
  28. data/lib/poise_monit_compat/resources/monitrc.rb +95 -0
  29. data/lib/poise_monit_compat/version.rb +20 -0
  30. data/poise-monit-compat.gemspec +42 -0
  31. data/test/cookbooks/monit_test/attributes/default.rb +17 -0
  32. data/test/cookbooks/monit_test/metadata.rb +19 -0
  33. data/test/cookbooks/monit_test/recipes/default.rb +17 -0
  34. data/test/gemfiles/chef-12.gemfile +19 -0
  35. data/test/gemfiles/master.gemfile +25 -0
  36. data/test/integration/default/serverspec/default_spec.rb +37 -0
  37. data/test/spec/default_spec.rb +110 -0
  38. data/test/spec/monitrc_spec.rb +41 -0
  39. data/test/spec/postfix_spec.rb +24 -0
  40. data/test/spec/postgresql_spec.rb +24 -0
  41. data/test/spec/rabbitmq_spec.rb +24 -0
  42. data/test/spec/resque_scheduler_spec.rb +25 -0
  43. data/test/spec/resque_spec.rb +24 -0
  44. data/test/spec/spec_helper.rb +20 -0
  45. data/test/spec/ssh_spec.rb +24 -0
  46. data/test/spec/unicorn_spec.rb +24 -0
  47. metadata +167 -0
@@ -0,0 +1,17 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'poise_monit_compat/resources'
@@ -0,0 +1,26 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'poise_monit_compat/resources/monitrc'
18
+
19
+
20
+ module PoiseMonitCompat
21
+ # Chef resources and providers for poise-monit-compat.
22
+ #
23
+ # @since 1.0.0
24
+ module Resources
25
+ end
26
+ end
@@ -0,0 +1,95 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'chef/provider'
18
+ require 'chef/resource'
19
+ require 'poise'
20
+
21
+
22
+ module PoiseMonitCompat
23
+ module Resources
24
+ # (see Monitrc::Resource)
25
+ # @since 1.0.0
26
+ module Monitrc
27
+
28
+ # A `monitrc` resource to install and configure Monit.
29
+ #
30
+ # @provides monitrc
31
+ # @action enable
32
+ # @action disable
33
+ # @example
34
+ # monitrc 'postfix'
35
+ class Resource < Chef::Resource
36
+ include Poise(parent: :monit)
37
+ provides(:monitrc)
38
+ actions(:enable, :disable)
39
+
40
+ # @!attribute reload
41
+ # Unusued, only present for compat.
42
+ # @return [nil]
43
+ attribute(:reload)
44
+ # @!attribute template_cookbook
45
+ # Cookbook to load the template from. Defaults to "monit".
46
+ # @return [String]
47
+ attribute(:template_cookbook, kind_of: String, default: 'monit')
48
+ # @!attribute template_source
49
+ # Path to the template source file. Defaults to "$name.conf.erb".
50
+ # @return [String]
51
+ attribute(:template_source, kind_of: String, default: lazy { "#{name}.conf.erb" })
52
+ # @!attribute variables
53
+ # Variables for the template.
54
+ # @return [Hash]
55
+ attribute(:variables, kind_of: Hash, default: lazy { {} })
56
+ end
57
+
58
+ # The provider for `monitrc`.
59
+ #
60
+ # @see Resource
61
+ # @provides monitrc
62
+ class Provider < Chef::Provider
63
+ include Poise
64
+ provides(:monitrc)
65
+
66
+ # An `enable` action for `monitrc`.
67
+ #
68
+ # @return [void]
69
+ def action_enable
70
+ notifying_block do
71
+ monit_config new_resource.name do
72
+ cookbook new_resource.template_cookbook
73
+ options new_resource.variables
74
+ parent new_resource.parent
75
+ source new_resource.template_source
76
+ end
77
+ end
78
+ end
79
+
80
+ # A `disable` action for `monitrc`.
81
+ #
82
+ # @return [void]
83
+ def action_disable
84
+ notifying_block do
85
+ monit_config new_resource.name do
86
+ action :delete
87
+ parent new_resource.parent
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,20 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+
18
+ module PoiseMonitCompat
19
+ VERSION = '1.0.0'
20
+ end
@@ -0,0 +1,42 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ lib = File.expand_path('../lib', __FILE__)
18
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
19
+ require 'poise_monit_compat/version'
20
+
21
+ Gem::Specification.new do |spec|
22
+ spec.name = 'poise-monit-compat'
23
+ spec.version = PoiseMonitCompat::VERSION
24
+ spec.authors = ['Noah Kantrowitz']
25
+ spec.email = %w{noah@coderanger.net}
26
+ spec.description = 'A deprecated Chef cookbook for managing the Monit process manager.'
27
+ spec.summary = spec.description
28
+ spec.homepage = 'https://github.com/poise/poise-monit-compat'
29
+ spec.license = 'Apache 2.0'
30
+ spec.metadata['halite_name'] = 'monit'
31
+
32
+ spec.files = `git ls-files`.split($/)
33
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
34
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
35
+ spec.require_paths = %w{lib}
36
+
37
+ spec.add_dependency 'halite', '~> 1.1'
38
+ spec.add_dependency 'poise', '~> 2.0'
39
+ spec.add_dependency 'poise-monit', '~> 1.0'
40
+
41
+ spec.add_development_dependency 'poise-boiler', '~> 1.0'
42
+ end
@@ -0,0 +1,17 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ override['poise-service']['provider'] = 'dummy'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ name 'monit_test'
18
+ depends 'monit'
19
+ depends 'yum-epel'
@@ -0,0 +1,17 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ include_recipe 'monit'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.0'
@@ -0,0 +1,25 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', github: 'chef/chef'
20
+ # gem 'halite', github: 'poise/halite'
21
+ gem 'poise', github: 'poise/poise'
22
+ gem 'poise-boiler', github: 'poise/poise-boiler'
23
+ gem 'poise-languages', github: 'poise/poise-languages'
24
+ gem 'poise-monit', github: 'poise/poise-monit'
25
+ gem 'poise-service', github: 'poise/poise-service'
@@ -0,0 +1,37 @@
1
+ # #
2
+ # # Copyright 2015, Noah Kantrowitz
3
+ # #
4
+ # # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # # you may not use this file except in compliance with the License.
6
+ # # You may obtain a copy of the License at
7
+ # #
8
+ # # http://www.apache.org/licenses/LICENSE-2.0
9
+ # #
10
+ # # Unless required by applicable law or agreed to in writing, software
11
+ # # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # # See the License for the specific language governing permissions and
14
+ # # limitations under the License.
15
+ # #
16
+
17
+ require 'serverspec'
18
+ set :backend, :exec
19
+
20
+ describe file('/usr/bin/monit') do
21
+ it { is_expected.to exist }
22
+ it { is_expected.to be_a_file }
23
+ end
24
+
25
+ describe file('/etc/monit/monitrc') do
26
+ it { is_expected.to exist }
27
+ it { is_expected.to be_a_file }
28
+ end
29
+
30
+ describe command('monit -c /etc/monit/monitrc -V') do
31
+ its(:exit_status) { is_expected.to eq 0 }
32
+ end
33
+
34
+ describe command('monit -c /etc/monit/monitrc status') do
35
+ its(:exit_status) { is_expected.to eq 0 }
36
+ its(:stdout) { is_expected.to include 'System' }
37
+ end
@@ -0,0 +1,110 @@
1
+ #
2
+ # Copyright 2015, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'spec_helper'
18
+
19
+ describe 'monit::default' do
20
+ step_into(:monit)
21
+ step_into(:monit_config)
22
+ recipe { include_recipe 'monit' }
23
+ before do
24
+ allow_any_instance_of(PoiseMonit::Resources::Monit::Resource).to receive(:monit_version).and_return(Gem::Version.create('5.15'))
25
+ override_attributes['monit'] ||= {}
26
+ override_attributes['monit']['eventqueue'] ||= {}
27
+ end
28
+
29
+ context 'with defaults' do
30
+ it { is_expected.to enable_monit('monit').with(daemon_interval: 60, event_slots: 1000, httpd_port: '/var/run/monit.sock', logfile: 'syslog facility log_daemon', var_path: '/var/monit') }
31
+ it { is_expected.to install_package('monit') }
32
+ it { is_expected.to render_file('/etc/monit/monitrc') }
33
+ it { is_expected.to render_file('/etc/monit/conf.d/compat.conf').with_content(/\A\s*\Z/) }
34
+ end # /context with defaults
35
+
36
+ context 'with node["monit"]["logfile"]' do
37
+ before { override_attributes['monit']['logfile'] = '/log' }
38
+ it { is_expected.to enable_monit('monit').with(logfile: '/log') }
39
+ end # /context with node["monit"]["logfile"]
40
+
41
+ context 'with node["monit"]["poll_period"]' do
42
+ before { override_attributes['monit']['poll_period'] = 200 }
43
+ it { is_expected.to enable_monit('monit').with(daemon_interval: 200) }
44
+ end # /context with node["monit"]["poll_period"]
45
+
46
+ context 'with node["monit"]["eventqueue"]["set"]' do
47
+ before { override_attributes['monit']['eventqueue']['set'] = false }
48
+ it { is_expected.to enable_monit('monit').with(event_slots: 0) }
49
+ end # /context with node["monit"]["eventqueue"]["set"]
50
+
51
+ context 'with node["monit"]["eventqueue"]["basedir"]' do
52
+ before { override_attributes['monit']['eventqueue']['basedir'] = '/events' }
53
+ it { is_expected.to enable_monit('monit').with(var_path: '/events') }
54
+ end # /context with node["monit"]["eventqueue"]["basedir"]
55
+
56
+ context 'with node["monit"]["eventqueue"]["slots"]' do
57
+ before { override_attributes['monit']['eventqueue']['slots'] = 200 }
58
+ it { is_expected.to enable_monit('monit').with(event_slots: 200) }
59
+ end # /context with node["monit"]["eventqueue"]["slots"]
60
+
61
+ context 'with basic httpd config' do
62
+ before do
63
+ override_attributes['monit']['username'] = 'super'
64
+ override_attributes['monit']['password'] = 'secretz'
65
+ end
66
+ it { is_expected.to enable_monit('monit').with(httpd_port: false) }
67
+ it { is_expected.to render_file('/etc/monit/conf.d/compat.conf').with_content(<<-EOH) }
68
+ set httpd port 3737
69
+ allow super:secretz
70
+ EOH
71
+ end # /context with basic httpd config
72
+
73
+ context 'with complex httpd config' do
74
+ before do
75
+ override_attributes['monit']['address'] = '10.0.0.1'
76
+ override_attributes['monit']['allow'] = %w{192.168.0.0/16}
77
+ override_attributes['monit']['password'] = 'secretz'
78
+ override_attributes['monit']['ssl'] = true
79
+ override_attributes['monit']['username'] = 'super'
80
+ end
81
+ it { is_expected.to enable_monit('monit').with(httpd_port: false) }
82
+ it { is_expected.to render_file('/etc/monit/conf.d/compat.conf').with_content(<<-EOH) }
83
+ set httpd port 3737
84
+ use address 10.0.0.1
85
+ allow 192.168.0.0/16
86
+ allow super:secretz
87
+ ssl enable
88
+ pemfile /etc/monit/monit.pem
89
+ EOH
90
+ end # /context with complex httpd config
91
+
92
+ context 'with a notification config' do
93
+ before { override_attributes['monit']['notify_email'] = 'admins@example.com' }
94
+ it { is_expected.to render_file('/etc/monit/conf.d/compat.conf').with_content(<<-EOH) }
95
+ set mailserver localhost
96
+ with timeout 60 seconds
97
+
98
+ set mail-format {
99
+ from: monit@chefspec.local
100
+ subject: $SERVICE $EVENT
101
+ message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
102
+ Yours sincerely,
103
+ monit
104
+
105
+ }
106
+
107
+ set alert admins@example.com NOT ON { action, instance, pid, ppid }
108
+ EOH
109
+ end # /context with a notification config
110
+ end