openstudio-aws 0.2.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (511) hide show
  1. checksums.yaml +4 -4
  2. data/lib/openstudio-aws.rb +1 -1
  3. data/lib/openstudio/aws/aws.rb +99 -33
  4. data/lib/openstudio/aws/version.rb +1 -1
  5. data/lib/openstudio/lib/openstudio_aws_instance.rb +74 -25
  6. data/lib/openstudio/lib/openstudio_aws_wrapper.rb +84 -41
  7. data/lib/openstudio/lib/{server_script.sh → server_script.sh.template} +43 -21
  8. data/lib/openstudio/lib/worker_script.sh.template +31 -15
  9. data/spec/aws_instances/aws_spec_api.rb +18 -28
  10. data/spec/openstudio-aws/ami_list_spec.rb +8 -1
  11. data/spec/openstudio-aws/aws_instance_spec.rb +1 -1
  12. data/spec/openstudio-aws/aws_spec.rb +11 -0
  13. data/spec/openstudio-aws/aws_wrapper_spec.rb +14 -3
  14. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.0.xml +11 -0
  15. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.1.xml +11 -0
  16. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.10.xml +27 -0
  17. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.11.xml +13 -0
  18. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.12.xml +13 -0
  19. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.13.xml +13 -0
  20. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.14.xml +13 -0
  21. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.15.xml +13 -0
  22. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.16.xml +13 -0
  23. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.17.xml +13 -0
  24. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.18.xml +13 -0
  25. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.19.xml +13 -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.20.xml +13 -0
  28. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.21.xml +13 -0
  29. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.3.xml +11 -0
  30. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.4.xml +11 -0
  31. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.5.xml +11 -0
  32. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.6.xml +11 -0
  33. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.7.xml +11 -0
  34. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.8.xml +19 -0
  35. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.9.xml +27 -0
  36. data/spec/reports/SPEC-OpenStudio-Aws-Aws-ami-lists.xml +11 -0
  37. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.0.xml +11 -0
  38. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.1.xml +11 -0
  39. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.10.xml +11 -0
  40. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.11.xml +11 -0
  41. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.12.xml +11 -0
  42. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.13.xml +11 -0
  43. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.14.xml +11 -0
  44. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.15.xml +11 -0
  45. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.16.xml +11 -0
  46. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.17.xml +11 -0
  47. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.18.xml +11 -0
  48. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.19.xml +11 -0
  49. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.2.xml +11 -0
  50. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.20.xml +11 -0
  51. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.21.xml +11 -0
  52. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.3.xml +11 -0
  53. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.4.xml +11 -0
  54. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.5.xml +11 -0
  55. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.6.xml +11 -0
  56. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.7.xml +11 -0
  57. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.8.xml +11 -0
  58. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.9.xml +11 -0
  59. data/spec/reports/SPEC-OpenStudio-Aws-Aws-custom-keys.xml +11 -0
  60. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.0.xml +13 -0
  61. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.1.xml +13 -0
  62. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.10.xml +13 -0
  63. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.11.xml +13 -0
  64. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.12.xml +13 -0
  65. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.13.xml +13 -0
  66. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.14.xml +13 -0
  67. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.15.xml +13 -0
  68. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.16.xml +13 -0
  69. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.17.xml +13 -0
  70. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.18.xml +13 -0
  71. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.19.xml +13 -0
  72. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.2.xml +13 -0
  73. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.20.xml +13 -0
  74. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.21.xml +13 -0
  75. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.3.xml +13 -0
  76. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.4.xml +13 -0
  77. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.5.xml +13 -0
  78. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.6.xml +13 -0
  79. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.7.xml +13 -0
  80. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.8.xml +13 -0
  81. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.9.xml +13 -0
  82. data/spec/reports/SPEC-OpenStudio-Aws-Aws-proxy-configuration.xml +13 -0
  83. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.0.xml +9 -0
  84. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.1.xml +9 -0
  85. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.10.xml +9 -0
  86. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.11.xml +9 -0
  87. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.12.xml +9 -0
  88. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.13.xml +9 -0
  89. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.14.xml +9 -0
  90. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.15.xml +9 -0
  91. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.16.xml +9 -0
  92. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.17.xml +9 -0
  93. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.18.xml +9 -0
  94. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.19.xml +9 -0
  95. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.2.xml +9 -0
  96. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.20.xml +9 -0
  97. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.21.xml +9 -0
  98. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.3.xml +9 -0
  99. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.4.xml +9 -0
  100. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.5.xml +9 -0
  101. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.6.xml +9 -0
  102. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.7.xml +9 -0
  103. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.8.xml +9 -0
  104. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.9.xml +9 -0
  105. data/spec/reports/SPEC-OpenStudio-Aws-Aws-should-error.xml +9 -0
  106. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.0.xml +9 -0
  107. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.1.xml +9 -0
  108. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.10.xml +9 -0
  109. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.11.xml +9 -0
  110. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.12.xml +9 -0
  111. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.13.xml +9 -0
  112. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.14.xml +9 -0
  113. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.15.xml +9 -0
  114. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.16.xml +9 -0
  115. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.17.xml +9 -0
  116. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.18.xml +9 -0
  117. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.19.xml +9 -0
  118. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.2.xml +9 -0
  119. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.20.xml +9 -0
  120. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.21.xml +9 -0
  121. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.3.xml +9 -0
  122. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.4.xml +9 -0
  123. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.5.xml +9 -0
  124. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.6.xml +9 -0
  125. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.7.xml +9 -0
  126. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.8.xml +9 -0
  127. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.9.xml +9 -0
  128. data/spec/reports/SPEC-OpenStudio-Aws-Aws-version-testing.xml +9 -0
  129. data/spec/reports/SPEC-OpenStudio-Aws-Aws.0.xml +7 -0
  130. data/spec/reports/SPEC-OpenStudio-Aws-Aws.1.xml +7 -0
  131. data/spec/reports/SPEC-OpenStudio-Aws-Aws.10.xml +7 -0
  132. data/spec/reports/SPEC-OpenStudio-Aws-Aws.11.xml +7 -0
  133. data/spec/reports/SPEC-OpenStudio-Aws-Aws.12.xml +7 -0
  134. data/spec/reports/SPEC-OpenStudio-Aws-Aws.13.xml +7 -0
  135. data/spec/reports/SPEC-OpenStudio-Aws-Aws.14.xml +7 -0
  136. data/spec/reports/SPEC-OpenStudio-Aws-Aws.15.xml +7 -0
  137. data/spec/reports/SPEC-OpenStudio-Aws-Aws.16.xml +7 -0
  138. data/spec/reports/SPEC-OpenStudio-Aws-Aws.17.xml +7 -0
  139. data/spec/reports/SPEC-OpenStudio-Aws-Aws.18.xml +7 -0
  140. data/spec/reports/SPEC-OpenStudio-Aws-Aws.19.xml +7 -0
  141. data/spec/reports/SPEC-OpenStudio-Aws-Aws.2.xml +7 -0
  142. data/spec/reports/SPEC-OpenStudio-Aws-Aws.20.xml +7 -0
  143. data/spec/reports/SPEC-OpenStudio-Aws-Aws.21.xml +7 -0
  144. data/spec/reports/SPEC-OpenStudio-Aws-Aws.3.xml +7 -0
  145. data/spec/reports/SPEC-OpenStudio-Aws-Aws.4.xml +7 -0
  146. data/spec/reports/SPEC-OpenStudio-Aws-Aws.5.xml +7 -0
  147. data/spec/reports/SPEC-OpenStudio-Aws-Aws.6.xml +7 -0
  148. data/spec/reports/SPEC-OpenStudio-Aws-Aws.7.xml +7 -0
  149. data/spec/reports/SPEC-OpenStudio-Aws-Aws.8.xml +7 -0
  150. data/spec/reports/SPEC-OpenStudio-Aws-Aws.9.xml +7 -0
  151. data/spec/reports/SPEC-OpenStudio-Aws-Aws.xml +7 -0
  152. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.0.xml +9 -0
  153. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.1.xml +9 -0
  154. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.10.xml +9 -0
  155. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.11.xml +9 -0
  156. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.12.xml +9 -0
  157. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.13.xml +9 -0
  158. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.14.xml +9 -0
  159. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.15.xml +9 -0
  160. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.16.xml +9 -0
  161. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.17.xml +9 -0
  162. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.18.xml +9 -0
  163. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.19.xml +9 -0
  164. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.2.xml +9 -0
  165. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.3.xml +9 -0
  166. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.4.xml +9 -0
  167. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.5.xml +9 -0
  168. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.6.xml +9 -0
  169. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.7.xml +9 -0
  170. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.8.xml +9 -0
  171. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.9.xml +9 -0
  172. data/spec/reports/SPEC-OpenStudio-Aws-Config-create-a-new-config.xml +9 -0
  173. data/spec/reports/SPEC-OpenStudio-Aws-Config.0.xml +7 -0
  174. data/spec/reports/SPEC-OpenStudio-Aws-Config.1.xml +7 -0
  175. data/spec/reports/SPEC-OpenStudio-Aws-Config.10.xml +7 -0
  176. data/spec/reports/SPEC-OpenStudio-Aws-Config.11.xml +7 -0
  177. data/spec/reports/SPEC-OpenStudio-Aws-Config.12.xml +7 -0
  178. data/spec/reports/SPEC-OpenStudio-Aws-Config.13.xml +7 -0
  179. data/spec/reports/SPEC-OpenStudio-Aws-Config.14.xml +7 -0
  180. data/spec/reports/SPEC-OpenStudio-Aws-Config.15.xml +7 -0
  181. data/spec/reports/SPEC-OpenStudio-Aws-Config.16.xml +7 -0
  182. data/spec/reports/SPEC-OpenStudio-Aws-Config.17.xml +7 -0
  183. data/spec/reports/SPEC-OpenStudio-Aws-Config.18.xml +7 -0
  184. data/spec/reports/SPEC-OpenStudio-Aws-Config.19.xml +7 -0
  185. data/spec/reports/SPEC-OpenStudio-Aws-Config.2.xml +7 -0
  186. data/spec/reports/SPEC-OpenStudio-Aws-Config.3.xml +7 -0
  187. data/spec/reports/SPEC-OpenStudio-Aws-Config.4.xml +7 -0
  188. data/spec/reports/SPEC-OpenStudio-Aws-Config.5.xml +7 -0
  189. data/spec/reports/SPEC-OpenStudio-Aws-Config.6.xml +7 -0
  190. data/spec/reports/SPEC-OpenStudio-Aws-Config.7.xml +7 -0
  191. data/spec/reports/SPEC-OpenStudio-Aws-Config.8.xml +7 -0
  192. data/spec/reports/SPEC-OpenStudio-Aws-Config.9.xml +7 -0
  193. data/spec/reports/SPEC-OpenStudio-Aws-Config.xml +7 -0
  194. data/spec/reports/SPEC-OpenStudioAmis-version-1.0.xml +14 -0
  195. data/spec/reports/SPEC-OpenStudioAmis-version-1.1.xml +20 -0
  196. data/spec/reports/SPEC-OpenStudioAmis-version-1.10.xml +14 -0
  197. data/spec/reports/SPEC-OpenStudioAmis-version-1.11.xml +14 -0
  198. data/spec/reports/SPEC-OpenStudioAmis-version-1.12.xml +14 -0
  199. data/spec/reports/SPEC-OpenStudioAmis-version-1.13.xml +14 -0
  200. data/spec/reports/SPEC-OpenStudioAmis-version-1.14.xml +14 -0
  201. data/spec/reports/SPEC-OpenStudioAmis-version-1.15.xml +14 -0
  202. data/spec/reports/SPEC-OpenStudioAmis-version-1.16.xml +14 -0
  203. data/spec/reports/SPEC-OpenStudioAmis-version-1.17.xml +14 -0
  204. data/spec/reports/SPEC-OpenStudioAmis-version-1.18.xml +14 -0
  205. data/spec/reports/SPEC-OpenStudioAmis-version-1.19.xml +14 -0
  206. data/spec/reports/SPEC-OpenStudioAmis-version-1.2.xml +14 -0
  207. data/spec/reports/SPEC-OpenStudioAmis-version-1.20.xml +14 -0
  208. data/spec/reports/SPEC-OpenStudioAmis-version-1.21.xml +14 -0
  209. data/spec/reports/SPEC-OpenStudioAmis-version-1.3.xml +28 -0
  210. data/spec/reports/SPEC-OpenStudioAmis-version-1.4.xml +22 -0
  211. data/spec/reports/SPEC-OpenStudioAmis-version-1.5.xml +16 -0
  212. data/spec/reports/SPEC-OpenStudioAmis-version-1.6.xml +16 -0
  213. data/spec/reports/SPEC-OpenStudioAmis-version-1.7.xml +14 -0
  214. data/spec/reports/SPEC-OpenStudioAmis-version-1.8.xml +14 -0
  215. data/spec/reports/SPEC-OpenStudioAmis-version-1.9.xml +14 -0
  216. data/spec/reports/SPEC-OpenStudioAmis-version-1.xml +13 -0
  217. data/spec/reports/SPEC-OpenStudioAmis-version-2.0.xml +9 -0
  218. data/spec/reports/SPEC-OpenStudioAmis-version-2.1.xml +9 -0
  219. data/spec/reports/SPEC-OpenStudioAmis-version-2.10.xml +9 -0
  220. data/spec/reports/SPEC-OpenStudioAmis-version-2.11.xml +9 -0
  221. data/spec/reports/SPEC-OpenStudioAmis-version-2.12.xml +9 -0
  222. data/spec/reports/SPEC-OpenStudioAmis-version-2.13.xml +23 -0
  223. data/spec/reports/SPEC-OpenStudioAmis-version-2.14.xml +23 -0
  224. data/spec/reports/SPEC-OpenStudioAmis-version-2.15.xml +23 -0
  225. data/spec/reports/SPEC-OpenStudioAmis-version-2.16.xml +9 -0
  226. data/spec/reports/SPEC-OpenStudioAmis-version-2.17.xml +9 -0
  227. data/spec/reports/SPEC-OpenStudioAmis-version-2.18.xml +9 -0
  228. data/spec/reports/SPEC-OpenStudioAmis-version-2.19.xml +9 -0
  229. data/spec/reports/SPEC-OpenStudioAmis-version-2.2.xml +9 -0
  230. data/spec/reports/SPEC-OpenStudioAmis-version-2.20.xml +9 -0
  231. data/spec/reports/SPEC-OpenStudioAmis-version-2.21.xml +9 -0
  232. data/spec/reports/SPEC-OpenStudioAmis-version-2.3.xml +9 -0
  233. data/spec/reports/SPEC-OpenStudioAmis-version-2.4.xml +9 -0
  234. data/spec/reports/SPEC-OpenStudioAmis-version-2.5.xml +9 -0
  235. data/spec/reports/SPEC-OpenStudioAmis-version-2.6.xml +9 -0
  236. data/spec/reports/SPEC-OpenStudioAmis-version-2.7.xml +9 -0
  237. data/spec/reports/SPEC-OpenStudioAmis-version-2.8.xml +9 -0
  238. data/spec/reports/SPEC-OpenStudioAmis-version-2.9.xml +9 -0
  239. data/spec/reports/SPEC-OpenStudioAmis-version-2.xml +9 -0
  240. data/spec/reports/SPEC-OpenStudioAmis.0.xml +7 -0
  241. data/spec/reports/SPEC-OpenStudioAmis.1.xml +7 -0
  242. data/spec/reports/SPEC-OpenStudioAmis.10.xml +7 -0
  243. data/spec/reports/SPEC-OpenStudioAmis.11.xml +7 -0
  244. data/spec/reports/SPEC-OpenStudioAmis.12.xml +7 -0
  245. data/spec/reports/SPEC-OpenStudioAmis.13.xml +7 -0
  246. data/spec/reports/SPEC-OpenStudioAmis.14.xml +7 -0
  247. data/spec/reports/SPEC-OpenStudioAmis.15.xml +7 -0
  248. data/spec/reports/SPEC-OpenStudioAmis.16.xml +7 -0
  249. data/spec/reports/SPEC-OpenStudioAmis.17.xml +7 -0
  250. data/spec/reports/SPEC-OpenStudioAmis.18.xml +7 -0
  251. data/spec/reports/SPEC-OpenStudioAmis.19.xml +7 -0
  252. data/spec/reports/SPEC-OpenStudioAmis.2.xml +7 -0
  253. data/spec/reports/SPEC-OpenStudioAmis.20.xml +7 -0
  254. data/spec/reports/SPEC-OpenStudioAmis.21.xml +7 -0
  255. data/spec/reports/SPEC-OpenStudioAmis.3.xml +7 -0
  256. data/spec/reports/SPEC-OpenStudioAmis.4.xml +7 -0
  257. data/spec/reports/SPEC-OpenStudioAmis.5.xml +7 -0
  258. data/spec/reports/SPEC-OpenStudioAmis.6.xml +7 -0
  259. data/spec/reports/SPEC-OpenStudioAmis.7.xml +7 -0
  260. data/spec/reports/SPEC-OpenStudioAmis.8.xml +7 -0
  261. data/spec/reports/SPEC-OpenStudioAmis.9.xml +7 -0
  262. data/spec/reports/SPEC-OpenStudioAmis.xml +7 -0
  263. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.0.xml +11 -0
  264. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.1.xml +11 -0
  265. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.10.xml +11 -0
  266. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.11.xml +11 -0
  267. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.12.xml +11 -0
  268. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.13.xml +11 -0
  269. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.14.xml +11 -0
  270. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.15.xml +11 -0
  271. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.16.xml +11 -0
  272. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.17.xml +25 -0
  273. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.18.xml +11 -0
  274. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.19.xml +11 -0
  275. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.2.xml +11 -0
  276. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.20.xml +11 -0
  277. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.21.xml +11 -0
  278. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.3.xml +11 -0
  279. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.4.xml +11 -0
  280. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.5.xml +11 -0
  281. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.6.xml +11 -0
  282. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.7.xml +11 -0
  283. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.8.xml +11 -0
  284. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.9.xml +11 -0
  285. data/spec/reports/SPEC-OpenStudioAwsInstance-processors.xml +11 -0
  286. data/spec/reports/SPEC-OpenStudioAwsInstance.0.xml +7 -0
  287. data/spec/reports/SPEC-OpenStudioAwsInstance.1.xml +7 -0
  288. data/spec/reports/SPEC-OpenStudioAwsInstance.10.xml +7 -0
  289. data/spec/reports/SPEC-OpenStudioAwsInstance.11.xml +7 -0
  290. data/spec/reports/SPEC-OpenStudioAwsInstance.12.xml +7 -0
  291. data/spec/reports/SPEC-OpenStudioAwsInstance.13.xml +7 -0
  292. data/spec/reports/SPEC-OpenStudioAwsInstance.14.xml +7 -0
  293. data/spec/reports/SPEC-OpenStudioAwsInstance.15.xml +7 -0
  294. data/spec/reports/SPEC-OpenStudioAwsInstance.16.xml +7 -0
  295. data/spec/reports/SPEC-OpenStudioAwsInstance.17.xml +7 -0
  296. data/spec/reports/SPEC-OpenStudioAwsInstance.18.xml +7 -0
  297. data/spec/reports/SPEC-OpenStudioAwsInstance.19.xml +7 -0
  298. data/spec/reports/SPEC-OpenStudioAwsInstance.2.xml +7 -0
  299. data/spec/reports/SPEC-OpenStudioAwsInstance.20.xml +7 -0
  300. data/spec/reports/SPEC-OpenStudioAwsInstance.21.xml +7 -0
  301. data/spec/reports/SPEC-OpenStudioAwsInstance.3.xml +7 -0
  302. data/spec/reports/SPEC-OpenStudioAwsInstance.4.xml +7 -0
  303. data/spec/reports/SPEC-OpenStudioAwsInstance.5.xml +7 -0
  304. data/spec/reports/SPEC-OpenStudioAwsInstance.6.xml +7 -0
  305. data/spec/reports/SPEC-OpenStudioAwsInstance.7.xml +7 -0
  306. data/spec/reports/SPEC-OpenStudioAwsInstance.8.xml +7 -0
  307. data/spec/reports/SPEC-OpenStudioAwsInstance.9.xml +7 -0
  308. data/spec/reports/SPEC-OpenStudioAwsInstance.xml +7 -0
  309. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.0.xml +9 -0
  310. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.1.xml +9 -0
  311. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.10.xml +9 -0
  312. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.11.xml +9 -0
  313. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.12.xml +9 -0
  314. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.13.xml +9 -0
  315. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.14.xml +9 -0
  316. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.15.xml +9 -0
  317. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.16.xml +9 -0
  318. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.17.xml +9 -0
  319. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.18.xml +9 -0
  320. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.19.xml +9 -0
  321. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.2.xml +9 -0
  322. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.3.xml +9 -0
  323. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.4.xml +9 -0
  324. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.5.xml +9 -0
  325. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.6.xml +9 -0
  326. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.7.xml +9 -0
  327. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.8.xml +9 -0
  328. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.9.xml +9 -0
  329. data/spec/reports/SPEC-OpenStudioAwsWrapper-ami-list.xml +9 -0
  330. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.0.xml +11 -0
  331. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.1.xml +11 -0
  332. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.10.xml +11 -0
  333. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.11.xml +11 -0
  334. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.12.xml +11 -0
  335. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.13.xml +25 -0
  336. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.14.xml +25 -0
  337. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.15.xml +11 -0
  338. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.16.xml +11 -0
  339. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.17.xml +11 -0
  340. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.18.xml +11 -0
  341. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.19.xml +11 -0
  342. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.2.xml +11 -0
  343. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.20.xml +11 -0
  344. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.21.xml +11 -0
  345. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.3.xml +11 -0
  346. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.4.xml +11 -0
  347. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.5.xml +11 -0
  348. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.6.xml +11 -0
  349. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.7.xml +11 -0
  350. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.8.xml +11 -0
  351. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.9.xml +11 -0
  352. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-availability.xml +11 -0
  353. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.0.xml +11 -0
  354. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.1.xml +11 -0
  355. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.10.xml +11 -0
  356. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.11.xml +11 -0
  357. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.12.xml +11 -0
  358. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.13.xml +11 -0
  359. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.14.xml +11 -0
  360. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.15.xml +11 -0
  361. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.16.xml +11 -0
  362. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.17.xml +11 -0
  363. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.18.xml +11 -0
  364. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.19.xml +11 -0
  365. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.2.xml +11 -0
  366. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.20.xml +11 -0
  367. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.21.xml +11 -0
  368. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.3.xml +9 -0
  369. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.4.xml +11 -0
  370. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.5.xml +11 -0
  371. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.6.xml +11 -0
  372. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.7.xml +11 -0
  373. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.8.xml +11 -0
  374. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.9.xml +11 -0
  375. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-create-new-ami-json.xml +11 -0
  376. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.0.xml +9 -0
  377. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.1.xml +9 -0
  378. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.10.xml +9 -0
  379. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.11.xml +9 -0
  380. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.12.xml +9 -0
  381. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.13.xml +9 -0
  382. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.14.xml +9 -0
  383. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.15.xml +9 -0
  384. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.16.xml +9 -0
  385. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.17.xml +9 -0
  386. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.18.xml +9 -0
  387. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.19.xml +9 -0
  388. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.2.xml +9 -0
  389. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.20.xml +9 -0
  390. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.21.xml +9 -0
  391. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.3.xml +9 -0
  392. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.4.xml +9 -0
  393. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.5.xml +9 -0
  394. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.6.xml +9 -0
  395. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.7.xml +9 -0
  396. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.8.xml +9 -0
  397. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.9.xml +9 -0
  398. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-new-instance.xml +9 -0
  399. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.0.xml +117 -0
  400. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.1.xml +117 -0
  401. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.10.xml +117 -0
  402. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.11.xml +117 -0
  403. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.12.xml +122 -0
  404. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.13.xml +122 -0
  405. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.14.xml +122 -0
  406. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.15.xml +122 -0
  407. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.16.xml +142 -0
  408. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.17.xml +142 -0
  409. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.18.xml +142 -0
  410. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.19.xml +147 -0
  411. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.2.xml +117 -0
  412. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.20.xml +147 -0
  413. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.3.xml +117 -0
  414. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.4.xml +117 -0
  415. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.5.xml +117 -0
  416. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.6.xml +117 -0
  417. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.7.xml +117 -0
  418. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.8.xml +117 -0
  419. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.9.xml +117 -0
  420. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-1.xml +117 -0
  421. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.0.xml +1355 -0
  422. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.1.xml +1355 -0
  423. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.10.xml +1355 -0
  424. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.11.xml +1387 -0
  425. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.12.xml +1387 -0
  426. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.13.xml +1387 -0
  427. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.14.xml +1387 -0
  428. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.15.xml +1535 -0
  429. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.16.xml +1535 -0
  430. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.17.xml +1555 -0
  431. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.18.xml +1867 -0
  432. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.19.xml +1867 -0
  433. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.2.xml +1355 -0
  434. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.3.xml +1355 -0
  435. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.4.xml +1355 -0
  436. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.5.xml +1355 -0
  437. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.6.xml +1355 -0
  438. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.7.xml +1355 -0
  439. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.8.xml +1355 -0
  440. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.9.xml +1355 -0
  441. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session-version-2.xml +1355 -0
  442. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.0.xml +7 -0
  443. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.1.xml +7 -0
  444. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.10.xml +7 -0
  445. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.11.xml +7 -0
  446. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.12.xml +7 -0
  447. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.13.xml +7 -0
  448. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.14.xml +7 -0
  449. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.15.xml +7 -0
  450. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.16.xml +7 -0
  451. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.17.xml +7 -0
  452. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.18.xml +7 -0
  453. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.19.xml +7 -0
  454. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.2.xml +7 -0
  455. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.20.xml +7 -0
  456. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.21.xml +7 -0
  457. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.3.xml +7 -0
  458. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.4.xml +7 -0
  459. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.5.xml +7 -0
  460. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.6.xml +7 -0
  461. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.7.xml +7 -0
  462. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.8.xml +7 -0
  463. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.9.xml +7 -0
  464. data/spec/reports/SPEC-OpenStudioAwsWrapper-authenticated-session.xml +7 -0
  465. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.0.xml +9 -0
  466. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.1.xml +9 -0
  467. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.10.xml +9 -0
  468. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.11.xml +9 -0
  469. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.12.xml +9 -0
  470. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.13.xml +9 -0
  471. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.14.xml +9 -0
  472. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.15.xml +9 -0
  473. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.16.xml +9 -0
  474. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.17.xml +9 -0
  475. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.18.xml +9 -0
  476. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.19.xml +9 -0
  477. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.2.xml +9 -0
  478. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.20.xml +9 -0
  479. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.21.xml +9 -0
  480. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.3.xml +9 -0
  481. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.4.xml +9 -0
  482. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.5.xml +9 -0
  483. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.6.xml +9 -0
  484. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.7.xml +9 -0
  485. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.8.xml +9 -0
  486. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.9.xml +9 -0
  487. data/spec/reports/SPEC-OpenStudioAwsWrapper-unauthenticated-session.xml +9 -0
  488. data/spec/reports/SPEC-OpenStudioAwsWrapper.0.xml +7 -0
  489. data/spec/reports/SPEC-OpenStudioAwsWrapper.1.xml +7 -0
  490. data/spec/reports/SPEC-OpenStudioAwsWrapper.10.xml +7 -0
  491. data/spec/reports/SPEC-OpenStudioAwsWrapper.11.xml +7 -0
  492. data/spec/reports/SPEC-OpenStudioAwsWrapper.12.xml +7 -0
  493. data/spec/reports/SPEC-OpenStudioAwsWrapper.13.xml +7 -0
  494. data/spec/reports/SPEC-OpenStudioAwsWrapper.14.xml +7 -0
  495. data/spec/reports/SPEC-OpenStudioAwsWrapper.15.xml +7 -0
  496. data/spec/reports/SPEC-OpenStudioAwsWrapper.16.xml +7 -0
  497. data/spec/reports/SPEC-OpenStudioAwsWrapper.17.xml +7 -0
  498. data/spec/reports/SPEC-OpenStudioAwsWrapper.18.xml +7 -0
  499. data/spec/reports/SPEC-OpenStudioAwsWrapper.19.xml +7 -0
  500. data/spec/reports/SPEC-OpenStudioAwsWrapper.2.xml +7 -0
  501. data/spec/reports/SPEC-OpenStudioAwsWrapper.20.xml +7 -0
  502. data/spec/reports/SPEC-OpenStudioAwsWrapper.21.xml +7 -0
  503. data/spec/reports/SPEC-OpenStudioAwsWrapper.3.xml +7 -0
  504. data/spec/reports/SPEC-OpenStudioAwsWrapper.4.xml +7 -0
  505. data/spec/reports/SPEC-OpenStudioAwsWrapper.5.xml +7 -0
  506. data/spec/reports/SPEC-OpenStudioAwsWrapper.6.xml +7 -0
  507. data/spec/reports/SPEC-OpenStudioAwsWrapper.7.xml +7 -0
  508. data/spec/reports/SPEC-OpenStudioAwsWrapper.8.xml +7 -0
  509. data/spec/reports/SPEC-OpenStudioAwsWrapper.9.xml +7 -0
  510. data/spec/reports/SPEC-OpenStudioAwsWrapper.xml +7 -0
  511. metadata +1019 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 31a9071ad83312a4fce7ad046e3db9c5531ec1cd
4
- data.tar.gz: 965059858cd562bf5837836bb4e81ed1e08179ab
3
+ metadata.gz: 7e3f40caa3eed2715d9774ae42a8913b3d605434
4
+ data.tar.gz: ac233b57d15ba24a027019e94c919da9a0850cf0
5
5
  SHA512:
6
- metadata.gz: bcd7712ea77b6cf33094f2e1fa9695f35d711418d07d8356f7cee7d344c7da559996253abea9dbc26bb0299a898a133ef35e166b682b6a775ead5a108a208e8c
7
- data.tar.gz: 80fa6a7288f9e988fef90eae8ca6924ae756d0392838bc75d929a7bc0d6ec5dd7df3163c79306ec9bb3a65258543df589b79d0e60628c2dba0c0fa4a3e6acbed
6
+ metadata.gz: 76a729d74b97e3b9fe3e8e737b303c38939443567d2006e9ebfd46ce709995a7d0e1a29305951ceeb362122e36d7a9a55968aba2e6127f03dfefae29ef7c94cf
7
+ data.tar.gz: 5d46f753111b741a8b51349d2e83c1ef75689f51a42d006a590d5e0795a1d4e7f46acb25c259d43188a3bca411fa66afe469cca186b14a04c849498b8458d092
@@ -7,7 +7,7 @@ require 'securerandom'
7
7
  require 'semantic'
8
8
  require 'semantic/core_ext'
9
9
  require 'fileutils'
10
-
10
+ require 'sshkey'
11
11
  # AWS SDK CORE
12
12
  begin
13
13
  require 'aws-sdk-core'
@@ -80,7 +80,9 @@ module OpenStudio
80
80
  @default_amis = OpenStudioAmis.new(options[:ami_lookup_version], ami_options).get_amis
81
81
  end
82
82
 
83
- # def load_data_from_json(json_filename)
83
+
84
+
85
+ # # def load_data_from_json(json_filename)
84
86
  # @os_aws.load_data_from_json
85
87
  #
86
88
  #
@@ -90,11 +92,13 @@ module OpenStudio
90
92
  def create_server(options = {}, instances_json = 'server_data.json')
91
93
  defaults = {
92
94
  instance_type: 'm2.xlarge',
93
- security_group: 'openstudio-server-sg-v1',
95
+ security_groups: [],
94
96
  image_id: @default_amis[:server],
95
97
  user_id: 'unknown_user',
96
98
 
97
99
  # optional -- will default later
100
+ associate_public_ip_address: nil,
101
+ subnet_id: nil,
98
102
  ebs_volume_id: nil,
99
103
  aws_key_pair_name: nil,
100
104
  private_key_file_name: nil, # required if using an existing "aws_key_pair_name"
@@ -102,12 +106,24 @@ module OpenStudio
102
106
  }
103
107
  options = defaults.merge(options)
104
108
 
109
+ # for backwards compatibilty, still allow security_group
110
+ 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] ]
113
+ end
114
+
105
115
  if options[:aws_key_pair_name]
106
116
  fail 'Must pass in the private_key_file_name' unless options[:private_key_file_name]
107
117
  fail "Private key was not found: #{options[:private_key_file_name]}" unless File.exist? options[:private_key_file_name]
108
118
  end
109
119
 
110
- @os_aws.create_or_retrieve_security_group options[:security_group]
120
+ if options[:security_groups].empty?
121
+ # if the user has not specified any security groups, then create one called: 'openstudio-server-sg-v1'
122
+ @os_aws.create_or_retrieve_default_security_group
123
+ else
124
+ @os_aws.security_groups = options[:security_groups]
125
+ end
126
+
111
127
  @os_aws.create_or_retrieve_key_pair options[:aws_key_pair_name]
112
128
 
113
129
  # If using an already_existing key_pair, then you must pass in the private key file name
@@ -119,7 +135,17 @@ module OpenStudio
119
135
  @os_aws.save_private_key('ec2_server_key.pem')
120
136
  end
121
137
 
122
- server_options = { user_id: options[:user_id], tags: options[:tags] }
138
+ 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],
143
+ }
144
+
145
+ # save the worker pem and public to the directory
146
+ # presently, this will always overwrite the worker key, is that okay? Is this really needed later?
147
+ @os_aws.save_worker_keys('.')
148
+
123
149
  # if instance_data[:ebs_volume_id]
124
150
  # server_options[:ebs_volume_id] = instance_data[:ebs_volume_id]
125
151
  # end
@@ -127,7 +153,7 @@ module OpenStudio
127
153
  @os_aws.launch_server(options[:image_id], options[:instance_type], server_options)
128
154
 
129
155
  @instances_json = instances_json
130
- File.open(@instances_json, 'w') { |f| f << JSON.pretty_generate(@os_aws.server.to_os_hash) }
156
+ save_cluster_json(@instances_json)
131
157
 
132
158
  # Print out some debugging commands (probably work on mac/linux only)
133
159
  puts ''
@@ -139,11 +165,13 @@ module OpenStudio
139
165
  def create_workers(number_of_instances, options = {}, user_id = 'unknown_user')
140
166
  defaults = {
141
167
  instance_type: 'm2.4xlarge',
142
- security_group: 'openstudio-server-sg-v1',
143
- image_id: @default_amis[:server],
168
+ security_groups: [],
169
+ image_id: nil, # don't prescribe the image id so that it can determine later
144
170
  user_id: user_id,
145
171
 
146
172
  # optional -- will default later
173
+ associate_public_ip_address: nil,
174
+ subnet_id: nil,
147
175
  ebs_volume_id: nil,
148
176
  aws_key_pair_name: nil,
149
177
  private_key_file_name: nil, # required if using an existing "aws_key_pair_name",
@@ -151,13 +179,16 @@ module OpenStudio
151
179
  }
152
180
  options = defaults.merge(options)
153
181
 
182
+ # for backwards compatibilty, still allow security_group
183
+ 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] ]
186
+ end
187
+
188
+
154
189
  # Get the right worker AMI ids based on the type of instance
155
190
  if options[:image_id].nil?
156
- if options[:instance_type] =~ /cc2|c3/
157
- options[:image_id] = @default_amis[:cc2worker]
158
- else
159
- options[:image_id] = @default_amis[:worker]
160
- end
191
+ options[:image_id] = determine_image_type(options[:instance_type])
161
192
  end
162
193
 
163
194
  fail "Can't create workers without a server instance running" if @os_aws.server.nil?
@@ -166,29 +197,21 @@ module OpenStudio
166
197
  puts ''
167
198
  puts 'No workers requested'
168
199
  else
169
- worker_options = { user_id: options[:user_id], tags: options[:tags] }
200
+ 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]
205
+ }
206
+
170
207
  # if options[:ebs_volume_size]
171
208
  # worker_options[:ebs_volume_size] = options[:ebs_volume_size]
172
209
  # end
173
210
 
174
211
  @os_aws.launch_workers(options[:image_id], options[:instance_type], number_of_instances, worker_options)
175
212
 
176
- ## append the information to the server_data hash that already exists
177
- # @server_data[:instance_type] = instance_data[:instance_type]
178
- # @server_data[:num] = number_of_instances
179
- # server_string = @server_data.to_json.gsub("\"", "\\\\\"")
180
- #
181
- # start_string = "ruby #{os_aws_file_location} #{@config.access_key} #{@config.secret_key} us-east-1 EC2 launch_workers \"#{server_string}\""
182
- # puts "Worker Command: #{start_string}"
183
- # worker_data_string = `#{start_string}`
184
- # @worker_data = JSON.parse(worker_data_string, :symbolize_names => true)
185
- # File.open("worker_data.json", "w") { |f| f << JSON.pretty_generate(worker_data) }
186
- #
187
- ## Print out some debugging commands (probably work on mac/linux only)
188
213
  # Add the worker data to the JSON
189
- h = JSON.parse(File.read(@instances_json))
190
- h[:workers] = @os_aws.to_os_worker_hash[:workers]
191
- File.open(@instances_json, 'w') { |f| f << JSON.pretty_generate(h) }
214
+ save_cluster_json @instances_json
192
215
 
193
216
  puts ''
194
217
  puts 'Worker SSH Command:'
@@ -203,6 +226,21 @@ module OpenStudio
203
226
  @os_aws.configure_server_and_workers
204
227
  end
205
228
 
229
+ # Return information on the cluster instances as a hash. This includes IP addresses, host names, number of processors, etc.
230
+ # @return [Hash] Data about the configured cluster
231
+ def cluster_info
232
+ h = @os_aws.server.to_os_hash
233
+ h[:workers] = @os_aws.to_os_worker_hash[:workers]
234
+
235
+ h
236
+ end
237
+
238
+ # Save a JSON with information about the cluster that was configured.
239
+ # @param filename [String] Path and filename to save the JSON file
240
+ def save_cluster_json(filename)
241
+ File.open(@instances_json, 'w') { |f| f << JSON.pretty_generate(cluster_info) }
242
+ end
243
+
206
244
  # openstudio_instance_type as symbol
207
245
  def stop_instances(group_id, openstudio_instance_type)
208
246
  instances = @os_aws.describe_running_instances(group_id, openstudio_instance_type.to_sym)
@@ -221,24 +259,41 @@ module OpenStudio
221
259
  resp
222
260
  end
223
261
 
224
- # Warning, this appears that it terminates all the instances of the openstudio_instance_type
225
- def terminate_instances_by_group_id(group_id, openstudio_instance_type)
226
- instances = @os_aws.describe_running_instances(group_id, openstudio_instance_type.to_sym)
262
+ # Warning, this appears that it terminates all the instances
263
+ def terminate_instances_by_group_id(group_id)
264
+ instances = @os_aws.describe_running_instances(group_id)
227
265
  ids = instances.map { |k, _| k[:instance_id] }
228
266
 
229
267
  puts "Terminating the following instances #{ids}"
230
268
  resp = []
231
269
  resp = @os_aws.terminate_instances(ids).to_hash unless ids.empty?
232
- resp
270
+ resp[:terminating_instances].first[:current_state][:name] == 'shutting-down'
271
+ end
272
+
273
+ # Terminate the entire cluster
274
+ def terminate
275
+ puts "Terminating any instance with group ID: #{@os_aws.group_uuid}"
276
+
277
+ terminate_instances_by_group_id(@os_aws.group_uuid)
233
278
  end
234
279
 
235
280
  def load_instance_info_from_file(filename)
236
281
  fail 'Could not find instance description JSON file' unless File.exist? filename
237
282
 
238
283
  h = JSON.parse(File.read(filename), symbolize_names: true)
239
- @os_aws.find_server(h)
284
+ if h[:location] == 'AWS'
285
+ @os_aws.find_server(h)
286
+ else
287
+ puts "Instance file '#{filename}' does not have the location of 'AWS'"
288
+ return false
289
+ end
240
290
 
241
291
  # load the worker nodes someday
292
+ true
293
+ end
294
+
295
+ def server
296
+ @os_aws.server
242
297
  end
243
298
 
244
299
  # Send a file to the server or worker nodes
@@ -276,6 +331,17 @@ module OpenStudio
276
331
  end
277
332
  end
278
333
 
334
+ def determine_image_type(instance_type)
335
+ image = nil
336
+ if instance_type =~ /cc2/
337
+ image = @default_amis[:cc2worker]
338
+ else
339
+ image = @default_amis[:worker]
340
+ end
341
+
342
+ image
343
+ end
344
+
279
345
  private
280
346
 
281
347
  def os_aws_file_location
@@ -1,5 +1,5 @@
1
1
  module OpenStudio
2
2
  module Aws
3
- VERSION = '0.2.5'
3
+ VERSION = '0.3.0'
4
4
  end
5
5
  end
@@ -24,20 +24,24 @@ class OpenStudioAwsInstance
24
24
  attr_reader :openstudio_instance_type
25
25
  attr_reader :data
26
26
  attr_reader :private_key_file_name
27
+ attr_reader :private_ip_address
27
28
  attr_reader :group_uuid
28
29
 
29
- def initialize(aws_session, openstudio_instance_type, key_pair_name, security_group_name, group_uuid, private_key,
30
- private_key_file_name, proxy = nil)
30
+
31
+ # param security_groups can be a single instance or an array
32
+ def initialize(aws_session, openstudio_instance_type, key_pair_name, security_groups, group_uuid, private_key,
33
+ private_key_file_name, subnet_id, proxy = nil)
31
34
  @data = nil # stored information about the instance
32
35
  @aws = aws_session
33
36
  @openstudio_instance_type = openstudio_instance_type # :server, :worker
34
37
  @key_pair_name = key_pair_name
35
- @security_group_name = security_group_name
38
+ @security_groups = security_groups
36
39
  @group_uuid = group_uuid.to_s
37
40
  @init_timestamp = Time.now # This is the timestamp and is typically just tracked for the server
38
41
  @private_key = private_key
39
42
  @private_key_file_name = private_key_file_name
40
43
  @proxy = proxy
44
+ @subnet_id = subnet_id
41
45
 
42
46
  # Important System information
43
47
  @host = nil
@@ -74,12 +78,10 @@ class OpenStudioAwsInstance
74
78
  # need to wait until it is available
75
79
 
76
80
  @aws.attach_volume(
77
-
78
81
  volume_id: resp[:volume_id],
79
82
  instance_id: instance_id,
80
83
  # required
81
84
  device: '/dev/sdh'
82
-
83
85
  )
84
86
 
85
87
  # Wait for the volume to attach
@@ -88,21 +90,42 @@ class OpenStudioAwsInstance
88
90
  end
89
91
 
90
92
  def launch_instance(image_id, instance_type, user_data, user_id, options = {})
91
- # logger.info("user_data #{user_data.inspect}")
93
+ # determine the instance type of the server
92
94
  instance = {
93
- image_id: image_id,
94
- key_name: @key_pair_name,
95
- security_groups: [@security_group_name],
96
- user_data: Base64.encode64(user_data),
97
- instance_type: instance_type,
98
- placement: {
99
- availability_zone: 'us-east-1c'
100
- },
101
- min_count: 1,
102
- max_count: 1
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
103
103
  }
104
+
105
+ if options[:availability_zone]
106
+ # use the availability zone from the server
107
+ # logger.info("user_data #{user_data.inspect}")
108
+ instance[:placement] ||= {}
109
+ instance[:placement][:availability_zone] = options[:availability_zone]
110
+ end
111
+
112
+ if options[:associate_public_ip_address]
113
+ # You have to delete the security group and subnet_id from the instance hash and put into the network interface
114
+ # otherwise you will get an error on launch with an InvalidParameterCombination error.
115
+ 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
+ }
122
+ ]
123
+ end
124
+
125
+ # Documentation for run_instances is here: http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/EC2/Client.html#run_instances-instance_method
104
126
  result = @aws.run_instances(instance)
105
127
 
128
+
106
129
  # determine how many processors are suppose to be in this image (lookup for now?)
107
130
  processors = find_processors(instance_type)
108
131
 
@@ -133,11 +156,18 @@ class OpenStudioAwsInstance
133
156
  end
134
157
 
135
158
  # only asked for 1 instance, so therefore it should be the first
136
- aws_instance = result.data.instances.first
137
- @aws.create_tags(
138
- resources: [aws_instance.instance_id],
139
- tags: aws_tags
140
- )
159
+ begin
160
+ tries ||= 3
161
+ aws_instance = result.data.instances.first
162
+ @aws.create_tags(
163
+ resources: [aws_instance.instance_id],
164
+ tags: aws_tags
165
+ )
166
+ rescue Aws::EC2::Errors::InvalidInstanceIDNotFound
167
+ sleep 1000
168
+ retry unless (tries -= 1).zero?
169
+ end
170
+
141
171
 
142
172
  # get the instance information
143
173
  test_result = @aws.describe_instance_status(instance_ids: [aws_instance.instance_id]).data.instance_statuses.first
@@ -185,12 +215,14 @@ class OpenStudioAwsInstance
185
215
  # private_key_path: "#{File.expand_path(@private_key_path)}"
186
216
  #:private_key => @private_key, # need to stop printing this out
187
217
  location: 'AWS',
218
+ availability_zone: @data.availability_zone,
188
219
  server: {
189
220
  id: @data.id,
190
- ip: 'http://' + @data.ip,
221
+ ip: "http://#{@data.ip}",
191
222
  dns: @data.dns,
192
223
  procs: @data.procs,
193
- private_key_file_name: @private_key_file_name
224
+ private_key_file_name: @private_key_file_name,
225
+ private_ip_address: @private_ip_address
194
226
  }
195
227
  }
196
228
  else
@@ -202,6 +234,14 @@ class OpenStudioAwsInstance
202
234
  h
203
235
  end
204
236
 
237
+ def ip
238
+ @data.ip
239
+ end
240
+
241
+ def hostname
242
+ "http://#{@data.ip}"
243
+ end
244
+
205
245
  def find_processors(instance)
206
246
  lookup = {
207
247
  'm3.medium' => 1,
@@ -385,11 +425,20 @@ class OpenStudioAwsInstance
385
425
  # store some of the data into a custom struct. The instance is the full description. The remaining fields are
386
426
  # just easier accessors to the data in the raw request except for procs which is a custom request.
387
427
  def create_struct(instance, procs)
388
- instance_struct = Struct.new(:instance, :id, :ip, :dns, :procs)
389
- s = instance_struct.new(instance, instance[:instance_id], instance[:public_ip_address], instance[:public_dns_name], procs)
428
+ instance_struct = Struct.new(:instance, :id, :ip, :dns, :procs, :availability_zone, :private_ip_address)
429
+ 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]
437
+ )
390
438
 
391
439
  # store some values into the member variables
392
440
  @ip_address = instance[:public_ip_address]
441
+ @private_ip_address = instance[:private_ip_address]
393
442
  @instance_id = instance[:instance_id]
394
443
 
395
444
  s
@@ -42,23 +42,26 @@ class OpenStudioAwsWrapper
42
42
  include Logging
43
43
 
44
44
  attr_reader :group_uuid
45
- attr_reader :security_group_name
46
45
  attr_reader :key_pair_name
47
46
  attr_reader :server
48
47
  attr_reader :workers
49
48
  attr_reader :proxy
49
+ attr_reader :worker_keys
50
50
 
51
51
  attr_accessor :private_key_file_name
52
+ attr_accessor :security_groups
52
53
 
53
54
  VALID_OPTIONS = [:proxy, :credentials]
54
55
 
55
56
  def initialize(options = {}, group_uuid = nil)
56
57
  @group_uuid = group_uuid || (SecureRandom.uuid).gsub('-', '')
57
58
 
58
- @security_group_name = nil
59
+ @security_groups = []
59
60
  @key_pair_name = nil
60
61
  @private_key_file_name = nil
61
62
 
63
+ @worker_keys = SSHKey.generate
64
+
62
65
  @private_key = nil # Private key data
63
66
 
64
67
  # List of instances
@@ -72,32 +75,33 @@ class OpenStudioAwsWrapper
72
75
  @aws = Aws::EC2::Client.new(options[:credentials])
73
76
  end
74
77
 
75
- def create_or_retrieve_security_group(sg_name = nil)
76
- tmp_name = sg_name || 'openstudio-server-sg-v1'
78
+ def create_or_retrieve_default_security_group(tmp_name = 'openstudio-server-sg-v2.1')
77
79
  group = @aws.describe_security_groups(filters: [{ name: 'group-name', values: [tmp_name] }])
78
80
  logger.info "Length of the security group is: #{group.data.security_groups.length}"
79
81
  if group.data.security_groups.length == 0
80
- logger.info 'server group not found --- will create a new one'
82
+ logger.info 'security group not found --- will create a new one'
81
83
  @aws.create_security_group(group_name: tmp_name, description: "group dynamically created by #{__FILE__}")
82
84
  @aws.authorize_security_group_ingress(
83
85
  group_name: tmp_name,
84
86
  ip_permissions: [
85
- { ip_protocol: 'tcp', from_port: 1, to_port: 65_535, ip_ranges: [cidr_ip: '0.0.0.0/0'] }
86
- ]
87
- )
88
- @aws.authorize_security_group_ingress(
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
- }
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'] }
93
92
  ]
94
93
  )
95
94
 
96
95
  # reload group information
97
96
  group = @aws.describe_security_groups(filters: [{ name: 'group-name', values: [tmp_name] }])
97
+ else
98
+ logger.info "Found existing security group"
98
99
  end
99
- @security_group_name = group.data.security_groups.first.group_name
100
- logger.info("server_group #{group.data.security_groups.first.group_name}")
100
+
101
+ @security_groups = [group.data.security_groups.first.group_id]
102
+ logger.info("server_group #{group.data.security_groups.first.group_name}:#{group.data.security_groups.first.group_id}")
103
+
104
+ group.data.security_groups.first
101
105
  end
102
106
 
103
107
  def describe_availability_zones
@@ -260,7 +264,17 @@ class OpenStudioAwsWrapper
260
264
  end
261
265
 
262
266
  def load_private_key(filename)
263
- fail "Could not find private key #{filename}" unless File.exist? filename
267
+ if !File.exist? filename
268
+ # check if the file basename exists in your user directory
269
+ filename = File.expand_path("~/.ssh/#{File.basename(filename)}")
270
+ if File.exist? filename
271
+ puts "Found key of same name in user's home ssh folder #{filename}"
272
+ # using the key in your home directory
273
+ else
274
+ fail "Could not find private key #{filename}" unless File.exist? filename
275
+ end
276
+ end
277
+
264
278
  @private_key_file_name = File.expand_path filename
265
279
  @private_key = File.read(filename)
266
280
  end
@@ -275,15 +289,30 @@ class OpenStudioAwsWrapper
275
289
  end
276
290
  end
277
291
 
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}
296
+ end
297
+
278
298
  def launch_server(image_id, instance_type, launch_options = {})
279
- defaults = { user_id: 'unknown_user', tags: [], ebs_volume_size: nil }
299
+ defaults = {
300
+ user_id: 'unknown_user',
301
+ tags: [],
302
+ ebs_volume_size: nil
303
+ }
280
304
  launch_options = defaults.merge(launch_options)
281
305
 
282
- user_data = File.read(File.expand_path(File.dirname(__FILE__)) + '/server_script.sh')
283
- @server = OpenStudioAwsInstance.new(@aws, :server, @key_pair_name, @security_group_name, @group_uuid, @private_key,
306
+ # replace the server_script.sh.template with the keys to add
307
+ user_data = File.read(File.expand_path(File.dirname(__FILE__)) + '/server_script.sh.template')
308
+ user_data.gsub!(/SERVER_HOSTNAME/, 'openstudio.server')
309
+ user_data.gsub!(/WORKER_PRIVATE_KEY_TEMPLATE/, worker_keys.private_key.gsub("\n","\\n"))
310
+ user_data.gsub!(/WORKER_PUBLIC_KEY_TEMPLATE/, worker_keys.ssh_public_key)
311
+
312
+ @server = OpenStudioAwsInstance.new(@aws, :server, @key_pair_name, @security_groups, @group_uuid, @private_key,
284
313
  @private_key_file_name, @proxy)
285
314
 
286
- # create the EBS volumes instead of the ephemeral storage - needed especially for the m3 instances (SSD)
315
+ # TODO: create the EBS volumes instead of the ephemeral storage - needed especially for the m3 instances (SSD)
287
316
 
288
317
  fail 'image_id is nil' unless image_id
289
318
  fail 'instance type is nil' unless instance_type
@@ -291,19 +320,25 @@ class OpenStudioAwsWrapper
291
320
  end
292
321
 
293
322
  def launch_workers(image_id, instance_type, num, launch_options = {})
294
- defaults = { user_id: 'unknown_user', tags: [], ebs_volume_size: nil }
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: ''
329
+ }
295
330
  launch_options = defaults.merge(launch_options)
296
331
 
297
332
  user_data = File.read(File.expand_path(File.dirname(__FILE__)) + '/worker_script.sh.template')
298
- user_data.gsub!(/SERVER_IP/, @server.data.ip)
299
- user_data.gsub!(/SERVER_HOSTNAME/, 'master')
300
- user_data.gsub!(/SERVER_ALIAS/, '')
333
+ user_data.gsub!(/SERVER_IP/, @server.data.private_ip_address)
334
+ user_data.gsub!(/SERVER_HOSTNAME/, 'openstudio.server')
335
+ user_data.gsub!(/WORKER_PUBLIC_KEY_TEMPLATE/, worker_keys.ssh_public_key)
301
336
  logger.info("worker user_data #{user_data.inspect}")
302
337
 
303
338
  # thread the launching of the workers
304
339
 
305
340
  num.times do
306
- @workers << OpenStudioAwsInstance.new(@aws, :worker, @key_pair_name, @security_group_name, @group_uuid,
341
+ @workers << OpenStudioAwsInstance.new(@aws, :worker, @key_pair_name, @security_groups, @group_uuid,
307
342
  @private_key, @private_key_file_name, @proxy)
308
343
  end
309
344
 
@@ -321,15 +356,17 @@ class OpenStudioAwsWrapper
321
356
  end
322
357
 
323
358
  # blocking method that waits for servers and workers to be fully configured (i.e. execution of user_data has
324
- # occured on all nodes)
359
+ # occured on all nodes). Ideally none of these methods would ever need to exist.
360
+ #
361
+ # @return [Boolean] Will return true unless an exception is raised
325
362
  def configure_server_and_workers
326
363
  logger.info('waiting for server user_data to complete')
327
364
  @server.wait_command('[ -e /home/ubuntu/user_data_done ] && echo "true"')
328
365
  logger.info('waiting for worker user_data to complete')
329
366
  @workers.each { |worker| worker.wait_command('[ -e /home/ubuntu/user_data_done ] && echo "true"') }
330
367
 
331
- ips = "master|#{@server.data.ip}|#{@server.data.dns}|#{@server.data.procs}|ubuntu|ubuntu|true\n"
332
- @workers.each { |worker| ips << "worker|#{worker.data.ip}|#{worker.data.dns}|#{worker.data.procs}|ubuntu|ubuntu|true\n" }
368
+ ips = "master|#{@server.data.private_ip_address}|#{@server.data.dns}|#{@server.data.procs}|ubuntu|ubuntu|true\n"
369
+ @workers.each { |worker| ips << "worker|#{worker.data.private_ip_address}|#{worker.data.dns}|#{worker.data.procs}|ubuntu|ubuntu|true\n" }
333
370
  file = Tempfile.new('ip_addresses')
334
371
  file.write(ips)
335
372
  file.close
@@ -337,11 +374,9 @@ class OpenStudioAwsWrapper
337
374
  file.unlink
338
375
  logger.info("ips #{ips}")
339
376
  @server.shell_command('chmod 664 /home/ubuntu/ip_addresses')
340
- @server.shell_command('~/setup-ssh-keys.sh')
341
- @server.shell_command('~/setup-ssh-worker-nodes.sh ip_addresses')
342
377
 
343
378
  mongoid = File.read(File.expand_path(File.dirname(__FILE__)) + '/mongoid.yml.template')
344
- mongoid.gsub!(/SERVER_IP/, @server.data.ip)
379
+ mongoid.gsub!(/SERVER_IP/, @server.data.private_ip_address)
345
380
  file = Tempfile.new('mongoid.yml')
346
381
  file.write(mongoid)
347
382
  file.close
@@ -352,8 +387,6 @@ class OpenStudioAwsWrapper
352
387
  @server.shell_command('chmod 664 /mnt/openstudio/rails-models/mongoid.yml')
353
388
  @workers.each { |worker| worker.shell_command('chmod 664 /mnt/openstudio/rails-models/mongoid.yml') }
354
389
 
355
- # I'm removing this as of 10/6/14. This should have been resolved by now.
356
- # sleep 60 # wait 60 more seconds for everything -- this is cheesy
357
390
  true
358
391
  end
359
392
 
@@ -361,25 +394,29 @@ class OpenStudioAwsWrapper
361
394
  # if it is found, then it will set the @server member variable.
362
395
  # Note that the information around keys and security groups is pulled from the instance information.
363
396
  def find_server(server_data_hash)
364
- group_uuid = server_data_hash[:group_id] || @group_uuid
397
+ @group_uuid = server_data_hash[:group_id] || @group_uuid
365
398
  load_private_key(server_data_hash[:server][:private_key_file_name])
366
399
 
367
400
  logger.info "finding the server for groupid of #{group_uuid}"
368
401
  fail 'no group uuid defined either in member variable or method argument' if group_uuid.nil?
369
402
 
403
+ @server = nil
370
404
  resp = describe_running_instances(group_uuid, :server)
371
405
  if resp
372
406
  fail "more than one server running with group uuid of #{group_uuid} found, expecting only one" if resp.size > 1
373
407
  resp = resp.first
374
408
  if !@server
375
- logger.info "Server found and loading data into object [instance id is #{resp[:instance_id]}]"
376
- @server = OpenStudioAwsInstance.new(@aws, :server, resp[:key_name], resp[:security_groups].first[:group_name], group_uuid, @private_key, @private_key_file_name)
377
- @server.load_instance_data(resp)
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)
412
+
413
+ @server.load_instance_data(resp)
414
+ end
378
415
  else
379
416
  logger.info "Server instance is already defined with instance #{resp[:instance_id]}"
380
417
  end
381
418
  else
382
- fail 'could not find a running server instance'
419
+ puts 'could not find a running server instance'
383
420
  end
384
421
 
385
422
  # Really don't need to return anything because this sets the class instance variable
@@ -437,7 +474,8 @@ class OpenStudioAwsWrapper
437
474
  ip: "http://#{worker.data.ip}",
438
475
  dns: worker.data.dns,
439
476
  procs: worker.data.procs,
440
- private_key_file_name: worker.private_key_file_name
477
+ private_key_file_name: worker.private_key_file_name,
478
+ private_ip_address: worker.private_ip_address
441
479
  )
442
480
  end
443
481
 
@@ -502,8 +540,13 @@ class OpenStudioAwsWrapper
502
540
  a[:tested] = false
503
541
  end
504
542
 
505
- # TODO: in 1.6.0 just stop putting in the cc2workers.
506
- if ami[:tags_hash][:openstudio_version].to_version >= '1.5.0'
543
+ if ami[:tags_hash][:openstudio_version].to_version >= '1.6.0'
544
+ if ami[:name] =~ /Server/
545
+ a[:amis][:server] = ami[:image_id]
546
+ elsif ami[:name] =~ /Worker/
547
+ a[:amis][:worker] = ami[:image_id]
548
+ end
549
+ elsif ami[:tags_hash][:openstudio_version].to_version >= '1.5.0'
507
550
  if ami[:name] =~ /Server/
508
551
  a[:amis][:server] = ami[:image_id]
509
552
  elsif ami[:name] =~ /Worker/