fog 1.18.0 → 1.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (366) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +6 -0
  3. data/CONTRIBUTING.md +22 -0
  4. data/LICENSE.md +20 -0
  5. data/README.md +41 -60
  6. data/Rakefile +2 -0
  7. data/changelog.txt +262 -0
  8. data/fog.gemspec +3 -3
  9. data/lib/fog/aws.rb +9 -7
  10. data/lib/fog/aws/cloud_watch.rb +0 -1
  11. data/lib/fog/aws/compute.rb +2 -0
  12. data/lib/fog/aws/dns.rb +2 -1
  13. data/lib/fog/aws/elb.rb +2 -0
  14. data/lib/fog/aws/models/auto_scaling/configuration.rb +4 -0
  15. data/lib/fog/aws/models/compute/address.rb +6 -5
  16. data/lib/fog/aws/models/compute/flavors.rb +10 -0
  17. data/lib/fog/aws/models/compute/spot_request.rb +1 -1
  18. data/lib/fog/aws/models/compute/subnet.rb +4 -0
  19. data/lib/fog/aws/models/compute/vpc.rb +5 -0
  20. data/lib/fog/aws/models/dns/records.rb +1 -3
  21. data/lib/fog/aws/models/elb/load_balancer.rb +10 -0
  22. data/lib/fog/aws/models/glacier/vault.rb +1 -1
  23. data/lib/fog/aws/models/rds/server.rb +5 -2
  24. data/lib/fog/aws/models/rds/subnet_group.rb +15 -1
  25. data/lib/fog/aws/models/storage/file.rb +2 -2
  26. data/lib/fog/aws/parsers/auto_scaling/describe_launch_configurations.rb +6 -0
  27. data/lib/fog/aws/parsers/compute/assign_private_ip_addresses.rb +25 -0
  28. data/lib/fog/aws/parsers/compute/describe_addresses.rb +1 -1
  29. data/lib/fog/aws/parsers/elb/describe_load_balancer_attributes.rb +40 -0
  30. data/lib/fog/aws/parsers/rds/delete_db_subnet_group.rb +35 -0
  31. data/lib/fog/aws/rds.rb +3 -3
  32. data/lib/fog/aws/requests/auto_scaling/create_launch_configuration.rb +2 -0
  33. data/lib/fog/aws/requests/auto_scaling/describe_notification_configurations.rb +1 -1
  34. data/lib/fog/aws/requests/compute/assign_private_ip_addresses.rb +60 -0
  35. data/lib/fog/aws/requests/compute/create_route.rb +1 -1
  36. data/lib/fog/aws/requests/compute/describe_images.rb +1 -1
  37. data/lib/fog/aws/requests/compute/describe_subnets.rb +8 -0
  38. data/lib/fog/aws/requests/compute/describe_vpcs.rb +8 -0
  39. data/lib/fog/aws/requests/compute/modify_vpc_attribute.rb +59 -0
  40. data/lib/fog/aws/requests/dns/change_resource_record_sets.rb +26 -9
  41. data/lib/fog/aws/requests/dns/create_hosted_zone.rb +12 -3
  42. data/lib/fog/aws/requests/dns/delete_hosted_zone.rb +33 -0
  43. data/lib/fog/aws/requests/dns/get_change.rb +26 -0
  44. data/lib/fog/aws/requests/dns/get_hosted_zone.rb +1 -1
  45. data/lib/fog/aws/requests/dns/list_hosted_zones.rb +3 -8
  46. data/lib/fog/aws/requests/dns/list_resource_record_sets.rb +68 -0
  47. data/lib/fog/aws/requests/elb/create_load_balancer.rb +1 -0
  48. data/lib/fog/aws/requests/elb/describe_load_balancer_attributes.rb +54 -0
  49. data/lib/fog/aws/requests/elb/modify_load_balancer_attributes.rb +59 -0
  50. data/lib/fog/aws/requests/rds/create_db_instance.rb +7 -1
  51. data/lib/fog/aws/requests/rds/create_db_subnet_group.rb +7 -1
  52. data/lib/fog/aws/requests/rds/delete_db_subnet_group.rb +42 -0
  53. data/lib/fog/aws/requests/storage/delete_multiple_objects.rb +6 -4
  54. data/lib/fog/aws/requests/storage/put_bucket.rb +4 -1
  55. data/lib/fog/aws/sqs.rb +2 -4
  56. data/lib/fog/aws/storage.rb +14 -1
  57. data/lib/fog/bluebox/compute.rb +1 -1
  58. data/lib/fog/brightbox/compute.rb +7 -9
  59. data/lib/fog/brightbox/compute/image_selector.rb +1 -1
  60. data/lib/fog/brightbox/compute/shared.rb +8 -10
  61. data/lib/fog/brightbox/models/compute/api_client.rb +1 -1
  62. data/lib/fog/brightbox/models/compute/application.rb +1 -4
  63. data/lib/fog/brightbox/models/compute/cloud_ip.rb +8 -5
  64. data/lib/fog/brightbox/models/compute/collaboration.rb +0 -2
  65. data/lib/fog/brightbox/models/compute/collaborations.rb +1 -1
  66. data/lib/fog/brightbox/models/compute/firewall_policy.rb +2 -4
  67. data/lib/fog/brightbox/models/compute/firewall_rule.rb +1 -1
  68. data/lib/fog/brightbox/models/compute/image.rb +1 -3
  69. data/lib/fog/brightbox/models/compute/load_balancer.rb +11 -8
  70. data/lib/fog/brightbox/models/compute/server.rb +28 -20
  71. data/lib/fog/brightbox/models/compute/server_group.rb +9 -11
  72. data/lib/fog/brightbox/models/compute/zone.rb +1 -1
  73. data/lib/fog/brightbox/oauth2.rb +3 -3
  74. data/lib/fog/brightbox/requests/compute/update_server.rb +1 -1
  75. data/lib/fog/cloudstack.rb +1 -1
  76. data/lib/fog/compute.rb +2 -2
  77. data/lib/fog/core.rb +1 -1
  78. data/lib/fog/core/connection.rb +1 -2
  79. data/lib/fog/core/errors.rb +3 -3
  80. data/lib/fog/core/hmac.rb +3 -3
  81. data/lib/fog/core/mock.rb +9 -2
  82. data/lib/fog/core/scp.rb +1 -1
  83. data/lib/fog/core/wait_for.rb +1 -1
  84. data/lib/fog/core/{timeout.rb → wait_for_defaults.rb} +10 -0
  85. data/lib/fog/digitalocean/models/compute/server.rb +4 -0
  86. data/lib/fog/digitalocean/requests/compute/create_server.rb +2 -0
  87. data/lib/fog/dnsimple/dns.rb +1 -1
  88. data/lib/fog/dreamhost/dns.rb +2 -4
  89. data/lib/fog/ecloud/compute.rb +1 -1
  90. data/lib/fog/ecloud/models/compute/environments.rb +5 -3
  91. data/lib/fog/google/compute.rb +105 -68
  92. data/lib/fog/google/examples/create.rb +1 -0
  93. data/lib/fog/google/models/compute/disk.rb +7 -1
  94. data/lib/fog/google/models/compute/operation.rb +42 -0
  95. data/lib/fog/google/models/compute/operations.rb +26 -0
  96. data/lib/fog/google/models/compute/server.rb +18 -2
  97. data/lib/fog/google/models/compute/servers.rb +2 -1
  98. data/lib/fog/google/models/compute/zones.rb +1 -1
  99. data/lib/fog/google/models/storage/file.rb +1 -1
  100. data/lib/fog/google/models/storage/files.rb +1 -1
  101. data/lib/fog/google/requests/compute/delete_disk.rb +22 -2
  102. data/lib/fog/google/requests/compute/delete_global_operation.rb +29 -0
  103. data/lib/fog/google/requests/compute/delete_server.rb +13 -9
  104. data/lib/fog/google/requests/compute/delete_zone_operation.rb +33 -0
  105. data/lib/fog/google/requests/compute/get_disk.rb +26 -2
  106. data/lib/fog/google/requests/compute/{delete_operation.rb → get_global_operation.rb} +5 -6
  107. data/lib/fog/google/requests/compute/get_image.rb +3 -3
  108. data/lib/fog/google/requests/compute/get_server.rb +1 -0
  109. data/lib/fog/google/requests/compute/get_zone_operation.rb +58 -0
  110. data/lib/fog/google/requests/compute/insert_disk.rb +43 -3
  111. data/lib/fog/google/requests/compute/insert_firewall.rb +2 -1
  112. data/lib/fog/google/requests/compute/insert_image.rb +2 -2
  113. data/lib/fog/google/requests/compute/insert_server.rb +64 -35
  114. data/lib/fog/google/requests/compute/list_disks.rb +8 -2
  115. data/lib/fog/google/requests/compute/list_images.rb +2 -2
  116. data/lib/fog/google/requests/compute/list_machine_types.rb +2 -2
  117. data/lib/fog/google/requests/compute/list_servers.rb +2 -2
  118. data/lib/fog/google/requests/compute/list_zone_operations.rb +2 -1
  119. data/lib/fog/google/requests/compute/list_zones.rb +1 -1
  120. data/lib/fog/google/requests/storage/copy_object.rb +1 -1
  121. data/lib/fog/hp.rb +1 -1
  122. data/lib/fog/hp/README.md +57 -0
  123. data/lib/fog/hp/articles/auth_caching.md +23 -0
  124. data/lib/fog/hp/docs/connect.md +152 -0
  125. data/lib/fog/hp/docs/install.md +133 -0
  126. data/lib/fog/hp/examples/block_storage.md +296 -0
  127. data/lib/fog/hp/examples/block_storage_v2.md +446 -0
  128. data/lib/fog/hp/examples/cdn.md +54 -0
  129. data/lib/fog/hp/examples/compute.md +794 -0
  130. data/lib/fog/hp/examples/compute_v2.md +848 -0
  131. data/lib/fog/hp/examples/getting_started_examples.md +30 -0
  132. data/lib/fog/hp/examples/networking.md +472 -0
  133. data/lib/fog/hp/examples/object_storage.md +387 -0
  134. data/lib/fog/json.rb +6 -3
  135. data/lib/fog/local/models/storage/directories.rb +8 -4
  136. data/lib/fog/openstack/compute.rb +3 -0
  137. data/lib/fog/openstack/examples/compute/basics.rb +74 -0
  138. data/lib/fog/openstack/identity.rb +2 -3
  139. data/lib/fog/openstack/image.rb +1 -4
  140. data/lib/fog/openstack/metering.rb +1 -4
  141. data/lib/fog/openstack/models/compute/host.rb +5 -1
  142. data/lib/fog/openstack/models/compute/security_group.rb +18 -4
  143. data/lib/fog/openstack/models/compute/security_group_rule.rb +32 -0
  144. data/lib/fog/openstack/models/compute/security_group_rules.rb +22 -0
  145. data/lib/fog/openstack/models/volume/volume_type.rb +20 -0
  146. data/lib/fog/openstack/models/volume/volume_types.rb +26 -0
  147. data/lib/fog/openstack/network.rb +34 -6
  148. data/lib/fog/openstack/requests/compute/add_flavor_access.rb +1 -1
  149. data/lib/fog/openstack/requests/compute/allocate_address.rb +1 -1
  150. data/lib/fog/openstack/requests/compute/attach_volume.rb +1 -1
  151. data/lib/fog/openstack/requests/compute/boot_from_snapshot.rb +1 -1
  152. data/lib/fog/openstack/requests/compute/create_flavor.rb +1 -1
  153. data/lib/fog/openstack/requests/compute/create_key_pair.rb +1 -1
  154. data/lib/fog/openstack/requests/compute/create_security_group.rb +4 -4
  155. data/lib/fog/openstack/requests/compute/create_security_group_rule.rb +2 -2
  156. data/lib/fog/openstack/requests/compute/create_server.rb +12 -5
  157. data/lib/fog/openstack/requests/compute/create_volume.rb +1 -1
  158. data/lib/fog/openstack/requests/compute/create_volume_snapshot.rb +1 -1
  159. data/lib/fog/openstack/requests/compute/delete_security_group.rb +1 -1
  160. data/lib/fog/openstack/requests/compute/delete_security_group_rule.rb +2 -0
  161. data/lib/fog/openstack/requests/compute/get_security_group.rb +14 -24
  162. data/lib/fog/openstack/requests/compute/get_security_group_rule.rb +38 -0
  163. data/lib/fog/openstack/requests/compute/list_hosts.rb +3 -3
  164. data/lib/fog/openstack/requests/compute/list_tenants.rb +1 -1
  165. data/lib/fog/openstack/requests/compute/remove_flavor_access.rb +1 -1
  166. data/lib/fog/openstack/requests/compute/update_quota.rb +1 -1
  167. data/lib/fog/openstack/requests/identity/create_ec2_credential.rb +1 -1
  168. data/lib/fog/openstack/requests/identity/create_role.rb +1 -1
  169. data/lib/fog/openstack/requests/identity/create_user.rb +1 -1
  170. data/lib/fog/openstack/requests/identity/update_user.rb +1 -1
  171. data/lib/fog/openstack/requests/image/update_image_members.rb +1 -1
  172. data/lib/fog/openstack/requests/orchestration/create_stack.rb +2 -2
  173. data/lib/fog/openstack/requests/orchestration/update_stack.rb +1 -1
  174. data/lib/fog/openstack/requests/storage/get_object_http_url.rb +13 -0
  175. data/lib/fog/openstack/requests/storage/get_object_https_url.rb +0 -14
  176. data/lib/fog/openstack/requests/volume/create_volume.rb +1 -1
  177. data/lib/fog/openstack/requests/volume/create_volume_snapshot.rb +1 -1
  178. data/lib/fog/openstack/requests/volume/get_volume_type_details.rb +32 -0
  179. data/lib/fog/openstack/requests/volume/list_volume_types.rb +41 -0
  180. data/lib/fog/openstack/storage.rb +2 -0
  181. data/lib/fog/openstack/volume.rb +9 -5
  182. data/lib/fog/rackspace/compute.rb +1 -4
  183. data/lib/fog/rackspace/compute_v2.rb +1 -0
  184. data/lib/fog/rackspace/docs/auto_scale.md +9 -9
  185. data/lib/fog/rackspace/docs/getting_started.md +1 -0
  186. data/lib/fog/rackspace/docs/queues.md +312 -0
  187. data/lib/fog/rackspace/examples/queues/claim_messages.rb +60 -0
  188. data/lib/fog/rackspace/examples/queues/create_queue.rb +45 -0
  189. data/lib/fog/rackspace/examples/queues/delete_message.rb +72 -0
  190. data/lib/fog/rackspace/examples/queues/delete_queue.rb +53 -0
  191. data/lib/fog/rackspace/examples/queues/list_messages.rb +64 -0
  192. data/lib/fog/rackspace/examples/queues/post_message.rb +59 -0
  193. data/lib/fog/rackspace/models/compute_v2/key_pairs.rb +1 -1
  194. data/lib/fog/rackspace/models/compute_v2/server.rb +9 -3
  195. data/lib/fog/rackspace/models/compute_v2/servers.rb +2 -2
  196. data/lib/fog/rackspace/models/identity/service_catalog.rb +44 -59
  197. data/lib/fog/rackspace/models/queues/claim.rb +41 -1
  198. data/lib/fog/rackspace/models/queues/claims.rb +25 -0
  199. data/lib/fog/rackspace/models/queues/message.rb +43 -5
  200. data/lib/fog/rackspace/models/queues/messages.rb +37 -0
  201. data/lib/fog/rackspace/models/queues/queue.rb +66 -3
  202. data/lib/fog/rackspace/models/queues/queues.rb +15 -0
  203. data/lib/fog/rackspace/models/storage/file.rb +8 -1
  204. data/lib/fog/rackspace/requests/compute_v2/delete_keypair.rb +1 -1
  205. data/lib/fog/rackspace/requests/compute_v2/get_keypair.rb +1 -1
  206. data/lib/fog/rackspace/requests/queues/create_claim.rb +15 -0
  207. data/lib/fog/rackspace/requests/queues/create_message.rb +15 -0
  208. data/lib/fog/rackspace/requests/queues/create_queue.rb +11 -0
  209. data/lib/fog/rackspace/requests/queues/delete_claim.rb +12 -0
  210. data/lib/fog/rackspace/requests/queues/delete_message.rb +14 -0
  211. data/lib/fog/rackspace/requests/queues/delete_queue.rb +10 -0
  212. data/lib/fog/rackspace/requests/queues/get_claim.rb +11 -0
  213. data/lib/fog/rackspace/requests/queues/get_message.rb +12 -0
  214. data/lib/fog/rackspace/requests/queues/get_queue.rb +10 -0
  215. data/lib/fog/rackspace/requests/queues/get_queue_stats.rb +10 -0
  216. data/lib/fog/rackspace/requests/queues/list_messages.rb +26 -0
  217. data/lib/fog/rackspace/requests/queues/list_queues.rb +17 -2
  218. data/lib/fog/rackspace/requests/queues/update_claim.rb +7 -0
  219. data/lib/fog/rackspace/service.rb +6 -2
  220. data/lib/fog/rackspace/storage.rb +1 -4
  221. data/lib/fog/riakcs.rb +2 -2
  222. data/lib/fog/riakcs/provisioning.rb +1 -3
  223. data/lib/fog/riakcs/requests/provisioning/create_user.rb +2 -2
  224. data/lib/fog/riakcs/requests/provisioning/get_user.rb +1 -1
  225. data/lib/fog/riakcs/requests/provisioning/list_users.rb +1 -1
  226. data/lib/fog/riakcs/requests/usage/get_usage.rb +1 -1
  227. data/lib/fog/riakcs/usage.rb +0 -2
  228. data/lib/fog/vcloud_director/README.md +2 -0
  229. data/lib/fog/vcloud_director/compute.rb +79 -8
  230. data/lib/fog/vcloud_director/generators/compute/org_vdc_network.rb +91 -0
  231. data/lib/fog/vcloud_director/generators/compute/vapp.rb +30 -0
  232. data/lib/fog/vcloud_director/generators/compute/vm.rb +33 -0
  233. data/lib/fog/vcloud_director/models/compute/medias.rb +1 -1
  234. data/lib/fog/vcloud_director/models/compute/vm_customization.rb +2 -0
  235. data/lib/fog/vcloud_director/parsers/compute/vm_customization.rb +2 -0
  236. data/lib/fog/vcloud_director/requests/compute/delete_network.rb +64 -0
  237. data/lib/fog/vcloud_director/requests/compute/get_execute_query.rb +433 -333
  238. data/lib/fog/vcloud_director/requests/compute/get_vapp_metadata.rb +3 -1
  239. data/lib/fog/vcloud_director/requests/compute/post_attach_disk.rb +1 -1
  240. data/lib/fog/vcloud_director/requests/compute/post_configure_edge_gateway_services.rb +20 -2
  241. data/lib/fog/vcloud_director/requests/compute/post_create_org_vdc_network.rb +176 -0
  242. data/lib/fog/vcloud_director/requests/compute/post_detach_disk.rb +1 -1
  243. data/lib/fog/vcloud_director/requests/compute/post_eject_cd_rom.rb +1 -1
  244. data/lib/fog/vcloud_director/requests/compute/post_insert_cd_rom.rb +1 -1
  245. data/lib/fog/vcloud_director/requests/compute/put_guest_customization_section_vapp.rb +1 -0
  246. data/lib/fog/vcloud_director/requests/compute/put_vapp_name_and_description.rb +37 -0
  247. data/lib/fog/vcloud_director/requests/compute/put_vm.rb +39 -0
  248. data/lib/fog/version.rb +1 -1
  249. data/lib/fog/vsphere/compute.rb +3 -0
  250. data/lib/fog/vsphere/models/compute/datastore.rb +1 -0
  251. data/lib/fog/vsphere/models/compute/interface.rb +50 -2
  252. data/lib/fog/vsphere/models/compute/interfaces.rb +25 -10
  253. data/lib/fog/vsphere/models/compute/scsicontroller.rb +19 -0
  254. data/lib/fog/vsphere/models/compute/server.rb +27 -8
  255. data/lib/fog/vsphere/requests/compute/create_vm.rb +34 -8
  256. data/lib/fog/vsphere/requests/compute/get_vm_first_scsi_controller.rb +26 -0
  257. data/lib/fog/vsphere/requests/compute/list_datastores.rb +9 -8
  258. data/lib/fog/vsphere/requests/compute/modify_vm_interface.rb +9 -6
  259. data/lib/fog/vsphere/requests/compute/set_vm_customvalue.rb +19 -0
  260. data/lib/fog/xenserver.rb +2 -1
  261. data/lib/fog/xenserver/compute.rb +37 -1
  262. data/lib/fog/xenserver/models/compute/blob.rb +22 -0
  263. data/lib/fog/xenserver/models/compute/blobs.rb +25 -0
  264. data/lib/fog/xenserver/models/compute/bond.rb +23 -0
  265. data/lib/fog/xenserver/models/compute/bonds.rb +25 -0
  266. data/lib/fog/xenserver/models/compute/console.rb +3 -1
  267. data/lib/fog/xenserver/models/compute/crash_dump.rb +19 -0
  268. data/lib/fog/xenserver/models/compute/crash_dumps.rb +25 -0
  269. data/lib/fog/xenserver/models/compute/dr_task.rb +17 -0
  270. data/lib/fog/xenserver/models/compute/dr_tasks.rb +25 -0
  271. data/lib/fog/xenserver/models/compute/gpu_group.rb +22 -0
  272. data/lib/fog/xenserver/models/compute/gpu_groups.rb +25 -0
  273. data/lib/fog/xenserver/models/compute/guest_metrics.rb +2 -1
  274. data/lib/fog/xenserver/models/compute/host.rb +41 -8
  275. data/lib/fog/xenserver/models/compute/host_cpu.rb +2 -1
  276. data/lib/fog/xenserver/models/compute/host_crash_dump.rb +20 -0
  277. data/lib/fog/xenserver/models/compute/host_crash_dumps.rb +25 -0
  278. data/lib/fog/xenserver/models/compute/host_metrics.rb +1 -1
  279. data/lib/fog/xenserver/models/compute/host_patch.rb +25 -0
  280. data/lib/fog/xenserver/models/compute/host_patchs.rb +25 -0
  281. data/lib/fog/xenserver/models/compute/network.rb +7 -6
  282. data/lib/fog/xenserver/models/compute/pbd.rb +3 -1
  283. data/lib/fog/xenserver/models/compute/pci.rb +22 -0
  284. data/lib/fog/xenserver/models/compute/pcis.rb +25 -0
  285. data/lib/fog/xenserver/models/compute/pgpu.rb +20 -0
  286. data/lib/fog/xenserver/models/compute/pgpus.rb +25 -0
  287. data/lib/fog/xenserver/models/compute/pif.rb +19 -8
  288. data/lib/fog/xenserver/models/compute/pif_metrics.rb +28 -0
  289. data/lib/fog/xenserver/models/compute/pifs_metrics.rb +25 -0
  290. data/lib/fog/xenserver/models/compute/pool.rb +18 -1
  291. data/lib/fog/xenserver/models/compute/pool_patch.rb +24 -0
  292. data/lib/fog/xenserver/models/compute/pool_patchs.rb +25 -0
  293. data/lib/fog/xenserver/models/compute/role.rb +19 -0
  294. data/lib/fog/xenserver/models/compute/roles.rb +25 -0
  295. data/lib/fog/xenserver/models/compute/server.rb +59 -26
  296. data/lib/fog/xenserver/models/compute/server_appliance.rb +21 -0
  297. data/lib/fog/xenserver/models/compute/server_appliances.rb +25 -0
  298. data/lib/fog/xenserver/models/compute/storage_manager.rb +28 -0
  299. data/lib/fog/xenserver/models/compute/storage_managers.rb +25 -0
  300. data/lib/fog/xenserver/models/compute/storage_repository.rb +4 -1
  301. data/lib/fog/xenserver/models/compute/tunnel.rb +20 -0
  302. data/lib/fog/xenserver/models/compute/tunnels.rb +25 -0
  303. data/lib/fog/xenserver/models/compute/vbd.rb +3 -2
  304. data/lib/fog/xenserver/models/compute/vbd_metrics.rb +1 -1
  305. data/lib/fog/xenserver/models/compute/vdi.rb +4 -1
  306. data/lib/fog/xenserver/models/compute/vif.rb +11 -2
  307. data/lib/fog/xenserver/models/compute/vlan.rb +2 -1
  308. data/lib/fog/xenserver/models/compute/vmpp.rb +35 -0
  309. data/lib/fog/xenserver/models/compute/vmpps.rb +25 -0
  310. data/lib/fog/xenserver/models/compute/vtpm.rb +18 -0
  311. data/lib/fog/xenserver/models/compute/vtpms.rb +25 -0
  312. data/lib/fog/xenserver/requests/compute/reboot_server.rb +1 -1
  313. data/lib/tasks/changelog_task.rb +0 -1
  314. data/tests/aws/models/dns/record_tests.rb +1 -2
  315. data/tests/aws/models/dns/records_tests.rb +2 -7
  316. data/tests/aws/models/dns/zone_tests.rb +1 -1
  317. data/tests/aws/models/dns/zones_tests.rb +1 -1
  318. data/tests/aws/models/elb/model_tests.rb +10 -0
  319. data/tests/aws/models/storage/file_tests.rb +4 -0
  320. data/tests/aws/requests/compute/assign_private_ip_tests.rb +52 -0
  321. data/tests/aws/requests/compute/vpc_tests.rb +17 -1
  322. data/tests/aws/requests/dns/dns_tests.rb +1 -26
  323. data/tests/aws/requests/elb/load_balancer_tests.rb +6 -0
  324. data/tests/aws/requests/rds/{subnet_groups_test.rb → subnet_groups_tests.rb} +4 -0
  325. data/tests/aws/requests/storage/bucket_tests.rb +17 -0
  326. data/tests/aws/requests/storage/delete_multiple_objects_tests.rb +12 -0
  327. data/tests/brightbox/compute/schema.rb +0 -13
  328. data/tests/brightbox/models/compute/server_tests.rb +7 -9
  329. data/tests/brightbox/requests/compute/interface_tests.rb +7 -19
  330. data/tests/digitalocean/models/compute/server_tests.rb +4 -3
  331. data/tests/google/models/compute/disk_tests.rb +5 -0
  332. data/tests/google/models/compute/disks_tests.rb +5 -0
  333. data/tests/google/models/compute/server_tests.rb +5 -1
  334. data/tests/google/models/compute/servers_tests.rb +5 -0
  335. data/tests/google/requests/compute/disk_tests.rb +2 -1
  336. data/tests/google/requests/compute/firewall_tests.rb +1 -0
  337. data/tests/google/requests/compute/image_tests.rb +3 -0
  338. data/tests/google/requests/compute/network_tests.rb +1 -0
  339. data/tests/google/requests/compute/operation_tests.rb +1 -0
  340. data/tests/google/requests/compute/server_tests.rb +2 -3
  341. data/tests/google/requests/compute/zone_tests.rb +1 -6
  342. data/tests/helpers/collection_helper.rb +10 -2
  343. data/tests/helpers/mock_helper.rb +4 -5
  344. data/tests/local/models/directories_tests.rb +17 -0
  345. data/tests/openstack/models/compute/security_group_tests.rb +54 -0
  346. data/tests/openstack/requests/compute/security_group_tests.rb +22 -20
  347. data/tests/openstack/requests/network/network_tests.rb +8 -8
  348. data/tests/rackspace/compute_tests.rb +0 -5
  349. data/tests/rackspace/helper.rb +9 -4
  350. data/tests/rackspace/models/compute_v2/server_tests.rb +29 -1
  351. data/tests/rackspace/models/identity/service_catalog_tests.rb +87 -39
  352. data/tests/rackspace/models/queues/message_tests.rb +16 -0
  353. data/tests/rackspace/models/storage/file_tests.rb +29 -0
  354. data/tests/rackspace/requests/compute_v2/address_tests.rb +3 -1
  355. data/tests/rackspace/requests/compute_v2/metadata_tests.rb +4 -2
  356. data/tests/rackspace/requests/compute_v2/server_tests.rb +3 -6
  357. data/tests/vcloud_director/models/compute/media_tests.rb +18 -5
  358. data/tests/vcloud_director/models/compute/vapp_tests.rb +3 -1
  359. data/tests/vcloud_director/models/compute/vms_tests.rb +2 -1
  360. data/tests/vcloud_director/requests/compute/edge_gateway_tests.rb +19 -10
  361. data/tests/vcloud_director/requests/compute/network_tests.rb +64 -3
  362. data/tests/vcloud_director/requests/compute/query_tests.rb +67 -2
  363. data/tests/vsphere/requests/compute/set_vm_customvalue_tests.rb +21 -0
  364. metadata +112 -11
  365. data/fogkeytest1.pem +0 -27
  366. data/lib/fog/hp/README_HP.rdoc +0 -61
@@ -4,8 +4,48 @@ module Fog
4
4
 
5
5
  class Mock
6
6
 
7
- def insert_disk(disk_name)
8
- Fog::Mock.not_implemented
7
+ def insert_disk(disk_name, zone_name, image_name=nil, options={})
8
+ # check that image and zone exist
9
+ image_project = nil
10
+ unless image_name.nil?
11
+ ([ @project ] + Fog::Compute::Google::Images::GLOBAL_PROJECTS).each do |project|
12
+ image_project = project
13
+ break if data(project)[:images][options['image']]
14
+ end
15
+ get_image(image_name, image_project) # ok if image exists, will fail otherwise
16
+ end
17
+ get_zone(zone_name)
18
+
19
+ id = Fog::Mock.random_numbers(19).to_s
20
+ self.data[:disks][disk_name] = {
21
+ "kind" => "compute#disk",
22
+ "id" => id,
23
+ "creationTimestamp" => Time.now.iso8601,
24
+ "zone" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}",
25
+ "status" => "READY",
26
+ "name" => disk_name,
27
+ "sizeGb" => options['sizeGb'] || "10",
28
+ "selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/disks/#{disk_name}"
29
+ }
30
+
31
+ operation = self.random_operation
32
+ self.data[:operations][operation] = {
33
+ "kind" => "compute#operation",
34
+ "id" => Fog::Mock.random_numbers(19).to_s,
35
+ "name" => operation,
36
+ "zone" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}",
37
+ "operationType" => "insert",
38
+ "targetLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/disks/#{disk_name}",
39
+ "targetId" => id,
40
+ "status" => Fog::Compute::Google::Operation::PENDING_STATE,
41
+ "user" => "123456789012-qwertyuiopasdfghjkl1234567890qwe@developer.gserviceaccount.com",
42
+ "progress" => 0,
43
+ "insertTime" => Time.now.iso8601,
44
+ "startTime" => Time.now.iso8601,
45
+ "selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/operations/#{operation}"
46
+ }
47
+
48
+ build_response(:body => self.data[:operations][operation])
9
49
  end
10
50
 
11
51
  end
@@ -43,7 +83,7 @@ module Fog
43
83
  end
44
84
 
45
85
  # Merge in any remaining options (only 'description' should remain)
46
- body_object.merge(opts)
86
+ body_object.merge!(opts)
47
87
 
48
88
  result = self.build_result(api_method, parameters,
49
89
  body_object)
@@ -4,7 +4,8 @@ module Fog
4
4
 
5
5
  class Mock
6
6
 
7
- def insert_firewall(firewall_name)
7
+ def insert_firewall(firewall_name, source_range, allowed,
8
+ network=@default_network)
8
9
  Fog::Mock.not_implemented
9
10
  end
10
11
 
@@ -4,7 +4,7 @@ module Fog
4
4
 
5
5
  class Mock
6
6
 
7
- def insert_image(image_name)
7
+ def insert_image(image_name, options={})
8
8
  Fog::Mock.not_implemented
9
9
  end
10
10
 
@@ -30,7 +30,7 @@ module Fog
30
30
  }
31
31
 
32
32
  # Merge in the remaining params (only 'description' should remain)
33
- body_object.merge(options)
33
+ body_object.merge!(options)
34
34
 
35
35
  result = self.build_result(api_method,
36
36
  parameters,
@@ -3,6 +3,27 @@ module Fog
3
3
  class Google
4
4
 
5
5
  class Mock
6
+ include Shared
7
+
8
+ def handle_disks(options, zone_name)
9
+ disks = []
10
+ i = 0
11
+ options.delete('disks').each do |disk|
12
+ disk = Disk.new(disk) unless disk.is_a? Disk
13
+ disks << {
14
+ "kind"=>"compute#attachedDisk",
15
+ "index"=>i,
16
+ "type"=>"PERSISTENT",
17
+ "mode"=>"READ_WRITE",
18
+ "source"=>"https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/disks/#{disk.name}",
19
+ "deviceName"=>"persistent-disk-#{i}",
20
+ "boot"=>true
21
+ }
22
+ i+=1
23
+ end
24
+ disks
25
+ end
26
+
6
27
  def insert_server(server_name, zone_name, options={}, *deprecated_args)
7
28
 
8
29
  # check that image and zone exist
@@ -10,27 +31,28 @@ module Fog
10
31
  if options.has_key? 'image'
11
32
  ([ @project ] + Fog::Compute::Google::Images::GLOBAL_PROJECTS).each do |project|
12
33
  image_project = project
13
- break if self.class.data[project][:images][options['image']]
34
+ break if data(project)[:images][options['image']]
14
35
  end
15
36
  get_image(options['image'], image_project) # ok if image exists, will fail otherwise
16
37
  end
17
38
  get_zone(zone_name)
18
39
 
40
+ id = Fog::Mock.random_numbers(19).to_s
19
41
  self.data[:servers][server_name] = {
20
42
  "kind" => "compute#instance",
21
- "id" => Fog::Mock.random_numbers(19),
43
+ "id" => id,
22
44
  "creationTimestamp" => Time.now.iso8601,
23
- "zone" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}",
45
+ "zone" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}",
24
46
  "status" => "PROVISIONING",
25
47
  "name" => server_name,
26
48
  "tags" => { "fingerprint" => "42WmSpB8rSM=" },
27
- "machineType" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/machineTypes/#{options['machineType']}",
28
- "image" => "https://www.googleapis.com/compute/v1beta15/projects/centos-cloud/global/images/#{options['image']}",
29
- "kernel" => "https://www.googleapis.com/compute/v1beta15/projects/google/global/kernels/gce-v20130813",
49
+ "machineType" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/machineTypes/#{options['machineType']}",
50
+ "image" => "https://www.googleapis.com/compute/#{api_version}/projects/#{image_project}/global/images/#{options['image']}",
51
+ "kernel" => "https://www.googleapis.com/compute/#{api_version}/projects/google/global/kernels/gce-v20130813",
30
52
  "canIpForward" => false,
31
53
  "networkInterfaces" => [
32
54
  {
33
- "network" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/global/networks/default",
55
+ "network" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/global/networks/default",
34
56
  "networkIP" => Fog::Mock.random_ip,
35
57
  "name" => "nic0",
36
58
  "accessConfigs" => [
@@ -43,7 +65,7 @@ module Fog
43
65
  ]
44
66
  }
45
67
  ],
46
- "disks" => [
68
+ "disks" => options['disks'] ? handle_disks(options, zone_name) : [
47
69
  {
48
70
  "kind" => "compute#attachedDisk",
49
71
  "index" => 0,
@@ -61,28 +83,45 @@ module Fog
61
83
  }
62
84
  ]
63
85
  },
64
- "selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/instances/#{server_name}"
86
+ "selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/instances/#{server_name}"
65
87
  }
66
88
 
67
- build_response(:body => {
89
+ operation = self.random_operation
90
+ self.data[:operations][operation] = {
68
91
  "kind" => "compute#operation",
69
- "id" => "4639689000254420481",
70
- "name" => "operation-1380213292196-4e74bf2fbc3c1-ae707d47",
71
- "zone" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}",
92
+ "id" => Fog::Mock.random_numbers(19).to_s,
93
+ "name" => operation,
94
+ "zone" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}",
72
95
  "operationType" => "insert",
73
- "targetLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/instances/#{server_name}",
74
- "status" => "PENDING",
96
+ "targetLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/instances/#{server_name}",
97
+ "targetId" => id,
98
+ "status" => Fog::Compute::Google::Operation::PENDING_STATE,
75
99
  "user" => "123456789012-qwertyuiopasdfghjkl1234567890qwe@developer.gserviceaccount.com",
76
100
  "progress" => 0,
77
101
  "insertTime" => Time.now.iso8601,
78
102
  "startTime" => Time.now.iso8601,
79
- "selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/operations/operation-1380213292196-4e74bf2fbc3c1-ae707d47"
80
- })
103
+ "selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/operations/#{operation}"
104
+ }
105
+
106
+ build_response(:body => self.data[:operations][operation])
81
107
  end
82
108
 
83
109
  end
84
110
 
85
111
  class Real
112
+ include Shared
113
+
114
+ def handle_disks(options)
115
+ disks = []
116
+ options.delete('disks').each do |disk|
117
+ if disk.is_a? Disk
118
+ disks << disk.get_object
119
+ else
120
+ disks << disk
121
+ end
122
+ end
123
+ disks
124
+ end
86
125
 
87
126
  def format_metadata(metadata)
88
127
  { "items" => metadata.map {|k,v| {"key" => k, "value" => v}} }
@@ -115,42 +154,32 @@ module Fog
115
154
  end
116
155
 
117
156
  # ExternalIP is default value for server creation
157
+ access_config = {'type' => 'ONE_TO_ONE_NAT', 'name' => 'External NAT'}
158
+ # leave natIP undefined to use an IP from a shared ephemeral IP address pool
118
159
  if options.has_key? 'externalIp'
119
- external_ip = options.delete 'externalIp'
120
- else
121
- external_ip = true
160
+ access_config['natIP'] = options.delete 'externalIp'
122
161
  end
123
162
 
124
163
  networkInterfaces = []
125
164
  if ! network.nil?
126
165
  networkInterface = { 'network' => @api_url + @project + "/global/networks/#{network}" }
127
- if external_ip
128
- networkInterface['accessConfigs'] = [{'type' => 'ONE_TO_ONE_NAT', 'name' => 'External NAT', 'natIP' => external_ip}]
129
- end
166
+ networkInterface['accessConfigs'] = [access_config]
130
167
  networkInterfaces << networkInterface
131
168
  end
132
169
 
133
170
  # TODO: add other networks
134
171
  body_object['networkInterfaces'] = networkInterfaces
135
172
 
136
- if options['disks']
137
- disks = []
138
- options.delete('disks').each do |disk|
139
- if disk.is_a? Disk
140
- disks << disk.get_object
141
- else
142
- disks << disk
143
- end
144
- end
145
- body_object['disks'] = disks
146
- end
173
+ body_object['disks'] = handle_disks(options) if options['disks']
147
174
 
148
175
  options['metadata'] = format_metadata options['metadata'] if options['metadata']
149
176
 
177
+ body_object['tags'] = { 'items' => options.delete('tags') } if options['tags']
178
+
150
179
  if options['kernel']
151
180
  body_object['kernel'] = @api_url + "google/global/kernels/#{options.delete 'kernel'}"
152
181
  end
153
- body_object.merge! options # Adds in all remaining options that weren't explicitly handled.
182
+ body_object.merge!(options) # Adds in all remaining options that weren't explicitly handled.
154
183
 
155
184
  result = self.build_result(api_method, parameters,
156
185
  body_object=body_object)
@@ -4,8 +4,14 @@ module Fog
4
4
 
5
5
  class Mock
6
6
 
7
- def list_disks
8
- Fog::Mock.not_implemented
7
+ def list_disks(zone_name)
8
+ disks = self.data[:disks].values.select{|d| d["zone"].split("/")[-1] == zone_name}
9
+ build_response(:body => {
10
+ "kind" => "compute#diskList",
11
+ "selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/disks",
12
+ "id" => "projects/#{@project}/zones/#{zone_name}/disks",
13
+ "items" => disks
14
+ })
9
15
  end
10
16
 
11
17
  end
@@ -5,10 +5,10 @@ module Fog
5
5
  class Mock
6
6
 
7
7
  def list_images(project=@project)
8
- images = self.class.data[project][:images].values
8
+ images = data(project)[:images].values
9
9
  build_response(:body => {
10
10
  "kind" => "compute#imageList",
11
- "selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{project}/global/images",
11
+ "selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{project}/global/images",
12
12
  "id" => "projects/#{project}/global/images",
13
13
  "items" => images
14
14
  })
@@ -6,10 +6,10 @@ module Fog
6
6
 
7
7
  def list_machine_types(zone_name)
8
8
  get_zone(zone_name)
9
- machine_types = self.class.data[project][:machine_types][zone_name].values
9
+ machine_types = data[:machine_types][zone_name].values
10
10
  build_response(:body => {
11
11
  "kind" => "compute#machineTypeList",
12
- "selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/machineTypes",
12
+ "selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/machineTypes",
13
13
  "id" => "projects/high-cistern-340/zones/us-central1-a/machineTypes",
14
14
  "items" => machine_types
15
15
  })
@@ -5,12 +5,12 @@ module Fog
5
5
  class Mock
6
6
 
7
7
  def list_servers(zone_name)
8
+ get_zone(zone_name)
8
9
  zone = self.data[:zones][zone_name]
9
- raise Fog::Errors::Error.new("Invalid value for field 'zone': '#{zone_name}'. Unknown zone.") if zone.nil?
10
10
  servers = self.data[:servers].values.select{|s| s["zone"] == zone["selfLink"]}
11
11
  build_response(:body => {
12
12
  "kind" => "compute#instanceList",
13
- "selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones/#{zone_name}/instances",
13
+ "selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones/#{zone_name}/instances",
14
14
  "id" => "projects/#{@project}/zones/#{zone_name}/instances",
15
15
  "items" => servers
16
16
  })
@@ -4,13 +4,14 @@ module Fog
4
4
 
5
5
  class Mock
6
6
 
7
- def list_zone_operations
7
+ def list_zone_operations(zone)
8
8
  Fog::Mock.not_implemented
9
9
  end
10
10
 
11
11
  end
12
12
 
13
13
  class Real
14
+ # https://developers.google.com/compute/docs/reference/latest/zoneOperations
14
15
 
15
16
  def list_zone_operations(zone)
16
17
  api_method = @compute.zone_operations.list
@@ -8,7 +8,7 @@ module Fog
8
8
  zones = self.data[:zones].values
9
9
  build_response(:body => {
10
10
  "kind" => "compute#zoneList",
11
- "selfLink" => "https://www.googleapis.com/compute/v1beta15/projects/#{@project}/zones",
11
+ "selfLink" => "https://www.googleapis.com/compute/#{api_version}/projects/#{@project}/zones",
12
12
  "id" => "projects/#{@project}/zones",
13
13
  "items" => zones
14
14
  })
@@ -26,7 +26,7 @@ module Fog
26
26
  # * 'LastModified'<~Time> - date object was last modified
27
27
  #
28
28
  def copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {})
29
- headers = { 'x-goog-copy-source' => "/#{source_bucket_name}/#{source_object_name}" }.merge!(options)
29
+ headers = { 'x-goog-copy-source' => "/#{source_bucket_name}/#{source_object_name}" }.merge(options)
30
30
  request({
31
31
  :expects => 200,
32
32
  :headers => headers,
@@ -26,7 +26,7 @@ module Fog
26
26
  if message.nil? and !data.values.first.nil?
27
27
  message = data.values.first['message']
28
28
  end
29
- rescue MultiJson::DecodeError
29
+ rescue Fog::JSON::DecodeError
30
30
  message = error.response.body #### body is not in JSON format, so just return as is
31
31
  end
32
32
  end
@@ -0,0 +1,57 @@
1
+ # Getting Started with HP Cloud Extensions to Ruby Fog Bindings
2
+
3
+ [HP Cloud](http://www.hpcloud.com) has been creating and contributing bindings so
4
+ that developers can work with Ruby Fog and the HP Cloud services based on
5
+ [OpenStack](http://www.openstack.org/). By using the HP Cloud Extensions to Fog,
6
+ developers can write applications using Ruby that interacts with the
7
+ HP Cloud Services without having to deal with the underlying REST API or
8
+ JSON/XML document formats. We have officially turned these bindings over to the
9
+ Ruby Fog community where you can contribute and develop additional functionality
10
+ around these bindings.
11
+
12
+ This section of documentation provides information, examples and articles for working with the different HP Cloud services such as Compute, Object Storage and others.
13
+
14
+ Please note that HP Cloud recently released version 13.5 which updates and adds functionality provided by OpenStack Havana. Some of our HP Ruby Fog examples are developed to work with earlier versions so please take note which HP Cloud version you are working with.
15
+
16
+ **Note:** The Networking service examples only work with version 13.5.
17
+
18
+ ## Installation
19
+
20
+ To install and use HP Cloud Ruby bindings for Fog, please install the [latest release](http://fog.io/) of Fog.
21
+
22
+ Then follow the installation instructions for the operating system you are using and connect to the service:
23
+
24
+ * [Installation Instructions](https://github.com/fog/fog/blob/master/lib/fog/hp/docs/install.md)
25
+ * [Connecting to the Service](https://github.com/fog/fog/blob/master/lib/fog/hp/docs/connect.md)
26
+
27
+ ## Requirements
28
+
29
+ For working with the HP Cloud Extension to Fog, the following pre-requisites are needed:
30
+
31
+ * HP Cloud Services account. If you have not already signed up, please [sign up for your free trial](http://www.hpcloud.com/free-trial).
32
+ * Ruby version 1.8.x or 1.9.x
33
+ * `fog` gem
34
+
35
+
36
+ ## Examples
37
+
38
+ Apart from the overall [Fog documentation](http://fog.io), we have HP Cloud specific examples that will help you in using the Ruby Fog bindings with HP Cloud services.
39
+
40
+ [Examples for using Fog with HP Cloud Services](https://github.com/fog/fog/blob/master/lib/fog/hp/examples/getting_started_examples.md)
41
+
42
+ ## Articles
43
+
44
+ In addition to the examples we have provided, for Compute, Object Storage, and other HP Cloud services, we wanted to give you a few additional tips and "how-tos' to make using your Ruby Fog bindings even easier. Take a look at the articles listed below to find out more!
45
+
46
+ * [Using authentication caching](https://github.com/fog/fog/blob/master/lib/fog/hp/articles/auth_caching.md)
47
+
48
+ ## Additional Resources
49
+ * [Fog cloud library](http://fog.io)
50
+ * [Fog documentation](http://rubydoc.info/gems/fog)
51
+ * [Fog Github repo](https://github.com/fog/fog)
52
+ * [Fog Release Notes](https://github.com/fog/fog/blob/master/changelog.txt)
53
+
54
+ ## Support and Feedback
55
+
56
+ Your feedback is essential to the maturity of the bindings and is highly appreciated! If you have specific issues with the HP Cloud Extensions to Fog bindings, please file an [issue via Github](https://github.com/fog/fog/issues).
57
+
@@ -0,0 +1,23 @@
1
+ #Using Authentication Caching for HP Cloud Services#
2
+
3
+ Your application can run up to 40% faster if you cache the authentication information. The authentication token is typically valid for a day or more and if you save it in a safe place, you can reuse it. If you pass the authentication information to Fog, it does not have to reauthenticate.
4
+
5
+ For example if you save your credentials:
6
+
7
+ @storage = Fog::Storage.new(options)
8
+ @credentials = @storage.credentials
9
+
10
+ The next time you go to create a storage connection, pass in the credentials:
11
+
12
+ options[:credentials] = @credentials
13
+ @storage = Fog::Storage.new(options)
14
+ @credentials = @storage.credentials
15
+
16
+ It is best to always update your cached credentials. If they expire, they are automatically updated. When you create the new connection with the credentials, you should still pass in your normal authentication information in the options.
17
+
18
+ The contents of the credentials should be treated like a set of data. The contents of this object are likely to change in the future.
19
+
20
+ The same credentials may be used to create connections for Compute, Object Storage, CDN, Block Storage, and other services.
21
+
22
+ ---------
23
+ [Documentation Home](https://github.com/fog/fog/blob/master/lib/fog/hp/README.md) | [Examples](https://github.com/fog/fog/blob/master/lib/fog/hp/examples/getting_started_examples.md)