ec2launcher 1.5.0 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +4 -0
- data/lib/ec2launcher/environment_processor.rb +5 -1
- data/lib/ec2launcher/version.rb +1 -1
- data/startup-scripts/setup_instance.rb +50 -23
- metadata +2 -2
data/CHANGELOG.md
CHANGED
@@ -28,7 +28,6 @@ module EC2Launcher
|
|
28
28
|
validate_environment(filename, new_env)
|
29
29
|
|
30
30
|
@environments[new_env.name] = new_env
|
31
|
-
new_env.aliases.each {|env_alias| @environments[env_alias] = new_env }
|
32
31
|
end
|
33
32
|
end
|
34
33
|
|
@@ -37,6 +36,11 @@ module EC2Launcher
|
|
37
36
|
new_env = process_environment_inheritance(env)
|
38
37
|
@environments[new_env.name] = new_env
|
39
38
|
end
|
39
|
+
|
40
|
+
# Process aliases
|
41
|
+
@environments.values.each do |env|
|
42
|
+
env.aliases.each {|env_alias| @environments[env_alias] = env }
|
43
|
+
end
|
40
44
|
end
|
41
45
|
|
42
46
|
private
|
data/lib/ec2launcher/version.rb
CHANGED
@@ -113,17 +113,18 @@ class InstanceSetup
|
|
113
113
|
##############################
|
114
114
|
# EBS VOLUMES
|
115
115
|
##############################
|
116
|
-
|
116
|
+
@system_arch = `uname -p`.strip
|
117
|
+
@default_fs_type = @system_arch == "x86_64" ? "xfs" : "ext4"
|
118
|
+
|
119
|
+
# Create and setup EBS volumes
|
117
120
|
setup_ebs_volumes(instance_data) unless instance_data["block_devices"].nil?
|
118
121
|
|
119
122
|
##############################
|
120
123
|
# EPHEMERAL VOLUMES
|
121
124
|
##############################
|
122
|
-
system_arch = `uname -p`.strip
|
123
|
-
default_fs_type = system_arch == "x86_64" ? "xfs" : "ext4"
|
124
125
|
|
125
126
|
# Process ephemeral devices first
|
126
|
-
ephemeral_drive_count = case EC2_INSTANCE_TYPE
|
127
|
+
ephemeral_drive_count = case @EC2_INSTANCE_TYPE
|
127
128
|
when "m1.small" then 1
|
128
129
|
when "m1.medium" then 1
|
129
130
|
when "m2.xlarge" then 1
|
@@ -148,13 +149,13 @@ class InstanceSetup
|
|
148
149
|
|
149
150
|
# Format and mount the ephemeral drives
|
150
151
|
build_block_devices(ephemeral_drive_count, "xvdf") do |device_name, index|
|
151
|
-
format_filesystem(system_arch, "/dev/#{device_name}1")
|
152
|
+
format_filesystem(@system_arch, "/dev/#{device_name}1")
|
152
153
|
|
153
154
|
mount_point = case index
|
154
155
|
when 0 then "/mnt"
|
155
156
|
else "/mnt/extra#{index - 1}"
|
156
157
|
end
|
157
|
-
mount_device("/dev/#{device_name}1", mount_point, "root", "root", default_fs_type)
|
158
|
+
mount_device("/dev/#{device_name}1", mount_point, "root", "root", @default_fs_type)
|
158
159
|
end
|
159
160
|
|
160
161
|
##############################
|
@@ -170,7 +171,7 @@ class InstanceSetup
|
|
170
171
|
knife_config = <<EOF
|
171
172
|
log_level :info
|
172
173
|
log_location STDOUT
|
173
|
-
node_name '#{options.hostname}'
|
174
|
+
node_name '#{@options.hostname}'
|
174
175
|
client_key '/etc/chef/client.pem'
|
175
176
|
validation_client_name 'chef-validator'
|
176
177
|
validation_key '/etc/chef/validation.pem'
|
@@ -186,7 +187,7 @@ EOF
|
|
186
187
|
##############################
|
187
188
|
# Add roles
|
188
189
|
instance_data["roles"].each do |role|
|
189
|
-
cmd = "#{knife_path} node run_list add #{options.hostname} \"role[#{role}]\""
|
190
|
+
cmd = "#{knife_path} node run_list add #{@options.hostname} \"role[#{role}]\""
|
190
191
|
puts cmd
|
191
192
|
puts `#{cmd}`
|
192
193
|
end
|
@@ -217,9 +218,9 @@ EOF
|
|
217
218
|
ses.send_email(
|
218
219
|
:from => instance_data["email_notifications"]["from"],
|
219
220
|
:to => instance_data["email_notifications"]["to"],
|
220
|
-
:subject => "Server setup complete: #{options.hostname}",
|
221
|
-
:body_text => "Server setup is complete for Host: #{options.hostname}, Environment: #{options.environ}, Application: #{options.application}",
|
222
|
-
:body_html => "<div>Server setup is complete for:</div><div><strong>Host:</strong> #{options.hostname}</div><div><strong>Environment:</strong> #{options.environ}</div><div><strong>Application:</strong> #{options.application}</div>"
|
221
|
+
:subject => "Server setup complete: #{@options.hostname}",
|
222
|
+
:body_text => "Server setup is complete for Host: #{@options.hostname}, Environment: #{@options.environ}, Application: #{@options.application}",
|
223
|
+
:body_html => "<div>Server setup is complete for:</div><div><strong>Host:</strong> #{@options.hostname}</div><div><strong>Environment:</strong> #{@options.environ}</div><div><strong>Application:</strong> #{@options.application}</div>"
|
223
224
|
)
|
224
225
|
else
|
225
226
|
puts "Skipping email notification."
|
@@ -270,8 +271,15 @@ EOF
|
|
270
271
|
run_with_backoff(60, 1, "attaching volume #{volume.id} to #{device_name}") do
|
271
272
|
attachment = volume.attach_to(instance, device_name)
|
272
273
|
end
|
274
|
+
|
273
275
|
volume_attached = test_with_backoff(60, 1, "check EBS volume attached #{device_name} (#{volume.id})") do
|
274
|
-
|
276
|
+
attatched = false
|
277
|
+
begin
|
278
|
+
attached = attachment.status == :attached
|
279
|
+
rescue AWS::Core::Resource::NotFound
|
280
|
+
# This can occur when trying to access the attachment. Not sure how or why. Best to retry.
|
281
|
+
end
|
282
|
+
attached
|
275
283
|
end
|
276
284
|
|
277
285
|
# TODO: Handle when volume fails to attach
|
@@ -360,24 +368,24 @@ EOF
|
|
360
368
|
|
361
369
|
raid_array_count = 0
|
362
370
|
next_device_name = "xvdj"
|
363
|
-
instance_data["block_devices"].each do |
|
364
|
-
if
|
371
|
+
instance_data["block_devices"].each do |block_device|
|
372
|
+
if block_device.raid_level.nil?
|
365
373
|
# If we're not cloning an existing snapshot, then we need to partition and format the drive.
|
366
|
-
if options.clone_host.nil?
|
374
|
+
if @options.clone_host.nil?
|
367
375
|
partition_devices([ "/dev/#{next_device_name}" ])
|
368
|
-
format_filesystem(system_arch, "/dev/#{next_device_name}1")
|
376
|
+
format_filesystem(@system_arch, "/dev/#{next_device_name}1")
|
369
377
|
end
|
370
|
-
mount_device("/dev/#{next_device_name}1",
|
378
|
+
mount_device("/dev/#{next_device_name}1", block_device.mount, block_device.owner, block_device.group, @default_fs_type)
|
371
379
|
next_device_name.next!
|
372
380
|
else
|
373
381
|
raid_devices = []
|
374
|
-
build_block_devices(
|
382
|
+
build_block_devices(block_device.count, next_device_name) do |device_name, index|
|
375
383
|
raid_devices << "/dev/#{device_name}"
|
376
384
|
next_device_name = device_name
|
377
385
|
end
|
378
|
-
puts "Setting up attached raid array... system_arch = #{system_arch}, raid_devices = #{raid_devices}, device = /dev/md#{(127 - raid_array_count).to_s}"
|
379
|
-
raid_device_name = setup_attached_raid_array(system_arch, raid_devices, "/dev/md#{(127 - raid_array_count).to_s}",
|
380
|
-
mount_device(raid_device_name,
|
386
|
+
puts "Setting up attached raid array... system_arch = #{@system_arch}, raid_devices = #{raid_devices}, device = /dev/md#{(127 - raid_array_count).to_s}"
|
387
|
+
raid_device_name = setup_attached_raid_array(@system_arch, raid_devices, "/dev/md#{(127 - raid_array_count).to_s}", block_device.raid_level.to_i, ! @options.clone_host.nil?)
|
388
|
+
mount_device(raid_device_name, block_device.mount, block_device.owner, block_device.group, @default_fs_type)
|
381
389
|
raid_array_count += 1
|
382
390
|
end
|
383
391
|
end
|
@@ -423,8 +431,14 @@ EOF
|
|
423
431
|
end
|
424
432
|
|
425
433
|
# Partitions a list of mounted EBS volumes
|
426
|
-
def partition_devices(device_list)
|
427
|
-
|
434
|
+
def partition_devices(device_list, attempt = 0, max_attempts = 3)
|
435
|
+
return false if attempt >= max_attempts
|
436
|
+
|
437
|
+
puts case attempt
|
438
|
+
when 0 then "Partioning devices ..."
|
439
|
+
else "Retrying device partitioning (attempt #{attempt + 1}) ..."
|
440
|
+
end
|
441
|
+
|
428
442
|
device_list.each do |device|
|
429
443
|
puts " * #{device}"
|
430
444
|
`echo 0|sfdisk #{device}`
|
@@ -432,6 +446,19 @@ EOF
|
|
432
446
|
|
433
447
|
puts "Sleeping 10 seconds to reload partition tables ..."
|
434
448
|
sleep 10
|
449
|
+
|
450
|
+
# Verify all volumes were properly partitioned
|
451
|
+
missing_devices = []
|
452
|
+
device_list.each do |device|
|
453
|
+
missing_devices << device unless File.exists?("#{device}1")
|
454
|
+
end
|
455
|
+
|
456
|
+
# Retry partitioning for failed volumes
|
457
|
+
response = true
|
458
|
+
if missing_devices.size > 0
|
459
|
+
response = partition_devices(missing_devices, attempt + 1, max_attempts)
|
460
|
+
end
|
461
|
+
response
|
435
462
|
end
|
436
463
|
|
437
464
|
##############################
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ec2launcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk
|