fog 1.34.0 → 1.35.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 (350) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +10 -24
  3. data/CHANGELOG.md +84 -0
  4. data/CONTRIBUTING.md +1 -1
  5. data/README.md +4 -20
  6. data/fog.gemspec +7 -5
  7. data/lib/fog.rb +1 -0
  8. data/lib/fog/bin.rb +1 -0
  9. data/lib/fog/digitalocean/compute_v2.rb +108 -0
  10. data/lib/fog/digitalocean/models/compute_v2/flavor.rb +17 -0
  11. data/lib/fog/digitalocean/models/compute_v2/flavors.rb +21 -0
  12. data/lib/fog/digitalocean/models/compute_v2/image.rb +25 -0
  13. data/lib/fog/digitalocean/models/compute_v2/images.rb +36 -0
  14. data/lib/fog/digitalocean/models/compute_v2/region.rb +13 -0
  15. data/lib/fog/digitalocean/models/compute_v2/regions.rb +21 -0
  16. data/lib/fog/digitalocean/models/compute_v2/server.rb +166 -0
  17. data/lib/fog/digitalocean/models/compute_v2/servers.rb +39 -0
  18. data/lib/fog/digitalocean/models/compute_v2/ssh_key.rb +30 -0
  19. data/lib/fog/digitalocean/models/compute_v2/ssh_keys.rb +35 -0
  20. data/lib/fog/digitalocean/requests/compute_v2/change_kernel.rb +44 -0
  21. data/lib/fog/digitalocean/requests/compute_v2/convert_to_snapshot.rb +44 -0
  22. data/lib/fog/digitalocean/requests/compute_v2/create_server.rb +93 -0
  23. data/lib/fog/digitalocean/requests/compute_v2/create_ssh_key.rb +47 -0
  24. data/lib/fog/digitalocean/requests/compute_v2/delete_server.rb +28 -0
  25. data/lib/fog/digitalocean/requests/compute_v2/delete_ssh_key.rb +28 -0
  26. data/lib/fog/digitalocean/requests/compute_v2/disable_backups.rb +45 -0
  27. data/lib/fog/digitalocean/requests/compute_v2/enable_ipv6.rb +44 -0
  28. data/lib/fog/digitalocean/requests/compute_v2/enable_private_networking.rb +44 -0
  29. data/lib/fog/digitalocean/requests/compute_v2/get_droplet_action.rb +36 -0
  30. data/lib/fog/digitalocean/requests/compute_v2/get_image_details.rb +43 -0
  31. data/lib/fog/digitalocean/requests/compute_v2/get_server_details.rb +84 -0
  32. data/lib/fog/digitalocean/requests/compute_v2/get_ssh_key.rb +34 -0
  33. data/lib/fog/digitalocean/requests/compute_v2/list_droplet_actions.rb +38 -0
  34. data/lib/fog/digitalocean/requests/compute_v2/list_flavors.rb +131 -0
  35. data/lib/fog/digitalocean/requests/compute_v2/list_images.rb +50 -0
  36. data/lib/fog/digitalocean/requests/compute_v2/list_regions.rb +94 -0
  37. data/lib/fog/digitalocean/requests/compute_v2/list_servers.rb +28 -0
  38. data/lib/fog/digitalocean/requests/compute_v2/list_ssh_keys.rb +26 -0
  39. data/lib/fog/digitalocean/requests/compute_v2/password_reset.rb +44 -0
  40. data/lib/fog/digitalocean/requests/compute_v2/power_cycle.rb +44 -0
  41. data/lib/fog/digitalocean/requests/compute_v2/power_off.rb +44 -0
  42. data/lib/fog/digitalocean/requests/compute_v2/power_on.rb +44 -0
  43. data/lib/fog/digitalocean/requests/compute_v2/reboot_server.rb +44 -0
  44. data/lib/fog/digitalocean/requests/compute_v2/rebuild.rb +44 -0
  45. data/lib/fog/digitalocean/requests/compute_v2/rename.rb +44 -0
  46. data/lib/fog/digitalocean/requests/compute_v2/resize.rb +48 -0
  47. data/lib/fog/digitalocean/requests/compute_v2/restore.rb +44 -0
  48. data/lib/fog/digitalocean/requests/compute_v2/shutdown.rb +44 -0
  49. data/lib/fog/digitalocean/requests/compute_v2/snapshot.rb +44 -0
  50. data/lib/fog/digitalocean/requests/compute_v2/transfer_image.rb +44 -0
  51. data/lib/fog/digitalocean/requests/compute_v2/update_ssh_key.rb +46 -0
  52. data/lib/fog/digitalocean/requests/compute_v2/upgrade.rb +44 -0
  53. data/lib/fog/digitalocean/service.rb +51 -0
  54. data/lib/fog/linode/models/compute/kernels.rb +1 -1
  55. data/lib/fog/opennebula/models/compute/flavor.rb +13 -13
  56. data/lib/fog/opennebula/requests/compute/template_pool.rb +14 -11
  57. data/lib/fog/openstack.rb +2 -0
  58. data/lib/fog/openstack/core.rb +30 -3
  59. data/lib/fog/openstack/identity.rb +8 -7
  60. data/lib/fog/openstack/identity_v3.rb +1 -0
  61. data/lib/fog/openstack/image.rb +35 -130
  62. data/lib/fog/openstack/image_v1.rb +142 -0
  63. data/lib/fog/openstack/image_v2.rb +137 -0
  64. data/lib/fog/openstack/models/image_v1/image.rb +78 -0
  65. data/lib/fog/openstack/models/image_v1/images.rb +70 -0
  66. data/lib/fog/openstack/models/image_v2/image.rb +149 -0
  67. data/lib/fog/openstack/models/image_v2/images.rb +67 -0
  68. data/lib/fog/openstack/models/orchestration/stack.rb +5 -0
  69. data/lib/fog/openstack/models/volume/volume_type.rb +25 -0
  70. data/lib/fog/openstack/orchestration.rb +1 -0
  71. data/lib/fog/openstack/requests/compute/server_actions.rb +14 -3
  72. data/lib/fog/openstack/requests/{image → image_v1}/add_member_to_image.rb +2 -0
  73. data/lib/fog/openstack/requests/image_v1/create_image.rb +78 -0
  74. data/lib/fog/openstack/requests/image_v1/delete_image.rb +25 -0
  75. data/lib/fog/openstack/requests/image_v1/get_image.rb +47 -0
  76. data/lib/fog/openstack/requests/image_v1/get_image_by_id.rb +34 -0
  77. data/lib/fog/openstack/requests/image_v1/get_image_members.rb +31 -0
  78. data/lib/fog/openstack/requests/image_v1/get_shared_images.rb +31 -0
  79. data/lib/fog/openstack/requests/image_v1/list_public_images.rb +35 -0
  80. data/lib/fog/openstack/requests/image_v1/list_public_images_detailed.rb +37 -0
  81. data/lib/fog/openstack/requests/image_v1/remove_member_from_image.rb +25 -0
  82. data/lib/fog/openstack/requests/image_v1/set_tenant.rb +21 -0
  83. data/lib/fog/openstack/requests/image_v1/update_image.rb +66 -0
  84. data/lib/fog/openstack/requests/image_v1/update_image_members.rb +39 -0
  85. data/lib/fog/openstack/requests/image_v2/add_member_to_image.rb +26 -0
  86. data/lib/fog/openstack/requests/image_v2/add_tag_to_image.rb +25 -0
  87. data/lib/fog/openstack/requests/image_v2/create_image.rb +54 -0
  88. data/lib/fog/openstack/requests/image_v2/deactivate_image.rb +25 -0
  89. data/lib/fog/openstack/requests/image_v2/delete_image.rb +25 -0
  90. data/lib/fog/openstack/requests/image_v2/download_image.rb +29 -0
  91. data/lib/fog/openstack/requests/image_v2/get_image.rb +47 -0
  92. data/lib/fog/openstack/requests/image_v2/get_image_by_id.rb +34 -0
  93. data/lib/fog/openstack/requests/image_v2/get_image_members.rb +31 -0
  94. data/lib/fog/openstack/requests/image_v2/get_member_details.rb +33 -0
  95. data/lib/fog/openstack/requests/image_v2/get_shared_images.rb +31 -0
  96. data/lib/fog/openstack/requests/image_v2/list_images.rb +35 -0
  97. data/lib/fog/openstack/requests/image_v2/reactivate_image.rb +25 -0
  98. data/lib/fog/openstack/requests/image_v2/remove_member_from_image.rb +25 -0
  99. data/lib/fog/openstack/requests/image_v2/remove_tag_from_image.rb +25 -0
  100. data/lib/fog/openstack/requests/image_v2/set_tenant.rb +21 -0
  101. data/lib/fog/openstack/requests/image_v2/update_image.rb +49 -0
  102. data/lib/fog/openstack/requests/image_v2/update_image_member.rb +34 -0
  103. data/lib/fog/openstack/requests/image_v2/upload_image.rb +30 -0
  104. data/lib/fog/openstack/requests/orchestration/patch_stack.rb +37 -0
  105. data/lib/fog/openstack/requests/volume/create_volume_type.rb +41 -0
  106. data/lib/fog/openstack/requests/{image/delete_image.rb → volume/delete_volume_type.rb} +6 -6
  107. data/lib/fog/openstack/requests/volume/get_quota_usage.rb +44 -0
  108. data/lib/fog/openstack/requests/volume/get_volume_type_details.rb +1 -1
  109. data/lib/fog/openstack/requests/volume/update_volume_type.rb +41 -0
  110. data/lib/fog/openstack/volume.rb +5 -0
  111. data/lib/fog/rackspace/models/compute_v2/server.rb +11 -1
  112. data/lib/fog/rackspace/models/compute_v2/servers.rb +2 -2
  113. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +7 -2
  114. data/lib/fog/vcloud_director/requests/compute/get_execute_query.rb +13 -10
  115. data/lib/fog/version.rb +1 -1
  116. data/lib/fog/vsphere/models/compute/server.rb +1 -1
  117. data/lib/tasks/changelog_task.rb +1 -0
  118. data/spec/fog/openstack/identity_v3/authv3_a.yml +45 -52
  119. data/spec/fog/openstack/identity_v3/authv3_b.yml +45 -52
  120. data/spec/fog/openstack/identity_v3/authv3_c.yml +95 -101
  121. data/spec/fog/openstack/identity_v3/authv3_project.yml +68 -75
  122. data/spec/fog/openstack/identity_v3/authv3_token.yml +212 -174
  123. data/spec/fog/openstack/identity_v3/authv3_unscoped.yml +278 -266
  124. data/spec/fog/openstack/identity_v3/authv3_unscoped_reauth.yml +190 -202
  125. data/spec/fog/openstack/identity_v3/common_setup.yml +67 -445
  126. data/spec/fog/openstack/identity_v3/idv3_credential.yml +56 -26
  127. data/spec/fog/openstack/identity_v3/idv3_credential_crud.yml +292 -152
  128. data/spec/fog/openstack/identity_v3/idv3_domain.yml +99 -49
  129. data/spec/fog/openstack/identity_v3/idv3_domain_crud.yml +239 -119
  130. data/spec/fog/openstack/identity_v3/idv3_domain_group_roles_mutation.yml +414 -205
  131. data/spec/fog/openstack/identity_v3/idv3_domain_roles_mutation.yml +259 -136
  132. data/spec/fog/openstack/identity_v3/idv3_endpoint.yml +474 -472
  133. data/spec/fog/openstack/identity_v3/idv3_endpoints_crud.yml +679 -626
  134. data/spec/fog/openstack/identity_v3/idv3_group_crud_mutation.yml +536 -269
  135. data/spec/fog/openstack/identity_v3/idv3_policy.yml +76 -36
  136. data/spec/fog/openstack/identity_v3/idv3_policy_crud.yml +197 -97
  137. data/spec/fog/openstack/identity_v3/idv3_project.yml +135 -85
  138. data/spec/fog/openstack/identity_v3/idv3_project_crud.yml +237 -127
  139. data/spec/fog/openstack/identity_v3/idv3_project_group_user_roles_mutation.yml +625 -295
  140. data/spec/fog/openstack/identity_v3/idv3_project_hier_crud_list.yml +716 -355
  141. data/spec/fog/openstack/identity_v3/idv3_role.yml +134 -88
  142. data/spec/fog/openstack/identity_v3/idv3_role_crud.yml +312 -118
  143. data/spec/fog/openstack/identity_v3/idv3_service.yml +179 -133
  144. data/spec/fog/openstack/identity_v3/idv3_services_crud.yml +306 -212
  145. data/spec/fog/openstack/identity_v3/idv3_token.yml +213 -177
  146. data/spec/fog/openstack/identity_v3/idv3_user_crud.yml +345 -188
  147. data/spec/fog/openstack/identity_v3/idv3_users.yml +182 -116
  148. data/spec/fog/openstack/identity_v3_spec.rb +103 -85
  149. data/spec/fog/openstack/{identity_v3/idv3_other_region.yml → image_v1/common_setup.yml} +50 -93
  150. data/spec/fog/openstack/image_v1/list_images.yml +54 -0
  151. data/spec/fog/openstack/image_v1_spec.rb +24 -0
  152. data/spec/fog/openstack/image_v2/common_setup.yml +144 -0
  153. data/spec/fog/openstack/image_v2/image_schema.json +190 -0
  154. data/spec/fog/openstack/image_v2/image_v2_activation.yml +3988 -0
  155. data/spec/fog/openstack/image_v2/image_v2_create_id.yml +291 -0
  156. data/spec/fog/openstack/image_v2/image_v2_crud.yml +437 -0
  157. data/spec/fog/openstack/image_v2/image_v2_member_crudl.yml +451 -0
  158. data/spec/fog/openstack/image_v2/image_v2_tags.yml +532 -0
  159. data/spec/fog/openstack/image_v2/image_v2_upload_download.yml +3966 -0
  160. data/spec/fog/openstack/image_v2/minimal.ova +0 -0
  161. data/spec/fog/openstack/image_v2_spec.rb +285 -0
  162. data/spec/fog/openstack/image_v2_upload_spec.rb +74 -0
  163. data/spec/fog/openstack/shared_context.rb +14 -10
  164. data/tests/compute/helper.rb +0 -3
  165. data/tests/digitalocean/requests/compute_v2/list_flavors_tests.rb +25 -0
  166. data/tests/digitalocean/requests/compute_v2/list_images_tests.rb +25 -0
  167. data/tests/digitalocean/requests/compute_v2/list_regions_tests.rb +21 -0
  168. data/tests/digitalocean/requests/compute_v2/server_tests.rb +77 -0
  169. data/tests/helpers/mock_helper.rb +1 -0
  170. data/tests/opennebula/models/compute/flavor_tests.rb +1 -1
  171. data/tests/openstack/requests/orchestration/stack_tests.rb +5 -1
  172. data/tests/openstack/requests/volume/volume_type_tests.rb +32 -0
  173. data/tests/rackspace/models/compute_v2/server_tests.rb +7 -7
  174. metadata +160 -236
  175. data/gemfiles/Gemfile-ruby-1.8.7 +0 -17
  176. data/lib/fog/bin/xenserver.rb +0 -29
  177. data/lib/fog/openstack/models/image/image.rb +0 -76
  178. data/lib/fog/openstack/models/image/images.rb +0 -67
  179. data/lib/fog/openstack/requests/image/create_image.rb +0 -76
  180. data/lib/fog/openstack/requests/image/get_image.rb +0 -45
  181. data/lib/fog/openstack/requests/image/get_image_by_id.rb +0 -32
  182. data/lib/fog/openstack/requests/image/get_image_members.rb +0 -29
  183. data/lib/fog/openstack/requests/image/get_shared_images.rb +0 -29
  184. data/lib/fog/openstack/requests/image/list_public_images.rb +0 -33
  185. data/lib/fog/openstack/requests/image/list_public_images_detailed.rb +0 -35
  186. data/lib/fog/openstack/requests/image/remove_member_from_image.rb +0 -23
  187. data/lib/fog/openstack/requests/image/set_tenant.rb +0 -19
  188. data/lib/fog/openstack/requests/image/update_image.rb +0 -64
  189. data/lib/fog/openstack/requests/image/update_image_members.rb +0 -37
  190. data/lib/fog/xenserver.rb +0 -1
  191. data/lib/fog/xenserver/CHANGELOG.md +0 -77
  192. data/lib/fog/xenserver/compute.rb +0 -186
  193. data/lib/fog/xenserver/core.rb +0 -94
  194. data/lib/fog/xenserver/examples/README.md +0 -11
  195. data/lib/fog/xenserver/examples/chage_default_storage_repository.md +0 -99
  196. data/lib/fog/xenserver/examples/creating_servers.md +0 -168
  197. data/lib/fog/xenserver/examples/getting_started.md +0 -163
  198. data/lib/fog/xenserver/examples/networks-and-vlans.rb +0 -44
  199. data/lib/fog/xenserver/examples/storage_repositories.md +0 -94
  200. data/lib/fog/xenserver/models/compute/blob.rb +0 -22
  201. data/lib/fog/xenserver/models/compute/blobs.rb +0 -25
  202. data/lib/fog/xenserver/models/compute/bond.rb +0 -23
  203. data/lib/fog/xenserver/models/compute/bonds.rb +0 -25
  204. data/lib/fog/xenserver/models/compute/console.rb +0 -29
  205. data/lib/fog/xenserver/models/compute/consoles.rb +0 -25
  206. data/lib/fog/xenserver/models/compute/crash_dump.rb +0 -19
  207. data/lib/fog/xenserver/models/compute/crash_dumps.rb +0 -25
  208. data/lib/fog/xenserver/models/compute/dr_task.rb +0 -17
  209. data/lib/fog/xenserver/models/compute/dr_tasks.rb +0 -25
  210. data/lib/fog/xenserver/models/compute/gpu_group.rb +0 -22
  211. data/lib/fog/xenserver/models/compute/gpu_groups.rb +0 -25
  212. data/lib/fog/xenserver/models/compute/guest_metrics.rb +0 -26
  213. data/lib/fog/xenserver/models/compute/host.rb +0 -156
  214. data/lib/fog/xenserver/models/compute/host_cpu.rb +0 -34
  215. data/lib/fog/xenserver/models/compute/host_crash_dump.rb +0 -20
  216. data/lib/fog/xenserver/models/compute/host_crash_dumps.rb +0 -25
  217. data/lib/fog/xenserver/models/compute/host_metrics.rb +0 -26
  218. data/lib/fog/xenserver/models/compute/host_patch.rb +0 -25
  219. data/lib/fog/xenserver/models/compute/host_patchs.rb +0 -25
  220. data/lib/fog/xenserver/models/compute/hosts.rb +0 -25
  221. data/lib/fog/xenserver/models/compute/network.rb +0 -93
  222. data/lib/fog/xenserver/models/compute/networks.rb +0 -29
  223. data/lib/fog/xenserver/models/compute/pbd.rb +0 -37
  224. data/lib/fog/xenserver/models/compute/pbds.rb +0 -29
  225. data/lib/fog/xenserver/models/compute/pci.rb +0 -22
  226. data/lib/fog/xenserver/models/compute/pcis.rb +0 -25
  227. data/lib/fog/xenserver/models/compute/pgpu.rb +0 -20
  228. data/lib/fog/xenserver/models/compute/pgpus.rb +0 -25
  229. data/lib/fog/xenserver/models/compute/pif.rb +0 -54
  230. data/lib/fog/xenserver/models/compute/pif_metrics.rb +0 -28
  231. data/lib/fog/xenserver/models/compute/pifs.rb +0 -29
  232. data/lib/fog/xenserver/models/compute/pifs_metrics.rb +0 -25
  233. data/lib/fog/xenserver/models/compute/pool.rb +0 -75
  234. data/lib/fog/xenserver/models/compute/pool_patch.rb +0 -24
  235. data/lib/fog/xenserver/models/compute/pool_patchs.rb +0 -25
  236. data/lib/fog/xenserver/models/compute/pools.rb +0 -29
  237. data/lib/fog/xenserver/models/compute/role.rb +0 -19
  238. data/lib/fog/xenserver/models/compute/roles.rb +0 -25
  239. data/lib/fog/xenserver/models/compute/server.rb +0 -251
  240. data/lib/fog/xenserver/models/compute/server_appliance.rb +0 -21
  241. data/lib/fog/xenserver/models/compute/server_appliances.rb +0 -25
  242. data/lib/fog/xenserver/models/compute/servers.rb +0 -64
  243. data/lib/fog/xenserver/models/compute/storage_manager.rb +0 -28
  244. data/lib/fog/xenserver/models/compute/storage_managers.rb +0 -25
  245. data/lib/fog/xenserver/models/compute/storage_repositories.rb +0 -27
  246. data/lib/fog/xenserver/models/compute/storage_repository.rb +0 -90
  247. data/lib/fog/xenserver/models/compute/tunnel.rb +0 -20
  248. data/lib/fog/xenserver/models/compute/tunnels.rb +0 -25
  249. data/lib/fog/xenserver/models/compute/vbd.rb +0 -88
  250. data/lib/fog/xenserver/models/compute/vbd_metrics.rb +0 -25
  251. data/lib/fog/xenserver/models/compute/vbds.rb +0 -29
  252. data/lib/fog/xenserver/models/compute/vdi.rb +0 -102
  253. data/lib/fog/xenserver/models/compute/vdis.rb +0 -25
  254. data/lib/fog/xenserver/models/compute/vif.rb +0 -56
  255. data/lib/fog/xenserver/models/compute/vifs.rb +0 -25
  256. data/lib/fog/xenserver/models/compute/vlan.rb +0 -78
  257. data/lib/fog/xenserver/models/compute/vlans.rb +0 -35
  258. data/lib/fog/xenserver/models/compute/vmpp.rb +0 -35
  259. data/lib/fog/xenserver/models/compute/vmpps.rb +0 -25
  260. data/lib/fog/xenserver/models/compute/vtpm.rb +0 -18
  261. data/lib/fog/xenserver/models/compute/vtpms.rb +0 -25
  262. data/lib/fog/xenserver/parser.rb +0 -34
  263. data/lib/fog/xenserver/parsers/get_hosts.rb +0 -16
  264. data/lib/fog/xenserver/parsers/get_networks.rb +0 -16
  265. data/lib/fog/xenserver/parsers/get_pools.rb +0 -16
  266. data/lib/fog/xenserver/parsers/get_records.rb +0 -16
  267. data/lib/fog/xenserver/parsers/get_storage_repositories.rb +0 -16
  268. data/lib/fog/xenserver/parsers/get_vbds.rb +0 -16
  269. data/lib/fog/xenserver/parsers/get_vifs.rb +0 -16
  270. data/lib/fog/xenserver/parsers/get_vms.rb +0 -16
  271. data/lib/fog/xenserver/requests/compute/clone_server.rb +0 -30
  272. data/lib/fog/xenserver/requests/compute/create_network.rb +0 -46
  273. data/lib/fog/xenserver/requests/compute/create_server.rb +0 -144
  274. data/lib/fog/xenserver/requests/compute/create_sr.rb +0 -88
  275. data/lib/fog/xenserver/requests/compute/create_vbd.rb +0 -43
  276. data/lib/fog/xenserver/requests/compute/create_vdi.rb +0 -57
  277. data/lib/fog/xenserver/requests/compute/create_vif.rb +0 -62
  278. data/lib/fog/xenserver/requests/compute/create_vlan.rb +0 -43
  279. data/lib/fog/xenserver/requests/compute/destroy_network.rb +0 -31
  280. data/lib/fog/xenserver/requests/compute/destroy_record.rb +0 -11
  281. data/lib/fog/xenserver/requests/compute/destroy_server.rb +0 -20
  282. data/lib/fog/xenserver/requests/compute/destroy_sr.rb +0 -28
  283. data/lib/fog/xenserver/requests/compute/destroy_vdi.rb +0 -20
  284. data/lib/fog/xenserver/requests/compute/destroy_vif.rb +0 -20
  285. data/lib/fog/xenserver/requests/compute/destroy_vlan.rb +0 -30
  286. data/lib/fog/xenserver/requests/compute/disable_host.rb +0 -23
  287. data/lib/fog/xenserver/requests/compute/eject_vbd.rb +0 -17
  288. data/lib/fog/xenserver/requests/compute/enable_host.rb +0 -22
  289. data/lib/fog/xenserver/requests/compute/get_record.rb +0 -31
  290. data/lib/fog/xenserver/requests/compute/get_records.rb +0 -24
  291. data/lib/fog/xenserver/requests/compute/insert_vbd.rb +0 -17
  292. data/lib/fog/xenserver/requests/compute/provision_server.rb +0 -17
  293. data/lib/fog/xenserver/requests/compute/reboot_host.rb +0 -17
  294. data/lib/fog/xenserver/requests/compute/reboot_server.rb +0 -17
  295. data/lib/fog/xenserver/requests/compute/scan_sr.rb +0 -17
  296. data/lib/fog/xenserver/requests/compute/set_affinity.rb +0 -19
  297. data/lib/fog/xenserver/requests/compute/set_attribute.rb +0 -19
  298. data/lib/fog/xenserver/requests/compute/shutdown_host.rb +0 -17
  299. data/lib/fog/xenserver/requests/compute/shutdown_server.rb +0 -17
  300. data/lib/fog/xenserver/requests/compute/snapshot_revert.rb +0 -24
  301. data/lib/fog/xenserver/requests/compute/snapshot_server.rb +0 -17
  302. data/lib/fog/xenserver/requests/compute/start_server.rb +0 -17
  303. data/lib/fog/xenserver/requests/compute/start_vm.rb +0 -19
  304. data/lib/fog/xenserver/requests/compute/unplug_pbd.rb +0 -20
  305. data/lib/fog/xenserver/requests/compute/unplug_vbd.rb +0 -25
  306. data/lib/fog/xenserver/utilities.rb +0 -8
  307. data/tests/xenserver/README +0 -21
  308. data/tests/xenserver/compute_tests.rb +0 -51
  309. data/tests/xenserver/helper.rb +0 -36
  310. data/tests/xenserver/models/compute/console_test.rb +0 -35
  311. data/tests/xenserver/models/compute/consoles_test.rb +0 -19
  312. data/tests/xenserver/models/compute/host_cpu_tests.rb +0 -58
  313. data/tests/xenserver/models/compute/host_metrics_tests.rb +0 -48
  314. data/tests/xenserver/models/compute/host_tests.rb +0 -98
  315. data/tests/xenserver/models/compute/hosts_tests.rb +0 -22
  316. data/tests/xenserver/models/compute/network_tests.rb +0 -79
  317. data/tests/xenserver/models/compute/networks_tests.rb +0 -22
  318. data/tests/xenserver/models/compute/pbd_tests.rb +0 -76
  319. data/tests/xenserver/models/compute/pbds_tests.rb +0 -22
  320. data/tests/xenserver/models/compute/pif_tests.rb +0 -58
  321. data/tests/xenserver/models/compute/pifs_tests.rb +0 -22
  322. data/tests/xenserver/models/compute/pool_tests.rb +0 -56
  323. data/tests/xenserver/models/compute/pools_tests.rb +0 -30
  324. data/tests/xenserver/models/compute/server_tests.rb +0 -184
  325. data/tests/xenserver/models/compute/servers_tests.rb +0 -89
  326. data/tests/xenserver/models/compute/storage_repositories_tests.rb +0 -30
  327. data/tests/xenserver/models/compute/storage_repository_tests.rb +0 -114
  328. data/tests/xenserver/models/compute/vbd_tests.rb +0 -115
  329. data/tests/xenserver/models/compute/vbds_tests.rb +0 -22
  330. data/tests/xenserver/models/compute/vif_tests.rb +0 -53
  331. data/tests/xenserver/models/compute/vifs_tests.rb +0 -22
  332. data/tests/xenserver/models/compute/vlan_tests.rb +0 -76
  333. data/tests/xenserver/models/compute/vlans_tests.rb +0 -36
  334. data/tests/xenserver/requests/compute/clone_server_tests.rb +0 -32
  335. data/tests/xenserver/requests/compute/create_network_tests.rb +0 -20
  336. data/tests/xenserver/requests/compute/create_server_tests.rb +0 -129
  337. data/tests/xenserver/requests/compute/create_sr_tests.rb +0 -54
  338. data/tests/xenserver/requests/compute/create_vdi_tests.rb +0 -80
  339. data/tests/xenserver/requests/compute/create_vif_tests.rb +0 -88
  340. data/tests/xenserver/requests/compute/create_vlan_tests.rb +0 -36
  341. data/tests/xenserver/requests/compute/destroy_network_tests.rb +0 -13
  342. data/tests/xenserver/requests/compute/destroy_sr_tests.rb +0 -46
  343. data/tests/xenserver/requests/compute/destroy_vdi_tests.rb +0 -25
  344. data/tests/xenserver/requests/compute/destroy_vlan_tests.rb +0 -36
  345. data/tests/xenserver/requests/compute/disable_host_tests.rb +0 -16
  346. data/tests/xenserver/requests/compute/enable_host_tests.rb +0 -16
  347. data/tests/xenserver/requests/compute/get_record_tests.rb +0 -15
  348. data/tests/xenserver/requests/compute/set_attribute_tests.rb +0 -66
  349. data/tests/xenserver/requests/compute/unplug_pbd_tests.rb +0 -48
  350. data/tests/xenserver/xenserver_tests.rb +0 -33
@@ -0,0 +1,44 @@
1
+ module Fog
2
+ module Compute
3
+ class DigitalOceanV2
4
+ class Real
5
+ def upgrade(id)
6
+ body = { :type => "upgrade" }
7
+
8
+ encoded_body = Fog::JSON.encode(body)
9
+
10
+ request(
11
+ :expects => [201],
12
+ :headers => {
13
+ 'Content-Type' => "application/json; charset=UTF-8",
14
+ },
15
+ :method => 'POST',
16
+ :path => "v2/droplets/#{id}/actions",
17
+ :body => encoded_body,
18
+ )
19
+ end
20
+ end
21
+
22
+ class Mock
23
+ def upgrade(id)
24
+ response = Excon::Response.new
25
+ response.status = 201
26
+ response.body = {
27
+ 'action' => {
28
+ 'id' => Fog::Mock.random_numbers(1).to_i,
29
+ 'status' => "in-progress",
30
+ 'type' => "upgrade",
31
+ 'started_at' => "2014-11-14T16:31:00Z",
32
+ 'completed_at' => null,
33
+ 'resource_id' => id,
34
+ 'resource_type' => "droplet",
35
+ 'region' => "nyc3",
36
+ 'region_slug' => "nyc3"
37
+ }
38
+ }
39
+ response
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,51 @@
1
+ module Fog
2
+ module DigitalOcean
3
+ class Service
4
+
5
+ def request(params, parse_json = true)
6
+ first_attempt = true
7
+ begin
8
+ response = @connection.request(request_params(params))
9
+ rescue Excon::Errors::Unauthorized => error
10
+ raise error unless first_attempt
11
+ first_attempt = false
12
+ authenticate
13
+ retry
14
+ end
15
+
16
+ process_response(response) if parse_json
17
+ response
18
+ end
19
+
20
+ private
21
+
22
+ def process_response(response)
23
+ if response &&
24
+ response.body &&
25
+ response.body.is_a?(String) &&
26
+ !response.body.strip.empty?
27
+ begin
28
+ response.body = Fog::JSON.decode(response.body)
29
+ rescue Fog::JSON::DecodeError => e
30
+ Fog::Logger.warning("Error Parsing response json - #{e}")
31
+ response.body = {}
32
+ end
33
+ end
34
+ end
35
+
36
+ def headers(options={})
37
+ {'Content-Type' => 'application/json',
38
+ 'Accept' => 'application/json',
39
+ }.merge(options[:headers] || {})
40
+ end
41
+
42
+ def request_params(params)
43
+ params.merge({
44
+ :headers => headers(params),
45
+ :path => "#{params[:path]}"
46
+ })
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -12,7 +12,7 @@ module Fog
12
12
  end
13
13
 
14
14
  def get(id)
15
- new kernels(id).first
15
+ new kernels(id).select {|kernel| kernel[:id] == id }.first
16
16
  rescue Fog::Compute::Linode::NotFound
17
17
  nil
18
18
  end
@@ -48,24 +48,24 @@ module Fog
48
48
  return "CPU=#{vcpu.to_f/10}\n" unless cpu
49
49
  return "CPU=#{vcpu}\n" if cpu.to_i > vcpu.to_i
50
50
  "CPU=#{cpu}\n"
51
- end
51
+ end
52
52
 
53
53
  def get_vcpu
54
54
  self.vcpu = 1 unless vcpu
55
55
  "VCPU=#{vcpu}\n"
56
- end
56
+ end
57
57
 
58
58
  def get_memory
59
59
  self.memory = 128 unless memory
60
60
  "MEMORY=#{memory}\n"
61
- end
61
+ end
62
62
 
63
63
  def get_raw
64
64
  return "" unless raw
65
65
  ret = "RAW=#{raw}\n"
66
66
  ret.gsub!(/\{/, '[')
67
67
  ret.gsub!(/\}/, ']')
68
- ret.gsub!(/>/,'')
68
+ ret.gsub!(/=>/,'=')
69
69
  ret
70
70
  end
71
71
 
@@ -82,7 +82,7 @@ module Fog
82
82
  ret.gsub!(/\{/, '[')
83
83
  ret.gsub!(/\}/, ']')
84
84
  ret.gsub!(/>/,'')
85
- ret
85
+ ret
86
86
  end
87
87
 
88
88
  def get_os
@@ -91,16 +91,16 @@ module Fog
91
91
  ret.gsub!(/\{/, '[')
92
92
  ret.gsub!(/\}/, ']')
93
93
  ret.gsub!(/>/,'')
94
- ret
94
+ ret
95
95
  end
96
96
 
97
97
  def get_graphics
98
- return "" unless graphics
98
+ return "" unless graphics
99
99
  ret = "GRAPHICS=#{graphics}\n"
100
100
  ret.gsub!(/\{/, '[')
101
101
  ret.gsub!(/\}/, ']')
102
102
  ret.gsub!(/>/,'')
103
- ret
103
+ ret
104
104
  end
105
105
 
106
106
  def get_nic
@@ -115,26 +115,26 @@ module Fog
115
115
  #ret.gsub!(/\{/, '[')
116
116
  #ret.gsub!(/\}/, ']')
117
117
  #ret.gsub!(/>/,'')
118
- ret
118
+ ret
119
119
  end
120
120
 
121
121
  def get_sched_ds_requirements
122
- return "" unless sched_ds_requirements
122
+ return "" unless sched_ds_requirements
123
123
  %Q|SCHED_DS_REQUIREMENTS="#{sched_ds_requirements.gsub(/"/){ %q(\") }}"\n|
124
124
  end
125
125
 
126
126
  def get_sched_ds_rank
127
- return "" unless sched_ds_rank
127
+ return "" unless sched_ds_rank
128
128
  %Q|SCHED_DS_RANK="#{sched_ds_rank.gsub(/"/){ %q(\") }}"\n|
129
129
  end
130
130
 
131
131
  def get_sched_requirements
132
- return "" unless sched_requirements
132
+ return "" unless sched_requirements
133
133
  %Q|SCHED_REQUIREMENTS="#{sched_requirements.gsub(/"/){ %q(\") }}"\n|
134
134
  end
135
135
 
136
136
  def get_sched_rank
137
- return "" unless sched_rank
137
+ return "" unless sched_rank
138
138
  %Q|SCHED_RANK="#{sched_rank.gsub(/"/){ %q(\") }}"\n|
139
139
  end
140
140
 
@@ -21,6 +21,9 @@
21
21
  # OS=[
22
22
  # ARCH="x86_64",
23
23
  # BOOT="network,hd" ]
24
+ # RAW=[
25
+ # DATA="<cpu match='exact'><model fallback='allow'>core2duo</model></cpu>",
26
+ # TYPE="kvm" ]
24
27
 
25
28
 
26
29
  module Fog
@@ -37,7 +40,7 @@ module Fog
37
40
  templates.info!(-2, filter[:id], filter[:id])
38
41
  end # if filter[:id].nil?
39
42
 
40
- templates = templates.map do |t|
43
+ templates = templates.map do |t|
41
44
  # filtering by name
42
45
  # done here, because OpenNebula:TemplatePool does not support something like .delete_if
43
46
  if filter[:name] && filter[:name].is_a?(String) && !filter[:name].empty?
@@ -51,8 +54,8 @@ module Fog
51
54
  end
52
55
 
53
56
  h = Hash[
54
- :id => t.to_hash["VMTEMPLATE"]["ID"],
55
- :name => t.to_hash["VMTEMPLATE"]["NAME"],
57
+ :id => t.to_hash["VMTEMPLATE"]["ID"],
58
+ :name => t.to_hash["VMTEMPLATE"]["NAME"],
56
59
  :content => t.template_str,
57
60
  :USER_VARIABLES => "" # Default if not set in template
58
61
  ]
@@ -67,7 +70,7 @@ module Fog
67
70
  vnet = networks.get(n["NETWORK_ID"].to_s)
68
71
  elsif n["NETWORK"]
69
72
  vnet = networks.get_by_name(n["NETWORK"].to_s)
70
- else
73
+ else
71
74
  next
72
75
  end
73
76
  h["NIC"] << interfaces.new({ :vnet => vnet, :model => n["MODEL"] || "virtio" })
@@ -87,15 +90,15 @@ module Fog
87
90
  else
88
91
  # should i break?
89
92
  end
90
-
93
+
91
94
  # every key should be lowercase
92
95
  ret_hash = {}
93
- h.each_pair do |k,v|
94
- ret_hash.merge!({k.downcase => v})
96
+ h.each_pair do |k,v|
97
+ ret_hash.merge!({k.downcase => v})
95
98
  end
96
99
  ret_hash
97
100
  end
98
-
101
+
99
102
  templates.delete nil
100
103
  raise Fog::Compute::OpenNebula::NotFound, "Flavor/Template not found" if templates.empty?
101
104
  templates
@@ -107,7 +110,7 @@ module Fog
107
110
  nic1 = Mock_nic.new
108
111
  nic1.vnet = networks.first
109
112
 
110
- [
113
+ [
111
114
  {
112
115
  :content => %Q{
113
116
  NAME = mock-vm
@@ -131,14 +134,14 @@ module Fog
131
134
  'ARCH' => 'x86_64'
132
135
  },
133
136
  :graphics => {},
134
- :raw => {},
137
+ :raw => %|["DATA"=>"<cpu match='exact'><model fallback='allow'>core2duo</model></cpu>", "TYPE"=>"kvm"]|,
135
138
  :context => {},
136
139
  :user_variables => {}
137
140
  }
138
141
  ]
139
142
  end
140
143
 
141
- class Mock_nic
144
+ class Mock_nic
142
145
  attr_accessor :vnet
143
146
 
144
147
  def id
@@ -2,6 +2,8 @@ require 'fog/openstack/compute'
2
2
  require 'fog/openstack/identity_v2'
3
3
  require 'fog/openstack/identity_v3'
4
4
  require 'fog/openstack/image'
5
+ require 'fog/openstack/image_v1'
6
+ require 'fog/openstack/image_v2'
5
7
  require 'fog/openstack/metering'
6
8
  require 'fog/openstack/network'
7
9
  require 'fog/openstack/orchestration'
@@ -297,7 +297,7 @@ module Fog
297
297
 
298
298
  token, body = retrieve_tokens_v3 options, connection_options
299
299
 
300
- service = get_service_v3(body, service_type, service_name, openstack_region)
300
+ service = get_service_v3(body, service_type, service_name, openstack_region, options)
301
301
 
302
302
  options[:unscoped_token] = token
303
303
 
@@ -359,7 +359,7 @@ module Fog
359
359
  raise Fog::Errors::NotFound.new("Multiple regions available choose one of these '#{regions.join(',')}'")
360
360
  end
361
361
 
362
- identity_service = get_service_v3(body, identity_service_type, nil, nil, :endpoint_path_matches => /\/v3/) if identity_service_type
362
+ identity_service = get_service_v3(body, identity_service_type, nil, nil, :openstack_endpoint_path_matches => /\/v3/) if identity_service_type
363
363
 
364
364
  management_url = service['endpoints'].find { |e| e['interface']==endpoint_type }['url']
365
365
  identity_url = identity_service['endpoints'].find { |e| e['interface']=='public' }['url'] if identity_service
@@ -532,7 +532,7 @@ module Fog
532
532
 
533
533
  # Filter the found services by region (if specified) and whether the endpoint path matches the given regex (e.g. /\/v3/)
534
534
  services.find do |s|
535
- s['endpoints'].any? { |ep| endpoint_region?(ep, region) && endpoint_path_match?(ep, options[:endpoint_path_matches])}
535
+ s['endpoints'].any? { |ep| endpoint_region?(ep, region) && endpoint_path_match?(ep, options[:openstack_endpoint_path_matches])}
536
536
  end if services
537
537
 
538
538
  end
@@ -572,6 +572,33 @@ module Fog
572
572
  version
573
573
  end
574
574
 
575
+ def self.get_supported_version_path(supported_versions, uri, auth_token, connection_options = {})
576
+ connection = Fog::Core::Connection.new("#{uri.scheme}://#{uri.host}:#{uri.port}", false, connection_options)
577
+ response = connection.request({
578
+ :expects => [200, 204, 300],
579
+ :headers => {'Content-Type' => 'application/json',
580
+ 'Accept' => 'application/json',
581
+ 'X-Auth-Token' => auth_token},
582
+ :method => 'GET'
583
+ })
584
+
585
+ body = Fog::JSON.decode(response.body)
586
+ path = nil
587
+ unless body['versions'].empty?
588
+ supported_version = body['versions'].find do |x|
589
+ x["id"].match(supported_versions) &&
590
+ (x["status"] == "CURRENT" || x["status"] == "SUPPORTED")
591
+ end
592
+ path = URI.parse(supported_version['links'].first['href']).path if supported_version
593
+ end
594
+ if path.nil?
595
+ raise Fog::OpenStack::Errors::ServiceUnavailable.new(
596
+ "OpenStack service only supports API versions #{supported_versions.inspect}")
597
+ end
598
+
599
+ path.chomp '/'
600
+ end
601
+
575
602
  # CGI.escape, but without special treatment on spaces
576
603
  def self.escape(str, extra_exclude_chars = '')
577
604
  str.gsub(/([^a-zA-Z0-9_.-#{extra_exclude_chars}]+)/) do
@@ -7,20 +7,21 @@ module Fog
7
7
  # Fog::Identity::OpenStack.new() will return a Fog::Identity::OpenStack::V2 or a Fog::Identity::OpenStack::V3,
8
8
  # depending on whether the auth URL is for an OpenStack Identity V2 or V3 API endpoint
9
9
  def self.new(args = {})
10
+ @openstack_auth_uri = URI.parse(args[:openstack_auth_url]) if args[:openstack_auth_url]
10
11
  if self.inspect == 'Fog::Identity::OpenStack'
11
- if args[:openstack_auth_url]
12
- @openstack_auth_uri = URI.parse(args[:openstack_auth_url])
13
- if @openstack_auth_uri.path =~ /\/v3/
14
- service = Fog::Identity::OpenStack::V3.new(args)
15
- end
16
- end
17
- service ||= Fog::Identity::OpenStack::V2.new(args)
12
+ service = (is_v3? args) ? Fog::Identity::OpenStack::V3.new(args) : Fog::Identity::OpenStack::V2.new(args)
18
13
  else
19
14
  service = Fog::Service.new(args)
20
15
  end
21
16
  service
22
17
  end
23
18
 
19
+ private
20
+
21
+ def self.is_v3?(args)
22
+ @openstack_auth_uri && @openstack_auth_uri.path =~ /\/v3/
23
+ end
24
+
24
25
  module Common
25
26
  attr_reader :unscoped_token
26
27
 
@@ -160,6 +160,7 @@ module Fog
160
160
 
161
161
  @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL'
162
162
 
163
+ @openstack_endpoint_path_matches = options[:openstack_endpoint_path_matches] ||= /\/v3/
163
164
  authenticate
164
165
 
165
166
  @persistent = options[:persistent] || false
@@ -3,154 +3,59 @@ require 'fog/openstack/core'
3
3
  module Fog
4
4
  module Image
5
5
  class OpenStack < Fog::Service
6
- SUPPORTED_VERSIONS = /v1(\.(0|1))*/
7
6
 
8
- requires :openstack_auth_url
9
- recognizes :openstack_auth_token, :openstack_management_url,
10
- :persistent, :openstack_service_type, :openstack_service_name,
11
- :openstack_tenant, :openstack_tenant_id,
12
- :openstack_api_key, :openstack_username, :openstack_identity_endpoint,
13
- :current_user, :current_tenant, :openstack_region,
14
- :openstack_endpoint_type,
15
- :openstack_project_name, :openstack_project_id,
16
- :openstack_project_domain, :openstack_user_domain, :openstack_domain_name,
17
- :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id
18
-
19
- model_path 'fog/openstack/models/image'
20
-
21
- model :image
22
- collection :images
23
-
24
- request_path 'fog/openstack/requests/image'
25
-
26
- request :list_public_images
27
- request :list_public_images_detailed
28
- request :get_image
29
- request :create_image
30
- request :update_image
31
- request :get_image_members
32
- request :update_image_members
33
- request :get_shared_images
34
- request :add_member_to_image
35
- request :remove_member_from_image
36
- request :delete_image
37
- request :get_image_by_id
38
- request :set_tenant
39
-
40
- class Mock
41
- def self.data
42
- @data ||= Hash.new do |hash, key|
43
- hash[key] = {
44
- :images => {}
45
- }
46
- end
47
- end
48
-
49
- def self.reset
50
- @data = nil
51
- end
52
-
53
- def initialize(options={})
54
- @openstack_username = options[:openstack_username]
55
- @openstack_tenant = options[:openstack_tenant]
56
- @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
57
-
58
- @auth_token = Fog::Mock.random_base64(64)
59
- @auth_token_expiration = (Time.now.utc + 86400).iso8601
60
-
61
- management_url = URI.parse(options[:openstack_auth_url])
62
- management_url.port = 9292
63
- management_url.path = '/v1'
64
- @openstack_management_url = management_url.to_s
65
-
66
- @data ||= { :users => {} }
67
- unless @data[:users].find {|u| u['name'] == options[:openstack_username]}
68
- id = Fog::Mock.random_numbers(6).to_s
69
- @data[:users][id] = {
70
- 'id' => id,
71
- 'name' => options[:openstack_username],
72
- 'email' => "#{options[:openstack_username]}@mock.com",
73
- 'tenantId' => Fog::Mock.random_numbers(6).to_s,
74
- 'enabled' => true
75
- }
76
- end
77
- end
78
-
79
- def data
80
- self.class.data[@openstack_username]
81
- end
82
-
83
- def reset_data
84
- self.class.data.delete(@openstack_username)
85
- end
86
-
87
- def credentials
88
- { :provider => 'openstack',
89
- :openstack_auth_url => @openstack_auth_uri.to_s,
90
- :openstack_auth_token => @auth_token,
91
- :openstack_region => @openstack_region,
92
- :openstack_management_url => @openstack_management_url }
93
- end
7
+ # Fog::Image::OpenStack.new() will return a Fog::Image::OpenStack::V2 or a Fog::Image::OpenStack::V3,
8
+ # choosing the latest available
9
+ def self.new(args = {})
10
+ @openstack_auth_uri = URI.parse(args[:openstack_auth_url]) if args[:openstack_auth_url]
11
+ if self.inspect == 'Fog::Image::OpenStack'
12
+ service = Fog::Image::OpenStack::V2.new(args) unless args.empty?
13
+ service ||= Fog::Image::OpenStack::V1.new(args)
14
+ else
15
+ service = Fog::Service.new(args)
16
+ end
17
+ service
94
18
  end
95
19
 
96
- class Real
97
- include Fog::OpenStack::Core
98
-
99
- def initialize(options={})
100
- initialize_identity options
101
-
102
- @openstack_service_type = options[:openstack_service_type] || ['image']
103
- @openstack_service_name = options[:openstack_service_name]
104
- @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL'
105
-
106
- @connection_options = options[:connection_options] || {}
107
-
108
- authenticate
109
-
110
- unless @path.match(SUPPORTED_VERSIONS)
111
- @path = "/" + Fog::OpenStack.get_supported_version(SUPPORTED_VERSIONS,
112
- @openstack_management_uri,
113
- @auth_token,
114
- @connection_options)
115
- end
20
+ module Common
21
+ attr_reader :unscoped_token
116
22
 
117
- @persistent = options[:persistent] || false
118
- @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
119
- end
23
+ include Fog::OpenStack::Core
120
24
 
121
25
  def request(params)
26
+ retried = false
122
27
  begin
123
- response = @connection.request(params.merge({
124
- :headers => {
28
+ std_headers = {
125
29
  'Content-Type' => 'application/json',
30
+ 'Accept' => 'application/json',
126
31
  'X-Auth-Token' => @auth_token
127
- }.merge!(params[:headers] || {}),
128
- :path => "#{@path}/#{params[:path]}"#,
32
+ }
33
+ param_headers = params.fetch(:headers,{})
34
+
35
+ response = @connection.request(params.merge({
36
+ :headers => std_headers.merge(param_headers),
37
+ :path => "#{@path}/#{params[:path]}"
129
38
  }))
130
39
  rescue Excon::Errors::Unauthorized => error
131
- if error.response.body != 'Bad username or password' # token expiration
132
- @openstack_must_reauthenticate = true
133
- authenticate
134
- retry
135
- else # bad credentials
136
- raise error
137
- end
40
+ raise if retried
41
+ retried = true
42
+
43
+ @openstack_must_reauthenticate = true
44
+ authenticate
45
+ retry
138
46
  rescue Excon::Errors::HTTPStatusError => error
139
47
  raise case error
140
- when Excon::Errors::NotFound
141
- Fog::Compute::OpenStack::NotFound.slurp(error)
142
- else
143
- error
144
- end
48
+ when Excon::Errors::NotFound
49
+ Fog::Image::OpenStack::NotFound.slurp(error)
50
+ else
51
+ error
52
+ end
145
53
  end
146
54
  unless response.body.empty?
147
- response.body = Fog::JSON.decode(response.body)
55
+ response.body = Fog::JSON.decode(response.body) unless params[:raw_body]
148
56
  end
149
57
  response
150
58
  end
151
-
152
- private
153
-
154
59
  end
155
60
  end
156
61
  end