fog 1.5.0 → 1.6.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 (355) hide show
  1. data/.travis.yml +21 -0
  2. data/README.md +3 -1
  3. data/Rakefile +4 -1
  4. data/changelog.txt +462 -0
  5. data/docs/storage/index.markdown +4 -4
  6. data/fog.gemspec +2 -2
  7. data/lib/fog.rb +1 -1
  8. data/lib/fog/atmos.rb +11 -0
  9. data/lib/fog/atmos/models/storage/directories.rb +48 -0
  10. data/lib/fog/atmos/models/storage/directory.rb +53 -0
  11. data/lib/fog/atmos/models/storage/file.rb +107 -0
  12. data/lib/fog/atmos/models/storage/files.rb +73 -0
  13. data/lib/fog/atmos/requests/storage/delete_namespace.rb +19 -0
  14. data/lib/fog/atmos/requests/storage/get_namespace.rb +20 -0
  15. data/lib/fog/atmos/requests/storage/head_namespace.rb +20 -0
  16. data/lib/fog/atmos/requests/storage/post_namespace.rb +20 -0
  17. data/lib/fog/atmos/requests/storage/put_namespace.rb +20 -0
  18. data/lib/fog/atmos/storage.rb +186 -0
  19. data/lib/fog/aws.rb +2 -0
  20. data/lib/fog/aws/auto_scaling.rb +15 -1
  21. data/lib/fog/aws/compute.rb +26 -17
  22. data/lib/fog/aws/elb.rb +14 -2
  23. data/lib/fog/aws/glacier.rb +172 -0
  24. data/lib/fog/aws/iam.rb +35 -29
  25. data/lib/fog/aws/models/auto_scaling/group.rb +1 -1
  26. data/lib/fog/aws/models/compute/flavors.rb +11 -0
  27. data/lib/fog/aws/models/compute/security_group.rb +22 -6
  28. data/lib/fog/aws/models/compute/server.rb +5 -1
  29. data/lib/fog/aws/models/compute/spot_request.rb +12 -0
  30. data/lib/fog/aws/models/compute/spot_requests.rb +1 -2
  31. data/lib/fog/aws/models/compute/volume.rb +7 -1
  32. data/lib/fog/aws/models/glacier/archive.rb +70 -0
  33. data/lib/fog/aws/models/glacier/archives.rb +30 -0
  34. data/lib/fog/aws/models/glacier/job.rb +65 -0
  35. data/lib/fog/aws/models/glacier/jobs.rb +45 -0
  36. data/lib/fog/aws/models/glacier/vault.rb +53 -0
  37. data/lib/fog/aws/models/glacier/vaults.rb +28 -0
  38. data/lib/fog/aws/models/rds/server.rb +3 -1
  39. data/lib/fog/aws/models/rds/snapshot.rb +1 -0
  40. data/lib/fog/aws/models/rds/snapshots.rb +3 -0
  41. data/lib/fog/aws/models/storage/file.rb +4 -3
  42. data/lib/fog/aws/parsers/auto_scaling/describe_auto_scaling_groups.rb +8 -1
  43. data/lib/fog/aws/parsers/compute/create_volume.rb +2 -2
  44. data/lib/fog/aws/parsers/compute/describe_instance_status.rb +8 -1
  45. data/lib/fog/aws/parsers/compute/describe_instances.rb +2 -0
  46. data/lib/fog/aws/parsers/compute/describe_reserved_instances_offerings.rb +1 -1
  47. data/lib/fog/aws/parsers/compute/describe_volumes.rb +2 -2
  48. data/lib/fog/aws/parsers/compute/run_instances.rb +2 -0
  49. data/lib/fog/aws/parsers/compute/spot_instance_requests.rb +1 -1
  50. data/lib/fog/aws/parsers/dns/list_resource_record_sets.rb +3 -1
  51. data/lib/fog/aws/parsers/rds/db_parser.rb +3 -1
  52. data/lib/fog/aws/parsers/rds/snapshot_parser.rb +1 -0
  53. data/lib/fog/aws/rds.rb +9 -9
  54. data/lib/fog/aws/requests/auto_scaling/create_auto_scaling_group.rb +1 -0
  55. data/lib/fog/aws/requests/auto_scaling/delete_auto_scaling_group.rb +1 -1
  56. data/lib/fog/aws/requests/compute/create_volume.rb +53 -14
  57. data/lib/fog/aws/requests/compute/describe_instance_status.rb +2 -0
  58. data/lib/fog/aws/requests/compute/describe_instances.rb +3 -1
  59. data/lib/fog/aws/requests/compute/describe_internet_gateways.rb +13 -7
  60. data/lib/fog/aws/requests/compute/describe_spot_instance_requests.rb +1 -0
  61. data/lib/fog/aws/requests/compute/describe_subnets.rb +13 -7
  62. data/lib/fog/aws/requests/compute/describe_volumes.rb +2 -0
  63. data/lib/fog/aws/requests/compute/describe_vpcs.rb +12 -6
  64. data/lib/fog/aws/requests/compute/request_spot_instances.rb +2 -0
  65. data/lib/fog/aws/requests/compute/run_instances.rb +8 -2
  66. data/lib/fog/aws/requests/dns/change_resource_record_sets.rb +20 -1
  67. data/lib/fog/aws/requests/elb/create_load_balancer.rb +2 -2
  68. data/lib/fog/aws/requests/elb/describe_load_balancers.rb +1 -1
  69. data/lib/fog/aws/requests/glacier/abort_multipart_upload.rb +35 -0
  70. data/lib/fog/aws/requests/glacier/complete_multipart_upload.rb +42 -0
  71. data/lib/fog/aws/requests/glacier/create_archive.rb +43 -0
  72. data/lib/fog/aws/requests/glacier/create_vault.rb +34 -0
  73. data/lib/fog/aws/requests/glacier/delete_archive.rb +35 -0
  74. data/lib/fog/aws/requests/glacier/delete_vault.rb +34 -0
  75. data/lib/fog/aws/requests/glacier/delete_vault_notification_configuration.rb +33 -0
  76. data/lib/fog/aws/requests/glacier/describe_job.rb +35 -0
  77. data/lib/fog/aws/requests/glacier/describe_vault.rb +34 -0
  78. data/lib/fog/aws/requests/glacier/get_job_output.rb +41 -0
  79. data/lib/fog/aws/requests/glacier/get_vault_notification_configuration.rb +34 -0
  80. data/lib/fog/aws/requests/glacier/initiate_job.rb +41 -0
  81. data/lib/fog/aws/requests/glacier/initiate_multipart_upload.rb +38 -0
  82. data/lib/fog/aws/requests/glacier/list_jobs.rb +39 -0
  83. data/lib/fog/aws/requests/glacier/list_multipart_uploads.rb +37 -0
  84. data/lib/fog/aws/requests/glacier/list_parts.rb +37 -0
  85. data/lib/fog/aws/requests/glacier/list_vaults.rb +36 -0
  86. data/lib/fog/aws/requests/glacier/set_vault_notification_configuration.rb +37 -0
  87. data/lib/fog/aws/requests/glacier/upload_part.rb +46 -0
  88. data/lib/fog/aws/requests/rds/create_db_instance.rb +7 -5
  89. data/lib/fog/aws/requests/rds/create_db_instance_read_replica.rb +41 -1
  90. data/lib/fog/aws/requests/rds/create_db_snapshot.rb +1 -1
  91. data/lib/fog/aws/requests/rds/describe_db_instances.rb +8 -10
  92. data/lib/fog/aws/requests/rds/describe_db_security_groups.rb +1 -1
  93. data/lib/fog/aws/requests/rds/describe_db_snapshots.rb +2 -0
  94. data/lib/fog/aws/requests/rds/modify_db_instance.rb +7 -6
  95. data/lib/fog/aws/requests/rds/reboot_db_instance.rb +6 -5
  96. data/lib/fog/aws/requests/storage/get_object.rb +45 -2
  97. data/lib/fog/aws/requests/storage/upload_part.rb +1 -0
  98. data/lib/fog/aws/signaturev4.rb +73 -0
  99. data/lib/fog/aws/sqs.rb +2 -6
  100. data/lib/fog/bare_metal_cloud/compute.rb +3 -1
  101. data/lib/fog/bare_metal_cloud/requests/compute/add_server_by_configuration.rb +33 -0
  102. data/lib/fog/bare_metal_cloud/requests/compute/get_server.rb +17 -12
  103. data/lib/fog/bare_metal_cloud/requests/compute/list_configurations.rb +27 -0
  104. data/lib/fog/bare_metal_cloud/requests/compute/list_images.rb +4 -4
  105. data/lib/fog/bare_metal_cloud/requests/compute/list_plans.rb +7 -7
  106. data/lib/fog/bare_metal_cloud/requests/compute/list_servers.rb +2 -2
  107. data/lib/fog/bin.rb +7 -0
  108. data/lib/fog/bin/atmos.rb +31 -0
  109. data/lib/fog/bin/aws.rb +4 -0
  110. data/lib/fog/bin/ecloud.rb +4 -0
  111. data/lib/fog/bin/rackspace.rb +7 -0
  112. data/lib/fog/bin/serverlove.rb +31 -0
  113. data/lib/fog/bluebox/requests/compute/create_block.rb +18 -4
  114. data/lib/fog/brightbox/compute.rb +52 -0
  115. data/lib/fog/brightbox/models/compute/cloud_ip.rb +2 -0
  116. data/lib/fog/brightbox/models/compute/image.rb +1 -0
  117. data/lib/fog/brightbox/models/compute/server.rb +46 -3
  118. data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +3 -3
  119. data/lib/fog/cloudstack/compute.rb +4 -1
  120. data/lib/fog/cloudstack/models/compute/images.rb +15 -6
  121. data/lib/fog/cloudstack/models/compute/job.rb +1 -1
  122. data/lib/fog/cloudstack/requests/compute/attach_volume.rb +1 -1
  123. data/lib/fog/cloudstack/requests/compute/register_template.rb +35 -0
  124. data/lib/fog/compute.rb +15 -3
  125. data/lib/fog/core/errors.rb +1 -0
  126. data/lib/fog/core/time.rb +4 -0
  127. data/lib/fog/dynect/dns.rb +5 -5
  128. data/lib/fog/ecloud.rb +6 -0
  129. data/lib/fog/ecloud/compute.rb +3 -1
  130. data/lib/fog/ecloud/models/compute/ip_addresses.rb +1 -0
  131. data/lib/fog/ecloud/models/compute/networks.rb +1 -0
  132. data/lib/fog/ecloud/models/compute/server.rb +31 -1
  133. data/lib/fog/ecloud/requests/compute/virtual_machine_add_ip.rb +40 -0
  134. data/lib/fog/ecloud/requests/compute/virtual_machine_upload_file.rb +31 -0
  135. data/lib/fog/google/models/storage/directory.rb +2 -2
  136. data/lib/fog/google/models/storage/file.rb +2 -2
  137. data/lib/fog/google/requests/storage/get_bucket.rb +1 -2
  138. data/lib/fog/google/requests/storage/put_object.rb +1 -2
  139. data/lib/fog/google/storage.rb +1 -1
  140. data/lib/fog/hp/models/compute/image.rb +1 -1
  141. data/lib/fog/hp/models/compute/server.rb +4 -0
  142. data/lib/fog/hp/requests/compute/delete_security_group_rule.rb +4 -4
  143. data/lib/fog/hp/requests/storage/get_object.rb +8 -2
  144. data/lib/fog/hp/storage.rb +1 -0
  145. data/lib/fog/libvirt/models/compute/server.rb +1 -1
  146. data/lib/fog/libvirt/models/compute/templates/server.xml.erb +1 -1
  147. data/lib/fog/openstack.rb +7 -0
  148. data/lib/fog/openstack/compute.rb +4 -1
  149. data/lib/fog/openstack/models/compute/server.rb +1 -1
  150. data/lib/fog/openstack/requests/compute/create_server.rb +8 -2
  151. data/lib/fog/openstack/requests/identity/list_roles_for_user_on_tenant.rb +1 -1
  152. data/lib/fog/openstack/requests/identity/list_tenants.rb +1 -0
  153. data/lib/fog/providers.rb +2 -0
  154. data/lib/fog/rackspace.rb +9 -7
  155. data/lib/fog/rackspace/block_storage.rb +114 -0
  156. data/lib/fog/rackspace/compute_v2.rb +123 -0
  157. data/lib/fog/rackspace/models/block_storage/snapshot.rb +46 -0
  158. data/lib/fog/rackspace/models/block_storage/snapshots.rb +25 -0
  159. data/lib/fog/rackspace/models/block_storage/volume.rb +58 -0
  160. data/lib/fog/rackspace/models/block_storage/volume_type.rb +14 -0
  161. data/lib/fog/rackspace/models/block_storage/volume_types.rb +25 -0
  162. data/lib/fog/rackspace/models/block_storage/volumes.rb +25 -0
  163. data/lib/fog/rackspace/models/compute_v2/attachment.rb +34 -0
  164. data/lib/fog/rackspace/models/compute_v2/attachments.rb +25 -0
  165. data/lib/fog/rackspace/models/compute_v2/flavor.rb +17 -0
  166. data/lib/fog/rackspace/models/compute_v2/flavors.rb +25 -0
  167. data/lib/fog/rackspace/models/compute_v2/image.rb +30 -0
  168. data/lib/fog/rackspace/models/compute_v2/images.rb +25 -0
  169. data/lib/fog/rackspace/models/compute_v2/server.rb +147 -0
  170. data/lib/fog/rackspace/models/compute_v2/servers.rb +25 -0
  171. data/lib/fog/rackspace/models/storage/directory.rb +3 -3
  172. data/lib/fog/rackspace/requests/block_storage/create_snapshot.rb +26 -0
  173. data/lib/fog/rackspace/requests/block_storage/create_volume.rb +27 -0
  174. data/lib/fog/rackspace/requests/block_storage/delete_snapshot.rb +15 -0
  175. data/lib/fog/rackspace/requests/block_storage/delete_volume.rb +15 -0
  176. data/lib/fog/rackspace/requests/block_storage/get_snapshot.rb +15 -0
  177. data/lib/fog/rackspace/requests/block_storage/get_volume.rb +15 -0
  178. data/lib/fog/rackspace/requests/block_storage/get_volume_type.rb +15 -0
  179. data/lib/fog/rackspace/requests/block_storage/list_snapshots.rb +15 -0
  180. data/lib/fog/rackspace/requests/block_storage/list_volume_types.rb +15 -0
  181. data/lib/fog/rackspace/requests/block_storage/list_volumes.rb +15 -0
  182. data/lib/fog/rackspace/requests/compute_v2/attach_volume.rb +23 -0
  183. data/lib/fog/rackspace/requests/compute_v2/change_server_password.rb +22 -0
  184. data/lib/fog/rackspace/requests/compute_v2/confirm_resize_server.rb +20 -0
  185. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +28 -0
  186. data/lib/fog/rackspace/requests/compute_v2/delete_attachment.rb +15 -0
  187. data/lib/fog/rackspace/requests/compute_v2/delete_server.rb +15 -0
  188. data/lib/fog/rackspace/requests/compute_v2/get_attachment.rb +15 -0
  189. data/lib/fog/rackspace/requests/compute_v2/get_flavor.rb +15 -0
  190. data/lib/fog/rackspace/requests/compute_v2/get_image.rb +15 -0
  191. data/lib/fog/rackspace/requests/compute_v2/get_server.rb +15 -0
  192. data/lib/fog/rackspace/requests/compute_v2/list_attachments.rb +15 -0
  193. data/lib/fog/rackspace/requests/compute_v2/list_flavors.rb +15 -0
  194. data/lib/fog/rackspace/requests/compute_v2/list_images.rb +15 -0
  195. data/lib/fog/rackspace/requests/compute_v2/list_servers.rb +15 -0
  196. data/lib/fog/rackspace/requests/compute_v2/reboot_server.rb +22 -0
  197. data/lib/fog/rackspace/requests/compute_v2/rebuild_server.rb +22 -0
  198. data/lib/fog/rackspace/requests/compute_v2/resize_server.rb +22 -0
  199. data/lib/fog/rackspace/requests/compute_v2/revert_resize_server.rb +20 -0
  200. data/lib/fog/rackspace/requests/compute_v2/update_server.rb +22 -0
  201. data/lib/fog/rackspace/requests/storage/delete_object.rb +1 -1
  202. data/lib/fog/rackspace/requests/storage/get_object_https_url.rb +51 -0
  203. data/lib/fog/rackspace/requests/storage/post_set_meta_temp_url_key.rb +37 -0
  204. data/lib/fog/rackspace/storage.rb +4 -0
  205. data/lib/fog/serverlove.rb +10 -0
  206. data/lib/fog/serverlove/compute.rb +97 -0
  207. data/lib/fog/serverlove/models/compute/image.rb +57 -0
  208. data/lib/fog/serverlove/models/compute/images.rb +26 -0
  209. data/lib/fog/serverlove/models/compute/server.rb +72 -0
  210. data/lib/fog/serverlove/models/compute/servers.rb +26 -0
  211. data/lib/fog/serverlove/requests/compute/create_image.rb +32 -0
  212. data/lib/fog/serverlove/requests/compute/create_server.rb +34 -0
  213. data/lib/fog/serverlove/requests/compute/destroy_image.rb +13 -0
  214. data/lib/fog/serverlove/requests/compute/destroy_server.rb +13 -0
  215. data/lib/fog/serverlove/requests/compute/get_image.rb +13 -0
  216. data/lib/fog/serverlove/requests/compute/get_images.rb +13 -0
  217. data/lib/fog/serverlove/requests/compute/get_server.rb +13 -0
  218. data/lib/fog/serverlove/requests/compute/get_servers.rb +13 -0
  219. data/lib/fog/serverlove/requests/compute/load_standard_image.rb +13 -0
  220. data/lib/fog/serverlove/requests/compute/reset_server.rb +13 -0
  221. data/lib/fog/serverlove/requests/compute/shutdown_server.rb +13 -0
  222. data/lib/fog/serverlove/requests/compute/start_server.rb +13 -0
  223. data/lib/fog/serverlove/requests/compute/stop_server.rb +13 -0
  224. data/lib/fog/serverlove/requests/compute/update_image.rb +15 -0
  225. data/lib/fog/serverlove/requests/compute/update_server.rb +15 -0
  226. data/lib/fog/serverlove/util/compute/password_generator.rb +11 -0
  227. data/lib/fog/storage.rb +3 -0
  228. data/lib/fog/terremark/models/shared/image.rb +22 -0
  229. data/lib/fog/terremark/models/shared/images.rb +48 -0
  230. data/lib/fog/terremark/models/shared/internetservice.rb +67 -0
  231. data/lib/fog/terremark/models/shared/internetservices.rb +42 -0
  232. data/lib/fog/terremark/models/shared/nodeservice.rb +52 -0
  233. data/lib/fog/terremark/models/shared/nodeservices.rb +32 -0
  234. data/lib/fog/terremark/models/shared/server.rb +114 -15
  235. data/lib/fog/terremark/models/shared/servers.rb +7 -8
  236. data/lib/fog/terremark/models/shared/vdc.rb +6 -1
  237. data/lib/fog/terremark/parsers/shared/get_catalog.rb +7 -2
  238. data/lib/fog/terremark/parsers/shared/get_keys_list.rb +56 -0
  239. data/lib/fog/terremark/requests/shared/add_internet_service.rb +10 -9
  240. data/lib/fog/terremark/requests/shared/add_node_service.rb +10 -12
  241. data/lib/fog/terremark/requests/shared/configure_vapp.rb +61 -0
  242. data/lib/fog/terremark/requests/shared/create_internet_service.rb +16 -11
  243. data/lib/fog/terremark/requests/shared/delete_internet_service.rb +2 -1
  244. data/lib/fog/terremark/requests/shared/delete_node_service.rb +2 -1
  245. data/lib/fog/terremark/requests/shared/delete_public_ip.rb +2 -1
  246. data/lib/fog/terremark/requests/shared/get_internet_services.rb +2 -1
  247. data/lib/fog/terremark/requests/shared/get_keys_list.rb +36 -0
  248. data/lib/fog/terremark/requests/shared/get_node_services.rb +2 -1
  249. data/lib/fog/terremark/requests/shared/instantiate_vapp_template.rb +11 -1
  250. data/lib/fog/terremark/shared.rb +19 -1
  251. data/lib/fog/terremark/vcloud.rb +10 -1
  252. data/lib/fog/vcloud/compute.rb +13 -13
  253. data/lib/fog/vcloud/models/compute/catalog_items.rb +6 -2
  254. data/lib/fog/vcloud/models/compute/organizations.rb +1 -2
  255. data/lib/fog/vcloud/models/compute/server.rb +37 -3
  256. data/lib/fog/vcloud/models/compute/vapps.rb +1 -1
  257. data/lib/fog/vcloud/requests/compute/configure_org_network.rb +141 -0
  258. data/lib/fog/vcloud/requests/compute/configure_vm_cpus.rb +38 -0
  259. data/lib/fog/vcloud/requests/compute/configure_vm_memory.rb +11 -12
  260. data/lib/fog/vcloud/requests/compute/configure_vm_password.rb +39 -0
  261. data/lib/fog/vcloud/requests/compute/undeploy.rb +9 -1
  262. data/lib/fog/vsphere/requests/compute/vm_reboot.rb +1 -1
  263. data/tests/atmos/models/storage/file_update_tests.rb +19 -0
  264. data/tests/atmos/models/storage/nested_directories_tests.rb +23 -0
  265. data/tests/aws/models/compute/security_group_tests.rb +21 -12
  266. data/tests/aws/models/dns/records_tests.rb +8 -2
  267. data/tests/aws/models/glacier/model_tests.rb +47 -0
  268. data/tests/aws/models/iam/policies_tests.rb +2 -2
  269. data/tests/aws/models/rds/server_tests.rb +5 -2
  270. data/tests/aws/models/storage/directory_tests.rb +1 -1
  271. data/tests/aws/models/storage/file_tests.rb +1 -1
  272. data/tests/aws/models/storage/files_tests.rb +1 -1
  273. data/tests/aws/models/storage/url_tests.rb +8 -8
  274. data/tests/aws/models/storage/version_tests.rb +1 -1
  275. data/tests/aws/models/storage/versions_tests.rb +1 -1
  276. data/tests/aws/requests/auto_scaling/auto_scaling_tests.rb +5 -0
  277. data/tests/aws/requests/auto_scaling/helper.rb +2 -1
  278. data/tests/aws/requests/compute/instance_tests.rb +17 -23
  279. data/tests/aws/requests/compute/spot_instance_tests.rb +2 -1
  280. data/tests/aws/requests/compute/tag_tests.rb +1 -0
  281. data/tests/aws/requests/compute/volume_tests.rb +45 -4
  282. data/tests/aws/requests/elb/helper.rb +2 -2
  283. data/tests/aws/requests/elb/listener_tests.rb +2 -2
  284. data/tests/aws/requests/elb/load_balancer_tests.rb +1 -1
  285. data/tests/aws/requests/glacier/archive_tests.rb +13 -0
  286. data/tests/aws/requests/glacier/multipart_upload_tests.rb +30 -0
  287. data/tests/aws/requests/glacier/tree_hash_tests.rb +63 -0
  288. data/tests/aws/requests/glacier/vault_tests.rb +35 -0
  289. data/tests/aws/requests/rds/helper.rb +11 -5
  290. data/tests/aws/requests/rds/instance_tests.rb +0 -2
  291. data/tests/aws/requests/storage/acl_utils_tests.rb +1 -1
  292. data/tests/aws/requests/storage/bucket_tests.rb +1 -1
  293. data/tests/aws/requests/storage/multipart_upload_tests.rb +1 -1
  294. data/tests/aws/requests/storage/object_tests.rb +8 -0
  295. data/tests/aws/requests/storage/versioning_tests.rb +1 -1
  296. data/tests/aws/signaturev4_tests.rb +41 -0
  297. data/tests/brightbox/compute_tests.rb +9 -0
  298. data/tests/brightbox/requests/compute/helper.rb +21 -6
  299. data/tests/cloudstack/compute/models/volume_tests.rb +1 -1
  300. data/tests/cloudstack/requests/volume_tests.rb +1 -1
  301. data/tests/compute/helper.rb +10 -4
  302. data/tests/dynect/requests/dns/dns_tests.rb +39 -0
  303. data/tests/google/requests/storage/bucket_tests.rb +2 -3
  304. data/tests/google/requests/storage/object_tests.rb +1 -1
  305. data/tests/helper.rb +10 -3
  306. data/tests/helpers/formats_helper.rb +4 -2
  307. data/tests/helpers/formats_helper_tests.rb +9 -0
  308. data/tests/helpers/mock_helper.rb +6 -1
  309. data/tests/helpers/model_helper.rb +0 -3
  310. data/tests/hp/models/compute/address_tests.rb +1 -1
  311. data/tests/hp/models/compute/addresses_tests.rb +1 -1
  312. data/tests/hp/models/compute/key_pair_tests.rb +1 -1
  313. data/tests/hp/models/compute/key_pairs_tests.rb +1 -1
  314. data/tests/hp/models/compute/security_group_tests.rb +1 -1
  315. data/tests/hp/models/compute/security_groups_tests.rb +1 -1
  316. data/tests/hp/requests/cdn/container_tests.rb +1 -1
  317. data/tests/hp/requests/compute/address_tests.rb +1 -1
  318. data/tests/hp/requests/compute/flavor_tests.rb +1 -1
  319. data/tests/hp/requests/compute/image_tests.rb +1 -1
  320. data/tests/hp/requests/compute/key_pair_tests.rb +1 -1
  321. data/tests/hp/requests/compute/security_group_rule_tests.rb +1 -1
  322. data/tests/hp/requests/compute/security_group_tests.rb +1 -1
  323. data/tests/hp/requests/compute/server_address_tests.rb +1 -1
  324. data/tests/hp/requests/compute/server_tests.rb +1 -1
  325. data/tests/hp/requests/storage/container_tests.rb +1 -1
  326. data/tests/hp/requests/storage/object_tests.rb +1 -1
  327. data/tests/local/models/file_tests.rb +1 -1
  328. data/tests/rackspace/models/block_storage/snapshot_tests.rb +20 -0
  329. data/tests/rackspace/models/block_storage/snapshots_tests.rb +20 -0
  330. data/tests/rackspace/models/block_storage/volume_tests.rb +27 -0
  331. data/tests/rackspace/models/block_storage/volume_types_tests.rb +20 -0
  332. data/tests/rackspace/models/block_storage/volumes_tests.rb +11 -0
  333. data/tests/rackspace/models/compute_v2/flavors_tests.rb +20 -0
  334. data/tests/rackspace/models/compute_v2/images_tests.rb +22 -0
  335. data/tests/rackspace/models/compute_v2/server_tests.rb +62 -0
  336. data/tests/rackspace/models/compute_v2/servers_tests.rb +14 -0
  337. data/tests/rackspace/requests/block_storage/snapshot_tests.rb +81 -0
  338. data/tests/rackspace/requests/block_storage/volume_tests.rb +61 -0
  339. data/tests/rackspace/requests/block_storage/volume_type_tests.rb +31 -0
  340. data/tests/rackspace/requests/compute_v2/attachment_tests.rb +68 -0
  341. data/tests/rackspace/requests/compute_v2/flavor_tests.rb +43 -0
  342. data/tests/rackspace/requests/compute_v2/image_tests.rb +47 -0
  343. data/tests/rackspace/requests/compute_v2/server_tests.rb +147 -0
  344. data/tests/rackspace/requests/storage/account_tests.rb +17 -0
  345. data/tests/rackspace/requests/storage/container_tests.rb +1 -1
  346. data/tests/rackspace/requests/storage/large_object_tests.rb +1 -1
  347. data/tests/rackspace/requests/storage/object_tests.rb +41 -2
  348. data/tests/serverlove/requests/compute/image_tests.rb +57 -0
  349. data/tests/serverlove/requests/compute/server_tests.rb +85 -0
  350. data/tests/serverlove/util/compute/password_generator_tests.rb +19 -0
  351. data/tests/storage/models/directories_tests.rb +1 -1
  352. data/tests/storage/models/directory_test.rb +1 -1
  353. data/tests/storage/models/file_tests.rb +1 -1
  354. data/tests/storage/models/files_tests.rb +1 -1
  355. metadata +188 -3
@@ -11,7 +11,7 @@ module Fog
11
11
  class ValidationError < Fog::AWS::IAM::Error; end
12
12
 
13
13
  requires :aws_access_key_id, :aws_secret_access_key
14
- recognizes :host, :path, :port, :scheme, :persistent
14
+ recognizes :host, :path, :port, :scheme, :persistent, :instrumentor, :instrumentor_name
15
15
 
16
16
  request_path 'fog/aws/requests/iam'
17
17
  request :add_user_to_group
@@ -70,15 +70,15 @@ module Fog
70
70
  request :update_user
71
71
  request :upload_server_certificate
72
72
  request :upload_signing_certificate
73
-
73
+
74
74
  model_path 'fog/aws/models/iam'
75
75
  model :user
76
76
  collection :users
77
77
  model :policy
78
- collection :policies
78
+ collection :policies
79
79
  model :access_key
80
80
  collection :access_keys
81
-
81
+
82
82
 
83
83
  class Mock
84
84
  def self.data
@@ -151,6 +151,8 @@ module Fog
151
151
  @aws_access_key_id = options[:aws_access_key_id]
152
152
  @aws_secret_access_key = options[:aws_secret_access_key]
153
153
  @connection_options = options[:connection_options] || {}
154
+ @instrumentor = options[:instrumentor]
155
+ @instrumentor_name = options[:instrumentor_name] || 'fog.aws.iam'
154
156
  @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
155
157
  @host = options[:host] || 'iam.amazonaws.com'
156
158
  @path = options[:path] || '/'
@@ -182,35 +184,39 @@ module Fog
182
184
  }
183
185
  )
184
186
 
185
- begin
186
- response = @connection.request({
187
- :body => body,
188
- :expects => 200,
189
- :idempotent => idempotent,
190
- :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
191
- :host => @host,
192
- :method => 'POST',
193
- :parser => parser
194
- })
195
-
196
- response
197
- rescue Excon::Errors::HTTPStatusError => error
198
- if match = error.message.match(/<Code>(.*)<\/Code>(?:.*<Message>(.*)<\/Message>)?/m)
199
- case match[1]
200
- when 'CertificateNotFound', 'NoSuchEntity'
201
- raise Fog::AWS::IAM::NotFound.slurp(error, match[2])
202
- when 'EntityAlreadyExists', 'KeyPairMismatch', 'LimitExceeded', 'MalformedCertificate', 'ValidationError'
203
- raise Fog::AWS::IAM.const_get(match[1]).slurp(error, match[2])
204
- else
205
- raise Fog::AWS::IAM::Error.slurp(error, "#{match[1]} => #{match[2]}") if match[1]
206
- raise
207
- end
187
+ if @instrumentor
188
+ @instrumentor.instrument("#{@instrumentor_name}.request", params) do
189
+ _request(body, idempotent, parser)
190
+ end
191
+ else
192
+ _request(body, idempotent, parser)
193
+ end
194
+ end
195
+
196
+ def _request(body, idempotent, parser)
197
+ @connection.request({
198
+ :body => body,
199
+ :expects => 200,
200
+ :idempotent => idempotent,
201
+ :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
202
+ :host => @host,
203
+ :method => 'POST',
204
+ :parser => parser
205
+ })
206
+ rescue Excon::Errors::HTTPStatusError => error
207
+ if match = error.message.match(/<Code>(.*)<\/Code>(?:.*<Message>(.*)<\/Message>)?/m)
208
+ case match[1]
209
+ when 'CertificateNotFound', 'NoSuchEntity'
210
+ raise Fog::AWS::IAM::NotFound.slurp(error, match[2])
211
+ when 'EntityAlreadyExists', 'KeyPairMismatch', 'LimitExceeded', 'MalformedCertificate', 'ValidationError'
212
+ raise Fog::AWS::IAM.const_get(match[1]).slurp(error, match[2])
208
213
  else
214
+ raise Fog::AWS::IAM::Error.slurp(error, "#{match[1]} => #{match[2]}") if match[1]
209
215
  raise
210
216
  end
217
+ else
218
+ raise
211
219
  end
212
-
213
-
214
220
  end
215
221
 
216
222
  end
@@ -73,7 +73,7 @@ module Fog
73
73
  end
74
74
 
75
75
  def instances
76
- Fog::AWS::AutoScaling::Instances.new(:connection => connection).load(attributes[:instance])
76
+ Fog::AWS::AutoScaling::Instances.new(:connection => connection).load(attributes[:instances])
77
77
  end
78
78
 
79
79
  def instances_in_service
@@ -9,6 +9,7 @@ module Fog
9
9
  { :bits => 0, :cores => 2, :disk => 0, :id => 't1.micro', :name => 'Micro Instance', :ram => 613},
10
10
 
11
11
  { :bits => 32, :cores => 1, :disk => 160, :id => 'm1.small', :name => 'Small Instance', :ram => 1740.8},
12
+ { :bits => 32, :cores => 2, :disk => 400, :id => 'm1.medium', :name => 'Medium Instance', :ram => 3750},
12
13
  { :bits => 64, :cores => 4, :disk => 850, :id => 'm1.large', :name => 'Large Instance', :ram => 7680},
13
14
  { :bits => 64, :cores => 8, :disk => 1690, :id => 'm1.xlarge', :name => 'Extra Large Instance', :ram => 15360},
14
15
 
@@ -19,6 +20,8 @@ module Fog
19
20
  { :bits => 64, :cores => 13, :disk => 850, :id => 'm2.2xlarge', :name => 'High Memory Double Extra Large', :ram => 35020.8},
20
21
  { :bits => 64, :cores => 26, :disk => 1690, :id => 'm2.4xlarge', :name => 'High Memory Quadruple Extra Large', :ram => 70041.6},
21
22
 
23
+ { :bits => 64, :cores => 35, :disk => 2048, :id => "hi1.4xlarge", :name => "High I/O Quadruple Extra Large Instance", :ram => 61952},
24
+
22
25
  { :bits => 64, :cores => 33.5, :disk => 1690, :id => 'cc1.4xlarge', :name => 'Cluster Compute Quadruple Extra Large', :ram => 23552},
23
26
  { :bits => 64, :cores => 88, :disk => 3370, :id => 'cc2.8xlarge', :name => 'Cluster Compute Eight Extra Large', :ram => 61952},
24
27
  { :bits => 64, :cores => 33.5, :disk => 1690, :id => 'cg1.4xlarge', :name => 'Cluster GPU Quadruple Extra Large', :ram => 22528}
@@ -56,6 +59,14 @@ module Fog
56
59
  # ram=1740.8
57
60
  # >,
58
61
  # <Fog::AWS::Compute::Flavor
62
+ # id="m1.medium",
63
+ # bits=32,
64
+ # cores=2,
65
+ # disk=400,
66
+ # name="Medium Instance",
67
+ # ram=3750
68
+ # >,
69
+ # <Fog::AWS::Compute::Flavor
59
70
  # id="m1.large",
60
71
  # bits=64,
61
72
  # cores=4,
@@ -10,6 +10,7 @@ module Fog
10
10
  attribute :description, :aliases => 'groupDescription'
11
11
  attribute :group_id, :aliases => 'groupId'
12
12
  attribute :ip_permissions, :aliases => 'ipPermissions'
13
+ attribute :ip_permissions_egress, :aliases => 'ipPermissionsEgress'
13
14
  attribute :owner_id, :aliases => 'ownerId'
14
15
  attribute :vpc_id, :aliases => 'vpcId'
15
16
 
@@ -40,7 +41,7 @@ module Fog
40
41
  #
41
42
 
42
43
  def authorize_group_and_owner(group, owner = nil)
43
- Fog::Logger.deprecation("authorize_group_and_ownder is deprecated, use authorize_port_range with :group option instead")
44
+ Fog::Logger.deprecation("authorize_group_and_owner is deprecated, use authorize_port_range with :group option instead")
44
45
 
45
46
  requires_one :name, :group_id
46
47
 
@@ -242,11 +243,26 @@ module Fog
242
243
 
243
244
  private
244
245
 
245
- def group_info(group_str)
246
- account, group = group_str.split(":")
247
-
248
- if account.empty? || group.nil? || group.empty?
249
- raise ArgumentError, "group must be specified in form of \"<account id>:<group name or id>\", #{group_str} given"
246
+ #
247
+ # +group_arg+ may be a string or a hash with one key & value.
248
+ #
249
+ # If group_arg is a string, it is assumed to be the group name,
250
+ # and the UserId is assumed to be self.owner_id.
251
+ #
252
+ # The "account:group" form is deprecated.
253
+ #
254
+ # If group_arg is a hash, the key is the UserId and value is the group.
255
+ def group_info(group_arg)
256
+ if Hash === group_arg
257
+ account = group_arg.keys.first
258
+ group = group_arg.values.first
259
+ elsif group_arg.match(/:/)
260
+ account, group = group_arg.split(':')
261
+ Fog::Logger.deprecation("'account:group' argument is deprecated. Use {account => group} or just group instead")
262
+ else
263
+ requires :owner_id
264
+ account = owner_id
265
+ group = group_arg
250
266
  end
251
267
 
252
268
  info = { 'UserId' => account }
@@ -17,6 +17,7 @@ module Fog
17
17
  attribute :network_interfaces, :aliases => 'networkInterfaces'
18
18
  attribute :client_token, :aliases => 'clientToken'
19
19
  attribute :dns_name, :aliases => 'dnsName'
20
+ attribute :ebs_optimized, :aliases => 'ebsOptimized'
20
21
  attribute :groups
21
22
  attribute :flavor_id, :aliases => 'instanceType'
22
23
  attribute :iam_instance_profile, :aliases => 'iamInstanceProfile'
@@ -62,6 +63,8 @@ module Fog
62
63
  'ami-f092eca2'
63
64
  when 'eu-west-1'
64
65
  'ami-3d1f2b49'
66
+ when 'sa-east-1'
67
+ 'ami-d0429ccd'
65
68
  when 'us-east-1'
66
69
  'ami-3202f25b'
67
70
  when 'us-west-1'
@@ -150,6 +153,7 @@ module Fog
150
153
  options = {
151
154
  'BlockDeviceMapping' => block_device_mapping,
152
155
  'ClientToken' => client_token,
156
+ 'EbsOptimized' => ebs_optimized,
153
157
  'IamInstanceProfile.Arn' => @iam_instance_profile_arn,
154
158
  'IamInstanceProfile.Name' => @iam_instance_profile_name,
155
159
  'InstanceInitiatedShutdownBehavior' => instance_initiated_shutdown_behavior,
@@ -170,7 +174,7 @@ module Fog
170
174
  options.delete_if {|key, value| value.nil?}
171
175
 
172
176
  # If subnet is defined then this is a Virtual Private Cloud.
173
- # subnet & security group cannot co-exist. Attempting to specify
177
+ # subnet & security group cannot co-exist. Attempting to specify
174
178
  # both subnet and groups will cause an error. Instead please make
175
179
  # use of Security Group Ids when working in a VPC.
176
180
  if subnet_id
@@ -28,6 +28,7 @@ module Fog
28
28
  attribute :image_id, :aliases => 'LaunchSpecification.ImageId'
29
29
  attribute :monitoring, :aliases => 'LaunchSpecification.Monitoring'
30
30
  attribute :block_device_mapping, :aliases => 'LaunchSpecification.BlockDeviceMapping'
31
+ attribute :subnet_id, :aliases => 'LaunchSpecification.SubnetId'
31
32
  attribute :tags, :aliases => 'tagSet'
32
33
  attribute :fault, :squash => 'message'
33
34
  attribute :user_data
@@ -109,10 +110,21 @@ module Fog
109
110
  'LaunchSpecification.Placement.AvailabilityZone' => availability_zone,
110
111
  'LaunchSpecification.SecurityGroup' => groups,
111
112
  'LaunchSpecification.UserData' => user_data,
113
+ 'LaunchSpecification.SubnetId' => subnet_id,
112
114
  'Type' => request_type,
113
115
  'ValidFrom' => valid_from,
114
116
  'ValidUntil' => valid_until }
115
117
  options.delete_if {|key, value| value.nil?}
118
+
119
+ # If subnet is defined then this is a Virtual Private Cloud.
120
+ # subnet & security group cannot co-exist. Attempting to specify
121
+ # both subnet and groups will cause an error. Instead please make
122
+ # use of Security Group Ids when working in a VPC.
123
+ if subnet_id
124
+ options.delete('LaunchSpecification.SecurityGroup')
125
+ else
126
+ options.delete('LaunchSpecification.SubnetId')
127
+ end
116
128
 
117
129
  data = connection.request_spot_instances(image_id, flavor_id, price, options).body
118
130
  spot_instance_request = data['spotInstanceRequestSet'].first
@@ -61,8 +61,7 @@ module Fog
61
61
  end
62
62
 
63
63
  spot_request.save
64
- spot_request.wait_for(Fog.timeout, interval=4) { ready? }
65
- Fog.wait_for { server = connection.servers.get(spot_request.reload.instance_id) }
64
+ Fog.wait_for { spot_request.reload.ready? rescue nil }
66
65
  server = connection.servers.get(spot_request.instance_id)
67
66
  if spot_request.tags
68
67
  for key, value in spot_request.tags
@@ -13,11 +13,13 @@ module Fog
13
13
  attribute :created_at, :aliases => 'createTime'
14
14
  attribute :delete_on_termination, :aliases => 'deleteOnTermination'
15
15
  attribute :device
16
+ attribute :iops
16
17
  attribute :server_id, :aliases => 'instanceId'
17
18
  attribute :size
18
19
  attribute :snapshot_id, :aliases => 'snapshotId'
19
20
  attribute :state, :aliases => 'status'
20
21
  attribute :tags, :aliases => 'tagSet'
22
+ attribute :type, :aliases => 'volumeType'
21
23
 
22
24
  def initialize(attributes = {})
23
25
  # assign server first to prevent race condition with new_record?
@@ -41,7 +43,11 @@ module Fog
41
43
  requires :availability_zone
42
44
  requires_one :size, :snapshot_id
43
45
 
44
- data = connection.create_volume(availability_zone, size, snapshot_id).body
46
+ if type == 'io1'
47
+ requires :iops
48
+ end
49
+
50
+ data = connection.create_volume(availability_zone, size, 'SnapshotId' => snapshot_id, 'VolumeType' => type, 'Iops' => iops).body
45
51
  new_attributes = data.reject {|key,value| key == 'requestId'}
46
52
  merge_attributes(new_attributes)
47
53
 
@@ -0,0 +1,70 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module AWS
5
+ class Glacier
6
+
7
+ class Archive < Fog::Model
8
+
9
+ identity :id
10
+ attribute :description
11
+ attribute :body
12
+
13
+ attr_accessor :multipart_chunk_size #must be a power of 2 multiple of 1MB
14
+
15
+ def vault
16
+ @vault
17
+ end
18
+
19
+ def save
20
+ requires :body, :vault
21
+
22
+ if multipart_chunk_size && body.respond_to?(:read)
23
+ self.id = multipart_save
24
+ else
25
+ data = connection.create_archive(vault.id, body, 'description' => description)
26
+ self.id = data.headers['x-amz-archive-id']
27
+ end
28
+ true
29
+ end
30
+
31
+ def destroy
32
+ requires :id
33
+ connection.delete_archive(vault.id,id)
34
+ end
35
+
36
+ private
37
+
38
+ def vault=(new_vault)
39
+ @vault = new_vault
40
+ end
41
+
42
+ def multipart_save
43
+ # Initiate the upload
44
+ res = connection.initiate_multipart_upload vault.id, multipart_chunk_size, 'description' => description
45
+ upload_id = res.headers["x-amz-multipart-upload-id"]
46
+
47
+ hash = Fog::AWS::Glacier::TreeHash.new
48
+
49
+ body.rewind if body.respond_to?(:rewind)
50
+ offset = 0
51
+ while (chunk = body.read(multipart_chunk_size)) do
52
+ part_hash = hash.add_part(chunk)
53
+ part_upload = connection.upload_part(vault.id, upload_id, chunk, offset, part_hash )
54
+ offset += chunk.bytesize
55
+ end
56
+
57
+ rescue
58
+ # Abort the upload & reraise
59
+ connection.abort_multipart_upload(vault.id, upload_id) if upload_id
60
+ raise
61
+ else
62
+ # Complete the upload
63
+ connection.complete_multipart_upload(vault.id, upload_id, offset, hash.hexdigest).headers['x-amz-archive-id']
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,30 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/aws/models/glacier/archive'
3
+
4
+ module Fog
5
+ module AWS
6
+ class Glacier
7
+
8
+ class Archives < Fog::Collection
9
+
10
+ model Fog::AWS::Glacier::Archive
11
+ attribute :vault
12
+ #you can't list a vault's archives
13
+ def all
14
+ nil
15
+ end
16
+
17
+ def get(key)
18
+ new(:id => key)
19
+ end
20
+
21
+ def new(attributes = {})
22
+ requires :vault
23
+ super({ :vault => vault }.merge!(attributes))
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,65 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module AWS
5
+ class Glacier
6
+
7
+ class Job < Fog::Model
8
+
9
+ ARCHIVE = 'archive-retrieval'
10
+ INVENTORY = 'inventory-retrieval'
11
+
12
+ identity :id, :aliases => "JobId"
13
+ attribute :action, :aliases => "Action"
14
+ attribute :archive_id, :aliases => "ArchiveId"
15
+ attribute :archive_size, :aliases => "ArchiveSizeInBytes", :type => :integer
16
+ attribute :completed, :aliases => "Completed", :type => :boolean
17
+ attribute :completed_at, :aliases => "CompletionDate", :type => :time
18
+ attribute :created_at, :aliases => "CreationDate", :type => :time
19
+ attribute :inventory_size, :aliases => "InventorySizeInBytes", :type => :integer
20
+ attribute :description, :aliases=> "JobDescription"
21
+ attribute :tree_hash, :aliases=> "SHA256TreeHash"
22
+ attribute :sns_topic, :aliases => "SNSTopic"
23
+ attribute :status_code, :aliases=> "StatusCode"
24
+ attribute :status_message, :aliases=> "StatusMessage"
25
+ attribute :vault_arn, :aliases=> "VaultARN"
26
+ attribute :format
27
+ attribute :type
28
+
29
+
30
+ def ready?
31
+ completed
32
+ end
33
+
34
+ def save
35
+ requires :vault, :type
36
+ specification = {'Type' => type, 'ArchiveId' => archive_id, 'Format' => format, 'Description' => description, 'SNSTopic' => sns_topic}.reject{|k,v| v.nil?}
37
+
38
+ data = connection.initiate_job(vault.id, specification)
39
+ self.id = data.headers['x-amz-job-id']
40
+ reload
41
+ end
42
+
43
+ def vault
44
+ @vault
45
+ end
46
+
47
+ #pass :range => 1..1234 to only retrieve those bytes
48
+ #pass :io => f to stream the response to that tio
49
+ def get_output(options={})
50
+ if io = options.delete(:io)
51
+ options = options.merge :response_block => lambda {|chunk, remaining_bytes, total_bytes| io.write chunk}
52
+ end
53
+ options['Range'] = options.delete :range
54
+ connection.get_job_output(vault.id, id, options)
55
+ end
56
+
57
+ private
58
+ def vault=(new_vault)
59
+ @vault = new_vault
60
+ end
61
+
62
+ end
63
+ end
64
+ end
65
+ end