rubber 1.8.0 → 1.9.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.
- data/CHANGELOG +29 -0
- data/VERSION +1 -1
- data/generators/vulcanize/templates/base/config/rubber/deploy-util.rb +1 -1
- data/generators/vulcanize/templates/base/config/rubber/rubber.yml +2 -2
- data/generators/vulcanize/templates/postgresql/config/rubber/deploy-postgresql.rb +1 -1
- data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +2 -2
- data/lib/generators/vulcanize/templates/base/config/rubber/deploy-util.rb +1 -1
- data/lib/generators/vulcanize/templates/base/config/rubber/rubber.yml +2 -2
- data/lib/generators/vulcanize/templates/postgresql/config/rubber/deploy-postgresql.rb +1 -1
- data/lib/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +2 -2
- data/lib/rubber/environment.rb +6 -1
- data/lib/rubber/recipes/rubber/volumes.rb +102 -5
- metadata +4 -4
data/CHANGELOG
CHANGED
@@ -1,3 +1,32 @@
|
|
1
|
+
1.8.0
|
2
|
+
-----
|
3
|
+
|
4
|
+
Regenerate gemspec for version 1.8.0 <1a924f5> [Kevin Menard]
|
5
|
+
Bumped the version of Passenger to 3.0.1. <c419f34> [Kevin Menard]
|
6
|
+
Bumped the version of RVM. <52c9891> [Kevin Menard]
|
7
|
+
Merge branch 'tags_support' <3396ceb> [Kevin Menard]
|
8
|
+
Handle Amazon being slow to update. <e89a7ae> [Kevin Menard]
|
9
|
+
Added a comment to help people that change their ServerName from the default. <71ce99a> [Kevin Menard]
|
10
|
+
We need this perl package for the postgres munin plugins. <4ae9e6c> [Kevin Menard]
|
11
|
+
We need a newer amazon-ec2 for tags support. <90b20ba> [Kevin Menard]
|
12
|
+
Added support for creating and updating tags on EC2 instances. <d29eda9> [Kevin Menard]
|
13
|
+
Merge branch 'master' of github.com:wr0ngway/rubber <5ca9ce0> [Kevin Menard]
|
14
|
+
Fixed issue with RVM, ruby 1.9.2, and passenger munin plugins. <623400b> [Kevin Menard]
|
15
|
+
Set up munin for PostgreSQL. <4f9874e> [Kevin Menard]
|
16
|
+
Fixes for raiding ephemeral drives <7a0c0d2> [Matt Conway]
|
17
|
+
Watch attachment status for more reliable ebs mounts <44ebdae> [Matt Conway]
|
18
|
+
Updated config for PostgreSQL 9. <9ade749> [Kevin Menard]
|
19
|
+
Don't show Passenger 3 friendly error pages in production. <126093a> [Kevin Menard]
|
20
|
+
Updated config for redis 2.0. <f4ed84a> [Kevin Menard]
|
21
|
+
Support installation of redis 2.0. <e340091> [Kevin Menard]
|
22
|
+
Merge branch 'master' of https://github.com/caike/rubber <4269178> [Kevin Menard]
|
23
|
+
Fixed bug with RVM ruby location and updated to the latest version. <bd8805b> [Kevin Menard]
|
24
|
+
Improved passenger 3 setup. <b72c5c0> [Kevin Menard]
|
25
|
+
Changes passenger generator to use version 3.0.0 and removes deprecated option. <b64f623> [Kristopher Murata]
|
26
|
+
Skipping SSL certificate check on wget to github due to wget bug. More info: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=409938 <3d0562e> [caike souza]
|
27
|
+
Merge branch 'master' of github.com:wr0ngway/rubber <48269b5> [Matt Conway]
|
28
|
+
allow rubber:config in test as well as dev <8954cd6> [Matt Conway]
|
29
|
+
|
1
30
|
1.7.2
|
2
31
|
-----
|
3
32
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.9.0
|
@@ -59,7 +59,7 @@ namespace :rubber do
|
|
59
59
|
# Use database.yml to get connection params
|
60
60
|
db = YAML::load(ERB.new(IO.read(File.join(File.dirname(__FILE__), '..','database.yml'))).result)[RUBBER_ENV]
|
61
61
|
user = db['username']
|
62
|
-
pass = db['
|
62
|
+
pass = db['password']
|
63
63
|
pass = nil if pass and pass.strip.size == 0
|
64
64
|
host = db['host']
|
65
65
|
name = db['database']
|
@@ -58,8 +58,8 @@ cloud_providers:
|
|
58
58
|
#
|
59
59
|
# NOTE: for some reason Capistrano requires you to have both the public and
|
60
60
|
# the private key in the same folder, the public key should have the
|
61
|
-
# extension ".pub". The easiest
|
62
|
-
#
|
61
|
+
# extension ".pub". The easiest way to get your hand on this is to create the
|
62
|
+
# public key from the private key: ssh-keygen -y -f gsg-keypair > gsg-keypair.pub
|
63
63
|
#
|
64
64
|
key_name: gsg-keypair
|
65
65
|
key_file: "#{Dir[(File.expand_path('~') rescue '/root') + '/.ec2/*' + cloud_providers.aws.key_name].first}"
|
@@ -7,7 +7,7 @@ namespace :rubber do
|
|
7
7
|
|
8
8
|
before "rubber:install_packages", "rubber:postgresql:setup_apt_sources"
|
9
9
|
|
10
|
-
task :setup_apt_sources, :roles => :
|
10
|
+
task :setup_apt_sources, :roles => [:postgresql_master, :postgresql_save] do
|
11
11
|
rsudo "add-apt-repository ppa:pitti/postgresql"
|
12
12
|
end
|
13
13
|
|
@@ -17,7 +17,7 @@ namespace :rubber do
|
|
17
17
|
|
18
18
|
task :custom_install, :roles => :sphinx do
|
19
19
|
# install sphinx from source
|
20
|
-
ver = "0.9.
|
20
|
+
ver = "0.9.9"
|
21
21
|
rubber.sudo_script 'install_sphinx', <<-ENDSCRIPT
|
22
22
|
# check if already installed
|
23
23
|
if [ -x /usr/local/bin/searchd ]
|
@@ -32,7 +32,7 @@ namespace :rubber do
|
|
32
32
|
TMPDIR=`mktemp -d` || exit 1
|
33
33
|
cd $TMPDIR
|
34
34
|
echo 'Downloading'
|
35
|
-
wget -qN http://www.sphinxsearch.com/
|
35
|
+
wget -qN http://www.sphinxsearch.com/files/sphinx-#{ver}.tar.gz
|
36
36
|
echo 'Unpacking'
|
37
37
|
tar xf sphinx-#{ver}.tar.gz
|
38
38
|
cd sphinx-#{ver}
|
@@ -59,7 +59,7 @@ namespace :rubber do
|
|
59
59
|
# Use database.yml to get connection params
|
60
60
|
db = YAML::load(ERB.new(IO.read(File.join(File.dirname(__FILE__), '..','database.yml'))).result)[RUBBER_ENV]
|
61
61
|
user = db['username']
|
62
|
-
pass = db['
|
62
|
+
pass = db['password']
|
63
63
|
pass = nil if pass and pass.strip.size == 0
|
64
64
|
host = db['host']
|
65
65
|
name = db['database']
|
@@ -58,8 +58,8 @@ cloud_providers:
|
|
58
58
|
#
|
59
59
|
# NOTE: for some reason Capistrano requires you to have both the public and
|
60
60
|
# the private key in the same folder, the public key should have the
|
61
|
-
# extension ".pub". The easiest
|
62
|
-
#
|
61
|
+
# extension ".pub". The easiest way to get your hand on this is to create the
|
62
|
+
# public key from the private key: ssh-keygen -y -f gsg-keypair > gsg-keypair.pub
|
63
63
|
#
|
64
64
|
key_name: gsg-keypair
|
65
65
|
key_file: "#{Dir[(File.expand_path('~') rescue '/root') + '/.ec2/*' + cloud_providers.aws.key_name].first}"
|
@@ -7,7 +7,7 @@ namespace :rubber do
|
|
7
7
|
|
8
8
|
before "rubber:install_packages", "rubber:postgresql:setup_apt_sources"
|
9
9
|
|
10
|
-
task :setup_apt_sources, :roles => :
|
10
|
+
task :setup_apt_sources, :roles => [:postgresql_master, :postgresql_save] do
|
11
11
|
rsudo "add-apt-repository ppa:pitti/postgresql"
|
12
12
|
end
|
13
13
|
|
@@ -17,7 +17,7 @@ namespace :rubber do
|
|
17
17
|
|
18
18
|
task :custom_install, :roles => :sphinx do
|
19
19
|
# install sphinx from source
|
20
|
-
ver = "0.9.
|
20
|
+
ver = "0.9.9"
|
21
21
|
rubber.sudo_script 'install_sphinx', <<-ENDSCRIPT
|
22
22
|
# check if already installed
|
23
23
|
if [ -x /usr/local/bin/searchd ]
|
@@ -32,7 +32,7 @@ namespace :rubber do
|
|
32
32
|
TMPDIR=`mktemp -d` || exit 1
|
33
33
|
cd $TMPDIR
|
34
34
|
echo 'Downloading'
|
35
|
-
wget -qN http://www.sphinxsearch.com/
|
35
|
+
wget -qN http://www.sphinxsearch.com/files/sphinx-#{ver}.tar.gz
|
36
36
|
echo 'Unpacking'
|
37
37
|
tar xf sphinx-#{ver}.tar.gz
|
38
38
|
cd sphinx-#{ver}
|
data/lib/rubber/environment.rb
CHANGED
@@ -32,7 +32,12 @@ module Rubber
|
|
32
32
|
def read_config(file)
|
33
33
|
Rubber.logger.debug{"Reading rubber configuration from #{file}"}
|
34
34
|
if File.exist?(file)
|
35
|
-
|
35
|
+
begin
|
36
|
+
@items = Environment.combine(@items, YAML.load_file(file) || {})
|
37
|
+
rescue Exception => e
|
38
|
+
Rubber.logger.error{"Unable to read rubber configuration from #{file}"}
|
39
|
+
raise
|
40
|
+
end
|
36
41
|
end
|
37
42
|
end
|
38
43
|
|
@@ -2,7 +2,7 @@ namespace :rubber do
|
|
2
2
|
|
3
3
|
desc <<-DESC
|
4
4
|
Sets up persistent volumes in the cloud
|
5
|
-
All volumes defined in rubber.yml will be created if
|
5
|
+
All volumes defined in rubber.yml will be created if necessary, and attached/mounted on their associated instances
|
6
6
|
DESC
|
7
7
|
required_task :setup_volumes do
|
8
8
|
rubber_instances.filtered.each do |ic|
|
@@ -31,6 +31,11 @@ namespace :rubber do
|
|
31
31
|
format = raid_spec['source_devices'].all? {|dev| created_vols.include?(dev)}
|
32
32
|
setup_raid_volume(ic, raid_spec, format)
|
33
33
|
end
|
34
|
+
|
35
|
+
lvm_volume_group_specs = env.lvm_volume_groups || []
|
36
|
+
lvm_volume_group_specs.each do |lvm_volume_group_spec|
|
37
|
+
setup_lvm_group(ic, lvm_volume_group_spec)
|
38
|
+
end
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
@@ -114,8 +119,8 @@ namespace :rubber do
|
|
114
119
|
echo '#{vol_spec['device']} #{vol_spec['mount']} #{vol_spec['filesystem']} noatime 0 0 # rubber volume #{vol_id}' >> /etc/fstab
|
115
120
|
|
116
121
|
#{('yes | mkfs -t ' + vol_spec['filesystem'] + ' ' + vol_spec['device']) if created}
|
117
|
-
mkdir -p '#{vol_spec['mount']}'
|
118
|
-
mount '#{vol_spec['mount']}'
|
122
|
+
#{("mkdir -p '#{vol_spec['mount']}'") if vol_spec['mount']}
|
123
|
+
#{("mount '#{vol_spec['mount']}'") if vol_spec['mount']}
|
119
124
|
fi
|
120
125
|
ENDSCRIPT
|
121
126
|
end
|
@@ -195,7 +200,7 @@ namespace :rubber do
|
|
195
200
|
|
196
201
|
def setup_raid_volume(ic, raid_spec, create=false)
|
197
202
|
if create
|
198
|
-
mdadm_init = "yes | mdadm --create #{raid_spec['device']} --level #{raid_spec['raid_level']} --raid-devices #{raid_spec['source_devices'].size} #{raid_spec['source_devices'].sort.join(' ')}"
|
203
|
+
mdadm_init = "yes | mdadm --create #{raid_spec['device']} --metadata=1.1 --level #{raid_spec['raid_level']} --raid-devices #{raid_spec['source_devices'].size} #{raid_spec['source_devices'].sort.join(' ')}"
|
199
204
|
else
|
200
205
|
mdadm_init = "yes | mdadm --assemble #{raid_spec['device']} #{raid_spec['source_devices'].sort.join(' ')}"
|
201
206
|
end
|
@@ -219,7 +224,8 @@ namespace :rubber do
|
|
219
224
|
# set reconstruction speed
|
220
225
|
echo $((30*1024)) > /proc/sys/dev/raid/speed_limit_min
|
221
226
|
|
222
|
-
echo '
|
227
|
+
echo 'MAILADDR #{rubber_env.admin_email}' > /etc/mdadm/mdadm.conf
|
228
|
+
echo 'DEVICE /dev/hd*[0-9] /dev/sd*[0-9]' >> /etc/mdadm/mdadm.conf
|
223
229
|
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
|
224
230
|
|
225
231
|
mv /etc/rc.local /etc/rc.local.bak
|
@@ -235,6 +241,97 @@ namespace :rubber do
|
|
235
241
|
_setup_raid_volume
|
236
242
|
end
|
237
243
|
|
244
|
+
def setup_lvm_group(ic, lvm_volume_group_spec)
|
245
|
+
physical_volumes = lvm_volume_group_spec['physical_volumes'].kind_of?(Array) ? lvm_volume_group_spec['physical_volumes'] : [lvm_volume_group_spec['physical_volumes']]
|
246
|
+
volume_group_name = lvm_volume_group_spec['name']
|
247
|
+
extent_size = lvm_volume_group_spec['extent_size'] || 32
|
248
|
+
|
249
|
+
volumes = lvm_volume_group_spec['volumes'] || []
|
250
|
+
|
251
|
+
def create_logical_volume_in_bash(volume, volume_group_name)
|
252
|
+
device_name = "/dev/#{volume_group_name}/#{volume['name']}"
|
253
|
+
|
254
|
+
resize_command =
|
255
|
+
case volume['filesystem']
|
256
|
+
when 'xfs'
|
257
|
+
"xfs_growfs '#{volume['mount']}'"
|
258
|
+
when 'reiserfs'
|
259
|
+
"resize_reiserfs -f #{device_name}"
|
260
|
+
when 'jfs'
|
261
|
+
"mount -o remount,resize #{volume['mount']}"
|
262
|
+
when /^ext/
|
263
|
+
<<-RESIZE_COMMAND
|
264
|
+
umount #{device_name}
|
265
|
+
ext2resize #{device_name}
|
266
|
+
mount #{volume['mount']}
|
267
|
+
RESIZE_COMMAND
|
268
|
+
else
|
269
|
+
raise "Do not know how to resize filesystem '#{volume['filesystem']}'"
|
270
|
+
end
|
271
|
+
|
272
|
+
<<-ENDSCRIPT
|
273
|
+
# Add the logical volume mount point to /etc/fstab.
|
274
|
+
if ! grep -q '#{volume['mount']}' /etc/fstab; then
|
275
|
+
if mount | grep -q '#{volume['mount']}'; then
|
276
|
+
umount '#{volume['mount']}'
|
277
|
+
fi
|
278
|
+
|
279
|
+
mv /etc/fstab /etc/fstab.bak
|
280
|
+
cat /etc/fstab.bak | grep -v '#{volume['mount']}' > /etc/fstab
|
281
|
+
echo '#{device_name} #{volume['mount']} #{volume['filesystem']} noatime 0 0 # rubber LVM volume' >> /etc/fstab
|
282
|
+
fi
|
283
|
+
|
284
|
+
# Check if the logical volume exists or not.
|
285
|
+
if ! lvdisplay #{device_name} >> /dev/null 2>&1; then
|
286
|
+
# Create the logical volume.
|
287
|
+
lvcreate -L #{volume['size']}G -i #{volume['stripes'] || 1} -n#{volume['name']} #{volume_group_name}
|
288
|
+
|
289
|
+
# Format the logical volume.
|
290
|
+
yes | mkfs -t #{volume['filesystem']} #{volume['filesystem_opts']} #{device_name}
|
291
|
+
|
292
|
+
# Create the mount point.
|
293
|
+
mkdir -p '#{volume['mount']}'
|
294
|
+
|
295
|
+
# Mount the volume.
|
296
|
+
mount '#{volume['mount']}'
|
297
|
+
else
|
298
|
+
# Try to extend the volume size.
|
299
|
+
if lvextend -L #{volume['size']}G -i #{volume['stripes'] || 1} #{device_name} >> /dev/null 2&>1; then
|
300
|
+
|
301
|
+
# If we actually resized the volume, then we need to resize the filesystem.
|
302
|
+
#{resize_command}
|
303
|
+
fi
|
304
|
+
fi
|
305
|
+
ENDSCRIPT
|
306
|
+
end
|
307
|
+
|
308
|
+
task :_setup_lvm_group, :hosts => ic.external_ip do
|
309
|
+
rubber.sudo_script 'setup_lvm_group', <<-ENDSCRIPT
|
310
|
+
# Check and see if the physical volume is already set up for LVM. If not, initialize it to be so.
|
311
|
+
for device in #{physical_volumes.join(' ')}
|
312
|
+
do
|
313
|
+
if ! pvdisplay $device >> /dev/null 2>&1; then
|
314
|
+
pvcreate $device
|
315
|
+
|
316
|
+
# See if the volume group already exists. If so, add the new physical volume to it.
|
317
|
+
if vgdisplay #{volume_group_name} >> /dev/null 2>&1; then
|
318
|
+
vgextend #{volume_group_name} $device
|
319
|
+
fi
|
320
|
+
fi
|
321
|
+
done
|
322
|
+
|
323
|
+
# If the volume group does not exist yet, construct it with all the physical volumes.
|
324
|
+
if ! vgdisplay #{volume_group_name} >> /dev/null 2>&1; then
|
325
|
+
vgcreate #{volume_group_name} #{physical_volumes.join(' ')} -s #{extent_size}
|
326
|
+
fi
|
327
|
+
|
328
|
+
# Set up each of the logical volumes.
|
329
|
+
#{volumes.collect { |volume| create_logical_volume_in_bash(volume, volume_group_name) }.join("\n\n") }
|
330
|
+
ENDSCRIPT
|
331
|
+
end
|
332
|
+
_setup_lvm_group
|
333
|
+
end
|
334
|
+
|
238
335
|
def destroy_volume(volume_id)
|
239
336
|
|
240
337
|
logger.info "Detaching volume #{volume_id}"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 51
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 9
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.9.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matt Conway
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-01-26 00:00:00 -05:00
|
19
19
|
default_executable: vulcanize
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|