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
@@ -0,0 +1,67 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Terremark
5
+ module Shared
6
+
7
+ class InternetService < Fog::Model
8
+
9
+ identity :Id
10
+
11
+ attribute :Name
12
+ attribute :Port
13
+ attribute :Protocol
14
+ attribute :Description
15
+ attribute :PublicIpAddress
16
+ attribute :public_ip_address_id
17
+
18
+ def destroy(delete_public_ip=true)
19
+ connection.delete_internet_service(self.Id)
20
+ connection.delete_public_ip(self.PublicIpAddress["Id"]) if delete_public_ip
21
+ true
22
+ end
23
+
24
+ def save
25
+ requires :Name, :Protocol, :Port
26
+ if not public_ip_address_id
27
+ #Create the first internet service and allocate public IP
28
+ data = connection.create_internet_service(
29
+ vdc = connection.default_vdc_id,
30
+ name = self.Name,
31
+ protocol = self.Protocol,
32
+ port = self.Port,
33
+ options = {
34
+ 'Enabled' => 'true',
35
+ "Description" => self.Name
36
+ }
37
+ )
38
+ else
39
+ #create additional services to existing Public IP
40
+ data = connection.add_internet_service(
41
+ ip_id = public_ip_address_id,
42
+ name = self.Name,
43
+ protocol = self.Protocol,
44
+ port = self.Port,
45
+ options = {
46
+ 'Enabled' => 'true',
47
+ "Description" => self.Name
48
+ }
49
+ )
50
+ end
51
+ merge_attributes(data.body)
52
+ true
53
+ end
54
+ private
55
+
56
+ def href=(new_href)
57
+ self.id = new_href.split('/').last.to_i
58
+ end
59
+
60
+ def type=(new_type); @type = new_type; end
61
+ def size=(new_size); @size = new_size; end
62
+ def Links=(new_links); @Links = new_links; end
63
+
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,42 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/terremark/models/shared/internetservice'
3
+
4
+ module Fog
5
+ module Terremark
6
+ module Shared
7
+
8
+ module Mock
9
+ def internetservices(options = {})
10
+ Fog::Terremark::Shared::Servers.new(options.merge(:connection => self))
11
+ end
12
+ end
13
+
14
+ module Real
15
+ def internetservices(options = {})
16
+ Fog::Terremark::Shared::InternetServices.new(options.merge(:connection => self))
17
+ end
18
+ end
19
+
20
+ class InternetServices < Fog::Collection
21
+
22
+ model Fog::Terremark::Shared::InternetService
23
+
24
+ def all
25
+ data = connection.get_internet_services(vdc_id).body["InternetServices"]
26
+ load(data)
27
+ end
28
+
29
+ def get(service_id)
30
+ data = connection.get_internet_services(vdc_id)
31
+ internet_service = services.body["InternetServices"].select {|item| item["Id"] == service_id}
32
+ new(internetservice)
33
+ end
34
+
35
+ def vdc_id
36
+ @vdc_id ||= connection.default_vdc_id
37
+ end
38
+
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,52 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Terremark
5
+ module Shared
6
+
7
+ class NodeService < Fog::Model
8
+
9
+ identity :Id
10
+ attribute :Name
11
+ attribute :Href
12
+ attribute :Port
13
+ attribute :Description
14
+ attribute :IpAddress
15
+ attribute :Enabled
16
+ attribute :InternetServiceId
17
+
18
+ def destroy
19
+ connection.delete_node_service(self.Id)
20
+ end
21
+
22
+ def save
23
+ requires :Name, :Port, :InternetServiceId
24
+ data = connection.add_node_service(
25
+ service_id = self.InternetServiceId,
26
+ ip = self.IpAddress,
27
+ name = self.Name,
28
+ port = self.Port,
29
+ options = {"Enabled" => 'true',
30
+ "Description" => self.Name,
31
+ }
32
+
33
+ )
34
+ merge_attributes(data.body)
35
+ true
36
+ end
37
+
38
+ private
39
+
40
+ def href=(new_href)
41
+ self.id = new_href.split('/').last.to_i
42
+ end
43
+
44
+ def type=(new_type); @type = new_type; end
45
+ def size=(new_size); @size = new_size; end
46
+ def Links=(new_links); @Links = new_links; end
47
+
48
+ end
49
+
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,32 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/terremark/models/shared/nodeservice'
3
+
4
+ module Fog
5
+ module Terremark
6
+ module Shared
7
+
8
+ module Mock
9
+ def nodeservices(options = {})
10
+ Fog::Terremark::Shared::Servers.new(options.merge(:connection => self))
11
+ end
12
+ end
13
+
14
+ module Real
15
+ def nodeservices(options = {})
16
+ Fog::Terremark::Shared::NodeServices.new(options.merge(:connection => self))
17
+ end
18
+ end
19
+
20
+ class NodeServices < Fog::Collection
21
+
22
+ model Fog::Terremark::Shared::NodeService
23
+
24
+ def all(internet_service_id)
25
+ data = connection.get_node_services(internet_service_id).body["NodeServices"]
26
+ load(data)
27
+ end
28
+
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,4 +1,15 @@
1
1
  require 'fog/core/model'
2
+ require 'fog/terremark/models/shared/nodeservices'
3
+ require 'fog/terremark/models/shared/internetservices'
4
+
5
+ # { '0' => 'Being created', '1' => 'Being Deployed, '2' => 'Powered Off', '4' => 'Powered On'}
6
+ module VAppStatus
7
+ BEING_CREATED = "0"
8
+ BEING_DEPLOYED = "1"
9
+ POWERED_OFF = "2"
10
+ POWERED_ON = "4"
11
+ end
12
+
2
13
 
3
14
  module Fog
4
15
  module Terremark
@@ -9,30 +20,68 @@ module Fog
9
20
  identity :id
10
21
 
11
22
  attribute :name
23
+ attribute :image
24
+ attribute :vcpus
25
+ attribute :memory
26
+ attribute :sshkeyFingerPrint
27
+ attribute :powerOn
12
28
  attribute :status
13
29
  attribute :OperatingSystem
14
30
  attribute :VirtualHardware
31
+ attribute :IpAddress
15
32
 
33
+ def reload
34
+ merge_attributes(connection.get_vapp(id).body)
35
+ end
16
36
  def destroy
17
- requires :id
18
- data = connection.power_off(id).body
19
- task = connection.tasks.new(data)
20
- task.wait_for { ready? }
21
- connection.delete_vapp(id)
37
+ case self.status
38
+ when VAppStatus::BEING_CREATED, VAppStatus::BEING_DEPLOYED
39
+ return false
40
+ when VAppStatus::POWERED_ON
41
+ data = connection.power_off(self.id).body
42
+ wait_for { off? }
43
+ end
44
+ connection.delete_vapp(self.id)
22
45
  true
23
46
  end
24
47
 
48
+ def PublicIpAddress
49
+ @PublicIpAddress ||=
50
+ if internet_services.size > 0
51
+ internet_services[0].PublicIpAddress["Name"]
52
+ end
53
+ @PublicIpAddress
54
+ end
55
+
56
+ def internet_services
57
+ @internet_services ||= connection.internetservices.all.select {|item| item.Name == self.name}
58
+ end
59
+
60
+ def delete_internet_services
61
+ #Find the internet service
62
+
63
+ while (service = internet_services.pop) do
64
+
65
+ nodes = connection.nodeservices.all(service.Id)
66
+ #Delete all the associated nodes
67
+ nodes.select { |item| item.destroy }
68
+ #Clear out the services
69
+ service.destroy(delete_public_ip = !(internet_services.size > 0))
70
+ end
71
+ true
72
+ end
73
+
25
74
  # { '0' => 'Being created', '2' => 'Powered Off', '4' => 'Powered On'}
26
75
  def ready?
27
- status == '2'
76
+ status == VAppStatus::POWERED_OFF
28
77
  end
29
78
 
30
79
  def on?
31
- status == '4'
80
+ status == VAppStatus::POWERED_ON
32
81
  end
33
82
 
34
83
  def off?
35
- status == '2'
84
+ status == VAppStatus::POWERED_OFF
36
85
  end
37
86
 
38
87
  def power_on(options = {})
@@ -81,14 +130,66 @@ module Fog
81
130
  power_on
82
131
  end
83
132
 
133
+ def create_internet_services(internet_spec)
134
+ public_ip_info = nil
135
+ internet_service_id = nil
136
+ internet_spec.each do |proto, ports|
137
+ for port in ports
138
+ if not public_ip_info
139
+ #Create the first internet service and allocate public IP
140
+ inet_services = connection.internetservices.create({
141
+ "Name" => self.name,
142
+ "Protocol" => proto,
143
+ "Port" => port,
144
+ })
145
+ internet_service_id = inet_services.Id
146
+ public_ip_info = inet_services.PublicIpAddress
147
+
148
+ else
149
+ #create additional services to existing Public IP
150
+ inet_services = connection.internetservices.create({
151
+ "public_ip_address_id" => public_ip_info["Id"],
152
+ "Name" => self.name,
153
+ "Protocol" => proto,
154
+ "Port" => port,
155
+ }
156
+ )
157
+ internet_service_id = inet_services.Id
158
+ end
159
+
160
+ #Create the associate node service to the server
161
+ connection.nodeservices.create({"Name" => self.name,
162
+ "IpAddress" => self.IpAddress,
163
+ "Port" => port,
164
+ "InternetServiceId" => internet_service_id
165
+ })
166
+ end
167
+ end
168
+ true
169
+ end
170
+
84
171
  def save
85
172
  requires :name
86
- data = connection.instantiate_vapp(name)
173
+ if powerOn
174
+ end
175
+ data = connection.instantiate_vapp_template(
176
+ server_name=name,
177
+ vapp_template=image,
178
+ options={
179
+ 'ssh_key_fingerprint' => sshkeyFingerPrint,
180
+ 'cpus' => vcpus,
181
+ 'memory' => memory
182
+ })
183
+
87
184
  merge_attributes(data.body)
88
- task = connection.deploy_vapp(id)
89
- task.wait_for { ready? }
90
- task = connection.power_on(id)
91
- task.wait_for { ready? }
185
+ wait_for { ready? }
186
+
187
+ #Optional, incase further configuration required.
188
+ if powerOn
189
+ power_on
190
+ wait_for { ready? }
191
+ end
192
+
92
193
  true
93
194
  end
94
195
 
@@ -100,11 +201,9 @@ module Fog
100
201
 
101
202
  def type=(new_type); @type = new_type; end
102
203
  def size=(new_size); @size = new_size; end
103
- def IpAddress=(new_ipaddress); @IpAddress = new_ipaddress; end
104
204
  def Links=(new_links); @Links = new_links; end
105
205
 
106
206
  end
107
-
108
207
  end
109
208
  end
110
209
  end
@@ -22,20 +22,19 @@ module Fog
22
22
  model Fog::Terremark::Shared::Server
23
23
 
24
24
  def all
25
- data = connection.get_vdc(vdc_id).body['ResourceEntities'].select do |entity|
26
- entity['type'] == 'application/vnd.vmware.vcloud.vApp+xml'
25
+ data = []
26
+ connection.get_vdc(vdc_id).body['ResourceEntities'].select do |entity|
27
+ data << connection.servers.get(entity["href"].split('/').last)
27
28
  end
28
- load(data)
29
+ data
29
30
  end
30
31
 
31
32
  def get(server_id)
32
- if server_id && server = connection.get_vapp(server_id).body
33
- new(server)
34
- elsif !server_id
33
+ if server_id
34
+ new(connection.get_vapp(server_id).body)
35
+ else
35
36
  nil
36
37
  end
37
- rescue Excon::Errors::Forbidden
38
- nil
39
38
  end
40
39
 
41
40
  def vdc_id
@@ -9,7 +9,9 @@ module Fog
9
9
  identity :id
10
10
 
11
11
  attribute :name
12
-
12
+ attribute :ResourceEntities
13
+ attribute :AvailableNetworks
14
+ attribute :links
13
15
  def networks
14
16
  connection.networks(:vdc_id => id)
15
17
  end
@@ -22,6 +24,9 @@ module Fog
22
24
  connection.servers(:vdc_id => id)
23
25
  end
24
26
 
27
+ def images
28
+ connection.images(:vdc_id => id)
29
+ end
25
30
  private
26
31
 
27
32
  def href=(new_href)
@@ -14,8 +14,13 @@ module Fog
14
14
  case name
15
15
  when 'CatalogItem'
16
16
  catalog_item = {}
17
- until attributes.empty?
18
- catalog_item[attributes.shift] = attributes.shift
17
+ attributes.each do |attrib|
18
+ i = 0
19
+ while i < attrib.size
20
+ catalog_item[attrib[i]] = attrib[i+1]
21
+ i += 2
22
+ end
23
+ catalog_item["id"] = catalog_item["href"].split('/').last
19
24
  end
20
25
  @response['CatalogItems'] << catalog_item
21
26
  when 'Catalog'
@@ -0,0 +1,56 @@
1
+
2
+ module Fog
3
+ module Parsers
4
+ module Terremark
5
+ module Shared
6
+
7
+ class GetKeysList < Fog::Parsers::Base
8
+
9
+ def reset
10
+ @response = { 'Keys' => [] }
11
+ @key = {}
12
+ end
13
+
14
+ def start_element(name, attributes)
15
+ super
16
+ case name
17
+ when 'Id', 'Href', 'Name', 'IsDefault','FingerPrint'
18
+ data = {}
19
+ until attributes.empty?
20
+ data[attributes.shift] = attributes.shift
21
+ end
22
+ @key[name] = data
23
+ when 'Key'
24
+ until attributes.empty?
25
+ @key[attributes.shift] = attributes.shift
26
+ end
27
+ when 'Keys'
28
+ keys_list = {}
29
+ until attributes.empty?
30
+ if attributes.first.is_a?(Array)
31
+ attribute = attributes.shift
32
+ keys_list[attribute.first] = attribute.last
33
+ else
34
+ keys_list[attributes.shift] = attributes.shift
35
+ end
36
+ end
37
+ @response['href'] = keys_list['href']
38
+ end
39
+ end
40
+
41
+ def end_element(name)
42
+ case name
43
+ when 'Id', 'Href', 'Name', 'IsDefault','FingerPrint'
44
+ @key[name] = value
45
+ when 'Key'
46
+ @response['Keys'] << @key
47
+ @key = {}
48
+ end
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+ end
55
+ end
56
+ end