aviator 0.0.6 → 0.0.7

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 (245) hide show
  1. checksums.yaml +8 -8
  2. data/.gitignore +2 -1
  3. data/.travis.yml +4 -0
  4. data/Gemfile +6 -2
  5. data/aviator.gemspec +19 -6
  6. data/lib/aviator/compatibility.rb +34 -0
  7. data/lib/aviator/core/cli/describer.rb +16 -16
  8. data/lib/aviator/core/logger.rb +55 -0
  9. data/lib/aviator/core/request.rb +5 -4
  10. data/lib/aviator/core/request_builder.rb +1 -1
  11. data/lib/aviator/core/response.rb +17 -11
  12. data/lib/aviator/core/service.rb +9 -27
  13. data/lib/aviator/core/session.rb +71 -61
  14. data/lib/aviator/core.rb +3 -1
  15. data/lib/aviator/hashish.rb +111 -0
  16. data/lib/aviator/openstack/common/v2/admin/base.rb +1 -1
  17. data/lib/aviator/openstack/common/v2/public/base.rb +7 -3
  18. data/lib/aviator/openstack/compute/v2/admin/confirm_server_resize.rb +3 -3
  19. data/lib/aviator/openstack/compute/v2/admin/create_network.rb +15 -15
  20. data/lib/aviator/openstack/compute/v2/admin/get_host_details.rb +2 -2
  21. data/lib/aviator/openstack/compute/v2/admin/list_hosts.rb +3 -3
  22. data/lib/aviator/openstack/compute/v2/admin/lock_server.rb +3 -3
  23. data/lib/aviator/openstack/compute/v2/admin/migrate_server.rb +3 -3
  24. data/lib/aviator/openstack/compute/v2/admin/reset_server.rb +3 -3
  25. data/lib/aviator/openstack/compute/v2/admin/resize_server.rb +7 -7
  26. data/lib/aviator/openstack/compute/v2/admin/revert_server_resize.rb +2 -2
  27. data/lib/aviator/openstack/compute/v2/admin/unlock_server.rb +3 -3
  28. data/lib/aviator/openstack/compute/v2/public/change_admin_password.rb +5 -5
  29. data/lib/aviator/openstack/compute/v2/public/create_image.rb +6 -6
  30. data/lib/aviator/openstack/compute/v2/public/create_server.rb +14 -14
  31. data/lib/aviator/openstack/compute/v2/public/delete_image.rb +2 -2
  32. data/lib/aviator/openstack/compute/v2/public/delete_image_metadata_item.rb +31 -0
  33. data/lib/aviator/openstack/compute/v2/public/delete_server.rb +2 -2
  34. data/lib/aviator/openstack/compute/v2/public/delete_server_metadata_item.rb +31 -0
  35. data/lib/aviator/openstack/compute/v2/public/get_flavor_details.rb +2 -2
  36. data/lib/aviator/openstack/compute/v2/public/get_image_details.rb +2 -2
  37. data/lib/aviator/openstack/compute/v2/public/get_image_metadata_item.rb +31 -0
  38. data/lib/aviator/openstack/compute/v2/public/get_network_details.rb +2 -2
  39. data/lib/aviator/openstack/compute/v2/public/get_server.rb +2 -2
  40. data/lib/aviator/openstack/compute/v2/public/get_server_metadata_item.rb +31 -0
  41. data/lib/aviator/openstack/compute/v2/public/list_addresses.rb +3 -3
  42. data/lib/aviator/openstack/compute/v2/public/list_flavors.rb +6 -6
  43. data/lib/aviator/openstack/compute/v2/public/list_image_metadata.rb +30 -0
  44. data/lib/aviator/openstack/compute/v2/public/list_images.rb +9 -9
  45. data/lib/aviator/openstack/compute/v2/public/list_networks.rb +1 -1
  46. data/lib/aviator/openstack/compute/v2/public/list_server_metadata.rb +30 -0
  47. data/lib/aviator/openstack/compute/v2/public/list_servers.rb +11 -11
  48. data/lib/aviator/openstack/compute/v2/public/pause_server.rb +3 -3
  49. data/lib/aviator/openstack/compute/v2/public/reboot_server.rb +5 -5
  50. data/lib/aviator/openstack/compute/v2/public/rebuild_server.rb +13 -13
  51. data/lib/aviator/openstack/compute/v2/public/resume_server.rb +3 -3
  52. data/lib/aviator/openstack/compute/v2/public/root.rb +1 -1
  53. data/lib/aviator/openstack/compute/v2/public/set_image_metadata.rb +38 -0
  54. data/lib/aviator/openstack/compute/v2/public/set_server_metadata.rb +38 -0
  55. data/lib/aviator/openstack/compute/v2/public/suspend_server.rb +3 -3
  56. data/lib/aviator/openstack/compute/v2/public/unpause_server.rb +3 -3
  57. data/lib/aviator/openstack/compute/v2/public/update_image_metadata.rb +38 -0
  58. data/lib/aviator/openstack/compute/v2/public/update_server.rb +6 -6
  59. data/lib/aviator/openstack/compute/v2/public/update_server_metadata.rb +38 -0
  60. data/lib/aviator/openstack/identity/v2/admin/add_role_to_user_on_tenant.rb +4 -4
  61. data/lib/aviator/openstack/identity/v2/admin/create_tenant.rb +8 -8
  62. data/lib/aviator/openstack/identity/v2/admin/create_user.rb +6 -6
  63. data/lib/aviator/openstack/identity/v2/admin/delete_role_from_user_on_tenant.rb +4 -4
  64. data/lib/aviator/openstack/identity/v2/admin/delete_tenant.rb +2 -2
  65. data/lib/aviator/openstack/identity/v2/admin/delete_user.rb +1 -1
  66. data/lib/aviator/openstack/identity/v2/admin/get_tenant_by_id.rb +30 -0
  67. data/lib/aviator/openstack/identity/v2/admin/list_tenants.rb +3 -3
  68. data/lib/aviator/openstack/identity/v2/admin/update_tenant.rb +6 -6
  69. data/lib/aviator/openstack/identity/v2/admin/update_user.rb +7 -7
  70. data/lib/aviator/openstack/identity/v2/public/create_token.rb +13 -13
  71. data/lib/aviator/openstack/identity/v2/public/list_tenants.rb +3 -3
  72. data/lib/aviator/openstack/identity/v2/public/root.rb +1 -1
  73. data/lib/aviator/openstack/image/v1/public/list_public_images.rb +45 -0
  74. data/lib/aviator/openstack/image/v1/public/root.rb +1 -1
  75. data/lib/aviator/openstack/metering/v1/admin/list_projects.rb +1 -1
  76. data/lib/aviator/openstack/volume/v1/public/create_volume.rb +13 -13
  77. data/lib/aviator/openstack/volume/v1/public/delete_volume.rb +2 -2
  78. data/lib/aviator/openstack/volume/v1/public/get_volume.rb +2 -2
  79. data/lib/aviator/openstack/volume/v1/public/list_volume_types.rb +3 -3
  80. data/lib/aviator/openstack/volume/v1/public/list_volumes.rb +22 -11
  81. data/lib/aviator/openstack/volume/v1/public/root.rb +1 -1
  82. data/lib/aviator/openstack/volume/v1/public/update_volume.rb +5 -5
  83. data/lib/aviator/version.rb +1 -1
  84. data/lib/aviator.rb +5 -0
  85. data/test/aviator/core/cli/describer_test.rb +29 -29
  86. data/test/aviator/core/request_builder_test.rb +13 -13
  87. data/test/aviator/core/request_test.rb +11 -11
  88. data/test/aviator/core/service_test.rb +31 -31
  89. data/test/aviator/core/session_test.rb +122 -70
  90. data/test/aviator/openstack/common/v2/public/base_test.rb +8 -8
  91. data/test/aviator/openstack/compute/v2/admin/confirm_server_resize_test.rb +2 -2
  92. data/test/aviator/openstack/compute/v2/admin/create_network_test.rb +15 -15
  93. data/test/aviator/openstack/compute/v2/admin/get_host_details_test.rb +2 -2
  94. data/test/aviator/openstack/compute/v2/admin/list_hosts_test.rb +2 -2
  95. data/test/aviator/openstack/compute/v2/admin/lock_server_test.rb +2 -2
  96. data/test/aviator/openstack/compute/v2/admin/migrate_server_test.rb +2 -2
  97. data/test/aviator/openstack/compute/v2/admin/reset_server_test.rb +2 -2
  98. data/test/aviator/openstack/compute/v2/admin/resize_server_test.rb +3 -3
  99. data/test/aviator/openstack/compute/v2/admin/revert_server_resize_test.rb +2 -2
  100. data/test/aviator/openstack/compute/v2/admin/unlock_server_test.rb +2 -2
  101. data/test/aviator/openstack/compute/v2/public/change_admin_password_test.rb +3 -3
  102. data/test/aviator/openstack/compute/v2/public/create_image_test.rb +2 -2
  103. data/test/aviator/openstack/compute/v2/public/create_server_test.rb +7 -7
  104. data/test/aviator/openstack/compute/v2/public/delete_image_metadata_item_test.rb +159 -0
  105. data/test/aviator/openstack/compute/v2/public/delete_image_test.rb +2 -2
  106. data/test/aviator/openstack/compute/v2/public/delete_server_metadata_item_test.rb +156 -0
  107. data/test/aviator/openstack/compute/v2/public/delete_server_test.rb +2 -2
  108. data/test/aviator/openstack/compute/v2/public/get_flavor_details_test.rb +2 -2
  109. data/test/aviator/openstack/compute/v2/public/get_image_details_test.rb +2 -2
  110. data/test/aviator/openstack/compute/v2/public/get_image_metadata_item_test.rb +160 -0
  111. data/test/aviator/openstack/compute/v2/public/get_network_details_test.rb +2 -2
  112. data/test/aviator/openstack/compute/v2/public/get_server_metadata_item_test.rb +160 -0
  113. data/test/aviator/openstack/compute/v2/public/get_server_test.rb +2 -2
  114. data/test/aviator/openstack/compute/v2/public/list_addresses_test.rb +3 -3
  115. data/test/aviator/openstack/compute/v2/public/list_flavors_test.rb +4 -4
  116. data/test/aviator/openstack/compute/v2/public/list_image_metadata_test.rb +127 -0
  117. data/test/aviator/openstack/compute/v2/public/list_images_test.rb +13 -13
  118. data/test/aviator/openstack/compute/v2/public/list_networks_test.rb +2 -2
  119. data/test/aviator/openstack/compute/v2/public/list_server_metadata_test.rb +127 -0
  120. data/test/aviator/openstack/compute/v2/public/list_servers_test.rb +15 -15
  121. data/test/aviator/openstack/compute/v2/public/pause_server_test.rb +2 -2
  122. data/test/aviator/openstack/compute/v2/public/reboot_server_test.rb +2 -2
  123. data/test/aviator/openstack/compute/v2/public/rebuild_server_test.rb +6 -6
  124. data/test/aviator/openstack/compute/v2/public/resume_server_test.rb +2 -2
  125. data/test/aviator/openstack/compute/v2/public/root_test.rb +2 -2
  126. data/test/aviator/openstack/compute/v2/public/set_image_metadata_test.rb +151 -0
  127. data/test/aviator/openstack/compute/v2/public/set_server_metadata_test.rb +149 -0
  128. data/test/aviator/openstack/compute/v2/public/suspend_server_test.rb +2 -2
  129. data/test/aviator/openstack/compute/v2/public/unpause_server_test.rb +2 -2
  130. data/test/aviator/openstack/compute/v2/public/update_image_metadata_test.rb +154 -0
  131. data/test/aviator/openstack/compute/v2/public/update_server_metadata_test.rb +150 -0
  132. data/test/aviator/openstack/compute/v2/public/update_server_test.rb +4 -4
  133. data/test/aviator/openstack/identity/v2/admin/add_role_to_user_on_tenant_test.rb +2 -2
  134. data/test/aviator/openstack/identity/v2/admin/create_tenant_test.rb +13 -13
  135. data/test/aviator/openstack/identity/v2/admin/create_user_test.rb +12 -10
  136. data/test/aviator/openstack/identity/v2/admin/delete_role_from_user_on_tenant_test.rb +2 -2
  137. data/test/aviator/openstack/identity/v2/admin/delete_tenant_test.rb +2 -2
  138. data/test/aviator/openstack/identity/v2/admin/delete_user_test.rb +2 -2
  139. data/test/aviator/openstack/identity/v2/admin/get_tenant_by_id_test.rb +122 -0
  140. data/test/aviator/openstack/identity/v2/admin/list_users_test.rb +2 -2
  141. data/test/aviator/openstack/identity/v2/admin/update_tenant_test.rb +2 -2
  142. data/test/aviator/openstack/identity/v2/admin/update_user_test.rb +3 -3
  143. data/test/aviator/openstack/identity/v2/public/create_token_test.rb +19 -18
  144. data/test/aviator/openstack/identity/v2/public/list_tenants_test.rb +5 -5
  145. data/test/aviator/openstack/identity/v2/public/root_test.rb +2 -2
  146. data/test/aviator/openstack/image/v1/public/list_public_images_test.rb +145 -0
  147. data/test/aviator/openstack/image/v1/public/root_test.rb +2 -2
  148. data/test/aviator/openstack/metering/v1/admin/list_projects_test.rb +2 -2
  149. data/test/aviator/openstack/volume/v1/public/create_volume_test.rb +2 -2
  150. data/test/aviator/openstack/volume/v1/public/delete_volume_test.rb +2 -2
  151. data/test/aviator/openstack/volume/v1/public/get_volume_test.rb +2 -2
  152. data/test/aviator/openstack/volume/v1/public/list_volume_types_test.rb +2 -2
  153. data/test/aviator/openstack/volume/v1/public/list_volumes_test.rb +49 -24
  154. data/test/aviator/openstack/volume/v1/public/root_test.rb +2 -2
  155. data/test/aviator/openstack/volume/v1/public/update_volume_test.rb +2 -2
  156. data/test/cassettes/core/session/i_validate/returns_false_if_session_is_no_longer_valid.yml +20 -19
  157. data/test/cassettes/core/session/i_validate/returns_true_even_when_a_default_token_is_used.yml +72 -0
  158. data/test/cassettes/core/session/i_validate/returns_true_if_session_is_still_valid.yml +24 -24
  159. data/test/cassettes/openstack/compute/v2/public/delete_image_metadata_item/leads_to_a_valid_response_when_invalid_image_id_is_provided.yml +98 -0
  160. data/test/cassettes/openstack/compute/v2/public/delete_image_metadata_item/leads_to_a_valid_response_when_invalid_metadata_key_is_provided.yml +147 -0
  161. data/test/cassettes/openstack/compute/v2/public/delete_image_metadata_item/leads_to_a_valid_response_when_valid_image_id_and_metadata_key_are_provided.yml +180 -0
  162. data/test/cassettes/openstack/compute/v2/public/delete_image_metadata_item/returns_the_correct_value_for_body_.yml +65 -0
  163. data/test/cassettes/openstack/compute/v2/public/delete_image_metadata_item/returns_the_correct_value_for_headers_.yml +65 -0
  164. data/test/cassettes/openstack/compute/v2/public/delete_image_metadata_item/returns_the_correct_value_for_http_method_.yml +65 -0
  165. data/test/cassettes/openstack/compute/v2/public/delete_image_metadata_item/returns_the_correct_value_for_url_.yml +65 -0
  166. data/test/cassettes/openstack/compute/v2/public/delete_server_metadata_item/leads_to_a_valid_response_when_invalid_metadata_key_is_provided.yml +135 -0
  167. data/test/cassettes/openstack/compute/v2/public/delete_server_metadata_item/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +98 -0
  168. data/test/cassettes/openstack/compute/v2/public/delete_server_metadata_item/leads_to_a_valid_response_when_valid_server_id_and_metadata_key_are_provided.yml +167 -0
  169. data/test/cassettes/openstack/compute/v2/public/delete_server_metadata_item/returns_the_correct_value_for_body_.yml +65 -0
  170. data/test/cassettes/openstack/compute/v2/public/delete_server_metadata_item/returns_the_correct_value_for_headers_.yml +65 -0
  171. data/test/cassettes/openstack/compute/v2/public/delete_server_metadata_item/returns_the_correct_value_for_http_method_.yml +65 -0
  172. data/test/cassettes/openstack/compute/v2/public/delete_server_metadata_item/returns_the_correct_value_for_url_.yml +65 -0
  173. data/test/cassettes/openstack/compute/v2/public/get_image_metadata_item/leads_to_a_valid_response_when_invalid_image_id_is_provided.yml +98 -0
  174. data/test/cassettes/openstack/compute/v2/public/get_image_metadata_item/leads_to_a_valid_response_when_invalid_metadata_key_is_provided.yml +148 -0
  175. data/test/cassettes/openstack/compute/v2/public/get_image_metadata_item/leads_to_a_valid_response_when_valid_image_id_and_metadata_key_are_provided.yml +180 -0
  176. data/test/cassettes/openstack/compute/v2/public/get_image_metadata_item/returns_the_correct_value_for_body_.yml +65 -0
  177. data/test/cassettes/openstack/compute/v2/public/get_image_metadata_item/returns_the_correct_value_for_headers_.yml +65 -0
  178. data/test/cassettes/openstack/compute/v2/public/get_image_metadata_item/returns_the_correct_value_for_http_method_.yml +65 -0
  179. data/test/cassettes/openstack/compute/v2/public/get_image_metadata_item/returns_the_correct_value_for_url_.yml +65 -0
  180. data/test/cassettes/openstack/compute/v2/public/get_server_metadata_item/leads_to_a_valid_response_when_invalid_metadata_key_is_provided.yml +135 -0
  181. data/test/cassettes/openstack/compute/v2/public/get_server_metadata_item/leads_to_a_valid_response_when_invalid_server_id_and_metadata_key_are_provided.yml +98 -0
  182. data/test/cassettes/openstack/compute/v2/public/get_server_metadata_item/leads_to_a_valid_response_when_valid_server_id_and_metadata_key_are_provided.yml +167 -0
  183. data/test/cassettes/openstack/compute/v2/public/get_server_metadata_item/returns_the_correct_value_for_body_.yml +65 -0
  184. data/test/cassettes/openstack/compute/v2/public/get_server_metadata_item/returns_the_correct_value_for_headers_.yml +65 -0
  185. data/test/cassettes/openstack/compute/v2/public/get_server_metadata_item/returns_the_correct_value_for_http_method_.yml +65 -0
  186. data/test/cassettes/openstack/compute/v2/public/get_server_metadata_item/returns_the_correct_value_for_url_.yml +65 -0
  187. data/test/cassettes/openstack/compute/v2/public/list_image_metadata/leads_to_a_valid_response_when_invalid_image_id_is_provided.yml +98 -0
  188. data/test/cassettes/openstack/compute/v2/public/list_image_metadata/leads_to_a_valid_response_when_valid_image_id_is_provided.yml +147 -0
  189. data/test/cassettes/openstack/compute/v2/public/list_image_metadata/returns_the_correct_value_for_body_.yml +65 -0
  190. data/test/cassettes/openstack/compute/v2/public/list_image_metadata/returns_the_correct_value_for_headers_.yml +65 -0
  191. data/test/cassettes/openstack/compute/v2/public/list_image_metadata/returns_the_correct_value_for_http_method_.yml +65 -0
  192. data/test/cassettes/openstack/compute/v2/public/list_image_metadata/returns_the_correct_value_for_url_.yml +65 -0
  193. data/test/cassettes/openstack/compute/v2/public/list_server_metadata/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +98 -0
  194. data/test/cassettes/openstack/compute/v2/public/list_server_metadata/leads_to_a_valid_response_when_valid_server_id_is_provided.yml +134 -0
  195. data/test/cassettes/openstack/compute/v2/public/list_server_metadata/returns_the_correct_value_for_body_.yml +65 -0
  196. data/test/cassettes/openstack/compute/v2/public/list_server_metadata/returns_the_correct_value_for_headers_.yml +65 -0
  197. data/test/cassettes/openstack/compute/v2/public/list_server_metadata/returns_the_correct_value_for_http_method_.yml +65 -0
  198. data/test/cassettes/openstack/compute/v2/public/list_server_metadata/returns_the_correct_value_for_url_.yml +65 -0
  199. data/test/cassettes/openstack/compute/v2/public/set_image_metadata/leads_to_a_valid_response_when_invalid_image_id_is_provided.yml +98 -0
  200. data/test/cassettes/openstack/compute/v2/public/set_image_metadata/leads_to_a_valid_response_when_valid_image_id_is_provided.yml +98 -0
  201. data/test/cassettes/openstack/compute/v2/public/set_image_metadata/returns_the_correct_value_for_body_.yml +65 -0
  202. data/test/cassettes/openstack/compute/v2/public/set_image_metadata/returns_the_correct_value_for_headers_.yml +65 -0
  203. data/test/cassettes/openstack/compute/v2/public/set_image_metadata/returns_the_correct_value_for_http_method_.yml +65 -0
  204. data/test/cassettes/openstack/compute/v2/public/set_image_metadata/returns_the_correct_value_for_url_.yml +65 -0
  205. data/test/cassettes/openstack/compute/v2/public/set_server_metadata/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +98 -0
  206. data/test/cassettes/openstack/compute/v2/public/set_server_metadata/leads_to_a_valid_response_when_valid_server_id_is_provided.yml +134 -0
  207. data/test/cassettes/openstack/compute/v2/public/set_server_metadata/returns_the_correct_value_for_body_.yml +65 -0
  208. data/test/cassettes/openstack/compute/v2/public/set_server_metadata/returns_the_correct_value_for_headers_.yml +65 -0
  209. data/test/cassettes/openstack/compute/v2/public/set_server_metadata/returns_the_correct_value_for_http_method_.yml +65 -0
  210. data/test/cassettes/openstack/compute/v2/public/set_server_metadata/returns_the_correct_value_for_url_.yml +65 -0
  211. data/test/cassettes/openstack/compute/v2/public/update_image_metadata/leads_to_a_valid_response_when_invalid_image_id_is_provided.yml +98 -0
  212. data/test/cassettes/openstack/compute/v2/public/update_image_metadata/leads_to_a_valid_response_when_valid_image_id_is_provided.yml +98 -0
  213. data/test/cassettes/openstack/compute/v2/public/update_image_metadata/returns_the_correct_value_for_body_.yml +65 -0
  214. data/test/cassettes/openstack/compute/v2/public/update_image_metadata/returns_the_correct_value_for_headers_.yml +65 -0
  215. data/test/cassettes/openstack/compute/v2/public/update_image_metadata/returns_the_correct_value_for_http_method_.yml +65 -0
  216. data/test/cassettes/openstack/compute/v2/public/update_image_metadata/returns_the_correct_value_for_url_.yml +65 -0
  217. data/test/cassettes/openstack/compute/v2/public/update_server_metadata/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +98 -0
  218. data/test/cassettes/openstack/compute/v2/public/update_server_metadata/leads_to_a_valid_response_when_valid_server_id_is_provided.yml +134 -0
  219. data/test/cassettes/openstack/compute/v2/public/update_server_metadata/returns_the_correct_value_for_body_.yml +65 -0
  220. data/test/cassettes/openstack/compute/v2/public/update_server_metadata/returns_the_correct_value_for_headers_.yml +65 -0
  221. data/test/cassettes/openstack/compute/v2/public/update_server_metadata/returns_the_correct_value_for_http_method_.yml +65 -0
  222. data/test/cassettes/openstack/compute/v2/public/update_server_metadata/returns_the_correct_value_for_url_.yml +65 -0
  223. data/test/cassettes/openstack/identity/v2/admin/get_tenant_by_id/leads_to_a_valid_response_when_a_valid_tenant_id_is_provided.yml +133 -0
  224. data/test/cassettes/openstack/identity/v2/admin/get_tenant_by_id/returns_the_correct_value_for_body_.yml +65 -0
  225. data/test/cassettes/openstack/identity/v2/admin/get_tenant_by_id/returns_the_correct_value_for_headers_.yml +65 -0
  226. data/test/cassettes/openstack/identity/v2/admin/get_tenant_by_id/returns_the_correct_value_for_http_method_.yml +65 -0
  227. data/test/cassettes/openstack/identity/v2/admin/get_tenant_by_id/returns_the_correct_value_for_url_.yml +65 -0
  228. data/test/cassettes/openstack/image/v1/public/list_public_images/leads_to_a_valid_response_when_filtering_with_matches.yml +99 -0
  229. data/test/cassettes/openstack/image/v1/public/list_public_images/leads_to_a_valid_response_when_filtering_with_no_matches.yml +97 -0
  230. data/test/cassettes/openstack/image/v1/public/list_public_images/leads_to_a_valid_response_when_no_parameters_are_provided.yml +99 -0
  231. data/test/cassettes/openstack/image/v1/public/list_public_images/returns_the_correct_value_for_body_.yml +64 -0
  232. data/test/cassettes/openstack/image/v1/public/list_public_images/returns_the_correct_value_for_headers_.yml +64 -0
  233. data/test/cassettes/openstack/image/v1/public/list_public_images/returns_the_correct_value_for_http_method_.yml +64 -0
  234. data/test/cassettes/openstack/volume/v1/public/list_volumes/leads_to_a_valid_response_when_all_tenants_param_is_true.yml +139 -0
  235. data/test/environment.yml.example +2 -2
  236. data/test/environment.yml.travis-ci +2 -2
  237. data/test/support/request_helper.rb +13 -13
  238. data/test/support/test_base_class.rb +13 -13
  239. data/test/support/test_environment.rb +33 -15
  240. data/test/support/test_reporter.rb +38 -30
  241. data/test/support/vcr_setup.rb +29 -11
  242. data/test/test_helper.rb +16 -6
  243. metadata +205 -42
  244. data/.ruby-gemset +0 -1
  245. data/.ruby-version +0 -1
@@ -7,22 +7,28 @@ module Aviator
7
7
  super("Authentication failed. The server returned #{ last_auth_body }")
8
8
  end
9
9
  end
10
-
11
-
10
+
11
+
12
12
  class EnvironmentNotDefinedError < ArgumentError
13
13
  def initialize(path, env)
14
14
  super("The environment '#{ env }' is not defined in #{ path }.")
15
15
  end
16
16
  end
17
17
 
18
+ class InitializationError < StandardError
19
+ def initialize
20
+ super("The session could not find :session_dump, :config_file, and " \
21
+ ":config in the constructor arguments provided")
22
+ end
23
+ end
18
24
 
19
25
  class InvalidConfigFilePathError < ArgumentError
20
26
  def initialize(path)
21
27
  super("The config file at #{ path } does not exist!")
22
28
  end
23
29
  end
24
-
25
-
30
+
31
+
26
32
  class NotAuthenticatedError < StandardError
27
33
  def initialize
28
34
  super("Session is not authenticated. Please authenticate before proceeding.")
@@ -38,21 +44,21 @@ module Aviator
38
44
 
39
45
 
40
46
  def initialize(opts={})
41
- config_path = opts[:config_file]
42
- environment = opts[:environment]
43
- session_dump = opts[:session_dump]
44
-
45
- if session_dump
46
- initialize_with_dump(session_dump)
47
+ if opts.has_key? :session_dump
48
+ initialize_with_dump(opts[:session_dump])
49
+ elsif opts.has_key? :config_file
50
+ initialize_with_config(opts[:config_file], opts[:environment])
51
+ elsif opts.has_key? :config
52
+ initialize_with_hash(opts[:config])
47
53
  else
48
- initialize_with_config(config_path, environment)
54
+ raise InitializationError.new
49
55
  end
50
-
56
+
51
57
  @log_file = opts[:log_file]
52
58
  end
53
-
54
-
55
- def authenticate(&block)
59
+
60
+
61
+ def authenticate(&block)
56
62
  block ||= lambda do |params|
57
63
  environment[:auth_credentials].each do |key, value|
58
64
  params[key] = value
@@ -60,7 +66,7 @@ module Aviator
60
66
  end
61
67
 
62
68
  response = auth_service.request environment[:auth_service][:request].to_sym, &block
63
-
69
+
64
70
  if response.status == 200
65
71
  @auth_info = response.body
66
72
  update_services_session_data
@@ -73,69 +79,71 @@ module Aviator
73
79
  def authenticated?
74
80
  !auth_info.nil?
75
81
  end
76
-
77
-
82
+
83
+
78
84
  def dump
79
85
  JSON.generate({
80
- environment: environment,
81
- auth_info: auth_info
86
+ :environment => environment,
87
+ :auth_info => auth_info
82
88
  })
83
89
  end
84
-
85
-
90
+
91
+
86
92
  def load(session_dump)
87
93
  initialize_with_dump(session_dump)
88
94
  update_services_session_data
89
95
  self
90
96
  end
91
-
92
-
97
+
98
+
93
99
  def method_missing(name, *args, &block)
94
100
  service_name_parts = name.to_s.match(/^(\w+)_service$/)
95
-
101
+
96
102
  if service_name_parts
97
103
  get_service_obj(service_name_parts[1])
98
104
  else
99
105
  super name, *args, &block
100
106
  end
101
107
  end
102
-
103
-
108
+
109
+
104
110
  def self.load(session_dump, opts={})
105
111
  opts[:session_dump] = session_dump
106
-
112
+
107
113
  new(opts)
108
114
  end
109
-
110
-
115
+
116
+
111
117
  def validate
112
118
  raise NotAuthenticatedError.new unless authenticated?
113
119
  raise ValidatorNotDefinedError.new unless environment[:auth_service][:validator]
114
-
115
- response = auth_service.request environment[:auth_service][:validator].to_sym, session_data: auth_info
116
-
120
+
121
+ auth_with_bootstrap = auth_info.merge({ :auth_service => environment[:auth_service] })
122
+
123
+ response = auth_service.request environment[:auth_service][:validator].to_sym, :session_data => auth_with_bootstrap
124
+
117
125
  response.status == 200 || response.status == 203
118
126
  end
119
-
120
-
127
+
128
+
121
129
  private
122
130
 
123
131
 
124
132
  def auth_info
125
133
  @auth_info
126
134
  end
127
-
128
-
135
+
136
+
129
137
  def auth_service
130
138
  @auth_service ||= Service.new(
131
- provider: environment[:provider],
132
- service: environment[:auth_service][:name],
133
- default_session_data: { auth_service: environment[:auth_service] },
134
- log_file: log_file
139
+ :provider => environment[:provider],
140
+ :service => environment[:auth_service][:name],
141
+ :default_session_data => { :auth_service => environment[:auth_service] },
142
+ :log_file => log_file
135
143
  )
136
144
  end
137
-
138
-
145
+
146
+
139
147
  def environment
140
148
  @environment
141
149
  end
@@ -143,16 +151,16 @@ module Aviator
143
151
 
144
152
  def get_service_obj(service_name)
145
153
  raise NotAuthenticatedError.new unless self.authenticated?
146
-
154
+
147
155
  @services ||= {}
148
-
156
+
149
157
  @services[service_name] ||= Service.new(
150
- provider: environment[:provider],
151
- service: service_name,
152
- default_session_data: auth_info,
153
- log_file: log_file
158
+ :provider => environment[:provider],
159
+ :service => service_name,
160
+ :default_session_data => auth_info,
161
+ :log_file => log_file
154
162
  )
155
-
163
+
156
164
  @services[service_name]
157
165
  end
158
166
 
@@ -160,35 +168,37 @@ module Aviator
160
168
  def initialize_with_config(config_path, environment)
161
169
  raise InvalidConfigFilePathError.new(config_path) unless Pathname.new(config_path).file?
162
170
 
163
- config = YAML.load_file(config_path).with_indifferent_access
164
-
171
+ config = Hashish.new(YAML.load_file(config_path))
165
172
 
166
173
  raise EnvironmentNotDefinedError.new(config_path, environment) unless config[environment]
167
174
 
168
175
  @environment = config[environment]
169
176
  end
170
-
171
-
177
+
178
+
172
179
  def initialize_with_dump(session_dump)
173
- session_info = JSON.parse(session_dump).with_indifferent_access
180
+ session_info = Hashish.new(JSON.parse(session_dump))
174
181
  @environment = session_info[:environment]
175
182
  @auth_info = session_info[:auth_info]
176
183
  end
177
-
178
-
184
+
185
+ def initialize_with_hash(hash_obj)
186
+ @environment = Hashish.new(hash_obj)
187
+ end
188
+
179
189
  def log_file
180
190
  @log_file
181
191
  end
182
-
183
-
192
+
193
+
184
194
  def update_services_session_data
185
195
  return unless @services
186
-
196
+
187
197
  @services.each do |name, obj|
188
198
  obj.default_session_data = auth_info
189
199
  end
190
200
  end
191
-
201
+
192
202
  end
193
203
 
194
204
  end
data/lib/aviator/core.rb CHANGED
@@ -1,12 +1,14 @@
1
1
  require 'yaml'
2
2
  require 'json'
3
3
  require 'active_support/inflector'
4
- require 'active_support/core_ext/hash/indifferent_access'
5
4
  require 'faraday'
6
5
 
7
6
  require "aviator/version"
7
+ require "aviator/compatibility"
8
+ require "aviator/hashish"
8
9
  require "aviator/core/request"
9
10
  require "aviator/core/request_builder"
10
11
  require "aviator/core/response"
11
12
  require "aviator/core/service"
12
13
  require "aviator/core/session"
14
+ require "aviator/core/logger"
@@ -0,0 +1,111 @@
1
+ # Hash-ish!
2
+ #
3
+ # This class is implemented using composition rather than inheritance so
4
+ # that we have control over what operations it exposes to peers.
5
+ class Hashish
6
+ include Enumerable
7
+
8
+ def initialize(hash={})
9
+ @hash = hash
10
+ hashishify_values
11
+ end
12
+
13
+ def ==(other_obj)
14
+ other_obj.class == self.class &&
15
+ other_obj.hash == self.hash
16
+ end
17
+
18
+ def [](key)
19
+ @hash[normalize(key)]
20
+ end
21
+
22
+ def []=(key, value)
23
+ @hash[normalize(key)] = value
24
+ end
25
+
26
+ def each(&block)
27
+ @hash.each(&block)
28
+ end
29
+
30
+ def empty?
31
+ @hash.empty?
32
+ end
33
+
34
+ def has_key?(name)
35
+ @hash.has_key? normalize(name)
36
+ end
37
+
38
+ def hash
39
+ @hash
40
+ end
41
+
42
+ def keys
43
+ @hash.keys
44
+ end
45
+
46
+ def length
47
+ @hash.length
48
+ end
49
+
50
+ def merge(other_hash)
51
+ Hashish.new(@hash.merge(other_hash))
52
+ end
53
+
54
+ def merge!(other_hash)
55
+ @hash.merge! other_hash
56
+ self
57
+ end
58
+
59
+ def to_json(obj)
60
+ @hash.to_json(obj)
61
+ end
62
+
63
+ def to_s
64
+ str = "{"
65
+ @hash.each do |key, value|
66
+ if value.kind_of? String
67
+ value = "'#{value}'"
68
+ elsif value.nil?
69
+ value = "nil"
70
+ elsif value.kind_of? Array
71
+ value = "[#{value.join(", ")}]"
72
+ end
73
+
74
+ str += " #{key}: #{value},"
75
+ end
76
+
77
+ str = str[0...-1] + " }"
78
+ str
79
+ end
80
+
81
+ private
82
+
83
+ # Hashishify all the things!
84
+ def hashishify_values
85
+ @hash.each do |key, value|
86
+ if @hash[key].kind_of? Hash
87
+ @hash[key] = Hashish.new(value)
88
+ elsif @hash[key].kind_of? Array
89
+ @hash[key].each_index do |index|
90
+ element = @hash[key][index]
91
+ if element.kind_of? Hash
92
+ @hash[key][index] = Hashish.new(element)
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ def normalize(key)
100
+ if @hash.has_key? key
101
+ key
102
+ elsif key.is_a? String
103
+ key.to_sym
104
+ elsif key.is_a? Symbol
105
+ key.to_s
106
+ else
107
+ key
108
+ end
109
+ end
110
+
111
+ end
@@ -1,6 +1,6 @@
1
1
  module Aviator
2
2
 
3
- define_request :base, inherit: [:openstack, :common, :v2, :public, :base] do
3
+ define_request :base, :inherit => [:openstack, :common, :v2, :public, :base] do
4
4
 
5
5
  meta :endpoint_type, :admin
6
6
 
@@ -20,10 +20,14 @@ module Aviator
20
20
  def base_url
21
21
  if session_data[:base_url]
22
22
  session_data[:base_url]
23
- else
24
- service_spec = session_data[:access][:serviceCatalog].find { |s| s[:type] == service.to_s }
25
- raise Aviator::Service::MissingServiceEndpointError.new(service.to_s, self.class) unless service_spec
23
+ elsif service_spec = session_data[:access][:serviceCatalog].find { |s| s[:type] == service.to_s }
26
24
  service_spec[:endpoints][0]["#{ endpoint_type }URL".to_sym]
25
+ elsif session_data[:auth_service] && session_data[:auth_service][:host_uri] && session_data[:auth_service][:api_version]
26
+ "#{ session_data[:auth_service][:host_uri] }/v2.0"
27
+ elsif session_data[:auth_service] && session_data[:auth_service][:host_uri]
28
+ session_data[:auth_service][:host_uri]
29
+ else
30
+ raise Aviator::Service::MissingServiceEndpointError.new(service.to_s, self.class)
27
31
  end
28
32
  end
29
33
 
@@ -1,18 +1,18 @@
1
1
  module Aviator
2
2
 
3
- define_request :confirm_server_resize, inherit: [:openstack, :common, :v2, :admin, :base] do
3
+ define_request :confirm_server_resize, :inherit => [:openstack, :common, :v2, :admin, :base] do
4
4
 
5
5
  meta :service, :compute
6
6
 
7
7
  link 'documentation',
8
8
  'http://docs.openstack.org/api/openstack-compute/2/content/Confirm_Resized_Server-d1e3868.html'
9
9
 
10
- param :id, required: true
10
+ param :id, :required => true
11
11
 
12
12
 
13
13
  def body
14
14
  {
15
- confirmResize: nil
15
+ :confirmResize => nil
16
16
  }
17
17
  end
18
18
 
@@ -1,6 +1,6 @@
1
1
  module Aviator
2
2
 
3
- define_request :create_network, inherit: [:openstack, :common, :v2, :admin, :base] do
3
+ define_request :create_network, :inherit => [:openstack, :common, :v2, :admin, :base] do
4
4
 
5
5
  meta :service, :compute
6
6
 
@@ -8,24 +8,24 @@ module Aviator
8
8
  'http://api.openstack.org/api-ref-compute.html#ext-os-networks'
9
9
 
10
10
 
11
- param :label, required: true
12
- param :bridge, required: false
13
- param :bridge_interface, required: false
14
- param :cidr, required: false
15
- param :cidr_v6, required: false
16
- param :dns1, required: false
17
- param :dns2, required: false
18
- param :gateway, required: false
19
- param :gateway_v6, required: false
20
- param :multi_host, required: false
21
- param :project_id, required: false
22
- param :vlan, required: false
11
+ param :label, :required => true
12
+ param :bridge, :required => false
13
+ param :bridge_interface, :required => false
14
+ param :cidr, :required => false
15
+ param :cidr_v6, :required => false
16
+ param :dns1, :required => false
17
+ param :dns2, :required => false
18
+ param :gateway, :required => false
19
+ param :gateway_v6, :required => false
20
+ param :multi_host, :required => false
21
+ param :project_id, :required => false
22
+ param :vlan, :required => false
23
23
 
24
24
 
25
25
  def body
26
26
  p = {
27
- network: {
28
- label: params[:label]
27
+ :network => {
28
+ :label => params[:label]
29
29
  }
30
30
  }
31
31
 
@@ -1,13 +1,13 @@
1
1
  module Aviator
2
2
 
3
- define_request :get_host_details, inherit: [:openstack, :common, :v2, :admin, :base] do
3
+ define_request :get_host_details, :inherit => [:openstack, :common, :v2, :admin, :base] do
4
4
 
5
5
  meta :service, :compute
6
6
 
7
7
  link 'documentation',
8
8
  'http://api.openstack.org/api-ref.html#ext-os-hosts'
9
9
 
10
- param :host_name, required: true
10
+ param :host_name, :required => true
11
11
 
12
12
 
13
13
  def headers
@@ -1,6 +1,6 @@
1
1
  module Aviator
2
2
 
3
- define_request :list_hosts, inherit: [:openstack, :common, :v2, :admin, :base] do
3
+ define_request :list_hosts, :inherit => [:openstack, :common, :v2, :admin, :base] do
4
4
 
5
5
  meta :service, :compute
6
6
 
@@ -10,8 +10,8 @@ module Aviator
10
10
  link 'documentation bug',
11
11
  'https://bugs.launchpad.net/nova/+bug/1224763'
12
12
 
13
- param :service, required: false
14
- param :zone, required: false
13
+ param :service, :required => false
14
+ param :zone, :required => false
15
15
 
16
16
 
17
17
  def headers
@@ -1,17 +1,17 @@
1
1
  module Aviator
2
2
 
3
- define_request :lock_server, inherit: [:openstack, :common, :v2, :admin, :base] do
3
+ define_request :lock_server, :inherit => [:openstack, :common, :v2, :admin, :base] do
4
4
 
5
5
  meta :service, :compute
6
6
 
7
7
  link 'documentation',
8
8
  'http://docs.openstack.org/api/openstack-compute/2/content/POST_lock_v2__tenant_id__servers__server_id__action_ext-os-admin-actions.html'
9
9
 
10
- param :id, required: true
10
+ param :id, :required => true
11
11
 
12
12
 
13
13
  def body
14
- { lock: nil }
14
+ { :lock => nil }
15
15
  end
16
16
 
17
17
 
@@ -1,17 +1,17 @@
1
1
  module Aviator
2
2
 
3
- define_request :migrate_server, inherit: [:openstack, :common, :v2, :admin, :base] do
3
+ define_request :migrate_server, :inherit => [:openstack, :common, :v2, :admin, :base] do
4
4
 
5
5
  meta :service, :compute
6
6
 
7
7
  link 'documentation',
8
8
  'http://docs.openstack.org/api/openstack-compute/2/content/POST_migrate_v2__tenant_id__servers__server_id__action_ext-os-admin-actions.html'
9
9
 
10
- param :id, required: true
10
+ param :id, :required => true
11
11
 
12
12
 
13
13
  def body
14
- { migrate: nil }
14
+ { :migrate => nil }
15
15
  end
16
16
 
17
17
 
@@ -1,14 +1,14 @@
1
1
  module Aviator
2
2
 
3
- define_request :reset_server, inherit: [:openstack, :common, :v2, :admin, :base] do
3
+ define_request :reset_server, :inherit => [:openstack, :common, :v2, :admin, :base] do
4
4
 
5
5
  meta :service, :compute
6
6
 
7
7
  link 'documentation',
8
8
  'http://docs.openstack.org/api/openstack-compute/2/content/POST_os-resetState_v2__tenant_id__servers__server_id__action_ext-os-admin-actions.html'
9
9
 
10
- param :id, required: true
11
- param :state, required: true
10
+ param :id, :required => true
11
+ param :state, :required => true
12
12
 
13
13
 
14
14
  def body
@@ -1,22 +1,22 @@
1
1
  module Aviator
2
2
 
3
- define_request :resize_server, inherit: [:openstack, :common, :v2, :admin, :base] do
3
+ define_request :resize_server, :inherit => [:openstack, :common, :v2, :admin, :base] do
4
4
 
5
5
  meta :service, :compute
6
6
 
7
7
  link 'documentation',
8
8
  'http://docs.openstack.org/api/openstack-compute/2/content/Resize_Server-d1e3707.html'
9
9
 
10
- param :id, required: true
11
- param :name, required: true
12
- param :flavorRef, required: true, alias: :flavor_ref
10
+ param :id, :required => true
11
+ param :name, :required => true
12
+ param :flavorRef, :required => true, :alias => :flavor_ref
13
13
 
14
14
 
15
15
  def body
16
16
  {
17
- resize: {
18
- name: params[:name],
19
- flavorRef: params[:flavorRef]
17
+ :resize => {
18
+ :name => params[:name],
19
+ :flavorRef => params[:flavorRef]
20
20
  }
21
21
  }
22
22
  end
@@ -10,12 +10,12 @@ module Aviator
10
10
  link 'documentation',
11
11
  'http://docs.openstack.org/api/openstack-compute/2/content/Revert_Resized_Server-d1e4024.html'
12
12
 
13
- param :id, required: true
13
+ param :id, :required => true
14
14
 
15
15
 
16
16
  def body
17
17
  {
18
- revertResize: nil
18
+ :revertResize => nil
19
19
  }
20
20
  end
21
21
 
@@ -1,17 +1,17 @@
1
1
  module Aviator
2
2
 
3
- define_request :unlock_server, inherit: [:openstack, :common, :v2, :admin, :base] do
3
+ define_request :unlock_server, :inherit => [:openstack, :common, :v2, :admin, :base] do
4
4
 
5
5
  meta :service, :compute
6
6
 
7
7
  link 'documentation',
8
8
  'http://docs.openstack.org/api/openstack-compute/2/content/POST_unlock_v2__tenant_id__servers__server_id__action_ext-os-admin-actions.html'
9
9
 
10
- param :id, required: true
10
+ param :id, :required => true
11
11
 
12
12
 
13
13
  def body
14
- { unlock: nil }
14
+ { :unlock => nil }
15
15
  end
16
16
 
17
17
 
@@ -1,6 +1,6 @@
1
1
  module Aviator
2
2
 
3
- define_request :change_admin_password, inherit: [:openstack, :common, :v2, :public, :base] do
3
+ define_request :change_admin_password, :inherit => [:openstack, :common, :v2, :public, :base] do
4
4
 
5
5
  meta :service, :compute
6
6
 
@@ -10,14 +10,14 @@ module Aviator
10
10
  link 'additional spec',
11
11
  'https://answers.launchpad.net/nova/+question/228462'
12
12
 
13
- param :adminPass, required: true, alias: :admin_pass
14
- param :id, required: true
13
+ param :adminPass, :required => true, :alias => :admin_pass
14
+ param :id, :required => true
15
15
 
16
16
 
17
17
  def body
18
18
  p = {
19
- changePassword: {
20
- adminPass: params[:adminPass]
19
+ :changePassword => {
20
+ :adminPass => params[:adminPass]
21
21
  }
22
22
  }
23
23