ec2launcher 1.0.17 → 1.0.18
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/instance_paths_config.rb +31 -0
- data/lib/ec2launcher/version.rb +1 -1
- data/lib/ec2launcher.rb +30 -5
- data/startup-scripts/setup_instance.rb +23 -2
- metadata +3 -2
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2012 Sean Laurent
|
3
|
+
#
|
4
|
+
module EC2Launcher
|
5
|
+
# Holds data about paths to various executables on instances.
|
6
|
+
class InstancePathsConfig
|
7
|
+
attr_reader :gem_path, :ruby_path, :chef_path, :knife_path
|
8
|
+
|
9
|
+
def initialize(environment)
|
10
|
+
@gem_path = build_path(environment.gem_path, "gem", "/usr/bin/gem")
|
11
|
+
@ruby_path = build_path(environment.ruby_path, "ruby", "/usr/bin/ruby")
|
12
|
+
@chef_path = build_path(environment.chef_path, "chef-client", "/usr/bin/chef-client")
|
13
|
+
@knife_path = build_path(environment.knife_path, "knife", "/usr/bin/knife")
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
# Builds the path to an executable.
|
19
|
+
def build_path(instance_path, executable, default_path)
|
20
|
+
app_path = default_path
|
21
|
+
unless instance_path.nil?
|
22
|
+
if instance_path =~ /#{executable}$/
|
23
|
+
app_path = instance_path
|
24
|
+
else
|
25
|
+
app_path = File.join(instance_path, executable)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
app_path
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/ec2launcher/version.rb
CHANGED
data/lib/ec2launcher.rb
CHANGED
@@ -14,6 +14,7 @@ require 'ec2launcher/dsl/application'
|
|
14
14
|
require 'ec2launcher/dsl/environment'
|
15
15
|
|
16
16
|
require 'ec2launcher/backoff_runner'
|
17
|
+
require 'ec2launcher/instance_paths_config'
|
17
18
|
require 'ec2launcher/block_device_builder'
|
18
19
|
require 'ec2launcher/hostname_generator'
|
19
20
|
|
@@ -117,7 +118,14 @@ module EC2Launcher
|
|
117
118
|
end
|
118
119
|
@application = @applications[options.application]
|
119
120
|
|
121
|
+
##############################
|
122
|
+
# INSTANCE PATHS
|
123
|
+
##############################
|
124
|
+
@instance_paths = EC2Launcher::InstancePathsConfig.new(@environment)
|
125
|
+
|
126
|
+
##############################
|
120
127
|
# Initialize AWS and create EC2 connection
|
128
|
+
##############################
|
121
129
|
initialize_aws()
|
122
130
|
@ec2 = AWS::EC2.new
|
123
131
|
|
@@ -701,11 +709,28 @@ module EC2Launcher
|
|
701
709
|
# Given a string containing a command to run, replaces any inline variables.
|
702
710
|
# Supported variables include:
|
703
711
|
# * @APPLICATION@ - name of the application
|
712
|
+
# * @APP@ - name of the application
|
704
713
|
# * @ENVIRONMENT@ - name of the environment
|
714
|
+
# * @ENV@ - name of the environment
|
715
|
+
# * @RUBY@ - Full pathname to the ruby executable
|
716
|
+
# * @GEM@ - Full pathname to the gem executable
|
717
|
+
# * @CHEF@ - Full pathname to the chef-client executable
|
718
|
+
# * @KNIFE@ - Full pathname to the knife executable
|
705
719
|
#
|
706
720
|
# @return [String] command with variables replaced
|
707
721
|
def substitute_command_variables(cmd)
|
708
|
-
|
722
|
+
substitutions = {
|
723
|
+
/@APPLICATION@/ => @application.name,
|
724
|
+
/@APP@/ => @application.name,
|
725
|
+
/@ENVIRONMENT@/ => @environment.name,
|
726
|
+
/@ENV@/ => @environment.name,
|
727
|
+
/@RUBY@/ => @instance_paths.ruby_path,
|
728
|
+
/@GEM@/ => @instance_paths.gem_path,
|
729
|
+
/@CHEF@/ => @instance_paths.chef_path,
|
730
|
+
/@KNIFE@/ => @instance_paths.knife_path
|
731
|
+
}
|
732
|
+
substitutions.keys.each {|key| cmd.gsub!(key, substitutions[key]) }
|
733
|
+
cmd
|
709
734
|
end
|
710
735
|
|
711
736
|
# Validates all settings in an application file
|
@@ -757,10 +782,10 @@ module EC2Launcher
|
|
757
782
|
'gems' => gems,
|
758
783
|
'packages' => packages
|
759
784
|
}
|
760
|
-
setup_json["gem_path"] =
|
761
|
-
setup_json["ruby_path"] =
|
762
|
-
setup_json["chef_path"] =
|
763
|
-
setup_json["knife_path"] =
|
785
|
+
setup_json["gem_path"] = @instance_paths.gem_path
|
786
|
+
setup_json["ruby_path"] = @instance_paths.ruby_path
|
787
|
+
setup_json["chef_path"] = @instance_paths.chef_path
|
788
|
+
setup_json["knife_path"] = @instance_paths.knife_path
|
764
789
|
|
765
790
|
unless @application.block_devices.nil? || @application.block_devices.empty?
|
766
791
|
setup_json['block_devices'] = @application.block_devices
|
@@ -183,7 +183,7 @@ end
|
|
183
183
|
##############################
|
184
184
|
# Assembles a set of existing partitions into a RAID array.
|
185
185
|
def assemble_raid_array(partition_list, raid_device = '/dev/md0', raid_type = 0)
|
186
|
-
|
186
|
+
puts "Assembling cloned RAID-#{raid_type.to_s} array #{raid_device} ..."
|
187
187
|
command = "/sbin/mdadm --assemble #{raid_device} #{partition_list.join(' ')}"
|
188
188
|
puts command
|
189
189
|
puts `#{command}`
|
@@ -205,7 +205,18 @@ def setup_attached_raid_array(system_arch, devices, raid_device = '/dev/md0', ra
|
|
205
205
|
|
206
206
|
# RAID device name can be a symlink on occasion, so we
|
207
207
|
# want to de-reference the symlink to keep everything clear.
|
208
|
-
|
208
|
+
raid_info = "/dev/md0"
|
209
|
+
raid_scan_info = `/sbin/mdadm --detail --scan 2>&1`
|
210
|
+
puts "RAID Scan Info: #{raid_scan_info}"
|
211
|
+
if raid_scan_info =~ /cannot open/
|
212
|
+
# This happens occasionally on CentOS 6:
|
213
|
+
# $ /sbin/mdadm --detail --scan
|
214
|
+
# mdadm: cannot open /dev/md/0_0: No such file or directory
|
215
|
+
# mdadm: cannot open /dev/md/1_0: No such file or directory
|
216
|
+
raid_info = `ll /dev/md/0_0 |grep -v "md-device-map" |awk '// { print $9; }' |sort`.split("\n")[-1]
|
217
|
+
else
|
218
|
+
raid_info = raid_scan_info.split("\n")[-1].split()
|
219
|
+
end
|
209
220
|
Pathname.new(raid_info[1]).realpath.to_s
|
210
221
|
end
|
211
222
|
|
@@ -257,6 +268,16 @@ end
|
|
257
268
|
|
258
269
|
# Process EBS volumes
|
259
270
|
unless instance_data["block_devices"].nil?
|
271
|
+
# Install mdadm if we have any RAID devices
|
272
|
+
raid_required = false
|
273
|
+
instance_data["block_devices"].each do |block_device_json|
|
274
|
+
unless block_device_json["raid_level"].nil?
|
275
|
+
raid_required = true
|
276
|
+
break
|
277
|
+
end
|
278
|
+
end
|
279
|
+
puts `yum install mdadm -y` if raid_required
|
280
|
+
|
260
281
|
next_device_name = "xvdj"
|
261
282
|
instance_data["block_devices"].each do |block_device_json|
|
262
283
|
if block_device_json["raid_level"].nil?
|
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.0.
|
4
|
+
version: 1.0.18
|
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-08-
|
12
|
+
date: 2012-08-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk
|
@@ -54,6 +54,7 @@ files:
|
|
54
54
|
- lib/ec2launcher/dsl/environment.rb
|
55
55
|
- lib/ec2launcher/hostname_generator.rb
|
56
56
|
- lib/ec2launcher/init_options.rb
|
57
|
+
- lib/ec2launcher/instance_paths_config.rb
|
57
58
|
- lib/ec2launcher/security_group_handler.rb
|
58
59
|
- lib/ec2launcher/version.rb
|
59
60
|
- startup-scripts/setup.rb
|