rubber 1.0.2

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 (163) hide show
  1. data/CHANGELOG +39 -0
  2. data/COPYING +339 -0
  3. data/README +6 -0
  4. data/TODO +11 -0
  5. data/VERSION +1 -0
  6. data/bin/vulcanize +41 -0
  7. data/generators/vulcanize/USAGE +6 -0
  8. data/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +51 -0
  9. data/generators/vulcanize/templates/apache/config/rubber/role/apache/deflate.conf +10 -0
  10. data/generators/vulcanize/templates/apache/config/rubber/role/apache/expires.conf +9 -0
  11. data/generators/vulcanize/templates/apache/config/rubber/role/apache/headers.conf +6 -0
  12. data/generators/vulcanize/templates/apache/config/rubber/role/apache/monit-apache.conf +8 -0
  13. data/generators/vulcanize/templates/apache/config/rubber/role/apache/ports.conf +5 -0
  14. data/generators/vulcanize/templates/apache/config/rubber/role/apache/setenvif.conf +52 -0
  15. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +62 -0
  16. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache.auth +7 -0
  17. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-index.html +30 -0
  18. data/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +7 -0
  19. data/generators/vulcanize/templates/apache/templates.yml +1 -0
  20. data/generators/vulcanize/templates/base/Capfile +14 -0
  21. data/generators/vulcanize/templates/base/config/deploy.rb +55 -0
  22. data/generators/vulcanize/templates/base/config/rubber/common/crontab +16 -0
  23. data/generators/vulcanize/templates/base/config/rubber/common/profile.rc +9 -0
  24. data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +104 -0
  25. data/generators/vulcanize/templates/base/config/rubber/rubber.yml +241 -0
  26. data/generators/vulcanize/templates/base/lib/tasks/rubber.rake +15 -0
  27. data/generators/vulcanize/templates/base/script/cron-rake +18 -0
  28. data/generators/vulcanize/templates/base/script/cron-runner +18 -0
  29. data/generators/vulcanize/templates/base/script/cron-sh +67 -0
  30. data/generators/vulcanize/templates/base/templates.yml +1 -0
  31. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +23 -0
  32. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/nginx/nginx-mongrel.conf +113 -0
  33. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/rubber-complete.yml +41 -0
  34. data/generators/vulcanize/templates/complete_mongrel_mysql/templates.yml +6 -0
  35. data/generators/vulcanize/templates/complete_passenger_mysql/config/rubber/role/haproxy/haproxy-passenger.conf +19 -0
  36. data/generators/vulcanize/templates/complete_passenger_mysql/config/rubber/rubber-complete.yml +40 -0
  37. data/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +10 -0
  38. data/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +72 -0
  39. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/cruise +40 -0
  40. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +165 -0
  41. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/production.rb +8 -0
  42. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/site_config.rb +76 -0
  43. data/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +11 -0
  44. data/generators/vulcanize/templates/cruise/config/rubber/rubber-cruise.yml +18 -0
  45. data/generators/vulcanize/templates/cruise/templates.yml +1 -0
  46. data/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +45 -0
  47. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-base.conf +26 -0
  48. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-default.conf +8 -0
  49. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +9 -0
  50. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +6 -0
  51. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +17 -0
  52. data/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +10 -0
  53. data/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +7 -0
  54. data/generators/vulcanize/templates/haproxy/templates.yml +1 -0
  55. data/generators/vulcanize/templates/memcached/config/memcached.yml +28 -0
  56. data/generators/vulcanize/templates/memcached/config/rubber/common/memcached.yml +14 -0
  57. data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +52 -0
  58. data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin +249 -0
  59. data/generators/vulcanize/templates/memcached/config/rubber/rubber-memcached.yml +7 -0
  60. data/generators/vulcanize/templates/memcached/templates.yml +1 -0
  61. data/generators/vulcanize/templates/minimal_mysql/templates.yml +7 -0
  62. data/generators/vulcanize/templates/minimal_nodb/templates.yml +6 -0
  63. data/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +75 -0
  64. data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/mongrel_cluster.yml +12 -0
  65. data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/monit-mongrel.conf +20 -0
  66. data/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +9 -0
  67. data/generators/vulcanize/templates/mongrel/templates.yml +1 -0
  68. data/generators/vulcanize/templates/monit/config/rubber/common/monit-default.conf +15 -0
  69. data/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +251 -0
  70. data/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +32 -0
  71. data/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +10 -0
  72. data/generators/vulcanize/templates/monit/config/rubber/rubber-monit.yml +6 -0
  73. data/generators/vulcanize/templates/monit/templates.yml +1 -0
  74. data/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +8 -0
  75. data/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +48 -0
  76. data/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +46 -0
  77. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +8 -0
  78. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +31 -0
  79. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +80 -0
  80. data/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +8 -0
  81. data/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +57 -0
  82. data/generators/vulcanize/templates/munin/script/munin/example_simple.rb +24 -0
  83. data/generators/vulcanize/templates/munin/templates.yml +1 -0
  84. data/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +11 -0
  85. data/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +156 -0
  86. data/generators/vulcanize/templates/mysql/config/rubber/role/db/crontab +14 -0
  87. data/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +10 -0
  88. data/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +167 -0
  89. data/generators/vulcanize/templates/mysql/config/rubber/role/mysql_slave/mysql_slave_munin_plugin +51 -0
  90. data/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +46 -0
  91. data/generators/vulcanize/templates/mysql/templates.yml +1 -0
  92. data/generators/vulcanize/templates/mysql_cluster/config/rubber/common/mysql_cluster_migrations.rb +13 -0
  93. data/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +173 -0
  94. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_data/my.cnf +15 -0
  95. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_mgm/ndb_mgmd.cnf +39 -0
  96. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +10 -0
  97. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +23 -0
  98. data/generators/vulcanize/templates/mysql_cluster/config/rubber/rubber-mysql_cluster.yml +32 -0
  99. data/generators/vulcanize/templates/mysql_cluster/templates.yml +1 -0
  100. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +16 -0
  101. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +10 -0
  102. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy +153 -0
  103. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.conf +10 -0
  104. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.lua +5 -0
  105. data/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +52 -0
  106. data/generators/vulcanize/templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml +11 -0
  107. data/generators/vulcanize/templates/mysql_proxy/templates.yml +1 -0
  108. data/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +45 -0
  109. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/crontab +9 -0
  110. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/monit-nginx.conf +8 -0
  111. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/nginx.conf +42 -0
  112. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +55 -0
  113. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-index.html +30 -0
  114. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-nginx.auth +7 -0
  115. data/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +10 -0
  116. data/generators/vulcanize/templates/nginx/templates.yml +1 -0
  117. data/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +37 -0
  118. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +6 -0
  119. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
  120. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +46 -0
  121. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +10 -0
  122. data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +12 -0
  123. data/generators/vulcanize/templates/passenger/templates.yml +1 -0
  124. data/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
  125. data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
  126. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
  127. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +10 -0
  128. data/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
  129. data/generators/vulcanize/templates/sphinx/templates.yml +1 -0
  130. data/generators/vulcanize/vulcanize_generator.rb +67 -0
  131. data/lib/capistrano/hostcmd.rb +12 -0
  132. data/lib/rubber.rb +38 -0
  133. data/lib/rubber/capistrano.rb +1 -0
  134. data/lib/rubber/cloud.rb +13 -0
  135. data/lib/rubber/cloud/aws.rb +305 -0
  136. data/lib/rubber/cloud/base.rb +16 -0
  137. data/lib/rubber/configuration.rb +47 -0
  138. data/lib/rubber/dns.rb +13 -0
  139. data/lib/rubber/dns/base.rb +69 -0
  140. data/lib/rubber/dns/dyndns.rb +63 -0
  141. data/lib/rubber/dns/nettica.rb +73 -0
  142. data/lib/rubber/dns/zerigo.rb +131 -0
  143. data/lib/rubber/environment.rb +161 -0
  144. data/lib/rubber/generator.rb +197 -0
  145. data/lib/rubber/instance.rb +165 -0
  146. data/lib/rubber/recipes/rubber.rb +89 -0
  147. data/lib/rubber/recipes/rubber/bundles.rb +28 -0
  148. data/lib/rubber/recipes/rubber/deploy.rb +90 -0
  149. data/lib/rubber/recipes/rubber/instances.rb +348 -0
  150. data/lib/rubber/recipes/rubber/load_balancers.rb +44 -0
  151. data/lib/rubber/recipes/rubber/security_groups.rb +189 -0
  152. data/lib/rubber/recipes/rubber/setup.rb +357 -0
  153. data/lib/rubber/recipes/rubber/static_ips.rb +107 -0
  154. data/lib/rubber/recipes/rubber/utils.rb +203 -0
  155. data/lib/rubber/recipes/rubber/volumes.rb +264 -0
  156. data/lib/rubber/tasks/rubber.rb +221 -0
  157. data/lib/rubber/util.rb +37 -0
  158. data/test/environment_test.rb +118 -0
  159. data/test/generator_test.rb +323 -0
  160. data/test/instance_test.rb +93 -0
  161. data/test/test_helper.rb +4 -0
  162. data/test/util_test.rb +16 -0
  163. metadata +274 -0
@@ -0,0 +1,7 @@
1
+ # Sets up memcached server and client as cache_fu rails plugin (needs manual install into rails app)
2
+
3
+ gems: [memcache-client]
4
+
5
+ roles:
6
+ memcached:
7
+ packages: [memcached, libcache-memcached-perl]
@@ -0,0 +1 @@
1
+ description: The memcached module
@@ -0,0 +1,7 @@
1
+ description: A simple nginx/mongrel/mysql rails stack
2
+ dependent_templates:
3
+ - base
4
+ - mysql
5
+ - mongrel
6
+ - nginx
7
+ - haproxy
@@ -0,0 +1,6 @@
1
+ description: A simple nginx/mongrel rails stack without a db
2
+ dependent_templates:
3
+ - base
4
+ - mongrel
5
+ - nginx
6
+ - haproxy
@@ -0,0 +1,75 @@
1
+
2
+ namespace :rubber do
3
+
4
+ namespace :mongrel do
5
+
6
+ rubber.allow_optional_tasks(self)
7
+
8
+ after "rubber:install_gems", "rubber:mongrel:custom_install"
9
+
10
+ task :custom_install, :roles => :mongrel do
11
+ # Setup system to restart mongrel_cluster on reboot
12
+ rubber.sudo_script 'setup_mongrel_init', <<-ENDSCRIPT
13
+ mkdir -p /etc/mongrel_cluster
14
+ rm -f /etc/mongrel_cluster/#{application}-#{RUBBER_ENV}.yml && ln -s /mnt/#{application}-#{RUBBER_ENV}/current/config/mongrel_cluster.yml /etc/mongrel_cluster/#{application}-#{RUBBER_ENV}.yml
15
+ find /usr/lib/ruby/gems -path "*/resources/mongrel_cluster" -exec cp {} /etc/init.d/ \\;
16
+ chmod +x /etc/init.d/mongrel_cluster
17
+ update-rc.d -f mongrel_cluster remove
18
+ update-rc.d mongrel_cluster defaults 99 00
19
+ ENDSCRIPT
20
+ end
21
+
22
+
23
+ def mongrel_stop
24
+ run "cd #{current_path} && mongrel_rails cluster::stop"
25
+ sleep 5 # Give the graceful stop a chance to complete
26
+ run "cd #{current_path} && mongrel_rails cluster::stop --force --clean"
27
+ end
28
+
29
+ def mongrel_start
30
+ run "cd #{current_path} && mongrel_rails cluster::start --clean"
31
+ pid_cnt = rubber_env.mongrel_count
32
+ logger.info "Waiting for mongrel pid files to show up"
33
+ run "while ((`ls #{current_path}/tmp/pids/mongrel.*.pid 2> /dev/null | wc -l` < #{pid_cnt})); do sleep 1; done"
34
+ end
35
+
36
+ # serial_task can only be called after roles defined - not normally a problem, but
37
+ # rubber auto-roles don't get defined till after all tasks are defined
38
+ on :load do
39
+ rubber.serial_task self, :serial_restart, :roles => :mongrel do
40
+ teardown_connections_to(sessions.keys)
41
+ mongrel_stop
42
+ mongrel_start
43
+ end
44
+ end
45
+
46
+ desc "Restarts the mongrel app server"
47
+ task :restart, :roles => :mongrel do
48
+ serial_restart
49
+ end
50
+
51
+ desc "Stops the mongrel app server"
52
+ task :stop, :roles => :mongrel do
53
+ mongrel_stop
54
+ end
55
+
56
+ desc "Starts the mongrel app server"
57
+ task :start, :roles => :mongrel do
58
+ mongrel_start
59
+ end
60
+
61
+ deploy.task :restart, :roles => :app do
62
+ rubber.mongrel.restart
63
+ end
64
+
65
+ deploy.task :stop, :roles => :app do
66
+ rubber.mongrel.stop
67
+ end
68
+
69
+ deploy.task :start, :roles => :app do
70
+ rubber.mongrel.start
71
+ end
72
+
73
+ end
74
+
75
+ end
@@ -0,0 +1,12 @@
1
+ <%
2
+ @path = "#{RUBBER_ROOT}/config/mongrel_cluster.yml"
3
+ %>
4
+ ---
5
+ user: <%= rubber_env.app_user %>
6
+ group: <%= rubber_env.app_user %>
7
+ cwd: <%= RUBBER_ROOT %>
8
+ port: "<%= rubber_env.mongrel_base_port %>"
9
+ environment: <%= RUBBER_ENV %>
10
+ address: <%= rubber_env.host %>
11
+ pid_file: tmp/pids/mongrel.pid
12
+ servers: <%= rubber_env.mongrel_count %>
@@ -0,0 +1,20 @@
1
+ <%
2
+ @path = '/etc/monit/monit.d/monit-mongrel.conf'
3
+ %>
4
+
5
+ <% (0..(rubber_env.mongrel_count.to_i - 1)).each do |i| %>
6
+
7
+ <% PORT = rubber_env.mongrel_base_port + i %>
8
+ <% PIDFILE = "#{RUBBER_ROOT}/tmp/pids/mongrel.#{PORT}.pid" %>
9
+ check process mongrel-<%= PORT %> with pidfile <%= PIDFILE %>
10
+ group mongrel-<%= RUBBER_ENV %>
11
+ start program = "/bin/sh -c 'cd <%= RUBBER_ROOT %> && PATH=/usr/local/bin:$PATH && mongrel_rails cluster::start --clean --only <%= PORT %>'"
12
+ <%
13
+ # Stop gracefully - monit waits for stop to complete (since below process exits immediately, it must
14
+ # wait for pid to disappear) before trying to start
15
+ %>
16
+ stop program = "/bin/sh -c 'cd <%= RUBBER_ROOT %> && PATH=/usr/local/bin:$PATH && mongrel_rails cluster::stop --clean --only <%= PORT %> && sleep 30 && mongrel_rails cluster::stop --clean --force --only <%= PORT %>'"
17
+ if totalmem > 200.0 MB for 3 cycles then restart
18
+ <%# monit needs to test on same same interface that mongrel is listening on (see mongrel_cluster.yml) %>
19
+ if failed host <%= rubber_env.host %> port <%= PORT %> protocol http with timeout 10 seconds for 10 cycles then restart
20
+ <% end %>
@@ -0,0 +1,9 @@
1
+
2
+ # These will probably need to be used by the rubber module used for the web role (nginx)
3
+ mongrel_base_port: 7000
4
+ mongrel_count: "#{RUBBER_ENV == 'production' ? 8 : 2}"
5
+
6
+ roles:
7
+ app:
8
+ gems: [mongrel, mongrel_cluster]
9
+
@@ -0,0 +1 @@
1
+ description: The mongrel module
@@ -0,0 +1,15 @@
1
+ <%
2
+ @path = '/etc/default/monit'
3
+ %>
4
+
5
+ # Defaults for monit initscript
6
+ # sourced by /etc/init.d/monit
7
+ # installed at /etc/default/monit by maintainer scripts
8
+ # Fredrik Steen <stone@debian.org>
9
+
10
+ # You must set this variable to for monit to start
11
+ startup=1
12
+
13
+ # To change the intervals which monit should run uncomment
14
+ # and change this variable.
15
+ # CHECK_INTERVALS=180
@@ -0,0 +1,251 @@
1
+ <%
2
+ @path = '/etc/monit/monitrc'
3
+ %>
4
+
5
+ ###############################################################################
6
+ ## Monit control file
7
+ ###############################################################################
8
+ ##
9
+ ## Comments begin with a '#' and extend through the end of the line. Keywords
10
+ ## are case insensitive. All path's MUST BE FULLY QUALIFIED, starting with '/'.
11
+ ##
12
+ ## Bellow is the example of some frequently used statements. For information
13
+ ## about the control file, a complete list of statements and options please
14
+ ## have a look in the monit manual.
15
+ ##
16
+ ##
17
+ ###############################################################################
18
+ ## Global section
19
+ ###############################################################################
20
+ ##
21
+ ## Start monit in background (run as daemon) and check the services at 2-minute
22
+ ## intervals.
23
+ #
24
+ # set daemon 120
25
+ set daemon 60
26
+
27
+ #
28
+ #
29
+ ## Set syslog logging with the 'daemon' facility. If the FACILITY option is
30
+ ## omited, monit will use 'user' facility by default. You can specify the
31
+ ## path to the file for monit native logging.
32
+ #
33
+ # set logfile syslog facility log_daemon
34
+ set logfile /var/log/monit.log
35
+ #
36
+ #
37
+ ## Set list of mailservers for alert delivery. Multiple servers may be
38
+ ## specified using comma separator. By default monit uses port 25 - it is
39
+ ## possible to override it with the PORT option.
40
+ #
41
+ # set mailserver mail.bar.baz, # primary mailserver
42
+ # backup.bar.baz port 10025, # backup mailserver on port 10025
43
+ # localhost # fallback relay
44
+ #
45
+ #
46
+ ## By default monit will drop the event alert, in the case that there is no
47
+ ## mailserver available. In the case that you want to keep the events for
48
+ ## later delivery retry, you can use the EVENTQUEUE statement. The base
49
+ ## directory where undelivered events will be stored is specified by the
50
+ ## BASEDIR option. You can limit the maximal queue size using the SLOTS
51
+ ## option (if omited then the queue is limited just by the backend filesystem).
52
+ #
53
+ # set eventqueue
54
+ # basedir /var/monit # set the base directory where events will be stored
55
+ # slots 100 # optionaly limit the queue size
56
+ #
57
+ #
58
+ ## Monit by default uses the following alert mail format:
59
+ ##
60
+ ## --8<--
61
+ ## From: monit@$HOST # sender
62
+ ## Subject: monit alert -- $EVENT $SERVICE # subject
63
+ ##
64
+ ## $EVENT Service $SERVICE #
65
+ ## #
66
+ ## Date: $DATE #
67
+ ## Action: $ACTION #
68
+ ## Host: $HOST # body
69
+ ## Description: $DESCRIPTION #
70
+ ## #
71
+ ## Your faithful employee, #
72
+ ## monit #
73
+ ## --8<--
74
+ ##
75
+ ## You can override the alert message format or its parts such as subject
76
+ ## or sender using the MAIL-FORMAT statement. Macros such as $DATE, etc.
77
+ ## are expanded on runtime. For example to override the sender:
78
+ #
79
+ # set mail-format { from: monit@foo.bar }
80
+ #
81
+ #
82
+ ## You can set the alert recipients here, which will receive the alert for
83
+ ## each service. The event alerts may be restricted using the list.
84
+ #
85
+ # set alert sysadm@foo.bar # receive all alerts
86
+ # set alert manager@foo.bar only on { timeout } # receive just service-
87
+ # # timeout alert
88
+
89
+ # excluding instance, changed
90
+ set alert <%= rubber_env.admin_email %> only on {
91
+ connection
92
+ checksum
93
+ data
94
+ exec
95
+ gid
96
+ icmp
97
+ invalid
98
+ match
99
+ nonexist
100
+ permission
101
+ resource
102
+ size
103
+ timeout
104
+ timestamp
105
+ uid
106
+ }
107
+
108
+ #
109
+ #
110
+ ## Monit has an embedded webserver, which can be used to view the
111
+ ## configuration, actual services parameters or manage the services using the
112
+ ## web interface.
113
+ #
114
+ # set httpd port 2812 and
115
+ # use address localhost # only accept connection from localhost
116
+ # allow localhost # allow localhost to connect to the server and
117
+ # allow admin:monit # require user 'admin' with password 'monit'
118
+ #
119
+
120
+ <%
121
+ tools_server = rubber_instances.for_role('web_tools').first.internal_ip rescue "127.0.0.1"
122
+ %>
123
+ set httpd port <%= rubber_env.monit_admin_port %>
124
+ allow <%= tools_server %>
125
+
126
+ #
127
+ ###############################################################################
128
+ ## Services
129
+ ###############################################################################
130
+ ##
131
+ ## Check the general system resources such as load average, cpu and memory
132
+ ## usage. Each rule specifies the tested resource, the limit and the action
133
+ ## which will be performed in the case that the test failed.
134
+ #
135
+ # check system myhost.mydomain.tld
136
+ # if loadavg (1min) > 4 then alert
137
+ # if loadavg (5min) > 2 then alert
138
+ # if memory usage > 75% then alert
139
+ # if cpu usage (user) > 70% then alert
140
+ # if cpu usage (system) > 30% then alert
141
+ # if cpu usage (wait) > 20% then alert
142
+ #
143
+ #
144
+ ## Check a file for existence, checksum, permissions, uid and gid. In addition
145
+ ## to the recipients in the global section, customized alert will be send to
146
+ ## the additional recipient. The service may be grouped using the GROUP option.
147
+ #
148
+ # check file apache_bin with path /usr/local/apache/bin/httpd
149
+ # if failed checksum and
150
+ # expect the sum 8f7f419955cefa0b33a2ba316cba3659 then unmonitor
151
+ # if failed permission 755 then unmonitor
152
+ # if failed uid root then unmonitor
153
+ # if failed gid root then unmonitor
154
+ # alert security@foo.bar on {
155
+ # checksum, permission, uid, gid, unmonitor
156
+ # } with the mail-format { subject: Alarm! }
157
+ # group server
158
+ #
159
+ #
160
+ ## Check that a process is running, responding on the HTTP and HTTPS request,
161
+ ## check its resource usage such as cpu and memory, number of childrens.
162
+ ## In the case that the process is not running, monit will restart it by
163
+ ## default. In the case that the service was restarted very often and the
164
+ ## problem remains, it is possible to disable the monitoring using the
165
+ ## TIMEOUT statement. The service depends on another service (apache_bin) which
166
+ ## is defined in the monit control file as well.
167
+ #
168
+ # check process apache with pidfile /usr/local/apache/logs/httpd.pid
169
+ # start program = "/etc/init.d/httpd start"
170
+ # stop program = "/etc/init.d/httpd stop"
171
+ # if cpu > 60% for 2 cycles then alert
172
+ # if cpu > 80% for 5 cycles then restart
173
+ # if totalmem > 200.0 MB for 5 cycles then restart
174
+ # if children > 250 then restart
175
+ # if loadavg(5min) greater than 10 for 8 cycles then stop
176
+ # if failed host www.tildeslash.com port 80 protocol http
177
+ # and request "/monit/doc/next.php"
178
+ # then restart
179
+ # if failed port 443 type tcpssl protocol http
180
+ # with timeout 15 seconds
181
+ # then restart
182
+ # if 3 restarts within 5 cycles then timeout
183
+ # depends on apache_bin
184
+ # group server
185
+ #
186
+ #
187
+ ## Check the device permissions, uid, gid, space and inode usage. Other
188
+ ## services such as databases may depend on this resource and automatical
189
+ ## graceful stop may be cascaded to them before the filesystem will become
190
+ ## full and the data will be lost.
191
+ #
192
+ # check device datafs with path /dev/sdb1
193
+ # start program = "/bin/mount /data"
194
+ # stop program = "/bin/umount /data"
195
+ # if failed permission 660 then unmonitor
196
+ # if failed uid root then unmonitor
197
+ # if failed gid disk then unmonitor
198
+ # if space usage > 80% for 5 times within 15 cycles then alert
199
+ # if space usage > 99% then stop
200
+ # if inode usage > 30000 then alert
201
+ # if inode usage > 99% then stop
202
+ # group server
203
+ #
204
+ #
205
+ ## Check a file's timestamp: when it becomes older then 15 minutes, the
206
+ ## file is not updated and something is wrong. In the case that the size
207
+ ## of the file exceeded given limit, perform the script.
208
+ #
209
+ # check file database with path /data/mydatabase.db
210
+ # if failed permission 700 then alert
211
+ # if failed uid data then alert
212
+ # if failed gid data then alert
213
+ # if timestamp > 15 minutes then alert
214
+ # if size > 100 MB then exec "/my/cleanup/script"
215
+ #
216
+ #
217
+ ## Check the directory permission, uid and gid. An event is triggered
218
+ ## if the directory does not belong to the user with the uid 0 and
219
+ ## the gid 0. In the addition the permissions have to match the octal
220
+ ## description of 755 (see chmod(1)).
221
+ #
222
+ # check directory bin with path /bin
223
+ # if failed permission 755 then unmonitor
224
+ # if failed uid 0 then unmonitor
225
+ # if failed gid 0 then unmonitor
226
+ #
227
+ #
228
+ ## Check the remote host network services availability and the response
229
+ ## content. One of three pings, a successfull connection to a port and
230
+ ## application level network check is performed.
231
+ #
232
+ # check host myserver with address 192.168.1.1
233
+ # if failed icmp type echo count 3 with timeout 3 seconds then alert
234
+ # if failed port 3306 protocol mysql with timeout 15 seconds then alert
235
+ # if failed url
236
+ # http://user:password@www.foo.bar:8080/?querystring
237
+ # and content == 'action="j_security_check"'
238
+ # then alert
239
+ #
240
+ #
241
+ ###############################################################################
242
+ ## Includes
243
+ ###############################################################################
244
+ ##
245
+ ## It is possible to include the configuration or its parts from other files or
246
+ ## directories.
247
+ #
248
+ include /etc/monit/monit.d/*.conf
249
+ #
250
+ #
251
+
@@ -0,0 +1,32 @@
1
+
2
+ namespace :rubber do
3
+
4
  namespace :monit do
5
+
6
+ rubber.allow_optional_tasks(self)
7
+
8
+ # monit needs to get stopped first and started last so that it doesn't
9
+ # mess with us restarting everything as part of a deploy.
10
+ before "rubber:pre_stop", "rubber:monit:stop"
11
+ before "rubber:pre_restart", "rubber:monit:stop"
12
+ after "rubber:post_start", "rubber:monit:start"
13
+ after "rubber:post_restart", "rubber:monit:start"
14
+
15
+ desc "Start monit daemon monitoring"
16
+ task :start do
17
+ run "/etc/init.d/monit start"
18
+ end
19
+
20
+ desc "Stop monit daemon monitoring"
21
+ task :stop, :on_error => :continue do
22
+ run "/etc/init.d/monit stop"
23
+ end
24
+
25
+ desc "Restart monit daemon monitoring"
26
+ task :restart do
27
+ stop
28
+ start
29
+ end
30
+
31
+ end
32
+
33
+ end