openstudio-aws 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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/