fog 1.10.1 → 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (319) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +1 -0
  3. data/Gemfile +2 -0
  4. data/README.md +4 -3
  5. data/changelog.txt +207 -0
  6. data/fog.gemspec +4 -3
  7. data/lib/fog/aws.rb +0 -2
  8. data/lib/fog/aws/dynamodb.rb +1 -1
  9. data/lib/fog/aws/elasticache.rb +0 -2
  10. data/lib/fog/aws/iam.rb +1 -0
  11. data/lib/fog/aws/models/compute/volume.rb +1 -0
  12. data/lib/fog/aws/models/iam/user.rb +1 -0
  13. data/lib/fog/aws/models/storage/directories.rb +1 -1
  14. data/lib/fog/aws/models/storage/directory.rb +20 -17
  15. data/lib/fog/aws/models/storage/file.rb +4 -5
  16. data/lib/fog/aws/parsers/iam/get_user.rb +2 -0
  17. data/lib/fog/aws/parsers/iam/list_users.rb +2 -0
  18. data/lib/fog/aws/requests/cdn/delete_streaming_distribution.rb +2 -2
  19. data/lib/fog/aws/requests/cdn/put_distribution_config.rb +3 -3
  20. data/lib/fog/aws/requests/cloud_formation/update_stack.rb +3 -3
  21. data/lib/fog/aws/requests/cloud_formation/validate_template.rb +5 -5
  22. data/lib/fog/aws/requests/iam/create_user.rb +5 -4
  23. data/lib/fog/aws/requests/iam/get_user.rb +5 -4
  24. data/lib/fog/aws/requests/iam/list_users.rb +5 -4
  25. data/lib/fog/aws/requests/rds/create_db_instance.rb +25 -25
  26. data/lib/fog/aws/requests/storage/abort_multipart_upload.rb +3 -3
  27. data/lib/fog/aws/requests/storage/complete_multipart_upload.rb +2 -2
  28. data/lib/fog/aws/requests/storage/copy_object.rb +2 -2
  29. data/lib/fog/aws/requests/storage/delete_bucket.rb +1 -1
  30. data/lib/fog/aws/requests/storage/delete_bucket_cors.rb +1 -1
  31. data/lib/fog/aws/requests/storage/delete_bucket_lifecycle.rb +1 -1
  32. data/lib/fog/aws/requests/storage/delete_bucket_policy.rb +1 -1
  33. data/lib/fog/aws/requests/storage/delete_bucket_website.rb +1 -1
  34. data/lib/fog/aws/requests/storage/delete_multiple_objects.rb +1 -1
  35. data/lib/fog/aws/requests/storage/delete_object.rb +1 -1
  36. data/lib/fog/aws/requests/storage/get_bucket.rb +1 -1
  37. data/lib/fog/aws/requests/storage/get_bucket_acl.rb +1 -1
  38. data/lib/fog/aws/requests/storage/get_bucket_cors.rb +1 -1
  39. data/lib/fog/aws/requests/storage/get_bucket_lifecycle.rb +1 -1
  40. data/lib/fog/aws/requests/storage/get_bucket_location.rb +1 -1
  41. data/lib/fog/aws/requests/storage/get_bucket_logging.rb +1 -1
  42. data/lib/fog/aws/requests/storage/get_bucket_object_versions.rb +1 -1
  43. data/lib/fog/aws/requests/storage/get_bucket_policy.rb +1 -1
  44. data/lib/fog/aws/requests/storage/get_bucket_versioning.rb +1 -1
  45. data/lib/fog/aws/requests/storage/get_bucket_website.rb +1 -1
  46. data/lib/fog/aws/requests/storage/get_object.rb +2 -2
  47. data/lib/fog/aws/requests/storage/get_object_acl.rb +2 -2
  48. data/lib/fog/aws/requests/storage/get_object_http_url.rb +1 -19
  49. data/lib/fog/aws/requests/storage/get_object_torrent.rb +2 -2
  50. data/lib/fog/aws/requests/storage/get_object_url.rb +5 -14
  51. data/lib/fog/aws/requests/storage/get_request_payment.rb +1 -1
  52. data/lib/fog/aws/requests/storage/head_object.rb +2 -2
  53. data/lib/fog/aws/requests/storage/initiate_multipart_upload.rb +2 -2
  54. data/lib/fog/aws/requests/storage/list_multipart_uploads.rb +7 -8
  55. data/lib/fog/aws/requests/storage/list_parts.rb +2 -2
  56. data/lib/fog/aws/requests/storage/put_bucket.rb +1 -1
  57. data/lib/fog/aws/requests/storage/put_bucket_acl.rb +1 -1
  58. data/lib/fog/aws/requests/storage/put_bucket_cors.rb +1 -1
  59. data/lib/fog/aws/requests/storage/put_bucket_lifecycle.rb +1 -1
  60. data/lib/fog/aws/requests/storage/put_bucket_logging.rb +1 -1
  61. data/lib/fog/aws/requests/storage/put_bucket_policy.rb +1 -1
  62. data/lib/fog/aws/requests/storage/put_bucket_versioning.rb +1 -1
  63. data/lib/fog/aws/requests/storage/put_bucket_website.rb +1 -1
  64. data/lib/fog/aws/requests/storage/put_object.rb +2 -2
  65. data/lib/fog/aws/requests/storage/put_object_acl.rb +8 -8
  66. data/lib/fog/aws/requests/storage/put_object_url.rb +5 -7
  67. data/lib/fog/aws/requests/storage/put_request_payment.rb +1 -1
  68. data/lib/fog/aws/requests/storage/upload_part.rb +2 -2
  69. data/lib/fog/aws/storage.rb +201 -97
  70. data/lib/fog/bin/google.rb +47 -1
  71. data/lib/fog/bluebox/models/compute/server.rb +3 -1
  72. data/lib/fog/brightbox/compute.rb +11 -26
  73. data/lib/fog/brightbox/compute/image_selector.rb +45 -0
  74. data/lib/fog/cloudstack/compute.rb +70 -2
  75. data/lib/fog/cloudstack/models/compute/disk_offering.rb +46 -0
  76. data/lib/fog/cloudstack/models/compute/disk_offerings.rb +27 -0
  77. data/lib/fog/cloudstack/models/compute/image.rb +1 -1
  78. data/lib/fog/cloudstack/models/compute/servers.rb +3 -2
  79. data/lib/fog/cloudstack/requests/compute/create_disk_offering.rb +51 -0
  80. data/lib/fog/cloudstack/requests/compute/delete_disk_offering.rb +31 -0
  81. data/lib/fog/cloudstack/requests/compute/delete_snapshot.rb +44 -2
  82. data/lib/fog/cloudstack/requests/compute/list_disk_offerings.rb +9 -0
  83. data/lib/fog/cloudstack/requests/compute/list_os_types.rb +9 -0
  84. data/lib/fog/cloudstack/requests/compute/list_snapshots.rb +21 -0
  85. data/lib/fog/core/errors.rb +3 -0
  86. data/lib/fog/core/json.rb +48 -7
  87. data/lib/fog/core/model.rb +11 -10
  88. data/lib/fog/core/service.rb +1 -1
  89. data/lib/fog/digitalocean/CHANGELOG.md +1 -1
  90. data/lib/fog/dreamhost/dns.rb +1 -3
  91. data/lib/fog/google.rb +1 -0
  92. data/lib/fog/google/compute.rb +131 -0
  93. data/lib/fog/google/models/compute/flavor.rb +24 -0
  94. data/lib/fog/google/models/compute/flavors.rb +28 -0
  95. data/lib/fog/google/models/compute/image.rb +19 -0
  96. data/lib/fog/google/models/compute/images.rb +28 -0
  97. data/lib/fog/google/models/compute/server.rb +80 -0
  98. data/lib/fog/google/models/compute/servers.rb +61 -0
  99. data/lib/fog/google/requests/compute/delete_disk.rb +31 -0
  100. data/lib/fog/google/requests/compute/delete_firewall.rb +30 -0
  101. data/lib/fog/google/requests/compute/delete_image.rb +30 -0
  102. data/lib/fog/google/requests/compute/delete_network.rb +30 -0
  103. data/lib/fog/google/requests/compute/delete_operation.rb +30 -0
  104. data/lib/fog/google/requests/compute/delete_server.rb +40 -0
  105. data/lib/fog/google/requests/compute/get_disk.rb +31 -0
  106. data/lib/fog/google/requests/compute/get_firewall.rb +30 -0
  107. data/lib/fog/google/requests/compute/get_image.rb +30 -0
  108. data/lib/fog/google/requests/compute/get_machine_type.rb +30 -0
  109. data/lib/fog/google/requests/compute/get_network.rb +30 -0
  110. data/lib/fog/google/requests/compute/get_server.rb +31 -0
  111. data/lib/fog/google/requests/compute/get_zone.rb +30 -0
  112. data/lib/fog/google/requests/compute/insert_disk.rb +35 -0
  113. data/lib/fog/google/requests/compute/insert_firewall.rb +37 -0
  114. data/lib/fog/google/requests/compute/insert_image.rb +38 -0
  115. data/lib/fog/google/requests/compute/insert_network.rb +34 -0
  116. data/lib/fog/google/requests/compute/insert_server.rb +49 -0
  117. data/lib/fog/google/requests/compute/list_disks.rb +30 -0
  118. data/lib/fog/google/requests/compute/list_firewalls.rb +29 -0
  119. data/lib/fog/google/requests/compute/list_global_operations.rb +28 -0
  120. data/lib/fog/google/requests/compute/list_images.rb +29 -0
  121. data/lib/fog/google/requests/compute/list_machine_types.rb +29 -0
  122. data/lib/fog/google/requests/compute/list_networks.rb +29 -0
  123. data/lib/fog/google/requests/compute/list_servers.rb +30 -0
  124. data/lib/fog/google/requests/compute/list_zone_operations.rb +28 -0
  125. data/lib/fog/google/requests/compute/list_zones.rb +29 -0
  126. data/lib/fog/google/requests/compute/set_metadata.rb +36 -0
  127. data/lib/fog/hp.rb +1 -1
  128. data/lib/fog/hp/storage.rb +1 -1
  129. data/lib/fog/internet_archive/models/storage/ia_attributes.rb +1 -1
  130. data/lib/fog/internet_archive/requests/storage/head_object.rb +1 -2
  131. data/lib/fog/internet_archive/requests/storage/list_multipart_uploads.rb +5 -6
  132. data/lib/fog/openstack.rb +29 -1
  133. data/lib/fog/openstack/CHANGELOG.md +1 -1
  134. data/lib/fog/openstack/compute.rb +3 -2
  135. data/lib/fog/openstack/identity.rb +1 -5
  136. data/lib/fog/openstack/image.rb +8 -9
  137. data/lib/fog/openstack/models/compute/server.rb +24 -0
  138. data/lib/fog/openstack/network.rb +7 -28
  139. data/lib/fog/openstack/requests/compute/allocate_address.rb +1 -1
  140. data/lib/fog/openstack/requests/compute/attach_volume.rb +11 -6
  141. data/lib/fog/openstack/requests/compute/boot_from_snapshot.rb +1 -1
  142. data/lib/fog/openstack/requests/compute/create_flavor.rb +1 -1
  143. data/lib/fog/openstack/requests/compute/create_key_pair.rb +1 -1
  144. data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
  145. data/lib/fog/openstack/requests/compute/create_security_group_rule.rb +1 -1
  146. data/lib/fog/openstack/requests/compute/create_volume.rb +15 -14
  147. data/lib/fog/openstack/requests/compute/create_volume_snapshot.rb +1 -1
  148. data/lib/fog/openstack/requests/compute/delete_volume.rb +9 -2
  149. data/lib/fog/openstack/requests/compute/detach_volume.rb +7 -2
  150. data/lib/fog/openstack/requests/compute/get_server_volumes.rb +10 -0
  151. data/lib/fog/openstack/requests/compute/get_volume_details.rb +7 -16
  152. data/lib/fog/openstack/requests/compute/list_tenants.rb +1 -1
  153. data/lib/fog/openstack/requests/compute/list_volumes.rb +4 -26
  154. data/lib/fog/openstack/requests/compute/revert_resize_server.rb +2 -2
  155. data/lib/fog/openstack/requests/compute/update_quota.rb +1 -1
  156. data/lib/fog/openstack/requests/identity/create_ec2_credential.rb +1 -1
  157. data/lib/fog/openstack/requests/identity/create_role.rb +1 -1
  158. data/lib/fog/openstack/requests/identity/create_user.rb +1 -1
  159. data/lib/fog/openstack/requests/identity/update_user.rb +1 -1
  160. data/lib/fog/openstack/requests/image/update_image_members.rb +1 -1
  161. data/lib/fog/openstack/requests/volume/create_volume.rb +1 -1
  162. data/lib/fog/openstack/requests/volume/create_volume_snapshot.rb +1 -1
  163. data/lib/fog/openstack/requests/volume/get_quota.rb +31 -0
  164. data/lib/fog/openstack/requests/volume/get_quota_defaults.rb +31 -0
  165. data/lib/fog/openstack/requests/volume/update_quota.rb +32 -0
  166. data/lib/fog/openstack/volume.rb +11 -7
  167. data/lib/fog/rackspace.rb +11 -5
  168. data/lib/fog/rackspace/block_storage.rb +2 -1
  169. data/lib/fog/rackspace/cdn.rb +15 -15
  170. data/lib/fog/rackspace/compute.rb +2 -2
  171. data/lib/fog/rackspace/compute_v2.rb +8 -5
  172. data/lib/fog/rackspace/databases.rb +2 -1
  173. data/lib/fog/rackspace/dns.rb +2 -1
  174. data/lib/fog/rackspace/errors.rb +27 -0
  175. data/lib/fog/rackspace/load_balancers.rb +2 -1
  176. data/lib/fog/rackspace/mock_data.rb +5 -6
  177. data/lib/fog/rackspace/models/block_storage/snapshot.rb +8 -8
  178. data/lib/fog/rackspace/models/block_storage/snapshots.rb +8 -8
  179. data/lib/fog/rackspace/models/block_storage/volume.rb +16 -16
  180. data/lib/fog/rackspace/models/block_storage/volume_types.rb +8 -8
  181. data/lib/fog/rackspace/models/block_storage/volumes.rb +8 -8
  182. data/lib/fog/rackspace/models/compute_v2/attachment.rb +8 -8
  183. data/lib/fog/rackspace/models/compute_v2/attachments.rb +8 -8
  184. data/lib/fog/rackspace/models/compute_v2/flavors.rb +8 -8
  185. data/lib/fog/rackspace/models/compute_v2/image.rb +8 -8
  186. data/lib/fog/rackspace/models/compute_v2/images.rb +8 -8
  187. data/lib/fog/rackspace/models/compute_v2/metadata.rb +12 -12
  188. data/lib/fog/rackspace/models/compute_v2/metadatum.rb +8 -8
  189. data/lib/fog/rackspace/models/compute_v2/server.rb +94 -55
  190. data/lib/fog/rackspace/models/compute_v2/servers.rb +12 -12
  191. data/lib/fog/rackspace/models/dns/records.rb +1 -1
  192. data/lib/fog/rackspace/models/dns/zones.rb +1 -1
  193. data/lib/fog/rackspace/models/storage/account.rb +8 -8
  194. data/lib/fog/rackspace/models/storage/directories.rb +8 -8
  195. data/lib/fog/rackspace/models/storage/directory.rb +32 -32
  196. data/lib/fog/rackspace/models/storage/file.rb +36 -36
  197. data/lib/fog/rackspace/models/storage/files.rb +20 -20
  198. data/lib/fog/rackspace/requests/block_storage/create_snapshot.rb +4 -4
  199. data/lib/fog/rackspace/requests/block_storage/create_volume.rb +4 -4
  200. data/lib/fog/rackspace/requests/block_storage/delete_snapshot.rb +4 -4
  201. data/lib/fog/rackspace/requests/block_storage/delete_volume.rb +4 -4
  202. data/lib/fog/rackspace/requests/block_storage/get_snapshot.rb +4 -4
  203. data/lib/fog/rackspace/requests/block_storage/get_volume.rb +4 -4
  204. data/lib/fog/rackspace/requests/block_storage/get_volume_type.rb +4 -4
  205. data/lib/fog/rackspace/requests/block_storage/list_snapshots.rb +4 -4
  206. data/lib/fog/rackspace/requests/block_storage/list_volume_types.rb +4 -4
  207. data/lib/fog/rackspace/requests/block_storage/list_volumes.rb +4 -4
  208. data/lib/fog/rackspace/requests/cdn/delete_object.rb +4 -4
  209. data/lib/fog/rackspace/requests/cdn/get_containers.rb +4 -4
  210. data/lib/fog/rackspace/requests/cdn/head_container.rb +4 -4
  211. data/lib/fog/rackspace/requests/cdn/post_container.rb +4 -4
  212. data/lib/fog/rackspace/requests/cdn/put_container.rb +4 -4
  213. data/lib/fog/rackspace/requests/compute/delete_image.rb +1 -1
  214. data/lib/fog/rackspace/requests/compute_v2/attach_volume.rb +4 -4
  215. data/lib/fog/rackspace/requests/compute_v2/change_server_password.rb +4 -4
  216. data/lib/fog/rackspace/requests/compute_v2/confirm_resize_server.rb +4 -4
  217. data/lib/fog/rackspace/requests/compute_v2/create_image.rb +4 -4
  218. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +11 -5
  219. data/lib/fog/rackspace/requests/compute_v2/delete_attachment.rb +4 -4
  220. data/lib/fog/rackspace/requests/compute_v2/delete_image.rb +5 -4
  221. data/lib/fog/rackspace/requests/compute_v2/delete_metadata_item.rb +4 -4
  222. data/lib/fog/rackspace/requests/compute_v2/delete_server.rb +4 -4
  223. data/lib/fog/rackspace/requests/compute_v2/get_attachment.rb +4 -4
  224. data/lib/fog/rackspace/requests/compute_v2/get_flavor.rb +4 -4
  225. data/lib/fog/rackspace/requests/compute_v2/get_image.rb +4 -4
  226. data/lib/fog/rackspace/requests/compute_v2/get_metadata_item.rb +4 -4
  227. data/lib/fog/rackspace/requests/compute_v2/get_server.rb +4 -4
  228. data/lib/fog/rackspace/requests/compute_v2/list_addresses.rb +4 -4
  229. data/lib/fog/rackspace/requests/compute_v2/list_addresses_by_network.rb +4 -4
  230. data/lib/fog/rackspace/requests/compute_v2/list_attachments.rb +4 -4
  231. data/lib/fog/rackspace/requests/compute_v2/list_flavors.rb +4 -4
  232. data/lib/fog/rackspace/requests/compute_v2/list_images.rb +4 -4
  233. data/lib/fog/rackspace/requests/compute_v2/list_metadata.rb +4 -4
  234. data/lib/fog/rackspace/requests/compute_v2/list_servers.rb +4 -4
  235. data/lib/fog/rackspace/requests/compute_v2/reboot_server.rb +4 -4
  236. data/lib/fog/rackspace/requests/compute_v2/rebuild_server.rb +4 -4
  237. data/lib/fog/rackspace/requests/compute_v2/rescue_server.rb +43 -0
  238. data/lib/fog/rackspace/requests/compute_v2/resize_server.rb +4 -4
  239. data/lib/fog/rackspace/requests/compute_v2/revert_resize_server.rb +4 -4
  240. data/lib/fog/rackspace/requests/compute_v2/set_metadata.rb +4 -4
  241. data/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb +4 -4
  242. data/lib/fog/rackspace/requests/compute_v2/unrescue_server.rb +40 -0
  243. data/lib/fog/rackspace/requests/compute_v2/update_metadata.rb +4 -4
  244. data/lib/fog/rackspace/requests/compute_v2/update_server.rb +4 -4
  245. data/lib/fog/rackspace/requests/storage/copy_object.rb +4 -4
  246. data/lib/fog/rackspace/requests/storage/delete_container.rb +4 -4
  247. data/lib/fog/rackspace/requests/storage/delete_object.rb +4 -4
  248. data/lib/fog/rackspace/requests/storage/get_container.rb +4 -4
  249. data/lib/fog/rackspace/requests/storage/get_containers.rb +4 -4
  250. data/lib/fog/rackspace/requests/storage/get_object.rb +4 -4
  251. data/lib/fog/rackspace/requests/storage/get_object_https_url.rb +4 -4
  252. data/lib/fog/rackspace/requests/storage/head_container.rb +4 -4
  253. data/lib/fog/rackspace/requests/storage/head_containers.rb +4 -4
  254. data/lib/fog/rackspace/requests/storage/head_object.rb +4 -4
  255. data/lib/fog/rackspace/requests/storage/post_set_meta_temp_url_key.rb +4 -4
  256. data/lib/fog/rackspace/requests/storage/put_container.rb +4 -4
  257. data/lib/fog/rackspace/requests/storage/put_object.rb +4 -4
  258. data/lib/fog/rackspace/requests/storage/put_object_manifest.rb +4 -4
  259. data/lib/fog/rackspace/service.rb +1 -1
  260. data/lib/fog/rackspace/storage.rb +12 -6
  261. data/lib/fog/riakcs.rb +3 -3
  262. data/lib/fog/riakcs/provisioning.rb +1 -3
  263. data/lib/fog/riakcs/requests/provisioning/create_user.rb +2 -2
  264. data/lib/fog/riakcs/requests/provisioning/get_user.rb +1 -1
  265. data/lib/fog/riakcs/requests/provisioning/list_users.rb +1 -1
  266. data/lib/fog/riakcs/requests/usage/get_usage.rb +1 -1
  267. data/lib/fog/riakcs/usage.rb +0 -1
  268. data/lib/fog/version.rb +1 -1
  269. data/lib/fog/vsphere/compute.rb +21 -14
  270. data/lib/fog/vsphere/models/compute/networks.rb +2 -2
  271. data/lib/fog/vsphere/models/compute/server.rb +10 -0
  272. data/lib/fog/vsphere/requests/compute/get_resource_pool.rb +1 -1
  273. data/lib/fog/vsphere/requests/compute/get_template.rb +16 -0
  274. data/lib/fog/vsphere/requests/compute/list_datacenters.rb +1 -1
  275. data/lib/fog/vsphere/requests/compute/list_templates.rb +49 -0
  276. data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +9 -6
  277. data/lib/fog/vsphere/requests/compute/vm_clone.rb +41 -27
  278. data/lib/fog/xenserver/CHANGELOG.md +1 -1
  279. data/lib/fog/xenserver/models/compute/network.rb +2 -2
  280. data/lib/tasks/changelog_task.rb +2 -1
  281. data/tests/aws/models/storage/directory_tests.rb +41 -5
  282. data/tests/aws/models/storage/file_tests.rb +1 -2
  283. data/tests/aws/models/storage/files_tests.rb +6 -4
  284. data/tests/aws/models/storage/url_tests.rb +7 -5
  285. data/tests/aws/models/storage/version_tests.rb +2 -2
  286. data/tests/aws/models/storage/versions_tests.rb +5 -5
  287. data/tests/aws/requests/iam/user_tests.rb +10 -8
  288. data/tests/aws/requests/storage/multipart_upload_tests.rb +1 -1
  289. data/tests/aws/requests/storage/object_tests.rb +15 -13
  290. data/tests/brightbox/compute/image_selector_tests.rb +103 -0
  291. data/tests/cloudstack/compute/models/disk_offering_tests.rb +5 -0
  292. data/tests/cloudstack/compute/models/snapshot_tests.rb +5 -20
  293. data/tests/cloudstack/requests/disk_offering_tests.rb +3 -3
  294. data/tests/cloudstack/requests/os_type_tests.rb +2 -3
  295. data/tests/compute/helper.rb +9 -0
  296. data/tests/core/json_tests.rb +62 -0
  297. data/tests/dynect/requests/dns/dns_tests.rb +0 -3
  298. data/tests/google/models/compute/server_tests.rb +24 -0
  299. data/tests/google/requests/compute/disk_tests.rb +88 -0
  300. data/tests/google/requests/compute/firewall_tests.rb +85 -0
  301. data/tests/google/requests/compute/image_tests.rb +80 -0
  302. data/tests/google/requests/compute/network_tests.rb +74 -0
  303. data/tests/google/requests/compute/operation_tests.rb +19 -0
  304. data/tests/google/requests/compute/server_tests.rb +84 -0
  305. data/tests/google/requests/compute/zone_tests.rb +46 -0
  306. data/tests/helpers/mock_helper.rb +4 -0
  307. data/tests/openstack/models/compute/server_tests.rb +91 -1
  308. data/tests/openstack/requests/compute/volume_tests.rb +11 -9
  309. data/tests/openstack/requests/volume/quota_tests.rb +51 -0
  310. data/tests/openstack/version_tests.rb +55 -0
  311. data/tests/rackspace/helper.rb +10 -0
  312. data/tests/rackspace/models/compute_v2/server_tests.rb +26 -1
  313. data/tests/rackspace/requests/compute/image_tests.rb +1 -1
  314. data/tests/rackspace/requests/compute_v2/image_tests.rb +2 -2
  315. data/tests/rackspace/requests/compute_v2/server_tests.rb +13 -0
  316. data/tests/rackspace/requests/dns/dns_tests.rb +1 -1
  317. data/tests/rackspace/requests/dns/records_tests.rb +3 -3
  318. data/tests/vsphere/requests/compute/vm_clone_tests.rb +10 -0
  319. metadata +109 -747
@@ -14,10 +14,10 @@ module Fog
14
14
  # ==== Returns
15
15
  # * response<~Excon::Response>:
16
16
  # * body<~String> - url for object
17
- # @raise [Fog::Rackspace::Errors::NotFound] - HTTP 404
18
- # @raise [Fog::Rackspace::Errors::BadRequest] - HTTP 400
19
- # @raise [Fog::Rackspace::Errors::InternalServerError] - HTTP 500
20
- # @raise [Fog::Rackspace::Errors::ServiceError]
17
+ # @raise [Fog::Storage::Rackspace::NotFound] - HTTP 404
18
+ # @raise [Fog::Storage::Rackspace::BadRequest] - HTTP 400
19
+ # @raise [Fog::Storage::Rackspace::InternalServerError] - HTTP 500
20
+ # @raise [Fog::Storage::Rackspace::ServiceError]
21
21
  # ==== See Also
22
22
  # http://docs.rackspace.com/files/api/v1/cf-devguide/content/Create_TempURL-d1a444.html
23
23
  def get_object_https_url(container, object, expires, options = {})
@@ -13,10 +13,10 @@ module Fog
13
13
  # * headers<~Hash>:
14
14
  # * 'X-Container-Object-Count'<~String> - Count of containers
15
15
  # * 'X-Container-Bytes-Used'<~String> - Bytes used
16
- # @raise [Fog::Rackspace::Errors::NotFound] - HTTP 404
17
- # @raise [Fog::Rackspace::Errors::BadRequest] - HTTP 400
18
- # @raise [Fog::Rackspace::Errors::InternalServerError] - HTTP 500
19
- # @raise [Fog::Rackspace::Errors::ServiceError]
16
+ # @raise [Fog::Storage::Rackspace::NotFound] - HTTP 404
17
+ # @raise [Fog::Storage::Rackspace::BadRequest] - HTTP 400
18
+ # @raise [Fog::Storage::Rackspace::InternalServerError] - HTTP 500
19
+ # @raise [Fog::Storage::Rackspace::ServiceError]
20
20
  def head_container(container)
21
21
  request(
22
22
  :expects => 204,
@@ -10,10 +10,10 @@ module Fog
10
10
  # * headers<~Hash>:
11
11
  # * 'X-Account-Container-Count'<~String> - Count of containers
12
12
  # * 'X-Account-Bytes-Used'<~String> - Bytes used
13
- # @raise [Fog::Rackspace::Errors::NotFound] - HTTP 404
14
- # @raise [Fog::Rackspace::Errors::BadRequest] - HTTP 400
15
- # @raise [Fog::Rackspace::Errors::InternalServerError] - HTTP 500
16
- # @raise [Fog::Rackspace::Errors::ServiceError]
13
+ # @raise [Fog::Storage::Rackspace::NotFound] - HTTP 404
14
+ # @raise [Fog::Storage::Rackspace::BadRequest] - HTTP 400
15
+ # @raise [Fog::Storage::Rackspace::InternalServerError] - HTTP 500
16
+ # @raise [Fog::Storage::Rackspace::ServiceError]
17
17
  def head_containers
18
18
  request(
19
19
  :expects => 204,
@@ -8,10 +8,10 @@ module Fog
8
8
  # ==== Parameters
9
9
  # * container<~String> - Name of container to look in
10
10
  # * object<~String> - Name of object to look for
11
- # @raise [Fog::Rackspace::Errors::NotFound] - HTTP 404
12
- # @raise [Fog::Rackspace::Errors::BadRequest] - HTTP 400
13
- # @raise [Fog::Rackspace::Errors::InternalServerError] - HTTP 500
14
- # @raise [Fog::Rackspace::Errors::ServiceError]
11
+ # @raise [Fog::Storage::Rackspace::NotFound] - HTTP 404
12
+ # @raise [Fog::Storage::Rackspace::BadRequest] - HTTP 400
13
+ # @raise [Fog::Storage::Rackspace::InternalServerError] - HTTP 500
14
+ # @raise [Fog::Storage::Rackspace::ServiceError]
15
15
  def head_object(container, object)
16
16
  request({
17
17
  :expects => 200,
@@ -19,10 +19,10 @@ module Fog
19
19
  #
20
20
  # ==== Returns
21
21
  # * response<~Excon::Response>
22
- # @raise [Fog::Rackspace::Errors::NotFound] - HTTP 404
23
- # @raise [Fog::Rackspace::Errors::BadRequest] - HTTP 400
24
- # @raise [Fog::Rackspace::Errors::InternalServerError] - HTTP 500
25
- # @raise [Fog::Rackspace::Errors::ServiceError]
22
+ # @raise [Fog::Storage::Rackspace::NotFound] - HTTP 404
23
+ # @raise [Fog::Storage::Rackspace::BadRequest] - HTTP 400
24
+ # @raise [Fog::Storage::Rackspace::InternalServerError] - HTTP 500
25
+ # @raise [Fog::Storage::Rackspace::ServiceError]
26
26
  # ==== See Also
27
27
  # http://docs.rackspace.com/files/api/v1/cf-devguide/content/Set_Account_Metadata-d1a4460.html
28
28
  def post_set_meta_temp_url_key(key)
@@ -7,10 +7,10 @@ module Fog
7
7
  #
8
8
  # ==== Parameters
9
9
  # * name<~String> - Name for container, should be < 256 bytes and must not contain '/'
10
- # @raise [Fog::Rackspace::Errors::NotFound] - HTTP 404
11
- # @raise [Fog::Rackspace::Errors::BadRequest] - HTTP 400
12
- # @raise [Fog::Rackspace::Errors::InternalServerError] - HTTP 500
13
- # @raise [Fog::Rackspace::Errors::ServiceError]
10
+ # @raise [Fog::Storage::Rackspace::NotFound] - HTTP 404
11
+ # @raise [Fog::Storage::Rackspace::BadRequest] - HTTP 400
12
+ # @raise [Fog::Storage::Rackspace::InternalServerError] - HTTP 500
13
+ # @raise [Fog::Storage::Rackspace::ServiceError]
14
14
  def put_container(name, options={})
15
15
  request(
16
16
  :expects => [201, 202],
@@ -10,10 +10,10 @@ module Fog
10
10
  # * object<~String> - Name for object
11
11
  # * data<~String|File> - data to upload
12
12
  # * options<~Hash> - config headers for object. Defaults to {}.
13
- # @raise [Fog::Rackspace::Errors::NotFound] - HTTP 404
14
- # @raise [Fog::Rackspace::Errors::BadRequest] - HTTP 400
15
- # @raise [Fog::Rackspace::Errors::InternalServerError] - HTTP 500
16
- # @raise [Fog::Rackspace::Errors::ServiceError]
13
+ # @raise [Fog::Storage::Rackspace::NotFound] - HTTP 404
14
+ # @raise [Fog::Storage::Rackspace::BadRequest] - HTTP 400
15
+ # @raise [Fog::Storage::Rackspace::InternalServerError] - HTTP 500
16
+ # @raise [Fog::Storage::Rackspace::ServiceError]
17
17
  def put_object(container, object, data, options = {})
18
18
  data = Fog::Storage.parse_data(data)
19
19
  headers = data[:headers].merge!(options)
@@ -8,10 +8,10 @@ module Fog
8
8
  # ==== Parameters
9
9
  # * container<~String> - Name for container, should be < 256 bytes and must not contain '/'
10
10
  # * object<~String> - Name for object
11
- # @raise [Fog::Rackspace::Errors::NotFound] - HTTP 404
12
- # @raise [Fog::Rackspace::Errors::BadRequest] - HTTP 400
13
- # @raise [Fog::Rackspace::Errors::InternalServerError] - HTTP 500
14
- # @raise [Fog::Rackspace::Errors::ServiceError]
11
+ # @raise [Fog::Storage::Rackspace::NotFound] - HTTP 404
12
+ # @raise [Fog::Storage::Rackspace::BadRequest] - HTTP 400
13
+ # @raise [Fog::Storage::Rackspace::InternalServerError] - HTTP 500
14
+ # @raise [Fog::Storage::Rackspace::ServiceError]
15
15
  def put_object_manifest(container, object)
16
16
  path = "#{Fog::Rackspace.escape(container)}/#{Fog::Rackspace.escape(object)}"
17
17
  request(
@@ -28,7 +28,7 @@ module Fog
28
28
 
29
29
  def authenticate(options)
30
30
  self.send authentication_method, options
31
- end
31
+ end
32
32
 
33
33
  private
34
34
 
@@ -4,6 +4,11 @@ require 'fog/storage'
4
4
  module Fog
5
5
  module Storage
6
6
  class Rackspace < Fog::Service
7
+ include Fog::Rackspace::Errors
8
+
9
+ class ServiceError < Fog::Rackspace::Errors::ServiceError; end
10
+ class InternalServerError < Fog::Rackspace::Errors::InternalServerError; end
11
+ class BadRequest < Fog::Rackspace::Errors::BadRequest; end
7
12
 
8
13
  requires :rackspace_api_key, :rackspace_username
9
14
  recognizes :rackspace_auth_url, :rackspace_servicenet, :rackspace_cdn_ssl, :persistent, :rackspace_region
@@ -152,13 +157,14 @@ module Fog
152
157
  else # bad credentials
153
158
  raise error
154
159
  end
160
+ rescue Excon::Errors::NotFound => error
161
+ raise NotFound.slurp(error, region)
162
+ rescue Excon::Errors::BadRequest => error
163
+ raise BadRequest.slurp error
164
+ rescue Excon::Errors::InternalServerError => error
165
+ raise InternalServerError.slurp error
155
166
  rescue Excon::Errors::HTTPStatusError => error
156
- raise case error
157
- when Excon::Errors::NotFound
158
- Fog::Storage::Rackspace::NotFound.slurp(error)
159
- else
160
- error
161
- end
167
+ raise ServiceError.slurp error
162
168
  end
163
169
  if !response.body.empty? && parse_json && response.headers['Content-Type'] =~ %r{application/json}
164
170
  response.body = Fog::JSON.decode(response.body)
@@ -71,9 +71,9 @@ module Fog
71
71
 
72
72
  module UserUtils
73
73
  def update_riakcs_user(key_id, user)
74
- response = @s3_connection.put_object('riak-cs', "user/#{key_id}", MultiJson.encode(user), { 'Content-Type' => 'application/json' })
74
+ response = @s3_connection.put_object('riak-cs', "user/#{key_id}", Fog::JSON.encode(user), { 'Content-Type' => 'application/json' })
75
75
  if !response.body.empty?
76
- response.body = MultiJson.decode(response.body)
76
+ response.body = Fog::JSON.decode(response.body)
77
77
  end
78
78
  response
79
79
  end
@@ -84,7 +84,7 @@ module Fog
84
84
  data[key_id][:status] = status
85
85
  end
86
86
 
87
- if regrant = user[:new_key_secret]
87
+ if user[:new_key_secret]
88
88
  data[key_id][:key_secret] = rand(100).to_s
89
89
  end
90
90
 
@@ -48,8 +48,6 @@ module Fog
48
48
 
49
49
  def initialize(options = {})
50
50
  require 'mime/types'
51
- require 'multi_json'
52
-
53
51
  configure_uri_options(options)
54
52
  @riakcs_access_key_id = options[:riakcs_access_key_id]
55
53
  @riakcs_secret_access_key = options[:riakcs_secret_access_key]
@@ -89,7 +87,7 @@ module Fog
89
87
  end
90
88
  end
91
89
  if !response.body.empty? && parse_response
92
- response.body = MultiJson.decode(response.body)
90
+ response.body = Fog::JSON.decode(response.body)
93
91
  end
94
92
  response
95
93
  end
@@ -3,7 +3,7 @@ module Fog
3
3
  class Provisioning
4
4
  class Real
5
5
  def create_user(email, name, options = {})
6
- payload = MultiJson.encode({ :email => email, :name => name })
6
+ payload = Fog::JSON.encode({ :email => email, :name => name })
7
7
  headers = { 'Content-Type' => 'application/json' }
8
8
 
9
9
  if(options[:anonymous])
@@ -20,7 +20,7 @@ module Fog
20
20
  if !response.body.empty?
21
21
  case response.headers['Content-Type']
22
22
  when 'application/json'
23
- response.body = MultiJson.decode(response.body)
23
+ response.body = Fog::JSON.decode(response.body)
24
24
  end
25
25
  end
26
26
  response
@@ -7,7 +7,7 @@ module Fog
7
7
 
8
8
  def get_user(key_id)
9
9
  response = @s3_connection.get_object('riak-cs', "user/#{key_id}", { 'Accept' => 'application/json' })
10
- response.body = MultiJson.decode(response.body)
10
+ response.body = Fog::JSON.decode(response.body)
11
11
  response
12
12
  end
13
13
  end
@@ -10,7 +10,7 @@ module Fog
10
10
 
11
11
  boundary = extract_boundary(response.headers['Content-Type'])
12
12
  parts = parse(response.body, boundary)
13
- decoded = parts.map { |part| MultiJson.decode(part[:body]) }
13
+ decoded = parts.map { |part| Fog::JSON.decode(part[:body]) }
14
14
 
15
15
  response.body = decoded.flatten
16
16
 
@@ -37,7 +37,7 @@ module Fog
37
37
  response = @connection.get_object('riak-cs', ["usage", request_uri(access_key_id, options)].join("/"))
38
38
 
39
39
  if !response.body.empty?
40
- response.body = MultiJson.decode(response.body)
40
+ response.body = Fog::JSON.decode(response.body)
41
41
  end
42
42
  response
43
43
  end
@@ -42,7 +42,6 @@ module Fog
42
42
 
43
43
  def initialize(options = {})
44
44
  require 'mime/types'
45
- require 'multi_json'
46
45
 
47
46
  configure_uri_options(options)
48
47
  @riakcs_access_key_id = options[:riakcs_access_key_id]
@@ -1,3 +1,3 @@
1
1
  module Fog
2
- VERSION = '1.10.1'
2
+ VERSION = '1.11.0'
3
3
  end
@@ -49,6 +49,8 @@ module Fog
49
49
  request :get_network
50
50
  request :list_datastores
51
51
  request :get_datastore
52
+ request :list_templates
53
+ request :get_template
52
54
  request :get_folder
53
55
  request :list_folders
54
56
  request :create_vm
@@ -74,6 +76,8 @@ module Fog
74
76
  :id => 'config.instanceUuid',
75
77
  :name => 'name',
76
78
  :uuid => 'config.uuid',
79
+ :template => 'config.template',
80
+ :parent => 'parent',
77
81
  :hostname => 'summary.guest.hostName',
78
82
  :operatingsystem => 'summary.guest.guestFullName',
79
83
  :ipaddress => 'guest.ipAddress',
@@ -88,6 +92,11 @@ module Fog
88
92
  :guest_id => 'summary.guest.guestId',
89
93
  }
90
94
 
95
+ def convert_vm_view_to_attr_hash(vms)
96
+ vms = @connection.serviceContent.propertyCollector.collectMultiple(vms,*ATTR_TO_PROP.values.uniq)
97
+ vms.map { |vm| props_to_attr_hash(*vm) }
98
+ end
99
+
91
100
  # Utility method to convert a VMware managed object into an attribute hash.
92
101
  # This should only really be necessary for the real class.
93
102
  # This method is expected to be called by the request methods
@@ -96,6 +105,10 @@ module Fog
96
105
  return nil unless vm_mob_ref
97
106
 
98
107
  props = vm_mob_ref.collect!(*ATTR_TO_PROP.values.uniq)
108
+ props_to_attr_hash vm_mob_ref, props
109
+ end
110
+
111
+ def props_to_attr_hash vm_mob_ref, props
99
112
  # NOTE: Object.tap is in 1.8.7 and later.
100
113
  # Here we create the hash object that this method returns, but first we need
101
114
  # to add a few more attributes that require additional calls to the vSphere
@@ -110,26 +123,20 @@ module Fog
110
123
  # The name method "magically" appears after a VM is ready and
111
124
  # finished cloning.
112
125
  if attrs['hypervisor'].kind_of?(RbVmomi::VIM::HostSystem)
113
- begin
114
- host = attrs['hypervisor']
115
- attrs['datacenter'] = parent_attribute(host.path, :datacenter)[1]
116
- attrs['cluster'] = parent_attribute(host.path, :cluster)[1]
117
- attrs['hypervisor'] = host.name
118
- attrs['resource_pool'] = (vm_mob_ref.resourcePool || host.resourcePool).name rescue nil
119
- rescue
120
- # If it's not ready, set the hypervisor to nil
121
- attrs['hypervisor'] = nil
122
- end
126
+ host = attrs['hypervisor']
127
+ attrs['datacenter'] = Proc.new { parent_attribute(host.path, :datacenter)[1] rescue nil }
128
+ attrs['cluster'] = Proc.new { parent_attribute(host.path, :cluster)[1] rescue nil }
129
+ attrs['hypervisor'] = Proc.new { host.name rescue nil }
130
+ attrs['resource_pool'] = Proc.new {(vm_mob_ref.resourcePool || host.resourcePool).name rescue nil}
123
131
  end
124
132
  # This inline rescue catches any standard error. While a VM is
125
133
  # cloning, a call to the macs method will throw and NoMethodError
126
- attrs['mac_addresses'] = vm_mob_ref.macs rescue nil
127
- # Rescue nil to catch testing while vm_mob_ref isn't reaL??
128
- attrs['path'] = "/"+vm_mob_ref.parent.path.map(&:last).join('/') rescue nil
134
+ attrs['mac_addresses'] = Proc.new {vm_mob_ref.macs rescue nil}
135
+ # Rescue nil to catch testing while vm_mob_ref isn't reaL??
136
+ attrs['path'] = "/"+attrs['parent'].path.map(&:last).join('/') rescue nil
129
137
  attrs['relative_path'] = (attrs['path'].split('/').reject {|e| e.empty?} - ["Datacenters", attrs['datacenter'], "vm"]).join("/") rescue nil
130
138
  end
131
139
  end
132
-
133
140
  # returns the parent object based on a type
134
141
  # provides both real RbVmomi object and its name.
135
142
  # e.g.
@@ -11,14 +11,14 @@ module Fog
11
11
  attr_accessor :datacenter
12
12
 
13
13
  def all(filters = {})
14
- load service.list_networks(filters.merge(:datacenter => datacenter))
14
+ f = { :datacenter => datacenter }.merge(filters)
15
+ load service.list_networks(f)
15
16
  end
16
17
 
17
18
  def get(id)
18
19
  requires :datacenter
19
20
  new service.get_network(id, datacenter)
20
21
  end
21
-
22
22
  end
23
23
  end
24
24
  end
@@ -52,6 +52,16 @@ module Fog
52
52
  initialize_volumes
53
53
  end
54
54
 
55
+ # Lazy Loaded Attributes
56
+ [:datacenter, :cluster, :hypervisor, :resource_pool, :mac_addresses].each do |attr|
57
+ define_method attr do
58
+ attributes[attr] = attributes[attr].call if attributes[attr].is_a?(Proc)
59
+ attributes[attr]
60
+ end
61
+ end
62
+ # End Lazy Loaded Attributes
63
+
64
+
55
65
  def vm_reconfig_memory(options = {})
56
66
  requires :instance_uuid, :memory
57
67
  service.vm_reconfig_memory('instance_uuid' => instance_uuid, 'memory' => memory)
@@ -11,7 +11,7 @@ module Fog
11
11
  protected
12
12
 
13
13
  def get_raw_resource_pool(name, cluster_name, datacenter_name)
14
- dc = get_raw_datacenter(datacenter_name)
14
+ dc = find_raw_datacenter(datacenter_name)
15
15
  cluster = dc.find_compute_resource(cluster_name)
16
16
  cluster.resourcePool.find name
17
17
  end
@@ -0,0 +1,16 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def get_template(id, datacenter_name = nil)
6
+ convert_vm_mob_ref_to_attr_hash(get_vm_ref(id, datacenter_name))
7
+ end
8
+ end
9
+
10
+ class Mock
11
+ def get_template(id, datacenter_name = nil)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -20,7 +20,7 @@ module Fog
20
20
  end
21
21
 
22
22
  def find_datacenters name=nil
23
- name ? [get_raw_datacenter(name)] : raw_datacenters
23
+ name ? [find_raw_datacenter(name)] : raw_datacenters
24
24
  end
25
25
  end
26
26
 
@@ -0,0 +1,49 @@
1
+ module Fog
2
+ module Compute
3
+ class Vsphere
4
+ class Real
5
+ def list_templates(options = { })
6
+ options[:folder] ||= options['folder']
7
+ if options[:folder] then
8
+ list_all_templates_in_folder(options[:folder], options[:datacenter])
9
+ else
10
+ list_all_templates(options)
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def list_all_templates_in_folder(path, datacenter_name)
17
+ folder = get_raw_vmfolder(path, datacenter_name)
18
+
19
+ vms = folder.children.grep(RbVmomi::VIM::VirtualMachine)
20
+ # remove all virtual machines that are not template
21
+ vms.delete_if { |v| v.config.nil? or not v.config.template }
22
+
23
+ vms.map(&method(:convert_vm_mob_ref_to_attr_hash))
24
+ end
25
+
26
+ def list_all_templates(options = {})
27
+ datacenters = find_datacenters(options[:datacenter])
28
+
29
+ vms = datacenters.map do |dc|
30
+ @connection.serviceContent.viewManager.CreateContainerView({
31
+ :container => dc.vmFolder,
32
+ :type => ["VirtualMachine"],
33
+ :recursive => true
34
+ }).view
35
+ end.flatten
36
+ # remove all virtual machines that are not templates
37
+ vms.delete_if { |v| v.config.nil? or not v.config.template }
38
+
39
+ vms.map(&method(:convert_vm_mob_ref_to_attr_hash))
40
+ end
41
+
42
+ end
43
+ class Mock
44
+ def list_templates(filters = { })
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end