openstudio-aws 0.1.7 → 0.1.8
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.
- checksums.yaml +4 -4
- data/Rakefile +14 -13
- data/lib/openstudio-aws.rb +9 -7
- data/lib/openstudio/aws/aws.rb +53 -40
- data/lib/openstudio/aws/config.rb +0 -1
- data/lib/openstudio/aws/version.rb +2 -2
- data/lib/openstudio/lib/ami_list.rb +79 -0
- data/lib/openstudio/lib/openstudio_aws_instance.rb +138 -0
- data/lib/openstudio/lib/openstudio_aws_logger.rb +61 -0
- data/lib/openstudio/lib/openstudio_aws_methods.rb +232 -0
- data/lib/openstudio/lib/openstudio_aws_wrapper.rb +315 -0
- data/lib/openstudio/lib/os-aws.rb +77 -351
- data/spec/aws_instances/aws_spec_api.rb +70 -0
- data/spec/openstudio-aws/ami_list_spec.rb +37 -0
- data/spec/openstudio-aws/aws_methods_spec.rb +26 -0
- data/spec/openstudio-aws/lib_spec.rb +48 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-create-a-new-instance.xml +43 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-workers-before-server.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.0.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.0.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis.0.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods-processors.0.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods-processors.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods.0.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.0.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.0.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.0.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.xml +7 -0
- metadata +70 -10
- data/lib/openstudio/aws/send_data.rb +0 -42
- data/spec/openstudio-aws/aws_spec.rb +0 -53
@@ -1,6 +1,6 @@
|
|
1
1
|
# NOTE: Do not modify this file as it is copied over. Modify the source file and rerun rake import_files
|
2
2
|
######################################################################
|
3
|
-
# Copyright (c) 2008-
|
3
|
+
# Copyright (c) 2008-2014, Alliance for Sustainable Energy.
|
4
4
|
# All rights reserved.
|
5
5
|
#
|
6
6
|
# This library is free software; you can redistribute it and/or
|
@@ -36,7 +36,10 @@
|
|
36
36
|
#
|
37
37
|
######################################################################
|
38
38
|
|
39
|
-
|
39
|
+
require_relative 'openstudio_aws_wrapper'
|
40
|
+
require_relative 'openstudio_aws_instance'
|
41
|
+
require_relative 'ami_list'
|
42
|
+
require 'aws-sdk-core'
|
40
43
|
require 'json'
|
41
44
|
require 'logger'
|
42
45
|
require 'net/http'
|
@@ -44,10 +47,17 @@ require 'net/scp'
|
|
44
47
|
require 'net/ssh'
|
45
48
|
require 'tempfile'
|
46
49
|
require 'time'
|
50
|
+
require 'base64'
|
47
51
|
|
48
52
|
def error(code, msg)
|
49
|
-
puts (
|
50
|
-
|
53
|
+
puts (
|
54
|
+
{
|
55
|
+
:error => {
|
56
|
+
:code => code, :message => msg
|
57
|
+
},
|
58
|
+
:arguments => ARGV[2..-1]
|
59
|
+
}.to_json
|
60
|
+
)
|
51
61
|
exit(1)
|
52
62
|
end
|
53
63
|
|
@@ -71,15 +81,10 @@ if ARGV[4].empty?
|
|
71
81
|
error(-1, 'Missing command argument')
|
72
82
|
end
|
73
83
|
|
74
|
-
|
75
|
-
:access_key_id => ARGV[0],
|
76
|
-
:secret_access_key => ARGV[1],
|
77
|
-
:region => ARGV[2],
|
78
|
-
:ssl_verify_peer => false
|
79
|
-
)
|
84
|
+
Aws.config = {:access_key_id => ARGV[0], :secret_access_key => ARGV[1], :region => ARGV[2], :ssl_verify_peer => false}
|
80
85
|
|
81
86
|
if ARGV[3] == 'EC2'
|
82
|
-
@aws =
|
87
|
+
@aws = Aws::EC2.new
|
83
88
|
elsif ARGV[3] == 'CloudWatch'
|
84
89
|
@aws = AWS::CloudWatch.new
|
85
90
|
else
|
@@ -95,257 +100,20 @@ end
|
|
95
100
|
|
96
101
|
OPENSTUDIO_VERSION = '1.1.4' unless defined?(OPENSTUDIO_VERSION)
|
97
102
|
|
98
|
-
|
99
|
-
resp = Net::HTTP.get_response('developer.nrel.gov','/downloads/buildings/openstudio/rsrc/amis.json')
|
100
|
-
if resp.code == '200'
|
101
|
-
result = JSON.parse(resp.body)
|
102
|
-
version = result.has_key?(OPENSTUDIO_VERSION) ? OPENSTUDIO_VERSION : 'default'
|
103
|
+
SERVER_PEM_FILENAME = File.expand_path("~/openstudio-server.pem")
|
103
104
|
|
104
|
-
|
105
|
+
if (!defined?(@server_image_id) || !defined?(@worker_image_id))
|
106
|
+
amis = OpenStudioAmis.new(1, OPENSTUDIO_VERSION)
|
107
|
+
|
108
|
+
if amis
|
109
|
+
@server_image_id = amis['server']
|
105
110
|
if ARGV.length >= 6 && @params['instance_type'] == 'cc2.8xlarge'
|
106
|
-
@worker_image_id =
|
111
|
+
@worker_image_id = amis['cc2worker']
|
107
112
|
else
|
108
|
-
@worker_image_id =
|
113
|
+
@worker_image_id = amis['worker']
|
109
114
|
end
|
110
115
|
else
|
111
|
-
error(
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def create_struct(instance, procs)
|
116
|
-
instance_struct = Struct.new(:instance, :id, :ip, :dns, :procs)
|
117
|
-
return instance_struct.new(instance, instance.instance_id, instance.ip_address, instance.dns_name, procs)
|
118
|
-
end
|
119
|
-
|
120
|
-
def find_processors(instance)
|
121
|
-
processors = 1
|
122
|
-
case instance
|
123
|
-
when 'cc2.8xlarge'
|
124
|
-
processors = 16
|
125
|
-
when 'c1.xlarge'
|
126
|
-
processors = 8
|
127
|
-
when 'm2.4xlarge'
|
128
|
-
processors = 8
|
129
|
-
when 'm2.2xlarge'
|
130
|
-
processors = 4
|
131
|
-
when 'm2.xlarge'
|
132
|
-
processors = 2
|
133
|
-
when 'm1.xlarge'
|
134
|
-
processors = 4
|
135
|
-
when 'm1.large'
|
136
|
-
processors = 2
|
137
|
-
when 'm3.xlarge'
|
138
|
-
processors = 2
|
139
|
-
when 'm3.2xlarge'
|
140
|
-
processors = 4
|
141
|
-
end
|
142
|
-
|
143
|
-
return processors
|
144
|
-
end
|
145
|
-
|
146
|
-
def launch_server
|
147
|
-
user_data = File.read(File.expand_path(File.dirname(__FILE__))+'/server_script.sh')
|
148
|
-
@logger.info("server user_data #{user_data.inspect}")
|
149
|
-
@server = @aws.instances.create(:image_id => @server_image_id,
|
150
|
-
:key_pair => @key_pair,
|
151
|
-
:security_groups => @group,
|
152
|
-
:user_data => user_data,
|
153
|
-
:instance_type => @server_instance_type)
|
154
|
-
@server.add_tag('Name', :value => "OpenStudio-Server V#{OPENSTUDIO_VERSION}")
|
155
|
-
sleep 5 while @server.status == :pending
|
156
|
-
if @server.status != :running
|
157
|
-
error(-1, "Server status: #{@server.status}")
|
158
|
-
end
|
159
|
-
|
160
|
-
processors = find_processors(@server_instance_type)
|
161
|
-
#processors = send_command(@server.ip_address, 'nproc | tr -d "\n"')
|
162
|
-
#processors = 0 if processors.nil? # sometimes this returns nothing, so put in a default
|
163
|
-
@server = create_struct(@server, processors)
|
164
|
-
end
|
165
|
-
|
166
|
-
def launch_workers(num, server_ip)
|
167
|
-
user_data = File.read(File.expand_path(File.dirname(__FILE__))+'/worker_script.sh.template')
|
168
|
-
user_data.gsub!(/SERVER_IP/, server_ip)
|
169
|
-
user_data.gsub!(/SERVER_HOSTNAME/, 'master')
|
170
|
-
user_data.gsub!(/SERVER_ALIAS/, '')
|
171
|
-
@logger.info("worker user_data #{user_data.inspect}")
|
172
|
-
instances = []
|
173
|
-
num.times do
|
174
|
-
worker = @aws.instances.create(:image_id => @worker_image_id,
|
175
|
-
:key_pair => @key_pair,
|
176
|
-
:security_groups => @group,
|
177
|
-
:user_data => user_data,
|
178
|
-
:instance_type => @worker_instance_type)
|
179
|
-
worker.add_tag('Name', :value => "OpenStudio-Worker V#{OPENSTUDIO_VERSION}")
|
180
|
-
instances.push(worker)
|
181
|
-
end
|
182
|
-
sleep 5 while instances.any? { |instance| instance.status == :pending }
|
183
|
-
if instances.any? { |instance| instance.status != :running }
|
184
|
-
error(-1, "Worker status: Not running")
|
185
|
-
end
|
186
|
-
|
187
|
-
# todo: fix this - sometimes returns nil
|
188
|
-
processors = find_processors(@worker_instance_type)
|
189
|
-
#processors = send_command(instances[0].ip_address, 'nproc | tr -d "\n"')
|
190
|
-
#processors = 0 if processors.nil? # sometimes this returns nothing, so put in a default
|
191
|
-
instances.each { |instance| @workers.push(create_struct(instance, processors)) }
|
192
|
-
end
|
193
|
-
|
194
|
-
def upload_file(host, local_path, remote_path)
|
195
|
-
retries = 0
|
196
|
-
begin
|
197
|
-
Net::SCP.start(host, 'ubuntu', :key_data => [@private_key]) do |scp|
|
198
|
-
scp.upload! local_path, remote_path
|
199
|
-
end
|
200
|
-
rescue SystemCallError, Timeout::Error => e
|
201
|
-
# port 22 might not be available immediately after the instance finishes launching
|
202
|
-
return if retries == 5
|
203
|
-
retries += 1
|
204
|
-
sleep 1
|
205
|
-
retry
|
206
|
-
rescue
|
207
|
-
# Unknown upload error, retry
|
208
|
-
return if retries == 5
|
209
|
-
retries += 1
|
210
|
-
sleep 1
|
211
|
-
retry
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
|
216
|
-
def send_command(host, command)
|
217
|
-
#retries = 0
|
218
|
-
begin
|
219
|
-
output = ''
|
220
|
-
Net::SSH.start(host, 'ubuntu', :key_data => [@private_key]) do |ssh|
|
221
|
-
response = ssh.exec!(command)
|
222
|
-
output += response if !response.nil?
|
223
|
-
end
|
224
|
-
return output
|
225
|
-
rescue Net::SSH::HostKeyMismatch => e
|
226
|
-
e.remember_host!
|
227
|
-
# key mismatch, retry
|
228
|
-
#return if retries == 5
|
229
|
-
#retries += 1
|
230
|
-
sleep 1
|
231
|
-
retry
|
232
|
-
rescue Net::SSH::AuthenticationFailed
|
233
|
-
error(-1, "Incorrect private key")
|
234
|
-
rescue SystemCallError, Timeout::Error => e
|
235
|
-
# port 22 might not be available immediately after the instance finishes launching
|
236
|
-
#return if retries == 5
|
237
|
-
#retries += 1
|
238
|
-
sleep 1
|
239
|
-
retry
|
240
|
-
rescue Exception => e
|
241
|
-
puts e.message
|
242
|
-
puts e.backtrace.inspect
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
#======================= send command ======================#
|
247
|
-
# Send a command through SSH Shell to an instance.
|
248
|
-
# Need to pass instance object and the command as a string.
|
249
|
-
def shell_command(host, command)
|
250
|
-
begin
|
251
|
-
@logger.info("ssh_command #{command}")
|
252
|
-
Net::SSH.start(host, 'ubuntu', :key_data => [@private_key]) do |ssh|
|
253
|
-
channel = ssh.open_channel do |ch|
|
254
|
-
ch.exec "#{command}" do |ch, success|
|
255
|
-
raise "could not execute #{command}" unless success
|
256
|
-
|
257
|
-
# "on_data" is called when the process writes something to stdout
|
258
|
-
ch.on_data do |c, data|
|
259
|
-
#$stdout.print data
|
260
|
-
@logger.info("#{data.inspect}")
|
261
|
-
end
|
262
|
-
|
263
|
-
# "on_extended_data" is called when the process writes something to stderr
|
264
|
-
ch.on_extended_data do |c, type, data|
|
265
|
-
#$stderr.print data
|
266
|
-
@logger.info("#{data.inspect}")
|
267
|
-
end
|
268
|
-
end
|
269
|
-
end
|
270
|
-
end
|
271
|
-
rescue Net::SSH::HostKeyMismatch => e
|
272
|
-
e.remember_host!
|
273
|
-
@logger.info("key mismatch, retry")
|
274
|
-
sleep 1
|
275
|
-
retry
|
276
|
-
rescue SystemCallError, Timeout::Error => e
|
277
|
-
# port 22 might not be available immediately after the instance finishes launching
|
278
|
-
sleep 1
|
279
|
-
@logger.info("Not Yet")
|
280
|
-
retry
|
281
|
-
end
|
282
|
-
end
|
283
|
-
|
284
|
-
def wait_command(host, command)
|
285
|
-
begin
|
286
|
-
flag = 0
|
287
|
-
while flag == 0 do
|
288
|
-
@logger.info("wait_command #{command}")
|
289
|
-
Net::SSH.start(host, 'ubuntu', :key_data => [@private_key]) do |ssh|
|
290
|
-
channel = ssh.open_channel do |ch|
|
291
|
-
ch.exec "#{command}" do |ch, success|
|
292
|
-
raise "could not execute #{command}" unless success
|
293
|
-
|
294
|
-
# "on_data" is called when the process writes something to stdout
|
295
|
-
ch.on_data do |c, data|
|
296
|
-
@logger.info("#{data.inspect}")
|
297
|
-
if data.chomp == "true"
|
298
|
-
@logger.info("wait_command #{command} is true")
|
299
|
-
flag = 1
|
300
|
-
else
|
301
|
-
sleep 5
|
302
|
-
end
|
303
|
-
end
|
304
|
-
|
305
|
-
# "on_extended_data" is called when the process writes something to stderr
|
306
|
-
ch.on_extended_data do |c, type, data|
|
307
|
-
@logger.info("#{data.inspect}")
|
308
|
-
if data == "true"
|
309
|
-
@logger.info("wait_command #{command} is true")
|
310
|
-
flag = 1
|
311
|
-
else
|
312
|
-
sleep 5
|
313
|
-
end
|
314
|
-
end
|
315
|
-
end
|
316
|
-
end
|
317
|
-
end
|
318
|
-
end
|
319
|
-
rescue Net::SSH::HostKeyMismatch => e
|
320
|
-
e.remember_host!
|
321
|
-
@logger.info("key mismatch, retry")
|
322
|
-
sleep 1
|
323
|
-
retry
|
324
|
-
rescue SystemCallError, Timeout::Error => e
|
325
|
-
# port 22 might not be available immediately after the instance finishes launching
|
326
|
-
sleep 1
|
327
|
-
@logger.info("Not Yet")
|
328
|
-
retry
|
329
|
-
end
|
330
|
-
end
|
331
|
-
|
332
|
-
def download_file(host, remote_path, local_path)
|
333
|
-
retries = 0
|
334
|
-
begin
|
335
|
-
Net::SCP.start(host, 'ubuntu', :key_data => [@private_key]) do |scp|
|
336
|
-
scp.download! remote_path, local_path
|
337
|
-
end
|
338
|
-
rescue SystemCallError, Timeout::Error => e
|
339
|
-
# port 22 might not be available immediately after the instance finishes launching
|
340
|
-
return if retries == 5
|
341
|
-
retries += 1
|
342
|
-
sleep 1
|
343
|
-
retry
|
344
|
-
rescue
|
345
|
-
return if retries == 5
|
346
|
-
retries += 1
|
347
|
-
sleep 1
|
348
|
-
retry
|
116
|
+
error(-1, 'Unable to download AMI IDs')
|
349
117
|
end
|
350
118
|
end
|
351
119
|
|
@@ -354,20 +122,29 @@ begin
|
|
354
122
|
@logger.info("initialized")
|
355
123
|
case ARGV[4]
|
356
124
|
when 'describe_availability_zones'
|
357
|
-
|
358
|
-
|
359
|
-
|
125
|
+
os_aws = OpenStudioAwsWrapper.new
|
126
|
+
resp = os_aws.describe_availability_zones_json
|
127
|
+
puts resp
|
128
|
+
@logger.info("availability_zones #{resp}")
|
360
129
|
when 'total_instances'
|
361
|
-
|
362
|
-
|
363
|
-
|
130
|
+
os_aws = OpenStudioAwsWrapper.new
|
131
|
+
resp = os_aws.describe_total_instances_json
|
132
|
+
puts resp
|
364
133
|
when 'instance_status'
|
134
|
+
os_aws = OpenStudioAwsWrapper.new
|
135
|
+
|
365
136
|
resp = nil
|
366
137
|
if ARGV.length < 6
|
367
|
-
resp =
|
138
|
+
resp = os_aws.describe_instance_status
|
368
139
|
else
|
369
|
-
resp =
|
140
|
+
resp = os_aws.describe_instance_status({:instance_ids => [@params['instance_id']]})
|
370
141
|
end
|
142
|
+
#resp = nil
|
143
|
+
#if ARGV.length < 6
|
144
|
+
# resp = @aws.client.describe_instance_status
|
145
|
+
#else
|
146
|
+
# resp = @aws.client.describe_instance_status({:instance_ids => [@params['instance_id']]})
|
147
|
+
#end
|
371
148
|
output = Hash.new
|
372
149
|
resp.data[:instance_status_set].each { |instance|
|
373
150
|
output[instance[:instance_id]] = instance[:instance_state][:name]
|
@@ -377,34 +154,37 @@ begin
|
|
377
154
|
if ARGV.length < 6
|
378
155
|
error(-1, 'Invalid number of args')
|
379
156
|
end
|
157
|
+
os_aws = OpenStudioAwsWrapper.new
|
158
|
+
os_aws.create_or_retrieve_security_group("openstudio-server-sg-v1")
|
159
|
+
os_aws.create_or_retrieve_key_pair
|
380
160
|
|
381
|
-
|
161
|
+
# this step is really important because this is read from the worker nodes. We
|
162
|
+
# should not be printing this to screen nor putting into the log in case the
|
163
|
+
# user is starting to used shared keys.
|
164
|
+
os_aws.save_private_key(SERVER_PEM_FILENAME)
|
382
165
|
|
383
|
-
# find if an existing openstudio-server-vX security group exists and use that
|
384
|
-
@group = @aws.security_groups.filter('group-name', 'openstudio-server-sg-v1').first
|
385
|
-
if @group.nil?
|
386
|
-
@group = @aws.security_groups.create('openstudio-server-sg-v1')
|
387
|
-
@group.allow_ping() # allow ping
|
388
|
-
@group.authorize_ingress(:tcp, 1..65535) # all traffic
|
389
|
-
end
|
390
|
-
@logger.info("server_group #{@group}")
|
391
166
|
@server_instance_type = @params['instance_type']
|
167
|
+
begin
|
168
|
+
os_aws.launch_server(@server_image_id, @server_instance_type)
|
169
|
+
rescue Exception => e
|
170
|
+
error(-1, "Server status: #{e.message}")
|
171
|
+
end
|
392
172
|
|
393
|
-
|
394
|
-
|
173
|
+
puts os_aws.server.to_os_hash.to_json
|
174
|
+
when 'launch_workers'
|
175
|
+
@timestamp = @params['timestamp'] #timestamp is renamed to groupuuid in the backend
|
395
176
|
|
396
|
-
|
177
|
+
os_aws = OpenStudioAwsWrapper.new(nil, @timestamp)
|
178
|
+
os_aws.find_server(@timestamp) # really the group id
|
179
|
+
os_aws.create_or_retrieve_security_group("openstudio-worker-sg-v1")
|
180
|
+
|
181
|
+
# find the private key in the users home directory, or crash
|
182
|
+
if File.exists?(SERVER_PEM_FILENAME)
|
183
|
+
os_aws.create_or_retrieve_key_pair(nil, SERVER_PEM_FILENAME)
|
184
|
+
else
|
185
|
+
raise "Could not find previous private key which should be here: #{SERVER_PEM_FILENAME}"
|
186
|
+
end
|
397
187
|
|
398
|
-
puts ({:timestamp => @timestamp,
|
399
|
-
:private_key => @private_key,
|
400
|
-
:server => {
|
401
|
-
:id => @server.id,
|
402
|
-
:ip => 'http://' + @server.ip,
|
403
|
-
:dns => @server.dns,
|
404
|
-
:procs => @server.procs
|
405
|
-
}}.to_json)
|
406
|
-
@logger.info("server info #{({:timestamp => @timestamp, :private_key => @private_key, :server => {:id => @server.id, :ip => @server.ip, :dns => @server.dns, :procs => @server.procs}}.to_json)}")
|
407
|
-
when 'launch_workers'
|
408
188
|
if ARGV.length < 6
|
409
189
|
error(-1, 'Invalid number of args')
|
410
190
|
end
|
@@ -412,73 +192,19 @@ begin
|
|
412
192
|
error(-1, 'Invalid number of worker nodes, must be greater than 0')
|
413
193
|
end
|
414
194
|
|
415
|
-
@workers = []
|
416
|
-
@timestamp = @params['timestamp']
|
417
|
-
|
418
|
-
# find if an existing openstudio-server-vX security group exists and use that
|
419
|
-
@group = @aws.security_groups.filter('group-name', 'openstudio-worker-sg-v1').first
|
420
|
-
if @group.nil?
|
421
|
-
@group = @aws.security_groups.create('openstudio-worker-sg-v1')
|
422
|
-
@group.allow_ping() # allow ping
|
423
|
-
@group.authorize_ingress(:tcp, 1..65535) # all traffic
|
424
|
-
end
|
425
|
-
@logger.info("worker_group #{@group}")
|
426
|
-
@key_pair = @aws.key_pairs.filter('key-name', "key-pair-#{@timestamp}").first
|
427
|
-
@private_key = File.read(@params['private_key'])
|
428
195
|
@worker_instance_type = @params['instance_type']
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
#processors = send_command(@workers[0].ip, 'nproc | tr -d "\n"')
|
436
|
-
#@workers[0].procs = processors
|
196
|
+
begin
|
197
|
+
# this will launch and configure with threads inside os_aws
|
198
|
+
os_aws.launch_workers(@worker_image_id, @worker_instance_type, @params['num'])
|
199
|
+
rescue Exception => e
|
200
|
+
error(-1, "Server status: #{e.message}")
|
201
|
+
end
|
437
202
|
|
438
203
|
#wait for user_data to complete execution
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
#wait_command(@workers.first.ip, "[ -e /home/ubuntu/user_data_done ] && echo 'true'")
|
444
|
-
|
445
|
-
|
446
|
-
ips = "master|#{@server.ip}|#{@server.dns}|#{@server.procs}|ubuntu|ubuntu\n"
|
447
|
-
@workers.each { |worker| ips << "worker|#{worker.ip}|#{worker.dns}|#{worker.procs}|ubuntu|ubuntu|true\n" }
|
448
|
-
file = Tempfile.new('ip_addresses')
|
449
|
-
file.write(ips)
|
450
|
-
file.close
|
451
|
-
upload_file(@server.ip, file.path, 'ip_addresses')
|
452
|
-
file.unlink
|
453
|
-
@logger.info("ips #{ips}")
|
454
|
-
shell_command(@server.ip, 'chmod 664 /home/ubuntu/ip_addresses')
|
455
|
-
shell_command(@server.ip, '~/setup-ssh-keys.sh')
|
456
|
-
shell_command(@server.ip, '~/setup-ssh-worker-nodes.sh ip_addresses')
|
457
|
-
|
458
|
-
mongoid = File.read(File.expand_path(File.dirname(__FILE__))+'/mongoid.yml.template')
|
459
|
-
mongoid.gsub!(/SERVER_IP/, @server.ip)
|
460
|
-
file = Tempfile.new('mongoid.yml')
|
461
|
-
file.write(mongoid)
|
462
|
-
file.close
|
463
|
-
upload_file(@server.ip, file.path, '/mnt/openstudio/rails-models/mongoid.yml')
|
464
|
-
@workers.each { |worker| upload_file(worker.ip, file.path, '/mnt/openstudio/rails-models/mongoid.yml') }
|
465
|
-
file.unlink
|
466
|
-
|
467
|
-
# Does this command crash it?
|
468
|
-
shell_command(@server.ip, 'chmod 664 /mnt/openstudio/rails-models/mongoid.yml')
|
469
|
-
@workers.each { |worker| shell_command(worker.ip, 'chmod 664 /mnt/openstudio/rails-models/mongoid.yml') }
|
470
|
-
|
471
|
-
worker_json = []
|
472
|
-
@workers.each { |worker|
|
473
|
-
worker_json.push({
|
474
|
-
:id => worker.id,
|
475
|
-
:ip => 'http://' + worker.ip,
|
476
|
-
:dns => worker.dns,
|
477
|
-
:procs => worker.procs
|
478
|
-
})
|
479
|
-
}
|
480
|
-
puts ({:workers => worker_json}.to_json)
|
481
|
-
@logger.info("workers #{({:workers => worker_json}.to_json)}")
|
204
|
+
os_aws.configure_server_and_workers
|
205
|
+
|
206
|
+
# have to print to screen for c++ to grab the information
|
207
|
+
puts os_aws.to_os_worker_hash.to_json
|
482
208
|
when 'terminate_session'
|
483
209
|
if ARGV.length < 6
|
484
210
|
error(-1, 'Invalid number of args')
|