rubber 2.0.4 → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. data/CHANGELOG +43 -5
  2. data/Rakefile +67 -35
  3. data/lib/rubber/recipes/rubber/setup.rb +4 -4
  4. data/lib/rubber/recipes/rubber/volumes.rb +2 -1
  5. data/lib/rubber/version.rb +1 -1
  6. data/rubber.gemspec +2 -0
  7. data/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +1 -1
  8. data/templates/apache/config/rubber/role/web_tools/tools-index.html +1 -1
  9. data/templates/cassandra/config/rubber/deploy-cassandra.rb +1 -1
  10. data/templates/collectd/config/rubber/deploy-collectd.rb +1 -1
  11. data/templates/complete_passenger_nginx/config/rubber/rubber-complete.yml +1 -0
  12. data/templates/elasticsearch/config/rubber/deploy-elasticsearch.rb +1 -1
  13. data/templates/graphite/config/rubber/deploy-graphite.rb +2 -2
  14. data/templates/graylog/config/rubber/deploy-graylog.rb +2 -2
  15. data/templates/jenkins/config/rubber/deploy-jenkins.rb +1 -1
  16. data/templates/mongodb/config/rubber/deploy-mongodb.rb +1 -1
  17. data/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +3 -3
  18. data/templates/passenger_nginx/config/rubber/role/passenger_nginx/nginx.conf +1 -1
  19. data/templates/redis/config/rubber/deploy-redis.rb +1 -1
  20. data/templates/torquebox/config/rubber/deploy-torquebox.rb +104 -0
  21. data/templates/torquebox/config/rubber/role/app/mod_manager.load +5 -0
  22. data/templates/torquebox/config/rubber/role/app/mod_proxy_cluster.conf +7 -0
  23. data/templates/torquebox/config/rubber/role/app/mod_proxy_cluster.load +5 -0
  24. data/templates/torquebox/config/rubber/role/app/mod_slotmem.load +5 -0
  25. data/templates/torquebox/config/rubber/role/app/torquebox-apache-vhost.conf +102 -0
  26. data/templates/torquebox/config/rubber/role/torquebox/monit-torquebox.conf +8 -0
  27. data/templates/torquebox/config/rubber/role/torquebox/standalone-ha.xml +616 -0
  28. data/templates/torquebox/config/rubber/role/torquebox/standalone.conf +83 -0
  29. data/templates/torquebox/config/rubber/role/torquebox/torquebox-upstart.conf +23 -0
  30. data/templates/torquebox/config/rubber/rubber-torquebox.yml +16 -0
  31. data/templates/torquebox/templates.yml +3 -0
  32. data/templates/zookeeper/config/rubber/deploy-zookeeper.rb +1 -1
  33. metadata +32 -4
data/CHANGELOG CHANGED
@@ -1,4 +1,41 @@
1
+ 2.0.5 (06/12/2012)
2
+ ------------------
3
+
4
+ New Features:
5
+ ============
6
+ [torquebox] Initial work on a TorqueBox template. <160557b>
7
+ [torquebox] Merge pull request #154 from wr0ngway/add_torquebox <d750ecb>
8
+ [torquebox] [torquebox] Bumped to TorqueBox 2.0.3 from 2.0.2. <2851768>
9
+ [torquebox] [torquebox] Do rolling deploys with TorqueBox so the site doesn't go down when deploying. <8582889>
10
+
11
+ Bug Fixes:
12
+ =========
13
+
14
+ [core] force older version of net-ssh till issues get resolved <5b8c2f7>
15
+ [core] Fix typo causing Ubuntu 11+ to time out waiting for incorrect volume id <cf1dfa4>
16
+ [core] Merge pull request #168 from akremer/fstab_fix <9d2e6fc>
17
+ [core] Restore fstab.bak if EBS times out <b27cc79>
18
+ [apache] use dash instead of another subdomain level for web tool proxy hosts to prevent ssl complaints with wildcard certs <8237bac>
19
+ [cassandra, collectd, elasticsearch, graphite, graylog, jenkins, mongodb, mysql_cluster, redis, zookeeper] be more strict in selecting role directory during bootstrap <f8818e4>
20
+ [complete_passenger_nginx] Changed passenger_nginx role dependencies so that web_tools can be run on a separate instance. <8a3cefb>
21
+ [complete_passenger_nginx] Merge pull request #166 from rwc9u/web_tools_nginx_multi_instance <44ec7e1>
22
+ [passenger_nginx] Changed nginx.conf to only include the tools.conf on an instance that has the web_tools role. See the following thread where this change was discussed: <376428f>
23
+ [passenger_nginx] Merge pull request #165 from rwc9u/web_tools_nginx <88ab69a>
24
+
25
+
26
+ 2.0.4 (05/15/2012)
27
+ ------------------
28
+
29
+ Bug Fixes:
30
+ =========
31
+
32
+ [apache] make sure admin uis know we are ssl so they generate correct urls <b6409da>
33
+ [collectd] fix syntax error <205a07a>
34
+ [resque] use puma to run resque server as a rackup with rails environment loaded so resque-retry can find job classes <518eb27>
35
+
36
+
1
37
  2.0.3 (05/11/2012)
38
+ ------------------
2
39
 
3
40
  New Features:
4
41
  ============
@@ -20,6 +57,7 @@ Bug Fixes:
20
57
 
21
58
 
22
59
  2.0.2 (05/08/2012)
60
+ ------------------
23
61
 
24
62
  New Features:
25
63
  ============
@@ -49,7 +87,7 @@ Bug Fixes:
49
87
 
50
88
 
51
89
  2.0.1 (04/29/2012)
52
- ----------
90
+ ------------------
53
91
 
54
92
  New Features:
55
93
  ============
@@ -73,7 +111,7 @@ Bug Fixes:
73
111
 
74
112
 
75
113
  2.0.0 (04/24/2012)
76
- ----------
114
+ ------------------
77
115
 
78
116
  New Features:
79
117
  ============
@@ -144,7 +182,7 @@ Locked the default version of Ruby down to a particular patch release so by defa
144
182
  Ruby 1.9.3 fixes with nginx
145
183
 
146
184
  1.15.0 (09/13/2011)
147
- -----
185
+ -------------------
148
186
 
149
187
  New Features:
150
188
  ============
@@ -179,13 +217,13 @@ Fixed timing issue with multiple resque workers starting (thanks Matt Conway)
179
217
  Fixed an issue with hostnames that happen to be monit commands (thanks Michael Glass)
180
218
 
181
219
  1.14.1 (06/02/2011)
182
- -----
220
+ -------------------
183
221
 
184
222
  Upgraded the version of RVM installed by default
185
223
  Switched from using our own installation method to using the new RVM installer
186
224
 
187
225
  1.14.0 (06/02/2011)
188
- -----
226
+ -------------------
189
227
 
190
228
  Projects using bundler will now run rake with bundle exec
191
229
  Added ability to lockdown the version of rake that RVM will install (vulcanize base for the changes)
data/Rakefile CHANGED
@@ -15,66 +15,98 @@ end
15
15
 
16
16
  task :changelog do
17
17
 
18
- helper = Bundler::GemHelper.new(Dir.pwd)
19
- version = "v#{helper.gemspec.version}"
20
-
21
18
  changelog_file = 'CHANGELOG'
22
19
  entries = ""
23
-
24
- # Get a list of current tags
25
- tags = `git tag -l`.split
26
- tags = tags.sort_by {|t| t[1..-1].split(".").collect {|s| s.to_i } }
27
- newest_tag = tags[-1]
28
-
29
- if version == newest_tag
30
- puts "You need to update version, same as most recent tag: #{version}"
31
- exit
20
+
21
+ helper = Bundler::GemHelper.new(Dir.pwd)
22
+ current_version = "v#{helper.gemspec.version}"
23
+ starting_version = nil
24
+ ending_version = nil, ending_version_name = nil
25
+
26
+ if ENV['VERSION']
27
+ ver = ENV['VERSION']
28
+ first_ver, second_ver = ver.split("..")
29
+ starting_version = "v#{first_ver.gsub(/^[^\d]*/, '')}" if ! first_ver.nil? && first_ver.size > 0
30
+ ending_version = "v#{second_ver.gsub(/^[^\d]*/, '')}" if ! second_ver.nil? && second_ver.size > 0
31
+ ending_version_name = ending_version if ending_version
32
32
  end
33
-
34
- # If we already have a changelog, make the last tag be the
35
- # last one in the changelog, and the next one be the one
36
- # following that in the tag list
37
- newest_changelog_version = nil
38
- if File.exist?(changelog_file)
33
+
34
+ # If we already have a changelog, make the starting_version be the
35
+ # last one in the changelog
36
+ #
37
+ if ! starting_version && File.exist?(changelog_file)
39
38
  entries = File.read(changelog_file)
40
39
  head = entries.split.first
41
- if head =~ /\d\.\d\.\d/
42
- newest_changelog_version = "v#{head}"
43
-
44
- if version == newest_changelog_version
45
- puts "You need to update version, same as most recent changelog: #{version}"
46
- exit
40
+ if head =~ /(\d\.\d\.\d).*/
41
+ starting_version = "v#{$1}"
42
+
43
+ if current_version == starting_version
44
+ puts "WARN: gemspec version is the same as most recent changelog: #{current_version}"
47
45
  end
48
-
49
46
  end
50
47
  end
48
+
49
+ # Get a list of current tags
50
+ tags = `git tag -l`.split
51
+ tags = tags.sort_by {|t| t[1..-1].split(".").collect {|s| s.to_i } }
52
+ newest_tag = tags[-1]
53
+
54
+ if current_version == newest_tag
55
+ # When generating CHANGELOG after release, we want the last tag as the ending version
56
+ ending_version = newest_tag
57
+ ending_version_name = newest_tag
58
+ else
59
+ # When generating CHANGELOG before release, we want the current ver as the ending version
60
+ ending_version = "HEAD"
61
+ ending_version_name = current_version
62
+ end
51
63
 
64
+ if starting_version
65
+ version_selector = "#{starting_version}..#{ending_version}"
66
+ else
67
+ puts "WARN: No starting version, dumping entire history, try: rake changelog VERSION=v1.2.3"
68
+ version_selector = ""
69
+ end
70
+
52
71
  # Generate changelog from repo
53
- log=`git log --pretty='format:%s <%h> [%cn]' #{newest_tag}..HEAD`
72
+ puts "Generating a changelog for #{version_selector}"
73
+ log=`git log --pretty='format:%s <%h>' #{version_selector}`.lines.to_a
54
74
 
55
75
  # Strip out maintenance entries
56
- log = log.lines.to_a.delete_if do |l|
76
+ log = log.delete_if do |l|
57
77
  l =~ /^Regenerated? gemspec/ ||
58
78
  l =~ /^version bump/i ||
79
+ l =~ /^bump version/i ||
59
80
  l =~ /^Updated changelog/ ||
60
81
  l =~ /^Merged? branch/
61
82
  end
62
-
83
+
84
+ # Add templates user needs to run vulcanize for
85
+ log = log.collect do |l|
86
+ if l =~ /<(.+)>/
87
+ ver = $1
88
+ files = `git diff --name-only #{ver}^1 #{ver}`.lines.to_a
89
+ templates = files.collect {|f| f =~ /templates\/([^\/]+)\// ? $1 : nil}.compact.sort.uniq
90
+ templates << 'core' if templates.size == 0
91
+ l = "[#{templates.join(", ")}] #{l}"
92
+ end
93
+ l
94
+ end
95
+
96
+ # sort so core comes first
97
+ log = log.sort_by {|s| s =~ /\[.*core.*\]/ ? "" : s }
98
+
63
99
  # Write out changelog file
64
100
  File.open(changelog_file, 'w') do |out|
65
- out.puts version.gsub(/^v/, '')
66
- out.puts "-----"
101
+ ver_title = ending_version_name.gsub(/^v/, '') + " (#{Time.now.strftime("%m/%d/%Y")})"
102
+ out.puts ver_title
103
+ out.puts "-" * ver_title.size
67
104
  out.puts "\n"
68
105
  out.puts log
69
106
  out.puts "\n"
70
107
  out.puts entries
71
108
  end
72
109
 
73
- # Commit and push
74
- unless ENV['NO_PUSH']
75
- sh "git ci -m'Updated changelog' #{changelog_file}"
76
- sh "git push"
77
- end
78
110
  end
79
111
 
80
112
  desc 'Test the rubber plugin.'
@@ -85,7 +85,7 @@ namespace :rubber do
85
85
  # graphite web app)
86
86
  if ic.role_names.include?('web_tools')
87
87
  Array(rubber_env.web_tools_proxies).each do |name, settings|
88
- hosts_data << "#{name}.#{ic.full_name}"
88
+ hosts_data << "#{name}-#{ic.full_name}"
89
89
  end
90
90
  end
91
91
 
@@ -123,7 +123,7 @@ namespace :rubber do
123
123
  # graphite web app)
124
124
  if ic.role_names.include?('web_tools')
125
125
  Array(rubber_env.web_tools_proxies).each do |name, settings|
126
- hosts_data << "#{name}.#{ic.full_name}"
126
+ hosts_data << "#{name}-#{ic.full_name}"
127
127
  end
128
128
  end
129
129
 
@@ -408,7 +408,7 @@ namespace :rubber do
408
408
  # graphite web app)
409
409
  if instance_item.role_names.include?('web_tools')
410
410
  Array(rubber_env.web_tools_proxies).each do |name, settings|
411
- provider.update("#{name}.#{instance_item.name}", instance_item.external_ip)
411
+ provider.update("#{name}-#{instance_item.name}", instance_item.external_ip)
412
412
  end
413
413
  end
414
414
  end
@@ -426,7 +426,7 @@ namespace :rubber do
426
426
  # graphite web app)
427
427
  if instance_item.role_names.include?('web_tools')
428
428
  Array(rubber_env.web_tools_proxies).each do |name, settings|
429
- provider.destroy("#{name}.#{instance_item.name}")
429
+ provider.destroy("#{name}-#{instance_item.name}")
430
430
  end
431
431
  end
432
432
  end
@@ -136,9 +136,10 @@ namespace :rubber do
136
136
  # Ensure volume is ready before running mkfs on it.
137
137
  echo 'Waiting for device'
138
138
  cnt=0
139
- while ! [[ -b #{vol_spec['device']} ]]; do
139
+ while ! [[ -b $device ]]; do
140
140
  if [[ "$cnt" -eq "15" ]]; then
141
141
  echo 'Timed out waiting for EBS device to be ready.'
142
+ mv /etc/fstab.bak /etc/fstab
142
143
  exit 1
143
144
  fi
144
145
  echo '.'
@@ -1,4 +1,4 @@
1
1
  module Rubber
2
- VERSION = "2.0.4"
2
+ VERSION = "2.0.5"
3
3
  end
4
4
 
data/rubber.gemspec CHANGED
@@ -29,6 +29,8 @@ Gem::Specification.new do |s|
29
29
  s.require_paths = ["lib"]
30
30
 
31
31
  s.add_dependency 'capistrano', '~> 2.12'
32
+ # TODO: force older version of net-ssh till connectivity issues with 2.5.x get resolved
33
+ s.add_dependency 'net-ssh', '~> 2.4.0'
32
34
  s.add_dependency 'thor'
33
35
  s.add_dependency 'clamp'
34
36
  s.add_dependency 'open4'
@@ -74,7 +74,7 @@ NameVirtualHost *:<%= rubber_env.web_tools_ssl_port %>
74
74
  proxy_host = rubber_instances.for_role(settings.role).first.full_name rescue nil
75
75
  next unless proxy_host
76
76
 
77
- host = "#{name}.#{rubber_env.full_host}"
77
+ host = "#{name}-#{rubber_env.full_host}"
78
78
  host_and_port = "#{host}:#{rubber_env.web_tools_ssl_port}"
79
79
 
80
80
  # don't use settings.path here - mapping the host/port is sufficient,
@@ -30,7 +30,7 @@
30
30
  # graphite web app)
31
31
  Array(rubber_env.web_tools_proxies).each do |name, settings|
32
32
  %>
33
- <li><a href="https://<%= name %>.<%= tools_host.full_name %>:<%= rubber_env.web_tools_ssl_port %><%= settings.path || '/' %>"><%= name.capitalize %></a></li>
33
+ <li><a href="https://<%= name %>-<%= tools_host.full_name %>:<%= rubber_env.web_tools_ssl_port %><%= settings.path || '/' %>"><%= name.capitalize %></a></li>
34
34
  <% end %>
35
35
 
36
36
  </ul>
@@ -64,7 +64,7 @@ namespace :rubber do
64
64
 
65
65
 
66
66
  # Gen just the conf for cassandra
67
- rubber.run_config(:file => "role/cassandra", :force => true, :deploy_path => release_path)
67
+ rubber.run_config(:file => "role/cassandra/", :force => true, :deploy_path => release_path)
68
68
  end
69
69
  end
70
70
  send task_name
@@ -14,7 +14,7 @@ namespace :rubber do
14
14
  if exists.strip.size == 0
15
15
  rubber.update_code_for_bootstrap
16
16
 
17
- rubber.run_config(:file => "role/collectd", :force => true, :deploy_path => release_path)
17
+ rubber.run_config(:file => "role/collectd/", :force => true, :deploy_path => release_path)
18
18
 
19
19
  restart
20
20
  end
@@ -1,6 +1,7 @@
1
1
  role_dependencies:
2
2
  web: [haproxy]
3
3
  app: [passenger_nginx]
4
+ web_tools: [passenger_nginx]
4
5
 
5
6
  web_port: 80
6
7
  web_ssl_port: 443
@@ -27,7 +27,7 @@ namespace :rubber do
27
27
  # After everything installed on machines, we need the source tree
28
28
  # on hosts in order to run rubber:config for bootstrapping the db
29
29
  rubber.update_code_for_bootstrap
30
- rubber.run_config(:file => "role/elasticsearch", :force => true, :deploy_path => release_path)
30
+ rubber.run_config(:file => "role/elasticsearch/", :force => true, :deploy_path => release_path)
31
31
 
32
32
  restart
33
33
  end
@@ -151,7 +151,7 @@ namespace :rubber do
151
151
  if exists.strip.size == 0
152
152
  rubber.update_code_for_bootstrap
153
153
 
154
- rubber.run_config(:file => "role/graphite_server", :force => true, :deploy_path => release_path)
154
+ rubber.run_config(:file => "role/graphite_server/", :force => true, :deploy_path => release_path)
155
155
 
156
156
  restart
157
157
  end
@@ -206,7 +206,7 @@ namespace :rubber do
206
206
  if exists.strip.size == 0
207
207
  rubber.update_code_for_bootstrap
208
208
 
209
- rubber.run_config(:file => "role/graphite_web", :force => true, :deploy_path => release_path)
209
+ rubber.run_config(:file => "role/graphite_web/", :force => true, :deploy_path => release_path)
210
210
 
211
211
  # django email validation barfs on localhost, but for full_host to work
212
212
  # in admin_email, we need a env with host defined
@@ -31,7 +31,7 @@ namespace :rubber do
31
31
  exists = capture("echo $(ls /etc/graylog2.conf 2> /dev/null)")
32
32
  if exists.strip.size == 0
33
33
  rubber.update_code_for_bootstrap
34
- rubber.run_config(:file => "role/graylog_server", :force => true, :deploy_path => release_path)
34
+ rubber.run_config(:file => "role/graylog_server/", :force => true, :deploy_path => release_path)
35
35
 
36
36
  restart
37
37
  end
@@ -80,7 +80,7 @@ namespace :rubber do
80
80
  if exists.strip.size == 0
81
81
  rubber.update_code_for_bootstrap
82
82
 
83
- rubber.run_config(:file => "role/graylog_web", :force => true, :deploy_path => release_path)
83
+ rubber.run_config(:file => "role/graylog_web/", :force => true, :deploy_path => release_path)
84
84
 
85
85
  rubber.sudo_script 'bootstrap_graylog_web', <<-ENDSCRIPT
86
86
  cd #{rubber_env.graylog_web_dir}
@@ -23,7 +23,7 @@ namespace :rubber do
23
23
  exists = capture("echo $(ls /etc/apache2/jenkins.auth 2> /dev/null)")
24
24
  if exists.strip.size == 0
25
25
  rubber.update_code_for_bootstrap
26
- rubber.run_config(:file => "role/jenkins", :force => true, :deploy_path => release_path)
26
+ rubber.run_config(:file => "role/jenkins/", :force => true, :deploy_path => release_path)
27
27
 
28
28
  restart
29
29
  rubber.apache.restart
@@ -23,7 +23,7 @@ namespace :rubber do
23
23
  exists = capture("echo $(ls #{rubber_env.mongodb_data_dir} 2> /dev/null)")
24
24
  if exists.strip.size == 0
25
25
  rubber.update_code_for_bootstrap
26
- rubber.run_config(:file => "role/mongodb", :force => true, :deploy_path => release_path)
26
+ rubber.run_config(:file => "role/mongodb/", :force => true, :deploy_path => release_path)
27
27
 
28
28
  restart
29
29
  end
@@ -60,7 +60,7 @@ namespace :rubber do
60
60
  task task_name, :hosts => ic.full_name do
61
61
  exists = capture("if grep -c rubber.*mysql_mgm /etc/mysql/ndb_mgmd.cnf &> /dev/null; then echo exists; fi")
62
62
  if exists.strip.size == 0
63
- rubber.run_config(:file => "role/mysql_mgm", :deploy_path => release_path)
63
+ rubber.run_config(:file => "role/mysql_mgm/", :deploy_path => release_path)
64
64
  rsudo "service mysql-ndb-mgm start"
65
65
  end
66
66
  end
@@ -72,7 +72,7 @@ namespace :rubber do
72
72
  task task_name, :hosts => ic.full_name do
73
73
  exists = capture("if grep -c rubber.*mysql_data /etc/mysql/my.cnf &> /dev/null; then echo exists; fi")
74
74
  if exists.strip.size == 0
75
- rubber.run_config(:file => "role/mysql_data", :deploy_path => release_path)
75
+ rubber.run_config(:file => "role/mysql_data/", :deploy_path => release_path)
76
76
  rsudo "service mysql-ndb start-initial"
77
77
  end
78
78
  end
@@ -84,7 +84,7 @@ namespace :rubber do
84
84
  task task_name, :hosts => ic.full_name do
85
85
  exists = capture("if grep -c rubber.*mysql_sql /etc/mysql/my.cnf &> /dev/null; then echo exists; fi")
86
86
  if exists.strip.size == 0
87
- rubber.run_config(:file => "role/mysql_sql", :deploy_path => release_path)
87
+ rubber.run_config(:file => "role/mysql_sql/", :deploy_path => release_path)
88
88
  rsudo "service mysql start"
89
89
  env = rubber_cfg.environment.bind()
90
90
  # For mysql 5.0 cluster, need to create users and database for EVERY sql node
@@ -59,7 +59,7 @@ http
59
59
  passenger_user <%= rubber_env.app_user %>;
60
60
 
61
61
  include /etc/nginx/rubber/passenger_nginx.conf;
62
- <% if rubber_instances.for_role('web_tools').first %>
62
+ <% if rubber_instances[rubber_env.host].role_names.include?('web_tools') %>
63
63
  include /etc/nginx/rubber/tools.conf;
64
64
  <% end %>
65
65
  }
@@ -47,7 +47,7 @@ namespace :rubber do
47
47
  rubber.update_code_for_bootstrap
48
48
 
49
49
  # Gen just the conf for cassandra
50
- rubber.run_config(:file => "role/redis", :force => true, :deploy_path => release_path)
50
+ rubber.run_config(:file => "role/redis/", :force => true, :deploy_path => release_path)
51
51
 
52
52
  restart
53
53
  end