ec2launcher 1.0.15 → 1.0.16
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.md +4 -0
- data/README.md +4 -0
- data/lib/ec2launcher.rb +20 -2
- data/lib/ec2launcher/dsl/config.rb +38 -1
- data/lib/ec2launcher/dsl/environment.rb +36 -0
- data/lib/ec2launcher/version.rb +1 -1
- data/startup-scripts/setup.rb +10 -5
- data/startup-scripts/setup_instance.rb +6 -2
- metadata +2 -2
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -10,3 +10,7 @@ All contributions are welcome: ideas, patches, documentation, bug reports, compl
|
|
10
10
|
|
11
11
|
* If you think you found a bug, you probably did. Feel free to create an issue here on GitHub. Also, when filing, please make sure you're familiar with [necolas's guidelines](https://github.com/necolas/issue-guidelines). See https://github.com/StudyBlue/ec2launcher/issues to review existing issues or to create a new issue.
|
12
12
|
* If you want to send patches, the best way is to fork this repo and send us a pull request.
|
13
|
+
|
14
|
+
# Support
|
15
|
+
|
16
|
+
[ec2launcher Google Groups](http://groups.google.com/group/ec2launcher-user)
|
data/lib/ec2launcher.rb
CHANGED
@@ -430,6 +430,19 @@ module EC2Launcher
|
|
430
430
|
dirs
|
431
431
|
end
|
432
432
|
|
433
|
+
# Builds the path to an executable.
|
434
|
+
def build_path(instance_path, executable, default_path)
|
435
|
+
app_path = default_path
|
436
|
+
unless instance_path.nil?
|
437
|
+
if instance_path =~ /#{executable}$/
|
438
|
+
app_path = instance_path
|
439
|
+
else
|
440
|
+
app_path = File.join(instance_path, executable)
|
441
|
+
end
|
442
|
+
end
|
443
|
+
app_path
|
444
|
+
end
|
445
|
+
|
433
446
|
# Searches for the most recent AMI matching the criteria.
|
434
447
|
#
|
435
448
|
# @param [String] arch system archicture, `i386` or `x86_64`
|
@@ -734,6 +747,11 @@ module EC2Launcher
|
|
734
747
|
'gems' => gems,
|
735
748
|
'packages' => packages
|
736
749
|
}
|
750
|
+
setup_json["gem_path"] = build_path(@environment.gem_path, "gem", "/usr/bin/gem")
|
751
|
+
setup_json["ruby_path"] = build_path(@environment.ruby_path, "ruby", "/usr/bin/ruby")
|
752
|
+
setup_json["chef_path"] = build_path(@environment.chef_path, "chef-client", "/usr/bin/chef-client")
|
753
|
+
setup_json["knife_path"] = build_path(@environment.knife_path, "knife", "/usr/bin/knife")
|
754
|
+
|
737
755
|
unless @application.block_devices.nil? || @application.block_devices.empty?
|
738
756
|
setup_json['block_devices'] = @application.block_devices
|
739
757
|
end
|
@@ -783,9 +801,9 @@ module EC2Launcher
|
|
783
801
|
user_data += "\nchmod +x /tmp/setup.rb"
|
784
802
|
# user_data += "\nrm -f /tmp/setup.rb.gz.base64"
|
785
803
|
|
786
|
-
user_data += "\n/tmp/setup.rb -e #{@environment.name} -a #{@application.name} -h #{fqdn} /tmp/setup.json
|
804
|
+
user_data += "\n#{setup_json['ruby_path']} /tmp/setup.rb -e #{@environment.name} -a #{@application.name} -h #{fqdn} /tmp/setup.json"
|
787
805
|
user_data += " -c #{@options.clone_host}" unless @options.clone_host.nil?
|
788
|
-
|
806
|
+
user_data += " 2>&1 > /var/log/cloud-startup.log"
|
789
807
|
|
790
808
|
# Add extra requested commands to the launch sequence
|
791
809
|
@options.commands.each {|extra_cmd| user_data += "\n#{extra_cmd}" }
|
@@ -3,7 +3,7 @@
|
|
3
3
|
#
|
4
4
|
module EC2Launcher
|
5
5
|
module DSL
|
6
|
-
|
6
|
+
class ConfigDSL
|
7
7
|
attr_reader :config
|
8
8
|
|
9
9
|
def config(&block)
|
@@ -32,6 +32,11 @@ config do
|
|
32
32
|
end
|
33
33
|
}.gsub(/^ /, '')
|
34
34
|
|
35
|
+
def initialize()
|
36
|
+
@environments = []
|
37
|
+
@applications = []
|
38
|
+
end
|
39
|
+
|
35
40
|
def environments(*environments)
|
36
41
|
if environments.empty?
|
37
42
|
@environments
|
@@ -73,6 +78,38 @@ end
|
|
73
78
|
@config_manager = config_manager[0]
|
74
79
|
end
|
75
80
|
end
|
81
|
+
|
82
|
+
def gem_path(*gem_path)
|
83
|
+
if gem_path.empty?
|
84
|
+
@gem_path
|
85
|
+
else
|
86
|
+
@gem_path = gem_path[0]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def ruby_path(*ruby_path)
|
91
|
+
if ruby_path.empty?
|
92
|
+
@ruby_path
|
93
|
+
else
|
94
|
+
@ruby_path = ruby_path[0]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def chef_path(*chef_path)
|
99
|
+
if chef_path.empty?
|
100
|
+
@chef_path
|
101
|
+
else
|
102
|
+
@chef_path = chef_path[0]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def knife_path(*knife_path)
|
107
|
+
if knife_path.empty?
|
108
|
+
@knife_path
|
109
|
+
else
|
110
|
+
@knife_path = knife_path[0]
|
111
|
+
end
|
112
|
+
end
|
76
113
|
end
|
77
114
|
end
|
78
115
|
end
|
@@ -110,6 +110,38 @@ module EC2Launcher
|
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
113
|
+
def gem_path(*gem_path)
|
114
|
+
if gem_path.empty?
|
115
|
+
@gem_path
|
116
|
+
else
|
117
|
+
@gem_path = gem_path[0]
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def ruby_path(*ruby_path)
|
122
|
+
if ruby_path.empty?
|
123
|
+
@ruby_path
|
124
|
+
else
|
125
|
+
@ruby_path = ruby_path[0]
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def chef_path(*chef_path)
|
130
|
+
if chef_path.empty?
|
131
|
+
@chef_path
|
132
|
+
else
|
133
|
+
@chef_path = chef_path[0]
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def knife_path(*knife_path)
|
138
|
+
if knife_path.empty?
|
139
|
+
@knife_path
|
140
|
+
else
|
141
|
+
@knife_path = knife_path[0]
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
113
145
|
def inherit(*inherit_type)
|
114
146
|
if inherit_type.empty?
|
115
147
|
@inherit_type
|
@@ -198,11 +230,15 @@ module EC2Launcher
|
|
198
230
|
@ami_name = other_env.ami_name unless other_env.ami_name.nil?
|
199
231
|
@aws_keyfile = other_env.aws_keyfile unless other_env.aws_keyfile.nil?
|
200
232
|
@availability_zone = other_env.availability_zone unless other_env.availability_zone.nil?
|
233
|
+
@chef_path = other_env.chef_path unless other_env.chef_path.nil?
|
201
234
|
@chef_server_url = other_env.chef_server_url unless other_env.chef_server_url.nil?
|
202
235
|
@chef_validation_pem_url = other_env.chef_validation_pem_url unless other_env.chef_validation_pem_url.nil?
|
203
236
|
@domain_name = other_env.domain_name unless other_env.domain_name.nil?
|
204
237
|
@email_notifications = other_env.email_notifications unless other_env.email_notifications.nil?
|
238
|
+
@gem_path = other_env.gem_path unless other_env.gem_path.nil?
|
205
239
|
@key_name = other_env.key_name unless other_env.key_name.nil?
|
240
|
+
@knife_path = other_env.knife_path unless other_env.knife_path.nil?
|
241
|
+
@ruby_path = other_env.ruby_path unless other_env.ruby_path.nil?
|
206
242
|
@subnet = other_env.subnet unless other_env.subnet.nil?
|
207
243
|
@short_name = other_env.short_name unless other_env.short_name.nil?
|
208
244
|
end
|
data/lib/ec2launcher/version.rb
CHANGED
data/startup-scripts/setup.rb
CHANGED
@@ -82,14 +82,19 @@ setup_json_filename = ARGV[0]
|
|
82
82
|
# Read the setup JSON file
|
83
83
|
instance_data = JSON.parse(File.read(setup_json_filename))
|
84
84
|
|
85
|
+
# Path to executables
|
86
|
+
gem_path = instance_data["gem_path"]
|
87
|
+
ruby_path = instance_data["ruby_path"]
|
88
|
+
chef_path = instance_data["chef_path"]
|
89
|
+
|
85
90
|
# Pre-install gems
|
86
91
|
unless instance_data["gems"].nil?
|
87
|
-
instance_data["gems"].each {|gem_name| puts
|
92
|
+
instance_data["gems"].each {|gem_name| puts `#{gem_path} install --no-rdoc --no-ri #{gem_name}` }
|
88
93
|
end
|
89
94
|
|
90
95
|
# Pre-install packages
|
91
96
|
unless instance_data["packages"].nil?
|
92
|
-
|
97
|
+
puts `yum install #{instance_data["packages"].join(" ")} -y`
|
93
98
|
end
|
94
99
|
|
95
100
|
|
@@ -143,12 +148,12 @@ File.open("/etc/chef/client.rb", 'a') { |f| f.write("node_name \"#{options.hostn
|
|
143
148
|
# Setup Chef client
|
144
149
|
puts "Connecting to Chef ..."
|
145
150
|
`rm -f /etc/chef/client.pem`
|
146
|
-
puts `
|
151
|
+
puts `#{chef_path}`
|
147
152
|
|
148
153
|
# Retrieve secondary setup script and run it
|
149
154
|
puts "Getting role setup script ..."
|
150
155
|
puts `s3curl.pl --id startup #{SETUP_SCRIPT_URL} > /tmp/#{SETUP_SCRIPT} && chmod +x /tmp/#{SETUP_SCRIPT}`
|
151
|
-
command = "/tmp/#{SETUP_SCRIPT} -a #{options.application} -e #{options.environ} -h #{options.hostname} #{setup_json_filename}"
|
156
|
+
command = "#{ruby_path} /tmp/#{SETUP_SCRIPT} -a #{options.application} -e #{options.environ} -h #{options.hostname} #{setup_json_filename}"
|
152
157
|
command += " -c #{options.clone_host}" unless options.clone_host.nil?
|
153
|
-
command += " > /var/log/cloud-init.log"
|
158
|
+
command += " 2>&1 > /var/log/cloud-init.log"
|
154
159
|
run_command(command)
|
@@ -283,6 +283,10 @@ end
|
|
283
283
|
# CHEF SETUP
|
284
284
|
##############################
|
285
285
|
|
286
|
+
# Path to executables
|
287
|
+
chef_path = instance_data["chef_path"]
|
288
|
+
knife_path = instance_data["knife_path"]
|
289
|
+
|
286
290
|
##############################
|
287
291
|
# Create knife configuration
|
288
292
|
knife_config = <<EOF
|
@@ -306,14 +310,14 @@ end
|
|
306
310
|
##############################
|
307
311
|
# Add roles
|
308
312
|
instance_data["roles"].each do |role|
|
309
|
-
cmd = "
|
313
|
+
cmd = "#{knife_path} node run_list add #{options.hostname} \"role[#{role}]\""
|
310
314
|
puts cmd
|
311
315
|
puts `#{cmd}`
|
312
316
|
end
|
313
317
|
|
314
318
|
##############################
|
315
319
|
# Launch Chef
|
316
|
-
IO.popen(
|
320
|
+
IO.popen(chef_path) do |f|
|
317
321
|
while ! f.eof
|
318
322
|
puts f.gets
|
319
323
|
end
|
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.16
|
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-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk
|