openstudio-aws 0.1.26 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (351) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/Rakefile +33 -34
  4. data/lib/openstudio/aws/aws.rb +148 -24
  5. data/lib/openstudio/aws/config.rb +1 -0
  6. data/lib/openstudio/aws/version.rb +1 -1
  7. data/lib/openstudio/lib/ami_list.rb +1 -1
  8. data/lib/openstudio/lib/openstudio_aws_instance.rb +260 -26
  9. data/lib/openstudio/lib/openstudio_aws_logger.rb +0 -18
  10. data/lib/openstudio/lib/openstudio_aws_wrapper.rb +111 -75
  11. data/lib/openstudio/lib/os-aws.rb +14 -6
  12. data/lib/openstudio/lib/server_script.sh +40 -26
  13. data/lib/openstudio/lib/worker_script.sh.template +26 -16
  14. data/lib/openstudio-aws.rb +2 -0
  15. data/spec/aws_instances/aws_spec_api.rb +80 -4
  16. data/spec/openstudio-aws/aws_instance_spec.rb +19 -0
  17. data/spec/openstudio-aws/aws_spec.rb +32 -11
  18. data/spec/openstudio-aws/aws_wrapper_spec.rb +5 -5
  19. data/spec/openstudio-aws/config_spec.rb +1 -1
  20. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.0.xml +11 -0
  21. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.1.xml +11 -0
  22. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.10.xml +11 -0
  23. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.11.xml +11 -0
  24. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.12.xml +11 -0
  25. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.13.xml +11 -0
  26. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.2.xml +11 -0
  27. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.3.xml +11 -0
  28. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.4.xml +11 -0
  29. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.5.xml +11 -0
  30. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.6.xml +11 -0
  31. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.7.xml +11 -0
  32. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.8.xml +11 -0
  33. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.9.xml +11 -0
  34. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.xml +11 -0
  35. data/spec/reports/SPEC-OpenStudio-Aws-Aws-create-a-new-instance.0.xml +26 -0
  36. data/spec/reports/SPEC-OpenStudio-Aws-Aws-create-a-new-instance.xml +35 -0
  37. data/spec/reports/SPEC-OpenStudio-Aws-Aws-create-ebs-storage.0.xml +14 -0
  38. data/spec/reports/SPEC-OpenStudio-Aws-Aws-create-ebs-storage.xml +14 -0
  39. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.0.xml +14 -0
  40. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.1.xml +21 -0
  41. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.2.xml +11 -0
  42. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.3.xml +11 -0
  43. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.4.xml +11 -0
  44. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.5.xml +11 -0
  45. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.6.xml +11 -0
  46. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.xml +16 -0
  47. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.0.xml +13 -0
  48. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.1.xml +13 -0
  49. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.10.xml +13 -0
  50. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.11.xml +13 -0
  51. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.12.xml +13 -0
  52. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.13.xml +13 -0
  53. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.2.xml +13 -0
  54. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.3.xml +13 -0
  55. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.4.xml +13 -0
  56. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.5.xml +13 -0
  57. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.6.xml +13 -0
  58. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.7.xml +13 -0
  59. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.8.xml +13 -0
  60. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.9.xml +13 -0
  61. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.xml +13 -0
  62. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.0.xml +9 -0
  63. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.1.xml +9 -0
  64. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.10.xml +9 -0
  65. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.11.xml +9 -0
  66. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.12.xml +9 -0
  67. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.13.xml +9 -0
  68. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.2.xml +9 -0
  69. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.3.xml +9 -0
  70. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.4.xml +9 -0
  71. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.5.xml +9 -0
  72. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.6.xml +9 -0
  73. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.7.xml +9 -0
  74. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.8.xml +9 -0
  75. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.9.xml +9 -0
  76. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.xml +9 -0
  77. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.0.xml +9 -0
  78. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.1.xml +9 -0
  79. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.10.xml +9 -0
  80. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.11.xml +9 -0
  81. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.12.xml +9 -0
  82. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.13.xml +9 -0
  83. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.2.xml +9 -0
  84. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.3.xml +9 -0
  85. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.4.xml +9 -0
  86. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.5.xml +9 -0
  87. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.6.xml +9 -0
  88. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.7.xml +9 -0
  89. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.8.xml +9 -0
  90. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.9.xml +9 -0
  91. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.xml +9 -0
  92. data/spec/reports/SPEC-OpenStudio-Aws-Aws-workers-before-server.0.xml +9 -0
  93. data/spec/reports/SPEC-OpenStudio-Aws-Aws-workers-before-server.xml +9 -0
  94. data/spec/reports/SPEC-OpenStudio-Aws-Aws.0.xml +7 -0
  95. data/spec/reports/SPEC-OpenStudio-Aws-Aws.1.xml +7 -0
  96. data/spec/reports/SPEC-OpenStudio-Aws-Aws.10.xml +7 -0
  97. data/spec/reports/SPEC-OpenStudio-Aws-Aws.11.xml +7 -0
  98. data/spec/reports/SPEC-OpenStudio-Aws-Aws.12.xml +7 -0
  99. data/spec/reports/SPEC-OpenStudio-Aws-Aws.13.xml +7 -0
  100. data/spec/reports/SPEC-OpenStudio-Aws-Aws.14.xml +7 -0
  101. data/spec/reports/SPEC-OpenStudio-Aws-Aws.15.xml +7 -0
  102. data/spec/reports/SPEC-OpenStudio-Aws-Aws.2.xml +7 -0
  103. data/spec/reports/SPEC-OpenStudio-Aws-Aws.3.xml +7 -0
  104. data/spec/reports/SPEC-OpenStudio-Aws-Aws.4.xml +7 -0
  105. data/spec/reports/SPEC-OpenStudio-Aws-Aws.5.xml +7 -0
  106. data/spec/reports/SPEC-OpenStudio-Aws-Aws.6.xml +7 -0
  107. data/spec/reports/SPEC-OpenStudio-Aws-Aws.7.xml +7 -0
  108. data/spec/reports/SPEC-OpenStudio-Aws-Aws.8.xml +7 -0
  109. data/spec/reports/SPEC-OpenStudio-Aws-Aws.9.xml +7 -0
  110. data/spec/reports/SPEC-OpenStudio-Aws-Aws.xml +7 -0
  111. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.0.xml +9 -0
  112. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.1.xml +9 -0
  113. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.10.xml +9 -0
  114. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.11.xml +9 -0
  115. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.12.xml +9 -0
  116. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.2.xml +9 -0
  117. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.3.xml +9 -0
  118. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.4.xml +9 -0
  119. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.5.xml +9 -0
  120. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.6.xml +9 -0
  121. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.7.xml +9 -0
  122. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.8.xml +9 -0
  123. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.9.xml +9 -0
  124. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.xml +9 -0
  125. data/spec/reports/SPEC-OpenStudio-Aws-Config.0.xml +7 -0
  126. data/spec/reports/SPEC-OpenStudio-Aws-Config.1.xml +7 -0
  127. data/spec/reports/SPEC-OpenStudio-Aws-Config.10.xml +7 -0
  128. data/spec/reports/SPEC-OpenStudio-Aws-Config.11.xml +7 -0
  129. data/spec/reports/SPEC-OpenStudio-Aws-Config.12.xml +7 -0
  130. data/spec/reports/SPEC-OpenStudio-Aws-Config.2.xml +7 -0
  131. data/spec/reports/SPEC-OpenStudio-Aws-Config.3.xml +7 -0
  132. data/spec/reports/SPEC-OpenStudio-Aws-Config.4.xml +7 -0
  133. data/spec/reports/SPEC-OpenStudio-Aws-Config.5.xml +7 -0
  134. data/spec/reports/SPEC-OpenStudio-Aws-Config.6.xml +7 -0
  135. data/spec/reports/SPEC-OpenStudio-Aws-Config.7.xml +7 -0
  136. data/spec/reports/SPEC-OpenStudio-Aws-Config.8.xml +7 -0
  137. data/spec/reports/SPEC-OpenStudio-Aws-Config.9.xml +7 -0
  138. data/spec/reports/SPEC-OpenStudio-Aws-Config.xml +7 -0
  139. data/spec/reports/SPEC-OpenStudioAmis-version-1.0.xml +13 -0
  140. data/spec/reports/SPEC-OpenStudioAmis-version-1.1.xml +13 -0
  141. data/spec/reports/SPEC-OpenStudioAmis-version-1.10.xml +13 -0
  142. data/spec/reports/SPEC-OpenStudioAmis-version-1.11.xml +13 -0
  143. data/spec/reports/SPEC-OpenStudioAmis-version-1.12.xml +13 -0
  144. data/spec/reports/SPEC-OpenStudioAmis-version-1.13.xml +13 -0
  145. data/spec/reports/SPEC-OpenStudioAmis-version-1.2.xml +13 -0
  146. data/spec/reports/SPEC-OpenStudioAmis-version-1.3.xml +13 -0
  147. data/spec/reports/SPEC-OpenStudioAmis-version-1.4.xml +13 -0
  148. data/spec/reports/SPEC-OpenStudioAmis-version-1.5.xml +13 -0
  149. data/spec/reports/SPEC-OpenStudioAmis-version-1.6.xml +13 -0
  150. data/spec/reports/SPEC-OpenStudioAmis-version-1.7.xml +13 -0
  151. data/spec/reports/SPEC-OpenStudioAmis-version-1.8.xml +13 -0
  152. data/spec/reports/SPEC-OpenStudioAmis-version-1.9.xml +13 -0
  153. data/spec/reports/SPEC-OpenStudioAmis-version-1.xml +13 -0
  154. data/spec/reports/SPEC-OpenStudioAmis-version-2.0.xml +9 -0
  155. data/spec/reports/SPEC-OpenStudioAmis-version-2.1.xml +9 -0
  156. data/spec/reports/SPEC-OpenStudioAmis-version-2.10.xml +9 -0
  157. data/spec/reports/SPEC-OpenStudioAmis-version-2.11.xml +9 -0
  158. data/spec/reports/SPEC-OpenStudioAmis-version-2.12.xml +9 -0
  159. data/spec/reports/SPEC-OpenStudioAmis-version-2.13.xml +9 -0
  160. data/spec/reports/SPEC-OpenStudioAmis-version-2.2.xml +9 -0
  161. data/spec/reports/SPEC-OpenStudioAmis-version-2.3.xml +9 -0
  162. data/spec/reports/SPEC-OpenStudioAmis-version-2.4.xml +9 -0
  163. data/spec/reports/SPEC-OpenStudioAmis-version-2.5.xml +9 -0
  164. data/spec/reports/SPEC-OpenStudioAmis-version-2.6.xml +9 -0
  165. data/spec/reports/SPEC-OpenStudioAmis-version-2.7.xml +9 -0
  166. data/spec/reports/SPEC-OpenStudioAmis-version-2.8.xml +9 -0
  167. data/spec/reports/SPEC-OpenStudioAmis-version-2.9.xml +9 -0
  168. data/spec/reports/SPEC-OpenStudioAmis-version-2.xml +9 -0
  169. data/spec/reports/SPEC-OpenStudioAmis.0.xml +7 -0
  170. data/spec/reports/SPEC-OpenStudioAmis.1.xml +7 -0
  171. data/spec/reports/SPEC-OpenStudioAmis.10.xml +7 -0
  172. data/spec/reports/SPEC-OpenStudioAmis.11.xml +7 -0
  173. data/spec/reports/SPEC-OpenStudioAmis.12.xml +7 -0
  174. data/spec/reports/SPEC-OpenStudioAmis.13.xml +7 -0
  175. data/spec/reports/SPEC-OpenStudioAmis.2.xml +7 -0
  176. data/spec/reports/SPEC-OpenStudioAmis.3.xml +7 -0
  177. data/spec/reports/SPEC-OpenStudioAmis.4.xml +7 -0
  178. data/spec/reports/SPEC-OpenStudioAmis.5.xml +7 -0
  179. data/spec/reports/SPEC-OpenStudioAmis.6.xml +7 -0
  180. data/spec/reports/SPEC-OpenStudioAmis.7.xml +7 -0
  181. data/spec/reports/SPEC-OpenStudioAmis.8.xml +7 -0
  182. data/spec/reports/SPEC-OpenStudioAmis.9.xml +7 -0
  183. data/spec/reports/SPEC-OpenStudioAmis.xml +7 -0
  184. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.0.xml +21 -0
  185. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.1.xml +11 -0
  186. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.10.xml +11 -0
  187. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.11.xml +11 -0
  188. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.2.xml +11 -0
  189. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.3.xml +25 -0
  190. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.4.xml +11 -0
  191. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.5.xml +11 -0
  192. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.6.xml +11 -0
  193. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.7.xml +11 -0
  194. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.8.xml +11 -0
  195. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.9.xml +11 -0
  196. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.xml +25 -0
  197. data/spec/reports/SPEC-OpenStudioAwsInstance.0.xml +7 -0
  198. data/spec/reports/SPEC-OpenStudioAwsInstance.1.xml +7 -0
  199. data/spec/reports/SPEC-OpenStudioAwsInstance.10.xml +7 -0
  200. data/spec/reports/SPEC-OpenStudioAwsInstance.11.xml +7 -0
  201. data/spec/reports/SPEC-OpenStudioAwsInstance.2.xml +7 -0
  202. data/spec/reports/SPEC-OpenStudioAwsInstance.3.xml +7 -0
  203. data/spec/reports/SPEC-OpenStudioAwsInstance.4.xml +7 -0
  204. data/spec/reports/SPEC-OpenStudioAwsInstance.5.xml +7 -0
  205. data/spec/reports/SPEC-OpenStudioAwsInstance.6.xml +7 -0
  206. data/spec/reports/SPEC-OpenStudioAwsInstance.7.xml +7 -0
  207. data/spec/reports/SPEC-OpenStudioAwsInstance.8.xml +7 -0
  208. data/spec/reports/SPEC-OpenStudioAwsInstance.9.xml +7 -0
  209. data/spec/reports/SPEC-OpenStudioAwsInstance.xml +7 -0
  210. data/spec/reports/SPEC-OpenStudioAwsMethods-processors.0.xml +11 -0
  211. data/spec/reports/SPEC-OpenStudioAwsMethods-processors.1.xml +11 -0
  212. data/spec/reports/SPEC-OpenStudioAwsMethods-processors.xml +11 -0
  213. data/spec/reports/SPEC-OpenStudioAwsMethods.0.xml +7 -0
  214. data/spec/reports/SPEC-OpenStudioAwsMethods.1.xml +7 -0
  215. data/spec/reports/SPEC-OpenStudioAwsMethods.xml +7 -0
  216. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.0.xml +9 -0
  217. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.1.xml +9 -0
  218. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.10.xml +9 -0
  219. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.11.xml +9 -0
  220. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.12.xml +9 -0
  221. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.2.xml +9 -0
  222. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.3.xml +9 -0
  223. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.4.xml +9 -0
  224. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.5.xml +9 -0
  225. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.6.xml +9 -0
  226. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.7.xml +9 -0
  227. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.8.xml +9 -0
  228. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.9.xml +9 -0
  229. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.xml +9 -0
  230. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.0.xml +11 -0
  231. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.1.xml +11 -0
  232. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.10.xml +11 -0
  233. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.11.xml +11 -0
  234. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.12.xml +11 -0
  235. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.13.xml +11 -0
  236. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.2.xml +11 -0
  237. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.3.xml +11 -0
  238. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.4.xml +11 -0
  239. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.5.xml +11 -0
  240. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.6.xml +11 -0
  241. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.7.xml +11 -0
  242. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.8.xml +11 -0
  243. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.9.xml +11 -0
  244. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.xml +11 -0
  245. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.0.xml +11 -0
  246. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.1.xml +11 -0
  247. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.10.xml +11 -0
  248. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.11.xml +11 -0
  249. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.12.xml +11 -0
  250. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.13.xml +11 -0
  251. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.2.xml +11 -0
  252. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.3.xml +11 -0
  253. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.4.xml +11 -0
  254. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.5.xml +11 -0
  255. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.6.xml +9 -0
  256. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.7.xml +11 -0
  257. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.8.xml +11 -0
  258. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.9.xml +11 -0
  259. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.xml +11 -0
  260. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.0.xml +9 -0
  261. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.1.xml +9 -0
  262. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.10.xml +9 -0
  263. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.11.xml +9 -0
  264. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.12.xml +9 -0
  265. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.13.xml +9 -0
  266. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.2.xml +9 -0
  267. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.3.xml +9 -0
  268. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.4.xml +9 -0
  269. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.5.xml +9 -0
  270. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.6.xml +9 -0
  271. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.7.xml +9 -0
  272. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.8.xml +9 -0
  273. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.9.xml +9 -0
  274. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.xml +9 -0
  275. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.0.xml +103 -0
  276. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.1.xml +103 -0
  277. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.10.xml +107 -0
  278. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.11.xml +107 -0
  279. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.12.xml +107 -0
  280. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.2.xml +103 -0
  281. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.3.xml +103 -0
  282. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.4.xml +107 -0
  283. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.5.xml +107 -0
  284. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.6.xml +107 -0
  285. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.7.xml +107 -0
  286. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.8.xml +107 -0
  287. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.9.xml +107 -0
  288. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.xml +103 -0
  289. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.0.xml +1111 -0
  290. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.1.xml +1111 -0
  291. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.10.xml +1113 -0
  292. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.11.xml +1113 -0
  293. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.12.xml +1133 -0
  294. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.2.xml +1111 -0
  295. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.3.xml +1111 -0
  296. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.4.xml +1113 -0
  297. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.5.xml +1113 -0
  298. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.6.xml +1113 -0
  299. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.7.xml +1113 -0
  300. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.8.xml +1113 -0
  301. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.9.xml +1113 -0
  302. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.xml +1111 -0
  303. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.0.xml +7 -0
  304. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.1.xml +7 -0
  305. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.10.xml +7 -0
  306. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.11.xml +7 -0
  307. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.12.xml +7 -0
  308. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.13.xml +7 -0
  309. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.2.xml +7 -0
  310. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.3.xml +7 -0
  311. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.4.xml +7 -0
  312. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.5.xml +7 -0
  313. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.6.xml +7 -0
  314. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.7.xml +7 -0
  315. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.8.xml +7 -0
  316. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.9.xml +7 -0
  317. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.xml +7 -0
  318. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.0.xml +9 -0
  319. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.1.xml +9 -0
  320. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.10.xml +9 -0
  321. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.11.xml +9 -0
  322. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.12.xml +9 -0
  323. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.13.xml +9 -0
  324. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.2.xml +9 -0
  325. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.3.xml +9 -0
  326. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.4.xml +9 -0
  327. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.5.xml +9 -0
  328. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.6.xml +9 -0
  329. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.7.xml +9 -0
  330. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.8.xml +9 -0
  331. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.9.xml +9 -0
  332. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.xml +9 -0
  333. data/spec/reports/SPEC-OpenStudioAwsWrapper.0.xml +7 -0
  334. data/spec/reports/SPEC-OpenStudioAwsWrapper.1.xml +7 -0
  335. data/spec/reports/SPEC-OpenStudioAwsWrapper.10.xml +7 -0
  336. data/spec/reports/SPEC-OpenStudioAwsWrapper.11.xml +7 -0
  337. data/spec/reports/SPEC-OpenStudioAwsWrapper.12.xml +7 -0
  338. data/spec/reports/SPEC-OpenStudioAwsWrapper.13.xml +7 -0
  339. data/spec/reports/SPEC-OpenStudioAwsWrapper.2.xml +7 -0
  340. data/spec/reports/SPEC-OpenStudioAwsWrapper.3.xml +7 -0
  341. data/spec/reports/SPEC-OpenStudioAwsWrapper.4.xml +7 -0
  342. data/spec/reports/SPEC-OpenStudioAwsWrapper.5.xml +7 -0
  343. data/spec/reports/SPEC-OpenStudioAwsWrapper.6.xml +7 -0
  344. data/spec/reports/SPEC-OpenStudioAwsWrapper.7.xml +7 -0
  345. data/spec/reports/SPEC-OpenStudioAwsWrapper.8.xml +7 -0
  346. data/spec/reports/SPEC-OpenStudioAwsWrapper.9.xml +7 -0
  347. data/spec/reports/SPEC-OpenStudioAwsWrapper.xml +7 -0
  348. data/spec/resources/upload_me.sh +5 -0
  349. metadata +664 -7
  350. data/lib/openstudio/lib/openstudio_aws_methods.rb +0 -237
  351. data/spec/openstudio-aws/aws_methods_spec.rb +0 -24
@@ -48,17 +48,20 @@ class OpenStudioAwsWrapper
48
48
  attr_reader :workers
49
49
  attr_reader :proxy
50
50
 
51
- # todo: put this into a module
52
- VALID_OPTIONS = [
53
- :proxy, :credentials
54
- ]
51
+ attr_accessor :private_key_file_name
52
+
53
+ VALID_OPTIONS = [:proxy, :credentials]
55
54
 
56
55
  def initialize(options = {}, group_uuid = nil)
57
- @group_uuid = group_uuid || Time.now.to_i.to_s
56
+ @group_uuid = group_uuid || (SecureRandom.uuid).gsub('-', '')
58
57
 
59
58
  @security_group_name = nil
60
59
  @key_pair_name = nil
61
- @private_key = nil
60
+ @private_key_file_name = nil
61
+
62
+ @private_key = nil # Private key data
63
+
64
+ # List of instances
62
65
  @server = nil
63
66
  @workers = []
64
67
 
@@ -66,7 +69,7 @@ class OpenStudioAwsWrapper
66
69
  @proxy = options[:proxy] ? options[:proxy] : nil
67
70
 
68
71
  # need to remove the prxoy information here
69
- @aws = Aws::EC2.new(options[:credentials])
72
+ @aws = Aws::EC2::Client.new(options[:credentials])
70
73
  end
71
74
 
72
75
  def create_or_retrieve_security_group(sg_name = nil)
@@ -77,21 +80,17 @@ class OpenStudioAwsWrapper
77
80
  logger.info 'server group not found --- will create a new one'
78
81
  @aws.create_security_group(group_name: tmp_name, description: "group dynamically created by #{__FILE__}")
79
82
  @aws.authorize_security_group_ingress(
80
-
81
- group_name: tmp_name,
82
- ip_permissions: [
83
- { ip_protocol: 'tcp', from_port: 1, to_port: 65535, ip_ranges: [cidr_ip: '0.0.0.0/0'] }
84
- ]
85
-
83
+ group_name: tmp_name,
84
+ ip_permissions: [
85
+ { ip_protocol: 'tcp', from_port: 1, to_port: 65_535, ip_ranges: [cidr_ip: '0.0.0.0/0'] }
86
+ ]
86
87
  )
87
88
  @aws.authorize_security_group_ingress(
88
-
89
- group_name: tmp_name,
90
- ip_permissions: [
91
- { ip_protocol: 'icmp', from_port: -1, to_port: -1, ip_ranges: [cidr_ip: '0.0.0.0/0']
92
- }
93
- ]
94
-
89
+ group_name: tmp_name,
90
+ ip_permissions: [
91
+ { ip_protocol: 'icmp', from_port: -1, to_port: -1, ip_ranges: [cidr_ip: '0.0.0.0/0']
92
+ }
93
+ ]
95
94
  )
96
95
 
97
96
  # reload group information
@@ -131,34 +130,40 @@ class OpenStudioAwsWrapper
131
130
  resp = nil
132
131
  if group_uuid
133
132
  resp = @aws.describe_instances(
134
-
135
- filters: [
136
- { name: 'instance-state-code', values: [0.to_s, 16.to_s] }, # running or pending
137
- { name: 'tag-key', values: ['GroupUUID'] },
138
- { name: 'tag-value', values: [group_uuid.to_s] } # todo: how to check for the server versions
139
- # {:name => "tag-value", :values => [group_uuid.to_s, "OpenStudio#{@openstudio_instance_type.capitalize}"]}
140
- # {:name => "tag:key=value", :values => ["GroupUUID=#{group_uuid.to_s}"]}
141
- ]
142
-
133
+ filters: [
134
+ { name: 'instance-state-code', values: [0.to_s, 16.to_s] }, # running or pending
135
+ { name: 'tag-key', values: ['GroupUUID'] },
136
+ { name: 'tag-value', values: [group_uuid.to_s] }
137
+ ]
143
138
  )
144
139
  else
145
- # todo: need to restrict this to only the current user
146
140
  resp = @aws.describe_instances
147
141
  end
148
142
 
149
143
  instance_data = nil
150
144
  if resp
151
- if resp.reservations.length > 0
152
- resp = resp.reservations.first
153
- if resp.instances
154
- instance_data = []
155
- resp.instances.each do |i|
156
- instance_data << i.to_hash
145
+ instance_data = []
146
+ resp.reservations.each do |r|
147
+ r.instances.each do |i|
148
+ i_h = i.to_hash
149
+ if group_uuid && openstudio_instance_type
150
+ # {:key=>"Purpose", :value=>"OpenStudioWorker"}
151
+ if i_h[:tags].any? { |h| (h[:key] == 'Purpose') && (h[:value] == "OpenStudio#{openstudio_instance_type.capitalize}") } &&
152
+ i_h[:tags].any? { |h|(h[:key] == 'GroupUUID') && (h[:value] == group_uuid.to_s) }
153
+ instance_data << i_h
154
+ end
155
+ elsif group_uuid
156
+ if i_h[:tags].any? { |h|(h[:key] == 'GroupUUID') && (h[:value] == group_uuid.to_s) }
157
+ instance_data << i_h
158
+ end
159
+ elsif openstudio_instance_type
160
+ if i_h[:tags].any? { |h| (h[:key] == 'Purpose') && (h[:value] == "OpenStudio#{openstudio_instance_type.capitalize}") }
161
+ instance_data << i_h
162
+ end
163
+ else
164
+ instance_data << i_h
157
165
  end
158
-
159
166
  end
160
- else
161
- logger.info 'no running instances found'
162
167
  end
163
168
  end
164
169
 
@@ -201,7 +206,29 @@ class OpenStudioAwsWrapper
201
206
  resp
202
207
  end
203
208
 
204
- def create_or_retrieve_key_pair(key_pair_name = nil, private_key_file = nil)
209
+ def stop_instances(ids)
210
+ resp = @aws.stop_instances(
211
+ instance_ids: ids,
212
+ force: true
213
+ )
214
+
215
+ resp
216
+ end
217
+
218
+ def terminate_instances(ids)
219
+ begin
220
+ resp = @aws.terminate_instances(
221
+ instance_ids: ids,
222
+ )
223
+ rescue Aws::EC2::Errors::InvalidInstanceIDNotFound
224
+ # Log that the instances couldn't be found?
225
+ return resp = {error: 'instances could not be found'}
226
+ end
227
+
228
+ resp
229
+ end
230
+
231
+ def create_or_retrieve_key_pair(key_pair_name = nil)
205
232
  tmp_name = key_pair_name || "os-key-pair-#{@group_uuid}"
206
233
 
207
234
  # the describe_key_pairs method will raise an expection if it can't find the keypair, so catch it
@@ -226,23 +253,25 @@ class OpenStudioAwsWrapper
226
253
  logger.info "found existing keypair #{resp.key_pairs.first}"
227
254
  @key_pair_name = resp.key_pairs.first[:key_name]
228
255
 
229
- if File.exists(private_key_file)
230
- @private_key = File.read(private_key_file, 'r')
231
- else
232
- # should we raise?
233
- logger.error "Could not find the private key file to load from #{private_key_file}"
234
- end
256
+ # This will not set the private key because it doesn't live on the remote system
235
257
  end
236
258
 
237
259
  logger.info("create key pair: #{@key_pair_name}")
238
260
  end
239
261
 
262
+ def load_private_key(filename)
263
+ fail "Could not find private key #{filename}" unless File.exist? filename
264
+ @private_key_file_name = File.expand_path filename
265
+ @private_key = File.read(filename)
266
+ end
267
+
240
268
  def save_private_key(filename)
241
269
  if @private_key
270
+ @private_key_file_name = File.expand_path filename
242
271
  File.open(filename, 'w') { |f| f << @private_key }
243
272
  File.chmod(0600, filename)
244
273
  else
245
- logger.error 'no private key found in which to persist'
274
+ fail "No private key found in which to persist with filename #{filename}"
246
275
  end
247
276
  end
248
277
 
@@ -251,11 +280,13 @@ class OpenStudioAwsWrapper
251
280
  options = defaults.merge(options)
252
281
 
253
282
  user_data = File.read(File.expand_path(File.dirname(__FILE__)) + '/server_script.sh')
254
- @server = OpenStudioAwsInstance.new(@aws, :server, @key_pair_name, @security_group_name, @group_uuid, @private_key, @proxy)
283
+ @server = OpenStudioAwsInstance.new(@aws, :server, @key_pair_name, @security_group_name, @group_uuid, @private_key, @private_key_file_name, @proxy)
284
+
285
+ # create the EBS volumes instead of the ephemeral storage - needed especially for the m3 instances (SSD)
255
286
 
256
287
  fail 'image_id is nil' unless image_id
257
288
  fail 'instance type is nil' unless instance_type
258
- @server.launch_instance(image_id, instance_type, user_data, options[:user_id])
289
+ @server.launch_instance(image_id, instance_type, user_data, options[:user_id], options[:ebs_volume_size])
259
290
  end
260
291
 
261
292
  def launch_workers(image_id, instance_type, num, options = {})
@@ -271,13 +302,14 @@ class OpenStudioAwsWrapper
271
302
  # thread the launching of the workers
272
303
 
273
304
  num.times do
274
- @workers << OpenStudioAwsInstance.new(@aws, :worker, @key_pair_name, @security_group_name, @group_uuid, @private_key, @proxy)
305
+ @workers << OpenStudioAwsInstance.new(@aws, :worker, @key_pair_name, @security_group_name, @group_uuid, @private_key, @private_key_file_name, @proxy)
275
306
  end
276
307
 
277
308
  threads = []
278
309
  @workers.each do |worker|
279
310
  threads << Thread.new do
280
- worker.launch_instance(image_id, instance_type, user_data, options[:user_id])
311
+ # create the EBS volumes instead of the ephemeral storage - needed especially for the m3 instances (SSD)
312
+ worker.launch_instance(image_id, instance_type, user_data, options[:user_id], options[:ebs_volume_size])
281
313
  end
282
314
  end
283
315
  threads.each { |t| t.join }
@@ -289,45 +321,45 @@ class OpenStudioAwsWrapper
289
321
  # blocking method that waits for servers and workers to be fully configured (i.e. execution of user_data has
290
322
  # occured on all nodes)
291
323
  def configure_server_and_workers
292
- # todo: add a timeout here!
293
324
  logger.info('waiting for server user_data to complete')
294
- @server.wait_command(@server.data.ip, '[ -e /home/ubuntu/user_data_done ] && echo "true"')
295
- @logger.info('waiting for worker user_data to complete')
296
- @workers.each { |worker| worker.wait_command(worker.data.ip, '[ -e /home/ubuntu/user_data_done ] && echo "true"') }
325
+ @server.wait_command('[ -e /home/ubuntu/user_data_done ] && echo "true"')
326
+ logger.info('waiting for worker user_data to complete')
327
+ @workers.each { |worker| worker.wait_command('[ -e /home/ubuntu/user_data_done ] && echo "true"') }
297
328
 
298
329
  ips = "master|#{@server.data.ip}|#{@server.data.dns}|#{@server.data.procs}|ubuntu|ubuntu|true\n"
299
330
  @workers.each { |worker| ips << "worker|#{worker.data.ip}|#{worker.data.dns}|#{worker.data.procs}|ubuntu|ubuntu|true\n" }
300
331
  file = Tempfile.new('ip_addresses')
301
332
  file.write(ips)
302
333
  file.close
303
- @server.upload_file(@server.data.ip, file.path, 'ip_addresses')
334
+ @server.upload_file(file.path, 'ip_addresses')
304
335
  file.unlink
305
336
  logger.info("ips #{ips}")
306
- @server.shell_command(@server.data.ip, 'chmod 664 /home/ubuntu/ip_addresses')
307
- @server.shell_command(@server.data.ip, '~/setup-ssh-keys.sh')
308
- @server.shell_command(@server.data.ip, '~/setup-ssh-worker-nodes.sh ip_addresses')
337
+ @server.shell_command('chmod 664 /home/ubuntu/ip_addresses')
338
+ @server.shell_command('~/setup-ssh-keys.sh')
339
+ @server.shell_command('~/setup-ssh-worker-nodes.sh ip_addresses')
309
340
 
310
341
  mongoid = File.read(File.expand_path(File.dirname(__FILE__)) + '/mongoid.yml.template')
311
342
  mongoid.gsub!(/SERVER_IP/, @server.data.ip)
312
343
  file = Tempfile.new('mongoid.yml')
313
344
  file.write(mongoid)
314
345
  file.close
315
- @server.upload_file(@server.data.ip, file.path, '/mnt/openstudio/rails-models/mongoid.yml')
316
- @workers.each { |worker| worker.upload_file(worker.data.ip, file.path, '/mnt/openstudio/rails-models/mongoid.yml') }
346
+ @server.upload_file(file.path, '/mnt/openstudio/rails-models/mongoid.yml')
347
+ @workers.each { |worker| worker.upload_file(file.path, '/mnt/openstudio/rails-models/mongoid.yml') }
317
348
  file.unlink
318
349
 
319
- # Does this command crash it?
320
- @server.shell_command(@server.data.ip, 'chmod 664 /mnt/openstudio/rails-models/mongoid.yml')
321
- @workers.each { |worker| worker.shell_command(worker.data.ip, 'chmod 664 /mnt/openstudio/rails-models/mongoid.yml') }
350
+ @server.shell_command('chmod 664 /mnt/openstudio/rails-models/mongoid.yml')
351
+ @workers.each { |worker| worker.shell_command('chmod 664 /mnt/openstudio/rails-models/mongoid.yml') }
322
352
 
353
+ sleep 60 # wait 60 more seconds for everything -- this is cheesy
323
354
  true
324
355
  end
325
356
 
326
357
  # method to query the amazon api to find the server (if it exists), based on the group id
327
358
  # if it is found, then it will set the @server member variable.
328
359
  # Note that the information around keys and security groups is pulled from the instance information.
329
- def find_server(group_uuid = nil)
330
- group_uuid = group_uuid || @group_uuid
360
+ def find_server(server_data_hash)
361
+ group_uuid = server_data_hash[:group_id] || @group_uuid
362
+ load_private_key(server_data_hash[:server][:private_key_file_name])
331
363
 
332
364
  logger.info "finding the server for groupid of #{group_uuid}"
333
365
  fail 'no group uuid defined either in member variable or method argument' if group_uuid.nil?
@@ -338,7 +370,7 @@ class OpenStudioAwsWrapper
338
370
  resp = resp.first
339
371
  if !@server
340
372
  logger.info "Server found and loading data into object [instance id is #{resp[:instance_id]}]"
341
- @server = OpenStudioAwsInstance.new(@aws, :server, resp[:key_name], resp[:security_groups].first[:group_name], group_uuid, @private_key)
373
+ @server = OpenStudioAwsInstance.new(@aws, :server, resp[:key_name], resp[:security_groups].first[:group_name], group_uuid, @private_key, @private_key_file_name)
342
374
  @server.load_instance_data(resp)
343
375
  else
344
376
  logger.info "Server instance is already defined with instance #{resp[:instance_id]}"
@@ -346,6 +378,9 @@ class OpenStudioAwsWrapper
346
378
  else
347
379
  fail 'could not find a running server instance'
348
380
  end
381
+
382
+ # Really don't need to return anything because this sets the class instance variable
383
+ @server
349
384
  end
350
385
 
351
386
  # method to hit the existing list of available amis and compare to the list of AMIs on Amazon and then generate the
@@ -393,14 +428,15 @@ class OpenStudioAwsWrapper
393
428
 
394
429
  def to_os_worker_hash
395
430
  worker_hash = []
396
- @workers.each { |worker|
431
+ @workers.each do |worker|
397
432
  worker_hash.push(
398
- id: worker.data.id,
399
- ip: 'http://' + worker.data.ip,
400
- dns: worker.data.dns,
401
- procs: worker.data.procs
402
- )
403
- }
433
+ id: worker.data.id,
434
+ ip: "http://#{worker.data.ip}",
435
+ dns: worker.data.dns,
436
+ procs: worker.data.procs,
437
+ private_key_file_name: worker.private_key_file_name
438
+ )
439
+ end
404
440
 
405
441
  out = { workers: worker_hash }
406
442
  logger.info out
@@ -515,7 +551,7 @@ class OpenStudioAwsWrapper
515
551
  end
516
552
 
517
553
  # sort the openstudio server version
518
- amis[:openstudio_server] = Hash[amis[:openstudio_server].sort_by { |k, v| v[:openstudio_server_version].to_version }.reverse]
554
+ amis[:openstudio_server] = Hash[amis[:openstudio_server].sort_by { |_k, v| v[:openstudio_server_version].to_version }.reverse]
519
555
 
520
556
  # now sort the openstudio section & determine the defaults
521
557
  amis[:openstudio].keys.each do |key|
@@ -84,7 +84,7 @@ end
84
84
  Aws.config = { access_key_id: ARGV[0], secret_access_key: ARGV[1], region: ARGV[2], ssl_verify_peer: false }
85
85
 
86
86
  if ARGV[3] == 'EC2'
87
- @aws = Aws::EC2.new
87
+ @aws = Aws::EC2::Client.new
88
88
  elsif ARGV[3] == 'CloudWatch'
89
89
  @aws = AWS::CloudWatch.new
90
90
  else
@@ -166,7 +166,7 @@ begin
166
166
  @server_instance_type = @params['instance_type']
167
167
  begin
168
168
  os_aws.launch_server(@server_image_id, @server_instance_type)
169
- rescue Exception => e
169
+ rescue => e
170
170
  error(-1, "Server status: #{e.message}")
171
171
  end
172
172
 
@@ -180,6 +180,7 @@ begin
180
180
 
181
181
  # find the private key in the users home directory, or crash
182
182
  if File.exist?(SERVER_PEM_FILENAME)
183
+ # TODO: this will no longer work. need to refactor this file to be more like the OpenSTudio analysis spreadsheet
183
184
  os_aws.create_or_retrieve_key_pair(nil, SERVER_PEM_FILENAME)
184
185
  else
185
186
  fail "Could not find previous private key which should be here: #{SERVER_PEM_FILENAME}"
@@ -196,7 +197,7 @@ begin
196
197
  begin
197
198
  # this will launch and configure with threads inside os_aws
198
199
  os_aws.launch_workers(@worker_image_id, @worker_instance_type, @params['num'])
199
- rescue Exception => e
200
+ rescue => e
200
201
  error(-1, "Server status: #{e.message}")
201
202
  end
202
203
 
@@ -263,7 +264,14 @@ begin
263
264
  when 'estimated_charges'
264
265
  endTime = Time.now.utc
265
266
  startTime = endTime - 86_400
266
- resp = @aws.client.get_metric_statistics(dimensions: [{ name: 'ServiceName', value: 'AmazonEC2' }, { name: 'Currency', value: 'USD' }], metric_name: 'EstimatedCharges', namespace: 'AWS/Billing', start_time: startTime.iso8601, end_time: endTime.iso8601, period: 300, statistics: ['Maximum'])
267
+ resp = @aws.client.get_metric_statistics(dimensions: [{ name: 'ServiceName', value: 'AmazonEC2' },
268
+ { name: 'Currency', value: 'USD' }],
269
+ metric_name: 'EstimatedCharges',
270
+ namespace: 'AWS/Billing',
271
+ start_time: startTime.iso8601,
272
+ end_time: endTime.iso8601,
273
+ period: 300,
274
+ statistics: ['Maximum'])
267
275
  error(-1, 'No Billing Data') if resp.data[:datapoints].length == 0
268
276
  datapoints = resp.data[:datapoints]
269
277
  datapoints.sort! { |a, b| a[:timestamp] <=> b[:timestamp] }
@@ -273,9 +281,9 @@ begin
273
281
  else
274
282
  error(-1, "Unknown command: #{ARGV[4]} (#{ARGV[3]})")
275
283
  end
276
- # puts \"Status: #{resp.http_response.status}\"
284
+ # puts \"Status: #{resp.http_response.status}\"
277
285
  rescue SystemExit => e
278
- rescue Exception => e
286
+ rescue => e
279
287
  if e.message == 'getaddrinfo: No such host is known. '
280
288
  error(503, 'Offline')
281
289
  elsif defined? e.http_response
@@ -11,9 +11,12 @@ FILE=/etc/hosts
11
11
  if grep -q "$ENTRY" $FILE; then
12
12
  echo "entry already exists"
13
13
  else
14
- sudo sh -c "echo $ENTRY >> /etc/hosts"
14
+ sh -c "echo $ENTRY >> /etc/hosts"
15
15
  fi
16
16
 
17
+ rm -rf /mnt
18
+ mkdir /mnt
19
+
17
20
  # copy all the setup scripts to the appropriate home directory
18
21
  # the scripts are called by the AWS connector for passwordless ssh config
19
22
  cp /data/launch-instance/setup* /home/ubuntu/
@@ -21,55 +24,66 @@ chmod 775 /home/ubuntu/setup*
21
24
  chown ubuntu:ubuntu /home/ubuntu/setup*
22
25
 
23
26
  # stop the various services that use mongo
24
- sudo service delayed_job stop
25
- sudo service apache2 stop
26
- sudo service mongodb stop
27
+ service delayed_job stop
28
+ service apache2 stop
29
+ service mongodb stop
27
30
 
28
31
  # remove mongo db & add it back
29
- sudo mkdir -p /mnt/mongodb/data
30
- sudo chown mongodb:nogroup /mnt/mongodb/data
31
- sudo rm -rf /var/lib/mongodb
32
+ mkdir -p /mnt/mongodb/data
33
+ chown mongodb:nogroup /mnt/mongodb/data
34
+ rm -rf /var/lib/mongodb
32
35
 
33
36
  # restart mongo
34
- sudo service mongodb start
37
+ service mongodb start
35
38
  # delay the continuation because mongo is a forked process and when it initializes
36
39
  # it has to create the preallocated journal files (takes ~ 90 seconds on a slower system)
37
40
  sleep 2m
38
41
 
39
42
  # restart the rails application
40
- sudo service apache2 stop
41
- sudo service apache2 start
43
+ service apache2 stop
44
+ service apache2 start
42
45
 
43
46
  # Add in the database indexes after making the db directory
44
- sudo chmod 777 /var/www/rails/openstudio/public
45
- cd /var/www/rails/openstudio
46
- rake db:purge
47
- rake db:mongoid:create_indexes
47
+ chmod 777 /var/www/rails/openstudio/public
48
+ su - ubuntu -c 'cd /var/www/rails/openstudio && bundle exec rake db:purge'
49
+ su - ubuntu -c 'cd /var/www/rails/openstudio && bundle exec rake db:mongoid:create_indexes'
50
+
51
+ ## Worker Data Configuration -- On Vagrant this is a separate file
48
52
 
49
- ## Worker Data Configuration
50
53
  # Force the generation of various directories that are in the EBS mnt
51
- sudo rm -rf /mnt/openstudio
52
- sudo mkdir -p /mnt/openstudio
53
- sudo chown -R ubuntu:www-data /mnt/openstudio
54
- sudo chmod -R 775 /mnt/openstudio
54
+ rm -rf /mnt/openstudio
55
+ mkdir -p /mnt/openstudio
56
+ chown -R ubuntu:www-data /mnt/openstudio
57
+ chmod -R 775 /mnt/openstudio
55
58
 
56
59
  # save application files into the right directory
57
60
  cp -rf /data/worker-nodes/* /mnt/openstudio/
58
61
 
62
+ # install workflow dependencies
63
+ su - ubuntu -c 'cd /mnt/openstudio && rm -f'
64
+ rm -f /mnt/openstudio/Gemfile.lock
65
+ cd /mnt/openstudio && bundle update
66
+ su - ubuntu -c 'cd /mnt/openstudio && bundle update'
67
+
59
68
  # copy over the models needed for mongo
60
- cd /mnt/openstudio/rails-models && unzip -o rails-models.zip
69
+ cd /mnt/openstudio/rails-models && unzip -o rails-models.zip -d models
61
70
 
62
71
  # rerun the permissions after unzipping the files
63
- sudo chown -R ubuntu:www-data /mnt/openstudio
64
- sudo find /mnt/openstudio -type d -print0 | xargs -0 chmod 775
65
- sudo find /mnt/openstudio -type f -print0 | xargs -0 chmod 664
66
- ## End of Worker Data Configuration
72
+ chown -R ubuntu:www-data /mnt/openstudio
73
+ find /mnt/openstudio -type d -print0 | xargs -0 chmod 775
74
+ find /mnt/openstudio -type f -print0 | xargs -0 chmod 664
75
+
76
+ ## End Worker Data Configuration
67
77
 
68
78
  # restart rserve
69
- sudo service Rserve restart
79
+ service Rserve restart
70
80
 
71
81
  # restart delayed jobs
72
- sudo service delayed_job start
82
+ service delayed_job start
83
+
84
+ # Delay 1 minutes to make sure everything had tme to start.
85
+ # This is a hack, sorry.
86
+ sleep 1m
73
87
 
74
88
  #file flag the user_data has completed
75
89
  cat /dev/null > /home/ubuntu/user_data_done
@@ -10,7 +10,7 @@ FILE=/etc/hosts
10
10
  if grep -q "$ENTRY" $FILE; then
11
11
  echo "entry already exists"
12
12
  else
13
- sudo sh -c "echo $ENTRY >> /etc/hosts"
13
+ sh -c "echo $ENTRY >> /etc/hosts"
14
14
  fi
15
15
 
16
16
  # copy all the setup scripts to the appropriate home directory
@@ -18,31 +18,41 @@ cp /data/launch-instance/setup* /home/ubuntu/
18
18
  chmod 775 /home/ubuntu/setup*
19
19
  chown ubuntu:ubuntu /home/ubuntu/setup*
20
20
 
21
- ## Worker Data Configuration
21
+ ## Worker Data Configuration -- On Vagrant this is a separate file
22
+
22
23
  # Force the generation of various directories that are in the EBS mnt
23
- sudo rm -rf /mnt/openstudio
24
- sudo mkdir -p /mnt/openstudio
25
- sudo chown -R ubuntu:www-data /mnt/openstudio
26
- sudo chmod -R 775 /mnt/openstudio
24
+ rm -rf /mnt/openstudio
25
+ mkdir -p /mnt/openstudio
26
+ chown -R ubuntu:www-data /mnt/openstudio
27
+ chmod -R 775 /mnt/openstudio
27
28
 
28
29
  # save application files into the right directory
29
30
  cp -rf /data/worker-nodes/* /mnt/openstudio/
30
31
 
32
+ # install workflow dependencies
33
+ su - ubuntu -c 'cd /mnt/openstudio && rm -f'
34
+ rm -f /mnt/openstudio/Gemfile.lock
35
+ cd /mnt/openstudio && bundle update
36
+ su - ubuntu -c 'cd /mnt/openstudio && bundle update'
37
+
31
38
  # copy over the models needed for mongo
32
- cd /mnt/openstudio/rails-models && unzip -o rails-models.zip
39
+ cd /mnt/openstudio/rails-models && unzip -o rails-models.zip -d models
33
40
 
34
41
  # rerun the permissions after unzipping the files
35
- sudo chown -R ubuntu:www-data /mnt/openstudio
36
- sudo find /mnt/openstudio -type d -print0 | xargs -0 chmod 775
37
- sudo find /mnt/openstudio -type f -print0 | xargs -0 chmod 664
38
- ## End of Worker Data Configuration
42
+ chown -R ubuntu:www-data /mnt/openstudio
43
+ find /mnt/openstudio -type d -print0 | xargs -0 chmod 775
44
+ find /mnt/openstudio -type f -print0 | xargs -0 chmod 664
45
+
46
+ ## End Worker Data Configuration
39
47
 
40
48
  #turn off hyperthreading
41
- for cpunum in $(
42
- cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list |
43
- cut -s -d, -f2- | tr ',' '\n' | sort -un); do
44
- echo 0 > /sys/devices/system/cpu/cpu$cpunum/online
45
- done
49
+ # NL: do not turn off hyperthreading, rather, just limit the number of cores and see if it
50
+ # makes a difference.
51
+ #for cpunum in $(
52
+ # cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list |
53
+ # cut -s -d, -f2- | tr ',' '\n' | sort -un); do
54
+ # echo 0 > /sys/devices/system/cpu/cpu$cpunum/online
55
+ #done
46
56
 
47
57
  #file flag the user_data has completed
48
58
  cat /dev/null > /home/ubuntu/user_data_done
@@ -3,6 +3,7 @@ require 'net/scp'
3
3
  require 'net/http'
4
4
  require 'yaml'
5
5
  require 'logger'
6
+ require 'securerandom'
6
7
  require 'semantic'
7
8
  require 'semantic/core_ext'
8
9
 
@@ -15,6 +16,7 @@ rescue LoadError
15
16
  exit
16
17
  end
17
18
 
19
+ require 'openstudio/lib/openstudio_aws_logger'
18
20
  require 'openstudio/aws/aws'
19
21
  require 'openstudio/aws/config'
20
22
  require 'openstudio/aws/version'