openstudio-aws 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. checksums.yaml +4 -4
  2. data/lib/openstudio/aws/aws.rb +15 -19
  3. data/lib/openstudio/aws/version.rb +1 -1
  4. data/lib/openstudio/lib/ami_list.rb +19 -2
  5. data/lib/openstudio/lib/openstudio_aws_instance.rb +28 -31
  6. data/lib/openstudio/lib/openstudio_aws_wrapper.rb +61 -49
  7. data/spec/aws_instances/aws_spec_api.rb +0 -1
  8. data/spec/openstudio-aws/ami_list_spec.rb +0 -1
  9. data/spec/openstudio-aws/aws_spec.rb +2 -2
  10. data/spec/openstudio-aws/aws_wrapper_spec.rb +0 -2
  11. data/spec/openstudio-aws/config_spec.rb +0 -1
  12. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.22.xml +13 -0
  13. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.23.xml +46 -0
  14. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.24.xml +46 -0
  15. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.25.xml +49 -0
  16. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.26.xml +49 -0
  17. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.27.xml +13 -0
  18. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.22.xml +11 -0
  19. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.23.xml +33 -0
  20. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.24.xml +33 -0
  21. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.25.xml +35 -0
  22. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.26.xml +35 -0
  23. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.27.xml +11 -0
  24. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.22.xml +13 -0
  25. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.23.xml +46 -0
  26. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.24.xml +46 -0
  27. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.25.xml +49 -0
  28. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.26.xml +49 -0
  29. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.27.xml +13 -0
  30. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.22.xml +9 -0
  31. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.23.xml +9 -0
  32. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.24.xml +9 -0
  33. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.25.xml +9 -0
  34. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.26.xml +9 -0
  35. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.27.xml +9 -0
  36. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.22.xml +9 -0
  37. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.23.xml +20 -0
  38. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.24.xml +20 -0
  39. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.25.xml +21 -0
  40. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.26.xml +21 -0
  41. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.27.xml +9 -0
  42. data/spec/reports/SPEC-OpenStudio-Aws-Aws.22.xml +7 -0
  43. data/spec/reports/SPEC-OpenStudio-Aws-Aws.23.xml +7 -0
  44. data/spec/reports/SPEC-OpenStudio-Aws-Aws.24.xml +7 -0
  45. data/spec/reports/SPEC-OpenStudio-Aws-Aws.25.xml +7 -0
  46. data/spec/reports/SPEC-OpenStudio-Aws-Aws.26.xml +7 -0
  47. data/spec/reports/SPEC-OpenStudio-Aws-Aws.27.xml +7 -0
  48. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.20.xml +9 -0
  49. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.21.xml +9 -0
  50. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.22.xml +9 -0
  51. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.23.xml +9 -0
  52. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.24.xml +9 -0
  53. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.25.xml +9 -0
  54. data/spec/reports/SPEC-OpenStudio-Aws-Config.20.xml +7 -0
  55. data/spec/reports/SPEC-OpenStudio-Aws-Config.21.xml +7 -0
  56. data/spec/reports/SPEC-OpenStudio-Aws-Config.22.xml +7 -0
  57. data/spec/reports/SPEC-OpenStudio-Aws-Config.23.xml +7 -0
  58. data/spec/reports/SPEC-OpenStudio-Aws-Config.24.xml +7 -0
  59. data/spec/reports/SPEC-OpenStudio-Aws-Config.25.xml +7 -0
  60. data/spec/reports/SPEC-OpenStudioAmis-version-1.22.xml +14 -0
  61. data/spec/reports/SPEC-OpenStudioAmis-version-1.23.xml +39 -0
  62. data/spec/reports/SPEC-OpenStudioAmis-version-1.24.xml +39 -0
  63. data/spec/reports/SPEC-OpenStudioAmis-version-1.25.xml +42 -0
  64. data/spec/reports/SPEC-OpenStudioAmis-version-1.26.xml +42 -0
  65. data/spec/reports/SPEC-OpenStudioAmis-version-1.27.xml +14 -0
  66. data/spec/reports/SPEC-OpenStudioAmis-version-2.22.xml +9 -0
  67. data/spec/reports/SPEC-OpenStudioAmis-version-2.23.xml +18 -0
  68. data/spec/reports/SPEC-OpenStudioAmis-version-2.24.xml +18 -0
  69. data/spec/reports/SPEC-OpenStudioAmis-version-2.25.xml +19 -0
  70. data/spec/reports/SPEC-OpenStudioAmis-version-2.26.xml +19 -0
  71. data/spec/reports/SPEC-OpenStudioAmis-version-2.27.xml +9 -0
  72. data/spec/reports/SPEC-OpenStudioAmis.22.xml +7 -0
  73. data/spec/reports/SPEC-OpenStudioAmis.23.xml +7 -0
  74. data/spec/reports/SPEC-OpenStudioAmis.24.xml +7 -0
  75. data/spec/reports/SPEC-OpenStudioAmis.25.xml +7 -0
  76. data/spec/reports/SPEC-OpenStudioAmis.26.xml +7 -0
  77. data/spec/reports/SPEC-OpenStudioAmis.27.xml +7 -0
  78. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.22.xml +11 -0
  79. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.23.xml +11 -0
  80. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.24.xml +11 -0
  81. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.25.xml +11 -0
  82. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.26.xml +11 -0
  83. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.27.xml +11 -0
  84. data/spec/reports/SPEC-OpenStudioAwsInstance.22.xml +7 -0
  85. data/spec/reports/SPEC-OpenStudioAwsInstance.23.xml +7 -0
  86. data/spec/reports/SPEC-OpenStudioAwsInstance.24.xml +7 -0
  87. data/spec/reports/SPEC-OpenStudioAwsInstance.25.xml +7 -0
  88. data/spec/reports/SPEC-OpenStudioAwsInstance.26.xml +7 -0
  89. data/spec/reports/SPEC-OpenStudioAwsInstance.27.xml +7 -0
  90. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.20.xml +9 -0
  91. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.21.xml +20 -0
  92. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.22.xml +20 -0
  93. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.23.xml +21 -0
  94. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.24.xml +21 -0
  95. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.25.xml +9 -0
  96. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.22.xml +11 -0
  97. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.23.xml +33 -0
  98. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.24.xml +33 -0
  99. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.25.xml +35 -0
  100. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.26.xml +35 -0
  101. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.27.xml +11 -0
  102. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.22.xml +11 -0
  103. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.23.xml +33 -0
  104. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.24.xml +33 -0
  105. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.25.xml +35 -0
  106. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.26.xml +35 -0
  107. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.27.xml +11 -0
  108. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.22.xml +9 -0
  109. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.23.xml +20 -0
  110. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.24.xml +20 -0
  111. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.25.xml +21 -0
  112. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.26.xml +21 -0
  113. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.27.xml +9 -0
  114. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.21.xml +156 -0
  115. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.22.xml +20 -0
  116. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.23.xml +20 -0
  117. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.24.xml +21 -0
  118. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.25.xml +21 -0
  119. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.26.xml +156 -0
  120. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.20.xml +2151 -0
  121. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.21.xml +20 -0
  122. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.22.xml +20 -0
  123. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.23.xml +21 -0
  124. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.24.xml +21 -0
  125. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.25.xml +2151 -0
  126. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.22.xml +7 -0
  127. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.23.xml +7 -0
  128. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.24.xml +7 -0
  129. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.25.xml +7 -0
  130. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.26.xml +7 -0
  131. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.27.xml +7 -0
  132. data/spec/reports/SPEC-OpenStudioAwsWrapper-security-groups.0.xml +20 -0
  133. data/spec/reports/SPEC-OpenStudioAwsWrapper-security-groups.1.xml +20 -0
  134. data/spec/reports/SPEC-OpenStudioAwsWrapper-security-groups.2.xml +21 -0
  135. data/spec/reports/SPEC-OpenStudioAwsWrapper-security-groups.3.xml +21 -0
  136. data/spec/reports/SPEC-OpenStudioAwsWrapper-security-groups.4.xml +53 -0
  137. data/spec/reports/SPEC-OpenStudioAwsWrapper-security-groups.xml +53 -0
  138. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.22.xml +9 -0
  139. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.23.xml +9 -0
  140. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.24.xml +9 -0
  141. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.25.xml +9 -0
  142. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.26.xml +9 -0
  143. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.27.xml +9 -0
  144. data/spec/reports/SPEC-OpenStudioAwsWrapper.22.xml +7 -0
  145. data/spec/reports/SPEC-OpenStudioAwsWrapper.23.xml +7 -0
  146. data/spec/reports/SPEC-OpenStudioAwsWrapper.24.xml +7 -0
  147. data/spec/reports/SPEC-OpenStudioAwsWrapper.25.xml +7 -0
  148. data/spec/reports/SPEC-OpenStudioAwsWrapper.26.xml +7 -0
  149. data/spec/reports/SPEC-OpenStudioAwsWrapper.27.xml +7 -0
  150. metadata +282 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e3f40caa3eed2715d9774ae42a8913b3d605434
4
- data.tar.gz: ac233b57d15ba24a027019e94c919da9a0850cf0
3
+ metadata.gz: 62fe65f799f5982237127e58ec68bdd92ed883e1
4
+ data.tar.gz: fc6ece5979bc471e2ef8c5ca67d02ad9ebb5f1e8
5
5
  SHA512:
6
- metadata.gz: 76a729d74b97e3b9fe3e8e737b303c38939443567d2006e9ebfd46ce709995a7d0e1a29305951ceeb362122e36d7a9a55968aba2e6127f03dfefae29ef7c94cf
7
- data.tar.gz: 5d46f753111b741a8b51349d2e83c1ef75689f51a42d006a590d5e0795a1d4e7f46acb25c259d43188a3bca411fa66afe469cca186b14a04c849498b8458d092
6
+ metadata.gz: e01949a6660d24ebce0feafbe9a46f34e389ef302bcb015f92f4bbf9619b988f17ff63c9722de7b4d423503cd2d3ba791e9f427b0864026e24ba3f081ed359f8
7
+ data.tar.gz: a6f8f3a8d246b3bafbc1c61be9ecbba0ebc6c116b09a404ccac45c12826a0e53ca4a3584ac0164d1d63b72672bffd357a6dfaef5872a1623e5ed4c49e126642f
@@ -55,12 +55,12 @@ module OpenStudio
55
55
  else
56
56
  proxy_uri = "https://#{options[:proxy][:host]}:#{options[:proxy][:port]}"
57
57
  end
58
- # todo: remove this proxy_uri and make a method to format correctly
58
+ # TODO: remove this proxy_uri and make a method to format correctly
59
59
  options[:proxy_uri] = proxy_uri
60
60
 
61
- # todo: do we need to escape a couple of the argument of username and password
61
+ # TODO: do we need to escape a couple of the argument of username and password
62
62
 
63
- # todo: set some environment variables for system based proxy
63
+ # TODO: set some environment variables for system based proxy
64
64
  end
65
65
 
66
66
  # puts "Final options are: #{options.inspect}"
@@ -80,8 +80,6 @@ module OpenStudio
80
80
  @default_amis = OpenStudioAmis.new(options[:ami_lookup_version], ami_options).get_amis
81
81
  end
82
82
 
83
-
84
-
85
83
  # # def load_data_from_json(json_filename)
86
84
  # @os_aws.load_data_from_json
87
85
  #
@@ -108,8 +106,8 @@ module OpenStudio
108
106
 
109
107
  # for backwards compatibilty, still allow security_group
110
108
  if options[:security_group]
111
- warn "Pass security_groups as an array instead of security_group. security_group will be deprecated in 0.4.0"
112
- options[:security_groups] = [ options[:security_group] ]
109
+ warn 'Pass security_groups as an array instead of security_group. security_group will be deprecated in 0.4.0'
110
+ options[:security_groups] = [options[:security_group]]
113
111
  end
114
112
 
115
113
  if options[:aws_key_pair_name]
@@ -136,10 +134,10 @@ module OpenStudio
136
134
  end
137
135
 
138
136
  server_options = {
139
- user_id: options[:user_id],
140
- tags: options[:tags],
141
- subnet_id: options[:subnet_id],
142
- associate_public_ip_address: options[:associate_public_ip_address],
137
+ user_id: options[:user_id],
138
+ tags: options[:tags],
139
+ subnet_id: options[:subnet_id],
140
+ associate_public_ip_address: options[:associate_public_ip_address]
143
141
  }
144
142
 
145
143
  # save the worker pem and public to the directory
@@ -181,11 +179,10 @@ module OpenStudio
181
179
 
182
180
  # for backwards compatibilty, still allow security_group
183
181
  if options[:security_group]
184
- warn "Pass security_groups as an array instead of security_group. security_group will be deprecated in 0.4.0"
185
- options[:security_groups] = [ options[:security_group] ]
182
+ warn 'Pass security_groups as an array instead of security_group. security_group will be deprecated in 0.4.0'
183
+ options[:security_groups] = [options[:security_group]]
186
184
  end
187
185
 
188
-
189
186
  # Get the right worker AMI ids based on the type of instance
190
187
  if options[:image_id].nil?
191
188
  options[:image_id] = determine_image_type(options[:instance_type])
@@ -198,10 +195,10 @@ module OpenStudio
198
195
  puts 'No workers requested'
199
196
  else
200
197
  worker_options = {
201
- user_id: options[:user_id],
202
- tags: options[:tags],
203
- subnet_id: options[:subnet_id],
204
- associate_public_ip_address: options[:associate_public_ip_address]
198
+ user_id: options[:user_id],
199
+ tags: options[:tags],
200
+ subnet_id: options[:subnet_id],
201
+ associate_public_ip_address: options[:associate_public_ip_address]
205
202
  }
206
203
 
207
204
  # if options[:ebs_volume_size]
@@ -288,7 +285,6 @@ module OpenStudio
288
285
  return false
289
286
  end
290
287
 
291
- # load the worker nodes someday
292
288
  true
293
289
  end
294
290
 
@@ -1,5 +1,5 @@
1
1
  module OpenStudio
2
2
  module Aws
3
- VERSION = '0.3.0'
3
+ VERSION = '0.3.1'
4
4
  end
5
5
  end
@@ -99,7 +99,6 @@ class OpenStudioAmis
99
99
  # just grab the most recent server
100
100
  # need to do a sort to get the most recent because we can't promise that they are in order
101
101
  json[:openstudio].each do |_k, _v|
102
-
103
102
  end
104
103
  key, value = json[:openstudio_server].first
105
104
 
@@ -115,9 +114,27 @@ class OpenStudioAmis
115
114
 
116
115
  private
117
116
 
117
+ # fetch the URL with redirects
118
+ def fetch(uri_str, limit = 10)
119
+ # You should choose better exception.
120
+ fail ArgumentError, 'HTTP redirect too deep' if limit == 0
121
+
122
+ url = URI.parse(uri_str)
123
+ req = Net::HTTP::Get.new(url.path)
124
+ response = Net::HTTP.start(url.host, url.port) { |http| http.request(req) }
125
+ case response
126
+ when Net::HTTPSuccess then
127
+ response
128
+ when Net::HTTPRedirection then
129
+ fetch(response['location'], limit - 1)
130
+ else
131
+ response.error!
132
+ end
133
+ end
134
+
118
135
  def retrieve_json(endpoint)
119
136
  result = nil
120
- resp = Net::HTTP.get_response(@options[:host], endpoint)
137
+ resp = fetch("http://#{@options[:host]}/#{endpoint}")
121
138
  if resp.code == '200'
122
139
  result = JSON.parse(resp.body, symbolize_names: true)
123
140
  else
@@ -27,7 +27,6 @@ class OpenStudioAwsInstance
27
27
  attr_reader :private_ip_address
28
28
  attr_reader :group_uuid
29
29
 
30
-
31
30
  # param security_groups can be a single instance or an array
32
31
  def initialize(aws_session, openstudio_instance_type, key_pair_name, security_groups, group_uuid, private_key,
33
32
  private_key_file_name, subnet_id, proxy = nil)
@@ -78,10 +77,10 @@ class OpenStudioAwsInstance
78
77
  # need to wait until it is available
79
78
 
80
79
  @aws.attach_volume(
81
- volume_id: resp[:volume_id],
82
- instance_id: instance_id,
83
- # required
84
- device: '/dev/sdh'
80
+ volume_id: resp[:volume_id],
81
+ instance_id: instance_id,
82
+ # required
83
+ device: '/dev/sdh'
85
84
  )
86
85
 
87
86
  # Wait for the volume to attach
@@ -92,14 +91,14 @@ class OpenStudioAwsInstance
92
91
  def launch_instance(image_id, instance_type, user_data, user_id, options = {})
93
92
  # determine the instance type of the server
94
93
  instance = {
95
- image_id: image_id,
96
- key_name: @key_pair_name,
97
- security_group_ids: @security_groups,
98
- subnet_id: options[:subnet_id],
99
- user_data: Base64.encode64(user_data),
100
- instance_type: instance_type,
101
- min_count: 1,
102
- max_count: 1
94
+ image_id: image_id,
95
+ key_name: @key_pair_name,
96
+ security_group_ids: @security_groups,
97
+ subnet_id: options[:subnet_id],
98
+ user_data: Base64.encode64(user_data),
99
+ instance_type: instance_type,
100
+ min_count: 1,
101
+ max_count: 1
103
102
  }
104
103
 
105
104
  if options[:availability_zone]
@@ -113,19 +112,18 @@ class OpenStudioAwsInstance
113
112
  # You have to delete the security group and subnet_id from the instance hash and put into the network interface
114
113
  # otherwise you will get an error on launch with an InvalidParameterCombination error.
115
114
  instance[:network_interfaces] = [
116
- {
117
- subnet_id: instance.delete(:subnet_id),
118
- groups: instance.delete(:security_group_ids),
119
- device_index: 0,
120
- associate_public_ip_address: true
121
- }
115
+ {
116
+ subnet_id: instance.delete(:subnet_id),
117
+ groups: instance.delete(:security_group_ids),
118
+ device_index: 0,
119
+ associate_public_ip_address: true
120
+ }
122
121
  ]
123
122
  end
124
123
 
125
124
  # Documentation for run_instances is here: http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/EC2/Client.html#run_instances-instance_method
126
125
  result = @aws.run_instances(instance)
127
126
 
128
-
129
127
  # determine how many processors are suppose to be in this image (lookup for now?)
130
128
  processors = find_processors(instance_type)
131
129
 
@@ -160,15 +158,14 @@ class OpenStudioAwsInstance
160
158
  tries ||= 3
161
159
  aws_instance = result.data.instances.first
162
160
  @aws.create_tags(
163
- resources: [aws_instance.instance_id],
164
- tags: aws_tags
161
+ resources: [aws_instance.instance_id],
162
+ tags: aws_tags
165
163
  )
166
164
  rescue Aws::EC2::Errors::InvalidInstanceIDNotFound
167
165
  sleep 1000
168
166
  retry unless (tries -= 1).zero?
169
167
  end
170
168
 
171
-
172
169
  # get the instance information
173
170
  test_result = @aws.describe_instance_status(instance_ids: [aws_instance.instance_id]).data.instance_statuses.first
174
171
  begin
@@ -190,7 +187,7 @@ class OpenStudioAwsInstance
190
187
  end
191
188
 
192
189
  # now grab information about the instance
193
- # todo: check lengths on all of arrays
190
+ # TODO: check lengths on all of arrays
194
191
  instance_data = @aws.describe_instances(instance_ids: [aws_instance.instance_id]).data.reservations.first.instances.first.to_hash
195
192
  logger.info "instance description is: #{instance_data}"
196
193
 
@@ -427,13 +424,13 @@ class OpenStudioAwsInstance
427
424
  def create_struct(instance, procs)
428
425
  instance_struct = Struct.new(:instance, :id, :ip, :dns, :procs, :availability_zone, :private_ip_address)
429
426
  s = instance_struct.new(
430
- instance,
431
- instance[:instance_id],
432
- instance[:public_ip_address],
433
- instance[:public_dns_name],
434
- procs,
435
- instance[:placement][:availability_zone],
436
- instance[:private_ip_address]
427
+ instance,
428
+ instance[:instance_id],
429
+ instance[:public_ip_address],
430
+ instance[:public_dns_name],
431
+ procs,
432
+ instance[:placement][:availability_zone],
433
+ instance[:private_ip_address]
437
434
  )
438
435
 
439
436
  # store some values into the member variables
@@ -82,20 +82,20 @@ class OpenStudioAwsWrapper
82
82
  logger.info 'security group not found --- will create a new one'
83
83
  @aws.create_security_group(group_name: tmp_name, description: "group dynamically created by #{__FILE__}")
84
84
  @aws.authorize_security_group_ingress(
85
- group_name: tmp_name,
86
- ip_permissions: [
87
- { ip_protocol: 'tcp', from_port: 22, to_port: 22, ip_ranges: [cidr_ip: '0.0.0.0/0'] }, # Eventually make this only the user's IP address seen by the internet
88
- { ip_protocol: 'tcp', from_port: 80, to_port: 80, ip_ranges: [cidr_ip: '0.0.0.0/0'] },
89
- { ip_protocol: 'tcp', from_port: 443, to_port: 443, ip_ranges: [cidr_ip: '0.0.0.0/0'] },
90
- { ip_protocol: 'tcp', from_port: 0, to_port: 65535, user_id_group_pairs: [{ group_name: tmp_name}]}, # allow all machines in the security group talk to each other openly
91
- { ip_protocol: 'icmp', from_port: -1, to_port: -1, ip_ranges: [cidr_ip: '0.0.0.0/0'] }
92
- ]
85
+ group_name: tmp_name,
86
+ ip_permissions: [
87
+ { ip_protocol: 'tcp', from_port: 22, to_port: 22, ip_ranges: [cidr_ip: '0.0.0.0/0'] }, # Eventually make this only the user's IP address seen by the internet
88
+ { ip_protocol: 'tcp', from_port: 80, to_port: 80, ip_ranges: [cidr_ip: '0.0.0.0/0'] },
89
+ { ip_protocol: 'tcp', from_port: 443, to_port: 443, ip_ranges: [cidr_ip: '0.0.0.0/0'] },
90
+ { ip_protocol: 'tcp', from_port: 0, to_port: 65535, user_id_group_pairs: [{ group_name: tmp_name }] }, # allow all machines in the security group talk to each other openly
91
+ { ip_protocol: 'icmp', from_port: -1, to_port: -1, ip_ranges: [cidr_ip: '0.0.0.0/0'] }
92
+ ]
93
93
  )
94
94
 
95
95
  # reload group information
96
96
  group = @aws.describe_security_groups(filters: [{ name: 'group-name', values: [tmp_name] }])
97
97
  else
98
- logger.info "Found existing security group"
98
+ logger.info 'Found existing security group'
99
99
  end
100
100
 
101
101
  @security_groups = [group.data.security_groups.first.group_id]
@@ -134,11 +134,11 @@ class OpenStudioAwsWrapper
134
134
  resp = nil
135
135
  if group_uuid
136
136
  resp = @aws.describe_instances(
137
- filters: [
138
- { name: 'instance-state-code', values: [0.to_s, 16.to_s] }, # running or pending
139
- { name: 'tag-key', values: ['GroupUUID'] },
140
- { name: 'tag-value', values: [group_uuid.to_s] }
141
- ]
137
+ filters: [
138
+ { name: 'instance-state-code', values: [0.to_s, 16.to_s] }, # running or pending
139
+ { name: 'tag-key', values: ['GroupUUID'] },
140
+ { name: 'tag-value', values: [group_uuid.to_s] }
141
+ ]
142
142
  )
143
143
  else
144
144
  resp = @aws.describe_instances
@@ -153,7 +153,7 @@ class OpenStudioAwsWrapper
153
153
  if group_uuid && openstudio_instance_type
154
154
  # {:key=>"Purpose", :value=>"OpenStudioWorker"}
155
155
  if i_h[:tags].any? { |h| (h[:key] == 'Purpose') && (h[:value] == "OpenStudio#{openstudio_instance_type.capitalize}") } &&
156
- i_h[:tags].any? { |h| (h[:key] == 'GroupUUID') && (h[:value] == group_uuid.to_s) }
156
+ i_h[:tags].any? { |h| (h[:key] == 'GroupUUID') && (h[:value] == group_uuid.to_s) }
157
157
  instance_data << i_h
158
158
  end
159
159
  elsif group_uuid
@@ -177,7 +177,7 @@ class OpenStudioAwsWrapper
177
177
  def describe_amis(filter = nil, image_ids = [], owned_by_me = true)
178
178
  resp = nil
179
179
 
180
- # todo: test the filter. i don't think that it is exposed in the AWS gem?
180
+ # TODO: test the filter. i don't think that it is exposed in the AWS gem?
181
181
  if owned_by_me
182
182
  if filter
183
183
  resp = @aws.describe_images(owners: [:self], filter: filter).data
@@ -212,8 +212,8 @@ class OpenStudioAwsWrapper
212
212
 
213
213
  def stop_instances(ids)
214
214
  resp = @aws.stop_instances(
215
- instance_ids: ids,
216
- force: true
215
+ instance_ids: ids,
216
+ force: true
217
217
  )
218
218
 
219
219
  resp
@@ -222,7 +222,7 @@ class OpenStudioAwsWrapper
222
222
  def terminate_instances(ids)
223
223
  begin
224
224
  resp = @aws.terminate_instances(
225
- instance_ids: ids
225
+ instance_ids: ids
226
226
  )
227
227
  rescue Aws::EC2::Errors::InvalidInstanceIDNotFound
228
228
  # Log that the instances couldn't be found?
@@ -264,7 +264,7 @@ class OpenStudioAwsWrapper
264
264
  end
265
265
 
266
266
  def load_private_key(filename)
267
- if !File.exist? filename
267
+ unless File.exist? filename
268
268
  # check if the file basename exists in your user directory
269
269
  filename = File.expand_path("~/.ssh/#{File.basename(filename)}")
270
270
  if File.exist? filename
@@ -290,23 +290,23 @@ class OpenStudioAwsWrapper
290
290
  end
291
291
 
292
292
  # save off the worker public/private keys that were created
293
- def save_worker_keys(directory='.')
294
- File.open("#{directory}/ec2_worker_key.pem", 'w') { |f| f << @worker_keys.private_key}
295
- File.open("#{directory}/ec2_worker_key.pub", 'w') { |f| f << @worker_keys.public_key}
293
+ def save_worker_keys(directory = '.')
294
+ File.open("#{directory}/ec2_worker_key.pem", 'w') { |f| f << @worker_keys.private_key }
295
+ File.open("#{directory}/ec2_worker_key.pub", 'w') { |f| f << @worker_keys.public_key }
296
296
  end
297
297
 
298
298
  def launch_server(image_id, instance_type, launch_options = {})
299
299
  defaults = {
300
- user_id: 'unknown_user',
301
- tags: [],
302
- ebs_volume_size: nil
300
+ user_id: 'unknown_user',
301
+ tags: [],
302
+ ebs_volume_size: nil
303
303
  }
304
304
  launch_options = defaults.merge(launch_options)
305
305
 
306
306
  # replace the server_script.sh.template with the keys to add
307
307
  user_data = File.read(File.expand_path(File.dirname(__FILE__)) + '/server_script.sh.template')
308
308
  user_data.gsub!(/SERVER_HOSTNAME/, 'openstudio.server')
309
- user_data.gsub!(/WORKER_PRIVATE_KEY_TEMPLATE/, worker_keys.private_key.gsub("\n","\\n"))
309
+ user_data.gsub!(/WORKER_PRIVATE_KEY_TEMPLATE/, worker_keys.private_key.gsub("\n", '\\n'))
310
310
  user_data.gsub!(/WORKER_PUBLIC_KEY_TEMPLATE/, worker_keys.ssh_public_key)
311
311
 
312
312
  @server = OpenStudioAwsInstance.new(@aws, :server, @key_pair_name, @security_groups, @group_uuid, @private_key,
@@ -321,11 +321,11 @@ class OpenStudioAwsWrapper
321
321
 
322
322
  def launch_workers(image_id, instance_type, num, launch_options = {})
323
323
  defaults = {
324
- user_id: 'unknown_user',
325
- tags: [],
326
- ebs_volume_size: nil,
327
- availability_zone: @server.data.availability_zone,
328
- worker_public_key: ''
324
+ user_id: 'unknown_user',
325
+ tags: [],
326
+ ebs_volume_size: nil,
327
+ availability_zone: @server.data.availability_zone,
328
+ worker_public_key: ''
329
329
  }
330
330
  launch_options = defaults.merge(launch_options)
331
331
 
@@ -351,8 +351,8 @@ class OpenStudioAwsWrapper
351
351
  end
352
352
  threads.each(&:join)
353
353
 
354
- # todo: do we need to have a flag if the worker node is successful?
355
- # todo: do we need to check the current list of running workers?
354
+ # TODO: do we need to have a flag if the worker node is successful?
355
+ # TODO: do we need to check the current list of running workers?
356
356
  end
357
357
 
358
358
  # blocking method that waits for servers and workers to be fully configured (i.e. execution of user_data has
@@ -400,17 +400,18 @@ class OpenStudioAwsWrapper
400
400
  logger.info "finding the server for groupid of #{group_uuid}"
401
401
  fail 'no group uuid defined either in member variable or method argument' if group_uuid.nil?
402
402
 
403
- @server = nil
403
+ # This should really just be a single call to describe running instances
404
+ @server = nil
404
405
  resp = describe_running_instances(group_uuid, :server)
405
406
  if resp
406
407
  fail "more than one server running with group uuid of #{group_uuid} found, expecting only one" if resp.size > 1
407
408
  resp = resp.first
408
409
  if !@server
409
- if resp
410
- logger.info "Server found and loading data into object [instance id is #{resp[:instance_id]}]"
411
- @server = OpenStudioAwsInstance.new(@aws, :server, resp[:key_name], resp[:security_groups].first[:group_name], group_uuid, @private_key, @private_key_file_name, @proxy)
410
+ if resp
411
+ logger.info "Server found and loading data into object [instance id is #{resp[:instance_id]}]"
412
+ @server = OpenStudioAwsInstance.new(@aws, :server, resp[:key_name], resp[:security_groups].first[:group_name], group_uuid, @private_key, @private_key_file_name, @proxy)
412
413
 
413
- @server.load_instance_data(resp)
414
+ @server.load_instance_data(resp)
414
415
  end
415
416
  else
416
417
  logger.info "Server instance is already defined with instance #{resp[:instance_id]}"
@@ -419,6 +420,19 @@ class OpenStudioAwsWrapper
419
420
  puts 'could not find a running server instance'
420
421
  end
421
422
 
423
+ # find the workers
424
+ if @workers.size == 0
425
+ resp = describe_running_instances(group_uuid, :worker)
426
+ if resp
427
+ resp.each do |r|
428
+ @workers << OpenStudioAwsInstance.new(@aws, :worker, r[:key_name], r[:security_groups].first[:group_name], group_uuid, @private_key, @private_key_file_name, @proxy)
429
+ @workers.last.load_instance_data(r)
430
+ end
431
+ end
432
+ else
433
+ logger.info 'Worker nodes are already defined'
434
+ end
435
+
422
436
  # Really don't need to return anything because this sets the class instance variable
423
437
  @server
424
438
  end
@@ -439,7 +453,7 @@ class OpenStudioAwsWrapper
439
453
  version1 = {}
440
454
 
441
455
  # now grab the good keys - they should be sorted newest to older... so go backwards
442
- amis[:openstudio_server].keys.reverse.each do |key|
456
+ amis[:openstudio_server].keys.reverse_each do |key|
443
457
  next if amis[:openstudio_server][key][:deprecate]
444
458
 
445
459
  a = amis[:openstudio_server][key]
@@ -470,12 +484,12 @@ class OpenStudioAwsWrapper
470
484
  worker_hash = []
471
485
  @workers.each do |worker|
472
486
  worker_hash.push(
473
- id: worker.data.id,
474
- ip: "http://#{worker.data.ip}",
475
- dns: worker.data.dns,
476
- procs: worker.data.procs,
477
- private_key_file_name: worker.private_key_file_name,
478
- private_ip_address: worker.private_ip_address
487
+ id: worker.data.id,
488
+ ip: "http://#{worker.data.ip}",
489
+ dns: worker.data.dns,
490
+ procs: worker.data.procs,
491
+ private_key_file_name: worker.private_key_file_name,
492
+ private_ip_address: worker.private_ip_address
479
493
  )
480
494
  end
481
495
 
@@ -495,9 +509,7 @@ class OpenStudioAwsWrapper
495
509
  end
496
510
 
497
511
  # get the max version in the list_of_svs
498
- while list_of_svs.include?(b.to_s)
499
- b.patch += 1
500
- end
512
+ b.patch += 1 while list_of_svs.include?(b.to_s)
501
513
 
502
514
  # return the value back as a string
503
515
  b.to_s