openstudio-aws 0.1.15 → 0.1.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/openstudio/aws/aws.rb +43 -21
- data/lib/openstudio/aws/version.rb +1 -1
- data/lib/openstudio/lib/ami_list.rb +35 -13
- data/lib/openstudio/lib/openstudio_aws_instance.rb +3 -2
- data/lib/openstudio/lib/openstudio_aws_wrapper.rb +25 -7
- data/spec/openstudio-aws/ami_list_spec.rb +1 -1
- data/spec/openstudio-aws/aws_spec.rb +47 -11
- data/spec/openstudio-aws/aws_wrapper_spec.rb +1 -1
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.0.xml +18 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.1.xml +19 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.2.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.3.xml +11 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.xml +18 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-create-a-new-instance.6.xml +26 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.26.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.27.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.28.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.29.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.30.xml +16 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.31.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.32.xml +13 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.0.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.31.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.32.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.33.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.34.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.35.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.36.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Aws.37.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.52.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.53.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.54.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.55.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.56.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.57.xml +9 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.52.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.53.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.54.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.55.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.56.xml +7 -0
- data/spec/reports/SPEC-OpenStudio-Aws-Config.57.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.53.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.54.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.55.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.56.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.57.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.58.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-1.59.xml +13 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.51.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.52.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.53.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.54.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.55.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.56.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis-version-2.57.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAmis.53.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.54.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.55.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.56.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.57.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.58.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAmis.59.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods-processors.53.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods-processors.54.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods-processors.55.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods-processors.56.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods-processors.57.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods-processors.58.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods-processors.59.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods.53.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods.54.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods.55.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods.56.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods.57.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods.58.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsMethods.59.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.52.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.53.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.54.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.55.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.56.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.57.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.58.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.44.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.45.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.46.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.47.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.48.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.49.xml +11 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.52.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.53.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.54.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.55.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.56.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.57.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.58.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.2.xml +19 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.3.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.4.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.5.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.6.xml +125 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.7.xml +125 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.2.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.3.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.4.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.5.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.6.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.7.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.52.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.53.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.54.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.55.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.56.xml +8 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.57.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.58.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.53.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.54.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.55.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.56.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.57.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.58.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.59.xml +9 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.53.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.54.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.55.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.56.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.57.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.58.xml +7 -0
- data/spec/reports/SPEC-OpenStudioAwsWrapper.59.xml +7 -0
- metadata +250 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: efb7b51f623a6281881c9a2dc12e481b79f6b421
|
4
|
+
data.tar.gz: 7faf36a9857a0251fc291b61bbb7c591e76319e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2ff331d5294a79f0e2afdc7ad1a99f2d2ce5647a78d2e49e1ed6fd0c0f1fcf5a781958eb8d04b86b782b33d11290207adcd55200adb31a516941cd0f6248a7b
|
7
|
+
data.tar.gz: aeff692fe3684060a92c24408a1af49a614f71485db974f15c55c4aa9be8756e699cb8f43e361d517871f177eeb0cc944e24ca08373c29fb626173d11a47ed59
|
data/lib/openstudio/aws/aws.rb
CHANGED
@@ -2,11 +2,13 @@
|
|
2
2
|
module OpenStudio
|
3
3
|
module Aws
|
4
4
|
VALID_OPTIONS = [
|
5
|
-
:proxy, :credentials
|
5
|
+
:proxy, :credentials, :ami_lookup_version, :openstudio_version,
|
6
|
+
:openstudio_server_version, :region, :ssl_verify_peer, :host, :url
|
6
7
|
]
|
7
8
|
|
8
9
|
class Aws
|
9
10
|
attr_reader :os_aws
|
11
|
+
attr_reader :default_amis
|
10
12
|
|
11
13
|
# default constructor to create the AWS class that can spin up server and worker instances.
|
12
14
|
# options are optional with the following support:
|
@@ -18,20 +20,32 @@ module OpenStudio
|
|
18
20
|
raise ArgumentError, "invalid option(s): #{invalid_options.join(', ')}"
|
19
21
|
end
|
20
22
|
|
23
|
+
# merge in some defaults
|
24
|
+
defaults = {
|
25
|
+
:ami_lookup_version => 1,
|
26
|
+
:region => 'us-east-1',
|
27
|
+
:ssl_verify_peer => false,
|
28
|
+
:host => 'developer.nrel.gov',
|
29
|
+
:url => '/downloads/buildings/openstudio/server'
|
30
|
+
}
|
31
|
+
options = defaults.merge(options)
|
32
|
+
|
33
|
+
|
21
34
|
# read in the config.yml file to get the secret/private key
|
22
|
-
if !options[:credentials]
|
35
|
+
if !options[:credentials]
|
23
36
|
config_file = OpenStudio::Aws::Config.new()
|
24
37
|
|
25
38
|
# populate the credentials
|
26
|
-
options =
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
39
|
+
options[:credentials] =
|
40
|
+
{
|
41
|
+
:access_key_id => config_file.access_key,
|
42
|
+
:secret_access_key => config_file.secret_key,
|
43
|
+
:region => options[:region],
|
44
|
+
:ssl_verify_peer => options[:ssl_verify_peer]
|
45
|
+
}
|
46
|
+
else
|
47
|
+
options[:credentials][:region] = options[:region]
|
48
|
+
options[:credentials][:ssl_verify_peer] = options[:ssl_verify_peer]
|
35
49
|
end
|
36
50
|
|
37
51
|
if options[:proxy]
|
@@ -45,21 +59,29 @@ module OpenStudio
|
|
45
59
|
options[:proxy_uri] = proxy_uri
|
46
60
|
|
47
61
|
#todo: do we need to escape a couple of the argument of username and password
|
48
|
-
|
62
|
+
|
49
63
|
#todo: set some environment variables for system based proxy
|
50
|
-
|
51
64
|
end
|
52
65
|
|
66
|
+
#puts "Final options are: #{options.inspect}"
|
67
|
+
|
53
68
|
@os_aws = OpenStudioAwsWrapper.new(options)
|
54
69
|
@local_key_file_name = nil
|
55
70
|
|
56
71
|
# this will grab the default version of openstudio ami versions
|
57
|
-
|
72
|
+
# get the arugments for the AMI lookup
|
73
|
+
ami_options = {}
|
74
|
+
ami_options[:openstudio_server_version] = options[:openstudio_server_version] if options[:openstudio_server_version]
|
75
|
+
ami_options[:openstudio_version] = options[:openstudio_version] if options[:openstudio_version]
|
76
|
+
ami_options[:host] = options[:host] if options[:host]
|
77
|
+
ami_options[:url] = options[:url] if options[:url]
|
78
|
+
|
79
|
+
@default_amis = OpenStudioAmis.new(options[:ami_lookup_version], ami_options).get_amis
|
58
80
|
end
|
59
81
|
|
60
82
|
# command line call to create a new instance. This should be more tightly integrated with teh os-aws.rb gem
|
61
|
-
def create_server(instance_data = {}, server_json_filename = "server_data.json")
|
62
|
-
defaults = {instance_type: "m2.xlarge", image_id: @default_amis[
|
83
|
+
def create_server(instance_data = {}, server_json_filename = "server_data.json", user_id="unknown_user")
|
84
|
+
defaults = {instance_type: "m2.xlarge", image_id: @default_amis[:server]}
|
63
85
|
instance_data = defaults.merge(instance_data)
|
64
86
|
|
65
87
|
@os_aws.create_or_retrieve_security_group("openstudio-worker-sg-v1")
|
@@ -67,7 +89,7 @@ module OpenStudio
|
|
67
89
|
|
68
90
|
@local_key_file_name = "ec2_server_key.pem"
|
69
91
|
@os_aws.save_private_key(@local_key_file_name)
|
70
|
-
@os_aws.launch_server(instance_data[:image_id], instance_data[:instance_type])
|
92
|
+
@os_aws.launch_server(instance_data[:image_id], instance_data[:instance_type], {:user_id => user_id})
|
71
93
|
|
72
94
|
puts @os_aws.server.to_os_hash.to_json
|
73
95
|
|
@@ -80,21 +102,21 @@ module OpenStudio
|
|
80
102
|
puts "ssh -i #{@local_key_file_name} ubuntu@#{@os_aws.server.data[:dns]}"
|
81
103
|
end
|
82
104
|
|
83
|
-
def create_workers(number_of_instances, instance_data = {})
|
105
|
+
def create_workers(number_of_instances, instance_data = {}, user_id="unknown_user")
|
84
106
|
defaults = {instance_type: "m2.4xlarge"}
|
85
107
|
instance_data = defaults.merge(instance_data)
|
86
108
|
|
87
109
|
if instance_data[:image_id].nil?
|
88
110
|
if instance_data[:instance_type] =~ /cc2|c3/
|
89
|
-
instance_data[:image_id] = @default_amis[
|
111
|
+
instance_data[:image_id] = @default_amis[:cc2worker]
|
90
112
|
else
|
91
|
-
instance_data[:image_id] = @default_amis[
|
113
|
+
instance_data[:image_id] = @default_amis[:worker]
|
92
114
|
end
|
93
115
|
end
|
94
116
|
|
95
117
|
raise "Can't create workers without a server instance running" if @os_aws.server.nil?
|
96
118
|
|
97
|
-
@os_aws.launch_workers(instance_data[:image_id], instance_data[:instance_type], number_of_instances)
|
119
|
+
@os_aws.launch_workers(instance_data[:image_id], instance_data[:instance_type], number_of_instances, {:user_id => user_id})
|
98
120
|
|
99
121
|
## append the information to the server_data hash that already exists
|
100
122
|
#@server_data[:instance_type] = instance_data[:instance_type]
|
@@ -21,11 +21,25 @@
|
|
21
21
|
# Class for managing the AMI ids based on the openstudio version and the openstudio-server version
|
22
22
|
|
23
23
|
class OpenStudioAmis
|
24
|
+
VALID_OPTIONS = [
|
25
|
+
:openstudio_version, :openstudio_server_version, :host, :url
|
26
|
+
]
|
27
|
+
|
28
|
+
def initialize(version = 1, options = {})
|
29
|
+
invalid_options = options.keys - VALID_OPTIONS
|
30
|
+
if invalid_options.any?
|
31
|
+
raise ArgumentError, "invalid option(s): #{invalid_options.join(', ')}"
|
32
|
+
end
|
24
33
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
34
|
+
# merge in some defaults
|
35
|
+
defaults = {
|
36
|
+
:openstudio_version => 'default',
|
37
|
+
:openstudio_server_version => 'default',
|
38
|
+
:host => 'developer.nrel.gov',
|
39
|
+
:url => '/downloads/buildings/openstudio/server'
|
40
|
+
}
|
41
|
+
@version = version
|
42
|
+
@options = defaults.merge(options)
|
29
43
|
end
|
30
44
|
|
31
45
|
def list
|
@@ -36,7 +50,7 @@ class OpenStudioAmis
|
|
36
50
|
else
|
37
51
|
raise "Unknown api version command #{command}"
|
38
52
|
end
|
39
|
-
|
53
|
+
|
40
54
|
json
|
41
55
|
end
|
42
56
|
|
@@ -57,14 +71,14 @@ class OpenStudioAmis
|
|
57
71
|
protected
|
58
72
|
|
59
73
|
def list_amis_version_1
|
60
|
-
endpoint =
|
74
|
+
endpoint = "#{@options[:url]}/amis_v1.json"
|
61
75
|
json = retrieve_json(endpoint)
|
62
76
|
|
63
77
|
json
|
64
78
|
end
|
65
79
|
|
66
80
|
def list_amis_version_2
|
67
|
-
endpoint =
|
81
|
+
endpoint = "#{@options[:url]}/amis_v2.json"
|
68
82
|
|
69
83
|
json = retrieve_json(endpoint)
|
70
84
|
json
|
@@ -72,25 +86,33 @@ class OpenStudioAmis
|
|
72
86
|
|
73
87
|
def get_ami_version_1()
|
74
88
|
json = list_amis_version_1
|
75
|
-
version = json.has_key?(@openstudio_version) ? @openstudio_version : 'default'
|
89
|
+
version = json.has_key?(@options[:openstudio_version].to_sym) ? @options[:openstudio_version].to_sym : 'default'
|
76
90
|
|
77
91
|
json[version]
|
78
92
|
end
|
79
93
|
|
80
94
|
def get_ami_version_2()
|
81
95
|
json = list_amis_version_2
|
82
|
-
|
96
|
+
|
97
|
+
amis = nil
|
98
|
+
if @options[:openstudio_server_version].to_sym == :default
|
99
|
+
# just grab the most recent server
|
100
|
+
key, value = json[:openstudio_server].first
|
101
|
+
amis = value[:amis]
|
102
|
+
#puts json.inspect
|
103
|
+
else
|
104
|
+
value = json[:openstudio_server][@options[:openstudio_server_version].to_sym]
|
105
|
+
amis = value[:amis]
|
106
|
+
end
|
83
107
|
|
84
|
-
|
108
|
+
amis
|
85
109
|
end
|
86
110
|
|
87
111
|
private
|
88
|
-
|
89
|
-
|
90
112
|
|
91
113
|
def retrieve_json(endpoint)
|
92
114
|
result = nil
|
93
|
-
resp = Net::HTTP.get_response(
|
115
|
+
resp = Net::HTTP.get_response(@options[:host], endpoint)
|
94
116
|
if resp.code == '200'
|
95
117
|
result = JSON.parse(resp.body, :symbolize_names => true)
|
96
118
|
else
|
@@ -41,7 +41,7 @@ class OpenStudioAwsInstance
|
|
41
41
|
@proxy = proxy
|
42
42
|
end
|
43
43
|
|
44
|
-
def launch_instance(image_id, instance_type, user_data)
|
44
|
+
def launch_instance(image_id, instance_type, user_data, user_id)
|
45
45
|
#logger.info("user_data #{user_data.inspect}")
|
46
46
|
instance = {
|
47
47
|
:image_id => image_id,
|
@@ -67,7 +67,8 @@ class OpenStudioAwsInstance
|
|
67
67
|
{:key => 'Name', :value => "OpenStudio-#{@openstudio_instance_type.capitalize}"}, # todo: abstract out the server and version
|
68
68
|
{:key => 'GroupUUID', :value => @group_uuid},
|
69
69
|
{:key => 'NumberOfProcessors', :value => processors.to_s},
|
70
|
-
{:key => 'Purpose', :value => "OpenStudio#{@openstudio_instance_type.capitalize}"}
|
70
|
+
{:key => 'Purpose', :value => "OpenStudio#{@openstudio_instance_type.capitalize}"},
|
71
|
+
{:key => 'UserID', :value => user_id}
|
71
72
|
]
|
72
73
|
}
|
73
74
|
)
|
@@ -248,16 +248,22 @@ class OpenStudioAwsWrapper
|
|
248
248
|
end
|
249
249
|
end
|
250
250
|
|
251
|
-
def launch_server(image_id, instance_type)
|
251
|
+
def launch_server(image_id, instance_type, options = {})
|
252
|
+
defaults = { :user_id => "unknown_user" }
|
253
|
+
options = defaults.merge(options)
|
254
|
+
|
252
255
|
user_data = File.read(File.expand_path(File.dirname(__FILE__))+'/server_script.sh')
|
253
256
|
@server = OpenStudioAwsInstance.new(@aws, :server, @key_pair_name, @security_group_name, @group_uuid, @private_key, @proxy)
|
254
257
|
|
255
258
|
raise "image_id is nil" if not image_id
|
256
259
|
raise "instance type is nil" if not instance_type
|
257
|
-
@server.launch_instance(image_id, instance_type, user_data)
|
260
|
+
@server.launch_instance(image_id, instance_type, user_data, options[:user_id])
|
258
261
|
end
|
259
262
|
|
260
|
-
def launch_workers(image_id, instance_type, num)
|
263
|
+
def launch_workers(image_id, instance_type, num, options = {})
|
264
|
+
defaults = { :user_id => "unknown_user" }
|
265
|
+
options = defaults.merge(options)
|
266
|
+
|
261
267
|
user_data = File.read(File.expand_path(File.dirname(__FILE__))+'/worker_script.sh.template')
|
262
268
|
user_data.gsub!(/SERVER_IP/, @server.data.ip)
|
263
269
|
user_data.gsub!(/SERVER_HOSTNAME/, 'master')
|
@@ -273,7 +279,7 @@ class OpenStudioAwsWrapper
|
|
273
279
|
threads = []
|
274
280
|
@workers.each do |worker|
|
275
281
|
threads << Thread.new do
|
276
|
-
worker.launch_instance(image_id, instance_type, user_data)
|
282
|
+
worker.launch_instance(image_id, instance_type, user_data, options[:user_id])
|
277
283
|
end
|
278
284
|
end
|
279
285
|
threads.each { |t| t.join }
|
@@ -355,7 +361,7 @@ class OpenStudioAwsWrapper
|
|
355
361
|
available_amis = describe_amis()
|
356
362
|
|
357
363
|
amis = transform_ami_lists(existing_amis, available_amis)
|
358
|
-
|
364
|
+
|
359
365
|
if version == 1
|
360
366
|
version1 = {}
|
361
367
|
|
@@ -376,10 +382,22 @@ class OpenStudioAwsWrapper
|
|
376
382
|
end
|
377
383
|
|
378
384
|
# create the default version. First sort, then grab the first hash's values
|
379
|
-
|
380
|
-
|
385
|
+
puts JSON.pretty_generate(version1)
|
386
|
+
default_v = nil
|
387
|
+
version1.each do |k,v|
|
388
|
+
default_v ||= k
|
389
|
+
# todo: add a check if the AMI is not marked as invalid
|
390
|
+
if Semantic::Version.new(k.to_s) >= Semantic::Version.new(default_v.to_s)
|
391
|
+
default_v = k
|
392
|
+
end
|
393
|
+
end
|
394
|
+
puts JSON.pretty_generate(version1)
|
395
|
+
|
396
|
+
version1[:default] = version1[default_v]
|
397
|
+
puts JSON.pretty_generate(version1)
|
381
398
|
|
382
399
|
amis = version1
|
400
|
+
|
383
401
|
elsif version == 2
|
384
402
|
# don't need to transform anything right now
|
385
403
|
end
|
@@ -1,23 +1,63 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe OpenStudio::Aws::Aws do
|
4
|
-
context "
|
5
|
-
|
4
|
+
context "ami lists" do
|
5
|
+
it "should allow a different region" do
|
6
|
+
options = {
|
7
|
+
:region => "sa-east-1",
|
8
|
+
:credentials =>
|
9
|
+
{
|
10
|
+
:access_key_id => "some_random_access_key_id",
|
11
|
+
:secret_access_key => "some_super_secret_access_key",
|
12
|
+
}
|
13
|
+
}
|
14
|
+
aws = OpenStudio::Aws::Aws.new(options)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should allow a different region" do
|
18
|
+
options = {
|
19
|
+
:ami_lookup_version => 2
|
20
|
+
}
|
21
|
+
aws = OpenStudio::Aws::Aws.new(options)
|
22
|
+
|
23
|
+
expect(aws.default_amis).not_to be_nil
|
24
|
+
end
|
25
|
+
end
|
6
26
|
|
27
|
+
context "should error" do
|
28
|
+
it "should not find a json" do
|
29
|
+
options = {
|
30
|
+
:ami_lookup_version => 2,
|
31
|
+
:url => '/unknown/url'
|
32
|
+
}
|
33
|
+
expect { aws = OpenStudio::Aws::Aws.new(options) }.to raise_exception
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "version testing" do
|
38
|
+
it "version 2: should find the right AMIs Server 1.3.1" do
|
39
|
+
options = {
|
40
|
+
:ami_lookup_version => 2,
|
41
|
+
:openstudio_server_version => "1.3.1"
|
42
|
+
}
|
43
|
+
aws = OpenStudio::Aws::Aws.new(options)
|
44
|
+
expect(aws.default_amis[:worker]).to eq("ami-39bb8750")
|
45
|
+
expect(aws.default_amis[:server]).to eq("ami-a9bb87c0")
|
7
46
|
end
|
8
|
-
|
47
|
+
end
|
48
|
+
|
49
|
+
context "proxy configuration" do
|
9
50
|
it "should create an instance" do
|
10
51
|
options = {
|
11
52
|
:credentials =>
|
12
53
|
{
|
13
54
|
:access_key_id => "some_random_access_key_id",
|
14
55
|
:secret_access_key => "some_super_secret_access_key",
|
15
|
-
:region => "us-east-1",
|
16
|
-
:ssl_verify_peer => false
|
17
56
|
}
|
18
|
-
|
19
|
-
|
57
|
+
}
|
58
|
+
|
20
59
|
@aws = OpenStudio::Aws::Aws.new(options)
|
60
|
+
#puts @aws.inspect
|
21
61
|
expect(@aws.os_aws).not_to be_nil
|
22
62
|
end
|
23
63
|
|
@@ -27,8 +67,6 @@ describe OpenStudio::Aws::Aws do
|
|
27
67
|
{
|
28
68
|
:access_key_id => "some_random_access_key_id",
|
29
69
|
:secret_access_key => "some_super_secret_access_key",
|
30
|
-
:region => "us-east-1",
|
31
|
-
:ssl_verify_peer => false
|
32
70
|
},
|
33
71
|
:proxy => {
|
34
72
|
:host => "192.168.0.1",
|
@@ -45,8 +83,6 @@ describe OpenStudio::Aws::Aws do
|
|
45
83
|
{
|
46
84
|
:access_key_id => "some_random_access_key_id",
|
47
85
|
:secret_access_key => "some_super_secret_access_key",
|
48
|
-
:region => "us-east-1",
|
49
|
-
:ssl_verify_peer => false
|
50
86
|
},
|
51
87
|
:proxy => {
|
52
88
|
:host => "192.168.0.1",
|
@@ -67,7 +67,7 @@ describe OpenStudioAwsWrapper do
|
|
67
67
|
resp = @aws.os_aws.create_new_ami_json(1)
|
68
68
|
expect(resp["1.1.3".to_sym][:server]).to eq("ami-fb301292")
|
69
69
|
expect(resp["1.2.1".to_sym][:server]).to eq("ami-89744be0")
|
70
|
-
expect(resp["default".to_sym][:server]).
|
70
|
+
expect(resp["default".to_sym][:server]).to_not eq("ami-89744be0")
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="OpenStudio::Aws::Aws ami lists" tests="1" time="0.083118" failures="0" errors="1" skipped="0">
|
3
|
+
<testcase name="OpenStudio::Aws::Aws ami lists should allow a different region" time="0.082912">
|
4
|
+
<failure type="Aws::Errors::MissingRegionError" message="Aws::Errors::MissingRegionError">
|
5
|
+
Aws::Errors::MissingRegionError (Aws::Errors::MissingRegionError)
|
6
|
+
Aws::Errors::MissingRegionError:
|
7
|
+
Aws::Errors::MissingRegionError
|
8
|
+
./lib/openstudio/lib/openstudio_aws_wrapper.rb:69:in `initialize'
|
9
|
+
./lib/openstudio/aws/aws.rb:56:in `new'
|
10
|
+
./lib/openstudio/aws/aws.rb:56:in `initialize'
|
11
|
+
./spec/openstudio-aws/aws_spec.rb:15:in `new'
|
12
|
+
./spec/openstudio-aws/aws_spec.rb:15:in `block (3 levels) in <top (required)>' </failure>
|
13
|
+
</testcase>
|
14
|
+
<system-out>
|
15
|
+
</system-out>
|
16
|
+
<system-err>
|
17
|
+
</system-err>
|
18
|
+
</testsuite>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="OpenStudio::Aws::Aws ami lists" tests="1" time="0.060319" failures="0" errors="1" skipped="0">
|
3
|
+
<testcase name="OpenStudio::Aws::Aws ami lists should allow a different region" time="0.060138">
|
4
|
+
<failure type="Aws::Errors::MissingRegionError" message="Aws::Errors::MissingRegionError">
|
5
|
+
Aws::Errors::MissingRegionError (Aws::Errors::MissingRegionError)
|
6
|
+
Aws::Errors::MissingRegionError:
|
7
|
+
Aws::Errors::MissingRegionError
|
8
|
+
./lib/openstudio/lib/openstudio_aws_wrapper.rb:69:in `initialize'
|
9
|
+
./lib/openstudio/aws/aws.rb:57:in `new'
|
10
|
+
./lib/openstudio/aws/aws.rb:57:in `initialize'
|
11
|
+
./spec/openstudio-aws/aws_spec.rb:15:in `new'
|
12
|
+
./spec/openstudio-aws/aws_spec.rb:15:in `block (3 levels) in <top (required)>' </failure>
|
13
|
+
</testcase>
|
14
|
+
<system-out>
|
15
|
+
{:ami_lookup_version=>1, :region=>"sa-east-1", :credentials=>{:access_key_id=>"some_random_access_key_id", :secret_access_key=>"some_super_secret_access_key", :ssl_verify_peer=>false}}
|
16
|
+
</system-out>
|
17
|
+
<system-err>
|
18
|
+
</system-err>
|
19
|
+
</testsuite>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="OpenStudio::Aws::Aws ami lists" tests="2" time="0.275788" failures="0" errors="0" skipped="0">
|
3
|
+
<testcase name="OpenStudio::Aws::Aws ami lists should allow a different region" time="0.201982">
|
4
|
+
</testcase>
|
5
|
+
<testcase name="OpenStudio::Aws::Aws ami lists should allow a different region" time="0.073603">
|
6
|
+
</testcase>
|
7
|
+
<system-out>
|
8
|
+
</system-out>
|
9
|
+
<system-err>
|
10
|
+
</system-err>
|
11
|
+
</testsuite>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="OpenStudio::Aws::Aws ami lists" tests="2" time="0.2939" failures="0" errors="0" skipped="0">
|
3
|
+
<testcase name="OpenStudio::Aws::Aws ami lists should allow a different region" time="0.201705">
|
4
|
+
</testcase>
|
5
|
+
<testcase name="OpenStudio::Aws::Aws ami lists should allow a different region" time="0.091975">
|
6
|
+
</testcase>
|
7
|
+
<system-out>
|
8
|
+
</system-out>
|
9
|
+
<system-err>
|
10
|
+
</system-err>
|
11
|
+
</testsuite>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="OpenStudio::Aws::Aws ami lists" tests="1" time="0.128722" failures="0" errors="1" skipped="0">
|
3
|
+
<testcase name="OpenStudio::Aws::Aws ami lists should allow a different region" time="0.128541">
|
4
|
+
<failure type="Aws::Errors::MissingRegionError" message="Aws::Errors::MissingRegionError">
|
5
|
+
Aws::Errors::MissingRegionError (Aws::Errors::MissingRegionError)
|
6
|
+
Aws::Errors::MissingRegionError:
|
7
|
+
Aws::Errors::MissingRegionError
|
8
|
+
./lib/openstudio/lib/openstudio_aws_wrapper.rb:69:in `initialize'
|
9
|
+
./lib/openstudio/aws/aws.rb:56:in `new'
|
10
|
+
./lib/openstudio/aws/aws.rb:56:in `initialize'
|
11
|
+
./spec/openstudio-aws/aws_spec.rb:15:in `new'
|
12
|
+
./spec/openstudio-aws/aws_spec.rb:15:in `block (3 levels) in <top (required)>' </failure>
|
13
|
+
</testcase>
|
14
|
+
<system-out>
|
15
|
+
</system-out>
|
16
|
+
<system-err>
|
17
|
+
</system-err>
|
18
|
+
</testsuite>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="OpenStudio::Aws::Aws create a new instance" tests="5" time="193376.590119" failures="0" errors="0" skipped="0">
|
3
|
+
<testcase name="OpenStudio::Aws::Aws create a new instance should create a new instance" time="0.001172">
|
4
|
+
</testcase>
|
5
|
+
<testcase name="OpenStudio::Aws::Aws create a new instance should ask the user to create a new config file" time="0.000125">
|
6
|
+
</testcase>
|
7
|
+
<testcase name="OpenStudio::Aws::Aws create a new instance should create a server" time="35.035334">
|
8
|
+
</testcase>
|
9
|
+
<testcase>
|
10
|
+
</testcase>
|
11
|
+
<testcase>
|
12
|
+
</testcase>
|
13
|
+
<system-out>
|
14
|
+
{"timestamp":"1390600048","server":{"id":"i-2f15580f","ip":"http://54.234.28.217","dns":"ec2-54-234-28-217.compute-1.amazonaws.com","procs":1}}
|
15
|
+
|
16
|
+
Server SSH Command:
|
17
|
+
ssh -i ec2_server_key.pem ubuntu@ec2-54-234-28-217.compute-1.amazonaws.com
|
18
|
+
|
19
|
+
Worker SSH Command:
|
20
|
+
ssh -i ec2_server_key.pem ubuntu@ec2-23-22-87-129.compute-1.amazonaws.com
|
21
|
+
|
22
|
+
Waiting for server/worker configurations
|
23
|
+
</system-out>
|
24
|
+
<system-err>
|
25
|
+
</system-err>
|
26
|
+
</testsuite>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="OpenStudio::Aws::Aws proxy configuration" tests="3" time="0.07276" failures="0" errors="0" skipped="0">
|
3
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create an instance" time="0.060141">
|
4
|
+
</testcase>
|
5
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create a AWS instance with a proxy" time="0.00575">
|
6
|
+
</testcase>
|
7
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create a AWS instance with a proxy with username / password" time="0.006519">
|
8
|
+
</testcase>
|
9
|
+
<system-out>
|
10
|
+
</system-out>
|
11
|
+
<system-err>
|
12
|
+
</system-err>
|
13
|
+
</testsuite>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="OpenStudio::Aws::Aws proxy configuration" tests="3" time="0.076653" failures="0" errors="0" skipped="0">
|
3
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create an instance" time="0.061784">
|
4
|
+
</testcase>
|
5
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create a AWS instance with a proxy" time="0.00808">
|
6
|
+
</testcase>
|
7
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create a AWS instance with a proxy with username / password" time="0.006428">
|
8
|
+
</testcase>
|
9
|
+
<system-out>
|
10
|
+
</system-out>
|
11
|
+
<system-err>
|
12
|
+
</system-err>
|
13
|
+
</testsuite>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="OpenStudio::Aws::Aws proxy configuration" tests="3" time="0.033589" failures="0" errors="0" skipped="0">
|
3
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create an instance" time="0.005949">
|
4
|
+
</testcase>
|
5
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create a AWS instance with a proxy" time="0.007908">
|
6
|
+
</testcase>
|
7
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create a AWS instance with a proxy with username / password" time="0.0194">
|
8
|
+
</testcase>
|
9
|
+
<system-out>
|
10
|
+
</system-out>
|
11
|
+
<system-err>
|
12
|
+
</system-err>
|
13
|
+
</testsuite>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="OpenStudio::Aws::Aws proxy configuration" tests="3" time="0.030081" failures="0" errors="0" skipped="0">
|
3
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create an instance" time="0.006072">
|
4
|
+
</testcase>
|
5
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create a AWS instance with a proxy" time="0.0053">
|
6
|
+
</testcase>
|
7
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create a AWS instance with a proxy with username / password" time="0.018383">
|
8
|
+
</testcase>
|
9
|
+
<system-out>
|
10
|
+
</system-out>
|
11
|
+
<system-err>
|
12
|
+
</system-err>
|
13
|
+
</testsuite>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="OpenStudio::Aws::Aws proxy configuration" tests="3" time="0.0314" failures="0" errors="0" skipped="0">
|
3
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create an instance" time="0.006098">
|
4
|
+
</testcase>
|
5
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create a AWS instance with a proxy" time="0.005309">
|
6
|
+
</testcase>
|
7
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create a AWS instance with a proxy with username / password" time="0.019675">
|
8
|
+
</testcase>
|
9
|
+
<system-out>
|
10
|
+
{:ami_lookup_version=>1, :region=>"us-east-1", :credentials=>{:access_key_id=>"some_random_access_key_id", :secret_access_key=>"some_super_secret_access_key", :region=>"us-east-1", :ssl_verify_peer=>false}}
|
11
|
+
{:ami_lookup_version=>1, :region=>"us-east-1", :credentials=>{:access_key_id=>"some_random_access_key_id", :secret_access_key=>"some_super_secret_access_key", :region=>"us-east-1", :ssl_verify_peer=>false}, :proxy=>{:host=>"192.168.0.1", :port=>8080}}
|
12
|
+
{:ami_lookup_version=>1, :region=>"us-east-1", :credentials=>{:access_key_id=>"some_random_access_key_id", :secret_access_key=>"some_super_secret_access_key", :region=>"us-east-1", :ssl_verify_peer=>false}, :proxy=>{:host=>"192.168.0.1", :port=>8080, :username=>"username", :password=>"password"}}
|
13
|
+
</system-out>
|
14
|
+
<system-err>
|
15
|
+
</system-err>
|
16
|
+
</testsuite>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<testsuite name="OpenStudio::Aws::Aws proxy configuration" tests="3" time="0.221583" failures="0" errors="0" skipped="0">
|
3
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create an instance" time="0.075528">
|
4
|
+
</testcase>
|
5
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create a AWS instance with a proxy" time="0.070993">
|
6
|
+
</testcase>
|
7
|
+
<testcase name="OpenStudio::Aws::Aws proxy configuration should create a AWS instance with a proxy with username / password" time="0.074723">
|
8
|
+
</testcase>
|
9
|
+
<system-out>
|
10
|
+
</system-out>
|
11
|
+
<system-err>
|
12
|
+
</system-err>
|
13
|
+
</testsuite>
|