fog 1.9.0 → 1.10.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 (548) hide show
  1. data/Gemfile +1 -1
  2. data/README.md +1 -1
  3. data/changelog.txt +743 -0
  4. data/fog.gemspec +3 -5
  5. data/lib/fog/aws.rb +1 -0
  6. data/lib/fog/aws/credential_fetcher.rb +1 -1
  7. data/lib/fog/aws/data_pipeline.rb +114 -0
  8. data/lib/fog/aws/dynamodb.rb +1 -1
  9. data/lib/fog/aws/models/compute/flavors.rb +1 -1
  10. data/lib/fog/aws/models/compute/spot_request.rb +2 -0
  11. data/lib/fog/aws/models/data_pipeline/pipeline.rb +67 -0
  12. data/lib/fog/aws/models/data_pipeline/pipelines.rb +36 -0
  13. data/lib/fog/aws/parsers/cloud_watch/list_metrics.rb +1 -1
  14. data/lib/fog/aws/parsers/compute/describe_instances.rb +1 -1
  15. data/lib/fog/aws/parsers/compute/spot_instance_requests.rb +2 -0
  16. data/lib/fog/aws/requests/compute/request_spot_instances.rb +1 -0
  17. data/lib/fog/aws/requests/data_pipeline/activate_pipeline.rb +35 -0
  18. data/lib/fog/aws/requests/data_pipeline/create_pipeline.rb +41 -0
  19. data/lib/fog/aws/requests/data_pipeline/delete_pipeline.rb +35 -0
  20. data/lib/fog/aws/requests/data_pipeline/describe_pipelines.rb +36 -0
  21. data/lib/fog/aws/requests/data_pipeline/list_pipelines.rb +36 -0
  22. data/lib/fog/aws/requests/data_pipeline/put_pipeline_definition.rb +72 -0
  23. data/lib/fog/aws/requests/rds/describe_db_instances.rb +8 -9
  24. data/lib/fog/aws/requests/storage/get_service.rb +1 -2
  25. data/lib/fog/aws/requests/storage/list_multipart_uploads.rb +3 -3
  26. data/lib/fog/aws/requests/storage/put_bucket_policy.rb +2 -2
  27. data/lib/fog/aws/storage.rb +1 -1
  28. data/lib/fog/bin.rb +2 -1
  29. data/lib/fog/bin/aws.rb +4 -0
  30. data/lib/fog/bin/bluebox.rb +2 -0
  31. data/lib/fog/bin/dreamhost.rb +31 -0
  32. data/lib/fog/bin/hp.rb +7 -0
  33. data/lib/fog/bin/internet_archive.rb +34 -0
  34. data/lib/fog/bin/openstack.rb +17 -2
  35. data/lib/fog/bluebox.rb +1 -0
  36. data/lib/fog/bluebox/blb.rb +85 -0
  37. data/lib/fog/bluebox/models/blb/lb_application.rb +32 -0
  38. data/lib/fog/bluebox/models/blb/lb_applications.rb +26 -0
  39. data/lib/fog/bluebox/models/blb/lb_backend.rb +22 -0
  40. data/lib/fog/bluebox/models/blb/lb_backends.rb +30 -0
  41. data/lib/fog/bluebox/models/blb/lb_service.rb +35 -0
  42. data/lib/fog/bluebox/models/blb/lb_services.rb +29 -0
  43. data/lib/fog/bluebox/requests/blb/add_machine_to_lb_application.rb +33 -0
  44. data/lib/fog/bluebox/requests/blb/add_machine_to_lb_backend.rb +31 -0
  45. data/lib/fog/bluebox/requests/blb/get_lb_application.rb +33 -0
  46. data/lib/fog/bluebox/requests/blb/get_lb_applications.rb +31 -0
  47. data/lib/fog/bluebox/requests/blb/get_lb_backend.rb +36 -0
  48. data/lib/fog/bluebox/requests/blb/get_lb_backends.rb +36 -0
  49. data/lib/fog/bluebox/requests/blb/get_lb_machine.rb +35 -0
  50. data/lib/fog/bluebox/requests/blb/get_lb_machines.rb +35 -0
  51. data/lib/fog/bluebox/requests/blb/get_lb_service.rb +36 -0
  52. data/lib/fog/bluebox/requests/blb/get_lb_services.rb +36 -0
  53. data/lib/fog/bluebox/requests/blb/remove_machine_from_lb_backend.rb +28 -0
  54. data/lib/fog/bluebox/requests/blb/update_lb_backend_machine.rb +29 -0
  55. data/lib/fog/brightbox/compute.rb +1 -0
  56. data/lib/fog/brightbox/requests/compute/create_firewall_policy.rb +1 -0
  57. data/lib/fog/brightbox/requests/compute/update_firewall_policy.rb +25 -0
  58. data/lib/fog/brightbox/requests/compute/update_server.rb +1 -0
  59. data/lib/fog/cdn.rb +5 -12
  60. data/lib/fog/compute.rb +7 -68
  61. data/lib/fog/core/errors.rb +5 -1
  62. data/lib/fog/core/scp.rb +1 -0
  63. data/lib/fog/core/ssh.rb +1 -0
  64. data/lib/fog/dns.rb +7 -27
  65. data/lib/fog/dreamhost.rb +11 -0
  66. data/lib/fog/dreamhost/dns.rb +86 -0
  67. data/lib/fog/dreamhost/examples/dns/getting_started.md +105 -0
  68. data/lib/fog/dreamhost/models/dns/record.rb +35 -0
  69. data/lib/fog/dreamhost/models/dns/records.rb +38 -0
  70. data/lib/fog/dreamhost/models/dns/zone.rb +59 -0
  71. data/lib/fog/dreamhost/models/dns/zones.rb +41 -0
  72. data/lib/fog/dreamhost/requests/dns/create_record.rb +32 -0
  73. data/lib/fog/dreamhost/requests/dns/delete_record.rb +31 -0
  74. data/lib/fog/dreamhost/requests/dns/list_records.rb +25 -0
  75. data/lib/fog/ecloud/models/compute/detached_disks.rb +1 -5
  76. data/lib/fog/ecloud/models/compute/internet_services.rb +1 -5
  77. data/lib/fog/ecloud/models/compute/nodes.rb +1 -5
  78. data/lib/fog/ecloud/models/compute/public_ips.rb +1 -5
  79. data/lib/fog/ecloud/models/compute/servers.rb +2 -6
  80. data/lib/fog/ecloud/requests/compute/get_detached_disk.rb +1 -1
  81. data/lib/fog/ecloud/requests/compute/get_internet_service.rb +1 -1
  82. data/lib/fog/ecloud/requests/compute/get_node.rb +1 -1
  83. data/lib/fog/ecloud/requests/compute/get_public_ip.rb +1 -1
  84. data/lib/fog/ecloud/requests/compute/get_server.rb +1 -1
  85. data/lib/fog/ecloud/requests/compute/virtual_machine_create_from_template.rb +1 -1
  86. data/lib/fog/glesys/compute.rb +5 -1
  87. data/lib/fog/glesys/models/compute/ip.rb +47 -46
  88. data/lib/fog/glesys/models/compute/ips.rb +95 -12
  89. data/lib/fog/glesys/models/compute/server.rb +66 -5
  90. data/lib/fog/glesys/models/compute/servers.rb +7 -1
  91. data/lib/fog/glesys/models/compute/template.rb +8 -16
  92. data/lib/fog/glesys/models/compute/templates.rb +23 -5
  93. data/lib/fog/glesys/requests/compute/ip_details.rb +2 -2
  94. data/lib/fog/glesys/requests/compute/server_details.rb +2 -2
  95. data/lib/fog/glesys/requests/compute/template_list.rb +2 -2
  96. data/lib/fog/hp.rb +56 -26
  97. data/lib/fog/hp/CHANGELOG.hp +113 -0
  98. data/lib/fog/hp/README_HP.rdoc +7 -6
  99. data/lib/fog/hp/block_storage.rb +169 -0
  100. data/lib/fog/hp/cdn.rb +29 -7
  101. data/lib/fog/hp/compute.rb +88 -17
  102. data/lib/fog/hp/models/block_storage/bootable_volumes.rb +28 -0
  103. data/lib/fog/hp/models/block_storage/snapshot.rb +56 -0
  104. data/lib/fog/hp/models/block_storage/snapshots.rb +29 -0
  105. data/lib/fog/hp/models/block_storage/volume.rb +102 -0
  106. data/lib/fog/hp/models/block_storage/volumes.rb +28 -0
  107. data/lib/fog/hp/models/compute/address.rb +0 -1
  108. data/lib/fog/hp/models/compute/image.rb +43 -4
  109. data/lib/fog/hp/models/compute/images.rb +0 -5
  110. data/lib/fog/hp/models/compute/key_pair.rb +0 -5
  111. data/lib/fog/hp/models/compute/meta.rb +29 -0
  112. data/lib/fog/hp/models/compute/metadata.rb +79 -0
  113. data/lib/fog/hp/models/compute/server.rb +84 -20
  114. data/lib/fog/hp/models/meta_parent.rb +33 -0
  115. data/lib/fog/hp/models/storage/directories.rb +34 -9
  116. data/lib/fog/hp/models/storage/directory.rb +111 -26
  117. data/lib/fog/hp/models/storage/file.rb +10 -0
  118. data/lib/fog/hp/models/storage/files.rb +8 -0
  119. data/lib/fog/hp/models/storage/shared_directories.rb +55 -0
  120. data/lib/fog/hp/models/storage/shared_directory.rb +39 -0
  121. data/lib/fog/hp/models/storage/shared_file.rb +67 -0
  122. data/lib/fog/hp/models/storage/shared_files.rb +64 -0
  123. data/lib/fog/hp/requests/block_storage/create_snapshot.rb +76 -0
  124. data/lib/fog/hp/requests/block_storage/create_volume.rb +87 -0
  125. data/lib/fog/hp/requests/block_storage/delete_snapshot.rb +38 -0
  126. data/lib/fog/hp/requests/block_storage/delete_volume.rb +38 -0
  127. data/lib/fog/hp/requests/block_storage/get_bootable_volume_details.rb +59 -0
  128. data/lib/fog/hp/requests/block_storage/get_snapshot_details.rb +54 -0
  129. data/lib/fog/hp/requests/block_storage/get_volume_details.rb +58 -0
  130. data/lib/fog/hp/requests/block_storage/list_bootable_volumes.rb +53 -0
  131. data/lib/fog/hp/requests/block_storage/list_snapshots.rb +48 -0
  132. data/lib/fog/hp/requests/block_storage/list_volumes.rb +52 -0
  133. data/lib/fog/hp/requests/compute/attach_volume.rb +78 -0
  134. data/lib/fog/hp/requests/compute/create_image.rb +5 -8
  135. data/lib/fog/hp/requests/compute/create_persistent_server.rb +168 -0
  136. data/lib/fog/hp/requests/compute/create_server.rb +36 -20
  137. data/lib/fog/hp/requests/compute/delete_meta.rb +55 -0
  138. data/lib/fog/hp/requests/compute/delete_security_group_rule.rb +4 -4
  139. data/lib/fog/hp/requests/compute/detach_volume.rb +47 -0
  140. data/lib/fog/hp/requests/compute/get_console_output.rb +43 -0
  141. data/lib/fog/hp/requests/compute/get_meta.rb +57 -0
  142. data/lib/fog/hp/requests/compute/get_windows_password.rb +43 -0
  143. data/lib/fog/hp/requests/compute/list_metadata.rb +56 -0
  144. data/lib/fog/hp/requests/compute/list_server_volumes.rb +49 -0
  145. data/lib/fog/hp/requests/compute/set_metadata.rb +60 -0
  146. data/lib/fog/hp/requests/compute/update_meta.rb +61 -0
  147. data/lib/fog/hp/requests/compute/update_metadata.rb +60 -0
  148. data/lib/fog/hp/requests/storage/delete_shared_object.rb +38 -0
  149. data/lib/fog/hp/requests/storage/get_object.rb +12 -10
  150. data/lib/fog/hp/requests/storage/get_object_temp_url.rb +31 -0
  151. data/lib/fog/hp/requests/storage/get_shared_container.rb +75 -0
  152. data/lib/fog/hp/requests/storage/get_shared_object.rb +66 -0
  153. data/lib/fog/hp/requests/storage/head_container.rb +1 -0
  154. data/lib/fog/hp/requests/storage/head_object.rb +1 -0
  155. data/lib/fog/hp/requests/storage/head_shared_container.rb +45 -0
  156. data/lib/fog/hp/requests/storage/head_shared_object.rb +39 -0
  157. data/lib/fog/hp/requests/storage/put_container.rb +6 -6
  158. data/lib/fog/hp/requests/storage/put_object.rb +12 -1
  159. data/lib/fog/hp/requests/storage/put_shared_object.rb +85 -0
  160. data/lib/fog/hp/storage.rb +175 -33
  161. data/lib/fog/identity.rb +5 -4
  162. data/lib/fog/image.rb +5 -6
  163. data/lib/fog/internet_archive.rb +290 -0
  164. data/lib/fog/internet_archive/models/storage/directories.rb +43 -0
  165. data/lib/fog/internet_archive/models/storage/directory.rb +126 -0
  166. data/lib/fog/internet_archive/models/storage/file.rb +286 -0
  167. data/lib/fog/internet_archive/models/storage/files.rb +122 -0
  168. data/lib/fog/internet_archive/models/storage/version.rb +36 -0
  169. data/lib/fog/internet_archive/models/storage/versions.rb +38 -0
  170. data/lib/fog/internet_archive/parsers/storage/access_control_list.rb +46 -0
  171. data/lib/fog/internet_archive/parsers/storage/complete_multipart_upload.rb +24 -0
  172. data/lib/fog/internet_archive/parsers/storage/copy_object.rb +22 -0
  173. data/lib/fog/internet_archive/parsers/storage/cors_configuration.rb +41 -0
  174. data/lib/fog/internet_archive/parsers/storage/delete_multiple_objects.rb +50 -0
  175. data/lib/fog/internet_archive/parsers/storage/get_bucket.rb +62 -0
  176. data/lib/fog/internet_archive/parsers/storage/get_bucket_lifecycle.rb +66 -0
  177. data/lib/fog/internet_archive/parsers/storage/get_bucket_location.rb +20 -0
  178. data/lib/fog/internet_archive/parsers/storage/get_bucket_logging.rb +40 -0
  179. data/lib/fog/internet_archive/parsers/storage/get_bucket_object_versions.rb +88 -0
  180. data/lib/fog/internet_archive/parsers/storage/get_bucket_versioning.rb +24 -0
  181. data/lib/fog/internet_archive/parsers/storage/get_bucket_website.rb +26 -0
  182. data/lib/fog/internet_archive/parsers/storage/get_request_payment.rb +20 -0
  183. data/lib/fog/internet_archive/parsers/storage/get_service.rb +32 -0
  184. data/lib/fog/internet_archive/parsers/storage/initiate_multipart_upload.rb +24 -0
  185. data/lib/fog/internet_archive/parsers/storage/list_multipart_uploads.rb +56 -0
  186. data/lib/fog/internet_archive/parsers/storage/list_parts.rb +40 -0
  187. data/lib/fog/internet_archive/requests/storage/abort_multipart_upload.rb +28 -0
  188. data/lib/fog/internet_archive/requests/storage/acl_utils.rb +62 -0
  189. data/lib/fog/internet_archive/requests/storage/complete_multipart_upload.rb +48 -0
  190. data/lib/fog/internet_archive/requests/storage/copy_object.rb +81 -0
  191. data/lib/fog/internet_archive/requests/storage/cors_utils.rb +41 -0
  192. data/lib/fog/internet_archive/requests/storage/delete_bucket.rb +47 -0
  193. data/lib/fog/internet_archive/requests/storage/delete_bucket_cors.rb +29 -0
  194. data/lib/fog/internet_archive/requests/storage/delete_bucket_lifecycle.rb +27 -0
  195. data/lib/fog/internet_archive/requests/storage/delete_bucket_policy.rb +29 -0
  196. data/lib/fog/internet_archive/requests/storage/delete_bucket_website.rb +29 -0
  197. data/lib/fog/internet_archive/requests/storage/delete_multiple_objects.rb +167 -0
  198. data/lib/fog/internet_archive/requests/storage/delete_object.rb +118 -0
  199. data/lib/fog/internet_archive/requests/storage/get_bucket.rb +112 -0
  200. data/lib/fog/internet_archive/requests/storage/get_bucket_acl.rb +69 -0
  201. data/lib/fog/internet_archive/requests/storage/get_bucket_cors.rb +65 -0
  202. data/lib/fog/internet_archive/requests/storage/get_bucket_lifecycle.rb +38 -0
  203. data/lib/fog/internet_archive/requests/storage/get_bucket_location.rb +58 -0
  204. data/lib/fog/internet_archive/requests/storage/get_bucket_logging.rb +47 -0
  205. data/lib/fog/internet_archive/requests/storage/get_bucket_object_versions.rb +162 -0
  206. data/lib/fog/internet_archive/requests/storage/get_bucket_policy.rb +34 -0
  207. data/lib/fog/internet_archive/requests/storage/get_bucket_versioning.rb +69 -0
  208. data/lib/fog/internet_archive/requests/storage/get_bucket_website.rb +40 -0
  209. data/lib/fog/internet_archive/requests/storage/get_object.rb +188 -0
  210. data/lib/fog/internet_archive/requests/storage/get_object_acl.rb +80 -0
  211. data/lib/fog/internet_archive/requests/storage/get_object_http_url.rb +55 -0
  212. data/lib/fog/internet_archive/requests/storage/get_object_https_url.rb +37 -0
  213. data/lib/fog/internet_archive/requests/storage/get_object_torrent.rb +47 -0
  214. data/lib/fog/internet_archive/requests/storage/get_object_url.rb +55 -0
  215. data/lib/fog/internet_archive/requests/storage/get_request_payment.rb +49 -0
  216. data/lib/fog/internet_archive/requests/storage/get_service.rb +55 -0
  217. data/lib/fog/internet_archive/requests/storage/head_object.rb +66 -0
  218. data/lib/fog/internet_archive/requests/storage/initiate_multipart_upload.rb +44 -0
  219. data/lib/fog/internet_archive/requests/storage/list_multipart_uploads.rb +55 -0
  220. data/lib/fog/internet_archive/requests/storage/list_parts.rb +55 -0
  221. data/lib/fog/internet_archive/requests/storage/post_object_hidden_fields.rb +38 -0
  222. data/lib/fog/internet_archive/requests/storage/put_bucket.rb +74 -0
  223. data/lib/fog/internet_archive/requests/storage/put_bucket_acl.rb +71 -0
  224. data/lib/fog/internet_archive/requests/storage/put_bucket_cors.rb +49 -0
  225. data/lib/fog/internet_archive/requests/storage/put_bucket_lifecycle.rb +77 -0
  226. data/lib/fog/internet_archive/requests/storage/put_bucket_logging.rb +81 -0
  227. data/lib/fog/internet_archive/requests/storage/put_bucket_policy.rb +28 -0
  228. data/lib/fog/internet_archive/requests/storage/put_bucket_versioning.rb +75 -0
  229. data/lib/fog/internet_archive/requests/storage/put_bucket_website.rb +64 -0
  230. data/lib/fog/internet_archive/requests/storage/put_object.rb +113 -0
  231. data/lib/fog/internet_archive/requests/storage/put_object_acl.rb +80 -0
  232. data/lib/fog/internet_archive/requests/storage/put_object_url.rb +48 -0
  233. data/lib/fog/internet_archive/requests/storage/put_request_payment.rb +49 -0
  234. data/lib/fog/internet_archive/requests/storage/sync_clock.rb +28 -0
  235. data/lib/fog/internet_archive/requests/storage/upload_part.rb +41 -0
  236. data/lib/fog/internet_archive/signaturev4.rb +73 -0
  237. data/lib/fog/internet_archive/storage.rb +402 -0
  238. data/lib/fog/joyent/models/compute/server.rb +1 -1
  239. data/lib/fog/joyent/requests/compute/resize_machine.rb +2 -0
  240. data/lib/fog/libvirt/models/compute/volume.rb +1 -1
  241. data/lib/fog/network.rb +5 -6
  242. data/lib/fog/openstack.rb +10 -0
  243. data/lib/fog/openstack/compute.rb +11 -4
  244. data/lib/fog/openstack/identity.rb +5 -2
  245. data/lib/fog/openstack/models/compute/images.rb +2 -1
  246. data/lib/fog/openstack/models/compute/metadata.rb +4 -5
  247. data/lib/fog/openstack/models/compute/server.rb +36 -21
  248. data/lib/fog/openstack/models/identity/role.rb +1 -1
  249. data/lib/fog/openstack/models/network/floating_ip.rb +1 -1
  250. data/lib/fog/openstack/models/network/floating_ips.rb +2 -2
  251. data/lib/fog/openstack/models/network/network.rb +8 -0
  252. data/lib/fog/openstack/models/storage/directories.rb +39 -0
  253. data/lib/fog/openstack/models/storage/directory.rb +50 -0
  254. data/lib/fog/openstack/models/storage/file.rb +150 -0
  255. data/lib/fog/openstack/models/storage/files.rb +94 -0
  256. data/lib/fog/openstack/requests/compute/allocate_address.rb +1 -1
  257. data/lib/fog/openstack/requests/compute/delete_meta.rb +43 -0
  258. data/lib/fog/openstack/requests/compute/get_limits.rb +1 -1
  259. data/lib/fog/openstack/requests/compute/get_snapshot_details.rb +1 -1
  260. data/lib/fog/openstack/requests/compute/get_volume_details.rb +1 -1
  261. data/lib/fog/openstack/requests/compute/list_servers.rb +1 -1
  262. data/lib/fog/openstack/requests/compute/list_tenants.rb +1 -0
  263. data/lib/fog/openstack/requests/compute/remove_fixed_ip.rb +1 -1
  264. data/lib/fog/openstack/requests/compute/update_meta.rb +46 -0
  265. data/lib/fog/openstack/requests/compute/update_server.rb +1 -1
  266. data/lib/fog/openstack/requests/identity/delete_user_role.rb +2 -2
  267. data/lib/fog/openstack/requests/identity/get_user_by_name.rb +2 -2
  268. data/lib/fog/openstack/requests/image/create_image.rb +1 -1
  269. data/lib/fog/openstack/requests/network/associate_floating_ip.rb +3 -3
  270. data/lib/fog/openstack/requests/network/create_floating_ip.rb +3 -3
  271. data/lib/fog/openstack/requests/network/delete_floating_ip.rb +1 -1
  272. data/lib/fog/openstack/requests/network/disassociate_floating_ip.rb +3 -3
  273. data/lib/fog/openstack/requests/network/get_floating_ip.rb +1 -1
  274. data/lib/fog/openstack/requests/network/list_floating_ips.rb +1 -1
  275. data/lib/fog/openstack/requests/storage/copy_object.rb +27 -0
  276. data/lib/fog/openstack/requests/storage/delete_container.rb +22 -0
  277. data/lib/fog/openstack/requests/storage/delete_object.rb +23 -0
  278. data/lib/fog/openstack/requests/storage/get_container.rb +44 -0
  279. data/lib/fog/openstack/requests/storage/get_containers.rb +33 -0
  280. data/lib/fog/openstack/requests/storage/get_object.rb +29 -0
  281. data/lib/fog/openstack/requests/storage/get_object_https_url.rb +51 -0
  282. data/lib/fog/openstack/requests/storage/head_container.rb +28 -0
  283. data/lib/fog/openstack/requests/storage/head_containers.rb +25 -0
  284. data/lib/fog/openstack/requests/storage/head_object.rb +23 -0
  285. data/lib/fog/openstack/requests/storage/post_set_meta_temp_url_key.rb +37 -0
  286. data/lib/fog/openstack/requests/storage/put_container.rb +22 -0
  287. data/lib/fog/openstack/requests/storage/put_object.rb +30 -0
  288. data/lib/fog/openstack/requests/storage/put_object_manifest.rb +25 -0
  289. data/lib/fog/openstack/storage.rb +159 -0
  290. data/lib/fog/openstack/volume.rb +4 -2
  291. data/lib/fog/ovirt/compute.rb +1 -0
  292. data/lib/fog/ovirt/models/compute/server.rb +2 -2
  293. data/lib/fog/ovirt/models/compute/volume.rb +1 -0
  294. data/lib/fog/ovirt/requests/compute/get_api_version.rb +16 -0
  295. data/lib/fog/providers.rb +2 -1
  296. data/lib/fog/rackspace/block_storage.rb +1 -0
  297. data/lib/fog/rackspace/cdn.rb +61 -7
  298. data/lib/fog/rackspace/compute_v2.rb +16 -3
  299. data/lib/fog/rackspace/databases.rb +4 -3
  300. data/lib/fog/rackspace/docs/compute_v2.md +663 -0
  301. data/lib/fog/rackspace/docs/getting_started.md +9 -9
  302. data/lib/fog/rackspace/examples/README.md +47 -0
  303. data/lib/fog/rackspace/examples/compute_v2/README.md +47 -0
  304. data/lib/fog/rackspace/examples/compute_v2/create_image.rb +61 -0
  305. data/lib/fog/rackspace/examples/compute_v2/create_server.rb +89 -0
  306. data/lib/fog/rackspace/examples/compute_v2/delete_image.rb +61 -0
  307. data/lib/fog/rackspace/examples/compute_v2/delete_server.rb +56 -0
  308. data/lib/fog/rackspace/examples/compute_v2/detach_volume.rb +93 -0
  309. data/lib/fog/rackspace/examples/compute_v2/resize_server.rb +106 -0
  310. data/lib/fog/rackspace/examples/compute_v2/server_attachments.rb +69 -0
  311. data/lib/fog/rackspace/examples/compute_v2/server_metadata.rb +85 -0
  312. data/lib/fog/rackspace/identity.rb +1 -1
  313. data/lib/fog/rackspace/load_balancers.rb +2 -2
  314. data/lib/fog/rackspace/mock_data.rb +114 -96
  315. data/lib/fog/rackspace/models/compute_v2/attachment.rb +16 -0
  316. data/lib/fog/rackspace/models/compute_v2/attachments.rb +6 -0
  317. data/lib/fog/rackspace/models/compute_v2/flavor.rb +18 -0
  318. data/lib/fog/rackspace/models/compute_v2/flavors.rb +9 -1
  319. data/lib/fog/rackspace/models/compute_v2/image.rb +52 -7
  320. data/lib/fog/rackspace/models/compute_v2/images.rb +9 -0
  321. data/lib/fog/rackspace/models/compute_v2/meta_parent.rb +9 -0
  322. data/lib/fog/rackspace/models/compute_v2/metadata.rb +30 -7
  323. data/lib/fog/rackspace/models/compute_v2/metadatum.rb +4 -0
  324. data/lib/fog/rackspace/models/compute_v2/network.rb +27 -0
  325. data/lib/fog/rackspace/models/compute_v2/networks.rb +23 -0
  326. data/lib/fog/rackspace/models/compute_v2/server.rb +235 -24
  327. data/lib/fog/rackspace/models/compute_v2/servers.rb +19 -1
  328. data/lib/fog/rackspace/models/dns/zones.rb +35 -2
  329. data/lib/fog/rackspace/models/identity/credentials.rb +3 -2
  330. data/lib/fog/rackspace/models/storage/account.rb +24 -0
  331. data/lib/fog/rackspace/models/storage/directories.rb +3 -0
  332. data/lib/fog/rackspace/models/storage/directory.rb +68 -39
  333. data/lib/fog/rackspace/models/storage/file.rb +38 -67
  334. data/lib/fog/rackspace/models/storage/files.rb +11 -4
  335. data/lib/fog/rackspace/models/storage/metadata.rb +129 -0
  336. data/lib/fog/rackspace/requests/cdn/delete_object.rb +37 -0
  337. data/lib/fog/rackspace/requests/cdn/get_containers.rb +34 -0
  338. data/lib/fog/rackspace/requests/cdn/head_container.rb +24 -0
  339. data/lib/fog/rackspace/requests/cdn/post_container.rb +21 -0
  340. data/lib/fog/rackspace/requests/cdn/put_container.rb +21 -0
  341. data/lib/fog/rackspace/requests/compute_v2/attach_volume.rb +13 -0
  342. data/lib/fog/rackspace/requests/compute_v2/change_server_password.rb +7 -0
  343. data/lib/fog/rackspace/requests/compute_v2/confirm_resize_server.rb +9 -0
  344. data/lib/fog/rackspace/requests/compute_v2/create_image.rb +9 -5
  345. data/lib/fog/rackspace/requests/compute_v2/create_network.rb +36 -0
  346. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +38 -0
  347. data/lib/fog/rackspace/requests/compute_v2/delete_attachment.rb +5 -0
  348. data/lib/fog/rackspace/requests/compute_v2/delete_image.rb +2 -4
  349. data/lib/fog/rackspace/requests/compute_v2/delete_metadata_item.rb +6 -0
  350. data/lib/fog/rackspace/requests/compute_v2/delete_network.rb +21 -0
  351. data/lib/fog/rackspace/requests/compute_v2/delete_server.rb +4 -0
  352. data/lib/fog/rackspace/requests/compute_v2/get_attachment.rb +12 -0
  353. data/lib/fog/rackspace/requests/compute_v2/get_flavor.rb +14 -0
  354. data/lib/fog/rackspace/requests/compute_v2/get_image.rb +18 -0
  355. data/lib/fog/rackspace/requests/compute_v2/get_metadata_item.rb +9 -0
  356. data/lib/fog/rackspace/requests/compute_v2/get_network.rb +21 -0
  357. data/lib/fog/rackspace/requests/compute_v2/get_server.rb +32 -0
  358. data/lib/fog/rackspace/requests/compute_v2/list_addresses.rb +5 -0
  359. data/lib/fog/rackspace/requests/compute_v2/list_addresses_by_network.rb +12 -0
  360. data/lib/fog/rackspace/requests/compute_v2/list_attachments.rb +12 -0
  361. data/lib/fog/rackspace/requests/compute_v2/list_flavors.rb +10 -0
  362. data/lib/fog/rackspace/requests/compute_v2/list_images.rb +10 -0
  363. data/lib/fog/rackspace/requests/compute_v2/list_metadata.rb +8 -0
  364. data/lib/fog/rackspace/requests/compute_v2/list_networks.rb +18 -0
  365. data/lib/fog/rackspace/requests/compute_v2/list_servers.rb +31 -0
  366. data/lib/fog/rackspace/requests/compute_v2/reboot_server.rb +5 -0
  367. data/lib/fog/rackspace/requests/compute_v2/rebuild_server.rb +37 -0
  368. data/lib/fog/rackspace/requests/compute_v2/resize_server.rb +10 -0
  369. data/lib/fog/rackspace/requests/compute_v2/revert_resize_server.rb +10 -0
  370. data/lib/fog/rackspace/requests/compute_v2/set_metadata.rb +9 -0
  371. data/lib/fog/rackspace/requests/compute_v2/set_metadata_item.rb +10 -0
  372. data/lib/fog/rackspace/requests/compute_v2/update_metadata.rb +9 -0
  373. data/lib/fog/rackspace/requests/compute_v2/update_server.rb +9 -0
  374. data/lib/fog/rackspace/requests/storage/get_object.rb +0 -1
  375. data/lib/fog/rackspace/requests/storage/put_container.rb +2 -1
  376. data/lib/fog/rackspace/storage.rb +14 -2
  377. data/lib/fog/schema/data_validator.rb +154 -0
  378. data/lib/fog/storage.rb +8 -24
  379. data/lib/fog/terremark/models/shared/server.rb +5 -3
  380. data/lib/fog/terremark/parser.rb +14 -13
  381. data/lib/fog/terremark/parsers/shared/get_catalog.rb +5 -19
  382. data/lib/fog/terremark/parsers/shared/get_catalog_item.rb +4 -14
  383. data/lib/fog/terremark/parsers/shared/get_internet_services.rb +1 -1
  384. data/lib/fog/terremark/parsers/shared/get_keys_list.rb +4 -18
  385. data/lib/fog/terremark/parsers/shared/get_network_ips.rb +1 -1
  386. data/lib/fog/terremark/parsers/shared/get_node_services.rb +1 -1
  387. data/lib/fog/terremark/parsers/shared/get_organization.rb +4 -3
  388. data/lib/fog/terremark/parsers/shared/get_organizations.rb +3 -2
  389. data/lib/fog/terremark/parsers/shared/get_public_ips.rb +1 -1
  390. data/lib/fog/terremark/parsers/shared/get_tasks_list.rb +4 -17
  391. data/lib/fog/terremark/parsers/shared/get_vapp_template.rb +3 -14
  392. data/lib/fog/terremark/parsers/shared/get_vdc.rb +6 -38
  393. data/lib/fog/terremark/parsers/shared/instantiate_vapp_template.rb +3 -14
  394. data/lib/fog/terremark/parsers/shared/internet_service.rb +2 -5
  395. data/lib/fog/terremark/parsers/shared/network.rb +3 -11
  396. data/lib/fog/terremark/parsers/shared/node_service.rb +1 -1
  397. data/lib/fog/terremark/parsers/shared/public_ip.rb +1 -1
  398. data/lib/fog/terremark/parsers/shared/task.rb +3 -14
  399. data/lib/fog/terremark/parsers/shared/vapp.rb +3 -14
  400. data/lib/fog/vcloud/compute.rb +1 -0
  401. data/lib/fog/vcloud/models/compute/server.rb +15 -2
  402. data/lib/fog/vcloud/models/compute/vapp.rb +11 -0
  403. data/lib/fog/vcloud/requests/compute/configure_vm_network.rb +37 -0
  404. data/lib/fog/vcloud/requests/compute/instantiate_vapp_template.rb +8 -4
  405. data/lib/fog/version.rb +1 -1
  406. data/lib/fog/volume.rb +6 -6
  407. data/lib/fog/vsphere/requests/compute/create_vm.rb +18 -3
  408. data/lib/fog/vsphere/requests/compute/list_vm_interfaces.rb +1 -1
  409. data/lib/fog/vsphere/requests/compute/vm_reconfig_hardware.rb +1 -1
  410. data/tests/aws/models/data_pipeline/pipeline_tests.rb +8 -0
  411. data/tests/aws/models/data_pipeline/pipelines_tests.rb +8 -0
  412. data/tests/aws/models/rds/server_tests.rb +10 -9
  413. data/tests/aws/requests/compute/image_tests.rb +2 -2
  414. data/tests/aws/requests/compute/security_group_tests.rb +1 -1
  415. data/tests/aws/requests/compute/spot_instance_tests.rb +3 -2
  416. data/tests/aws/requests/data_pipeline/helper.rb +44 -0
  417. data/tests/aws/requests/data_pipeline/pipeline_tests.rb +54 -0
  418. data/tests/aws/requests/rds/instance_tests.rb +8 -5
  419. data/tests/bluebox/requests/blb/helper.rb +64 -0
  420. data/tests/bluebox/requests/blb/lb_tests.rb +75 -0
  421. data/tests/brightbox/requests/compute/firewall_policy_tests.rb +7 -0
  422. data/tests/brightbox/requests/compute/helper.rb +4 -2
  423. data/tests/compute/helper.rb +8 -0
  424. data/tests/core/user_agent_tests.rb +6 -0
  425. data/tests/dreamhost/README.md +56 -0
  426. data/tests/dreamhost/dns_tests.rb +20 -0
  427. data/tests/dreamhost/helper.rb +19 -0
  428. data/tests/dreamhost/models/dns/record_tests.rb +73 -0
  429. data/tests/dreamhost/models/dns/records_tests.rb +29 -0
  430. data/tests/dreamhost/models/dns/zone_tests.rb +62 -0
  431. data/tests/dreamhost/models/dns/zones_tests.rb +29 -0
  432. data/tests/dreamhost/requests/dns/create_record_tests.rb +39 -0
  433. data/tests/dreamhost/requests/dns/delete_record_tests.rb +26 -0
  434. data/tests/dreamhost/requests/dns/list_records_tests.rb +31 -0
  435. data/tests/glesys/requests/compute/helper.rb +5 -5
  436. data/tests/helper.rb +1 -1
  437. data/tests/helpers/formats_helper.rb +63 -50
  438. data/tests/helpers/formats_helper_tests.rb +87 -36
  439. data/tests/helpers/mock_helper.rb +4 -1
  440. data/tests/helpers/schema_validator_tests.rb +107 -0
  441. data/tests/hp/models/block_storage/bootable_volume_tests.rb +23 -0
  442. data/tests/hp/models/block_storage/snapshot_tests.rb +23 -0
  443. data/tests/hp/models/block_storage/volume_tests.rb +21 -0
  444. data/tests/hp/models/compute/address_tests.rb +1 -1
  445. data/tests/hp/models/compute/addresses_tests.rb +1 -1
  446. data/tests/hp/models/compute/key_pair_tests.rb +1 -1
  447. data/tests/hp/models/compute/key_pairs_tests.rb +1 -1
  448. data/tests/hp/models/compute/metadata_image_tests.rb +60 -0
  449. data/tests/hp/models/compute/metadata_server_tests.rb +54 -0
  450. data/tests/hp/models/compute/security_group_tests.rb +3 -1
  451. data/tests/hp/models/compute/security_groups_tests.rb +1 -1
  452. data/tests/hp/models/storage/directories_tests.rb +23 -0
  453. data/tests/hp/models/storage/directory_tests.rb +62 -0
  454. data/tests/hp/models/storage/file_tests.rb +44 -0
  455. data/tests/hp/models/storage/files_tests.rb +38 -0
  456. data/tests/hp/requests/block_storage/bootable_volume_tests.rb +78 -0
  457. data/tests/hp/requests/block_storage/snapshot_tests.rb +56 -0
  458. data/tests/hp/requests/block_storage/volume_tests.rb +94 -0
  459. data/tests/hp/requests/cdn/container_tests.rb +1 -1
  460. data/tests/hp/requests/compute/address_tests.rb +5 -6
  461. data/tests/hp/requests/compute/flavor_tests.rb +1 -1
  462. data/tests/hp/requests/compute/image_tests.rb +1 -1
  463. data/tests/hp/requests/compute/key_pair_tests.rb +1 -1
  464. data/tests/hp/requests/compute/metadata_tests.rb +70 -0
  465. data/tests/hp/requests/compute/persistent_server_tests.rb +66 -0
  466. data/tests/hp/requests/compute/security_group_rule_tests.rb +1 -1
  467. data/tests/hp/requests/compute/security_group_tests.rb +1 -1
  468. data/tests/hp/requests/compute/server_address_tests.rb +1 -1
  469. data/tests/hp/requests/compute/server_tests.rb +5 -6
  470. data/tests/hp/requests/compute/server_volume_tests.rb +76 -0
  471. data/tests/hp/requests/storage/container_tests.rb +1 -1
  472. data/tests/hp/requests/storage/object_tests.rb +9 -1
  473. data/tests/hp/user_agent_tests.rb +13 -0
  474. data/tests/internet_archive/models/storage/directory_tests.rb +51 -0
  475. data/tests/internet_archive/models/storage/file_tests.rb +80 -0
  476. data/tests/internet_archive/models/storage/files_tests.rb +56 -0
  477. data/tests/internet_archive/models/storage/url_tests.rb +28 -0
  478. data/tests/internet_archive/models/storage/version_tests.rb +52 -0
  479. data/tests/internet_archive/models/storage/versions_tests.rb +56 -0
  480. data/tests/internet_archive/requests/storage/acl_utils_tests.rb +209 -0
  481. data/tests/internet_archive/requests/storage/bucket_tests.rb +328 -0
  482. data/tests/internet_archive/requests/storage/cors_utils_tests.rb +108 -0
  483. data/tests/internet_archive/requests/storage/multipart_upload_tests.rb +132 -0
  484. data/tests/internet_archive/requests/storage/object_tests.rb +166 -0
  485. data/tests/internet_archive/requests/storage/versioning_tests.rb +258 -0
  486. data/tests/internet_archive/signaturev4_tests.rb +41 -0
  487. data/tests/internet_archive/signed_params_tests.rb +5 -0
  488. data/tests/openstack/models/compute/images_tests.rb +14 -0
  489. data/tests/openstack/models/compute/server_tests.rb +42 -1
  490. data/tests/openstack/models/identity/roles_tests.rb +1 -0
  491. data/tests/openstack/models/identity/user_tests.rb +2 -2
  492. data/tests/openstack/models/network/network_tests.rb +21 -1
  493. data/tests/openstack/models/storage/file_tests.rb +178 -0
  494. data/tests/openstack/requests/compute/limit_tests.rb +1 -1
  495. data/tests/openstack/requests/compute/tenant_tests.rb +2 -2
  496. data/tests/openstack/requests/identity/ec2_credentials_tests.rb +7 -4
  497. data/tests/openstack/requests/identity/helper.rb +17 -0
  498. data/tests/openstack/requests/identity/role_tests.rb +6 -0
  499. data/tests/openstack/requests/identity/tenant_tests.rb +14 -12
  500. data/tests/openstack/requests/identity/user_tests.rb +9 -5
  501. data/tests/openstack/requests/storage/container_tests.rb +64 -0
  502. data/tests/openstack/requests/storage/large_object_tests.rb +47 -0
  503. data/tests/openstack/requests/storage/object_tests.rb +84 -0
  504. data/tests/openstack/volume_tests.rb +15 -0
  505. data/tests/rackspace/cdn_tests.rb +78 -0
  506. data/tests/rackspace/helper.rb +9 -0
  507. data/tests/rackspace/models/compute_v2/flavors_tests.rb +1 -1
  508. data/tests/rackspace/models/compute_v2/image_tests.rb +2 -4
  509. data/tests/rackspace/models/compute_v2/images_tests.rb +1 -1
  510. data/tests/rackspace/models/compute_v2/metadata_tests.rb +5 -3
  511. data/tests/rackspace/models/compute_v2/network_tests.rb +10 -0
  512. data/tests/rackspace/models/compute_v2/networks_tests.rb +10 -0
  513. data/tests/rackspace/models/compute_v2/server_tests.rb +8 -7
  514. data/tests/rackspace/models/compute_v2/servers_tests.rb +5 -7
  515. data/tests/rackspace/models/dns/zones_tests.rb +22 -0
  516. data/tests/rackspace/models/identity/credentials_tests.rb +14 -5
  517. data/tests/rackspace/models/storage/account_tests.rb +28 -0
  518. data/tests/rackspace/models/storage/directories_tests.rb +29 -0
  519. data/tests/rackspace/models/storage/directory_tests.rb +141 -0
  520. data/tests/rackspace/models/storage/file_tests.rb +86 -11
  521. data/tests/rackspace/models/storage/metadata_tests.rb +174 -0
  522. data/tests/rackspace/requests/cdn/cdn_tests.rb +76 -0
  523. data/tests/rackspace/requests/compute/image_tests.rb +2 -2
  524. data/tests/rackspace/requests/compute_v2/image_tests.rb +6 -6
  525. data/tests/rackspace/requests/compute_v2/network_tests.rb +49 -0
  526. data/tests/rackspace/requests/identity/user_tests.rb +0 -4
  527. data/tests/rackspace/requests/storage/container_tests.rb +8 -1
  528. data/tests/rackspace/storage_tests.rb +8 -0
  529. data/tests/storage/helper.rb +3 -0
  530. metadata +341 -40
  531. data/docs/storage/aws.markdown +0 -21
  532. data/lib/fog/bin/virtual_box.rb +0 -57
  533. data/lib/fog/rackspace/docs/cloud_servers.md +0 -65
  534. data/lib/fog/rackspace/requests/identity/get_credentials.rb +0 -15
  535. data/lib/fog/virtual_box.rb +0 -11
  536. data/lib/fog/virtual_box/compute.rb +0 -59
  537. data/lib/fog/virtual_box/models/compute/medium.rb +0 -87
  538. data/lib/fog/virtual_box/models/compute/medium_format.rb +0 -34
  539. data/lib/fog/virtual_box/models/compute/mediums.rb +0 -32
  540. data/lib/fog/virtual_box/models/compute/nat_engine.rb +0 -65
  541. data/lib/fog/virtual_box/models/compute/nat_redirect.rb +0 -91
  542. data/lib/fog/virtual_box/models/compute/nat_redirects.rb +0 -41
  543. data/lib/fog/virtual_box/models/compute/network_adapter.rb +0 -82
  544. data/lib/fog/virtual_box/models/compute/network_adapters.rb +0 -42
  545. data/lib/fog/virtual_box/models/compute/server.rb +0 -199
  546. data/lib/fog/virtual_box/models/compute/servers.rb +0 -41
  547. data/lib/fog/virtual_box/models/compute/storage_controller.rb +0 -83
  548. data/lib/fog/virtual_box/models/compute/storage_controllers.rb +0 -38
@@ -53,7 +53,7 @@ module Fog
53
53
 
54
54
  def resize(flavor)
55
55
  requires :id
56
- service.resize_machine(id, flavor)
56
+ service.resize_machine(id, flavor.name)
57
57
  true
58
58
  end
59
59
 
@@ -1,6 +1,7 @@
1
1
  module Fog
2
2
  module Compute
3
3
  class Joyent
4
+ class Real
4
5
  def resize_machine(id, package)
5
6
  request(
6
7
  :method => "POST",
@@ -8,6 +9,7 @@ module Fog
8
9
  :query => {"action" => "resize", "package" => package}
9
10
  )
10
11
  end
12
+ end
11
13
  end
12
14
  end
13
15
  end
@@ -64,7 +64,7 @@ module Fog
64
64
  private
65
65
 
66
66
  def image_suffix
67
- retrun "img" if format_type == "raw"
67
+ return "img" if format_type == "raw"
68
68
  format_type
69
69
  end
70
70
 
@@ -9,13 +9,12 @@ module Fog
9
9
  attributes = attributes.dup # Prevent delete from having side effects
10
10
  provider = attributes.delete(:provider).to_s.downcase.to_sym
11
11
 
12
- case provider
13
- when :openstack
14
- require 'fog/openstack/network'
15
- Fog::Network::OpenStack.new(attributes)
16
- else
17
- raise ArgumentError.new("#{provider} has no network service")
12
+ if self.providers.include?(provider)
13
+ require "fog/#{provider}/network"
14
+ return Fog::Network.const_get(Fog.providers[provider]).new(attributes)
18
15
  end
16
+
17
+ raise ArgumentError.new("#{provider} has no network service")
19
18
  end
20
19
 
21
20
  def self.providers
@@ -42,8 +42,11 @@ module Fog
42
42
  end
43
43
 
44
44
  service(:compute , 'openstack/compute' , 'Compute' )
45
+ service(:image, 'openstack/image', 'Image')
45
46
  service(:identity, 'openstack/identity', 'Identity')
46
47
  service(:network, 'openstack/network', 'Network')
48
+ service(:storage, 'openstack/storage', 'Storage')
49
+ service(:volume, 'openstack/volume', 'Volume')
47
50
 
48
51
  # legacy v1.0 style auth
49
52
  def self.authenticate_v1(options, connection_options = {})
@@ -199,6 +202,13 @@ module Fog
199
202
 
200
203
  Fog::JSON.decode(response.body)
201
204
  end
205
+
206
+ # CGI.escape, but without special treatment on spaces
207
+ def self.escape(str,extra_exclude_chars = '')
208
+ str.gsub(/([^a-zA-Z0-9_.-#{extra_exclude_chars}]+)/) do
209
+ '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
210
+ end
211
+ end
202
212
 
203
213
  end
204
214
  end
@@ -10,7 +10,8 @@ module Fog
10
10
  :persistent, :openstack_service_type, :openstack_service_name,
11
11
  :openstack_tenant,
12
12
  :openstack_api_key, :openstack_username, :openstack_identity_endpoint,
13
- :current_user, :current_tenant, :openstack_region
13
+ :current_user, :current_tenant, :openstack_region,
14
+ :openstack_endpoint_type
14
15
 
15
16
  ## MODELS
16
17
  #
@@ -99,6 +100,10 @@ module Fog
99
100
  request :update_metadata
100
101
  request :delete_metadata
101
102
 
103
+ # Metadatam
104
+ request :delete_meta
105
+ request :update_meta
106
+
102
107
  # Address
103
108
  request :list_addresses
104
109
  request :list_address_pools
@@ -294,6 +299,7 @@ module Fog
294
299
  @openstack_service_type = options[:openstack_service_type] || ['nova', 'compute']
295
300
  @openstack_service_name = options[:openstack_service_name]
296
301
  @openstack_identity_service_type = options[:openstack_identity_service_type] || 'identity'
302
+ @openstack_endpoint_type = options[:openstack_endpoint_type] || 'publicURL'
297
303
  @openstack_region = options[:openstack_region]
298
304
 
299
305
  @connection_options = options[:connection_options] || {}
@@ -371,7 +377,8 @@ module Fog
371
377
  :openstack_tenant => @openstack_tenant,
372
378
  :openstack_service_type => @openstack_service_type,
373
379
  :openstack_service_name => @openstack_service_name,
374
- :openstack_identity_service_type => @openstack_identity_service_type
380
+ :openstack_identity_service_type => @openstack_identity_service_type,
381
+ :openstack_endpoint_type => @openstack_endpoint_type
375
382
  }
376
383
 
377
384
  if @openstack_auth_uri.path =~ /\/v2.0\//
@@ -405,9 +412,9 @@ module Fog
405
412
  @scheme = uri.scheme
406
413
 
407
414
  # Not all implementations have identity service in the catalog
408
- if @openstack_identity_public_endpoint
415
+ if @openstack_identity_public_endpoint || @openstack_management_url
409
416
  @identity_connection = Fog::Connection.new(
410
- @openstack_identity_public_endpoint,
417
+ @openstack_identity_public_endpoint || @openstack_management_url,
411
418
  false, @connection_options)
412
419
  end
413
420
 
@@ -8,7 +8,8 @@ module Fog
8
8
  recognizes :openstack_auth_token, :openstack_management_url, :persistent,
9
9
  :openstack_service_type, :openstack_service_name, :openstack_tenant,
10
10
  :openstack_api_key, :openstack_username, :openstack_current_user_id,
11
- :current_user, :current_tenant
11
+ :current_user, :current_tenant,
12
+ :openstack_endpoint_type
12
13
 
13
14
  model_path 'fog/openstack/models/identity'
14
15
  model :tenant
@@ -192,6 +193,8 @@ module Fog
192
193
  @connection_options = options[:connection_options] || {}
193
194
 
194
195
  @openstack_current_user_id = options[:openstack_current_user_id]
196
+
197
+ @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL'
195
198
 
196
199
  @current_user = options[:current_user]
197
200
  @current_tenant = options[:current_tenant]
@@ -263,7 +266,7 @@ module Fog
263
266
  :openstack_tenant => @openstack_tenant,
264
267
  :openstack_service_type => @openstack_service_type,
265
268
  :openstack_service_name => @openstack_service_name,
266
- :openstack_endpoint_type => 'adminURL'
269
+ :openstack_endpoint_type => @openstack_endpoint_type
267
270
  }
268
271
 
269
272
  credentials = Fog::OpenStack.authenticate_v2(options, @connection_options)
@@ -13,10 +13,11 @@ module Fog
13
13
 
14
14
  def all
15
15
  data = service.list_images_detail.body['images']
16
- load(data)
16
+ images = load(data)
17
17
  if server
18
18
  self.replace(self.select {|image| image.server_id == server.id})
19
19
  end
20
+ images
20
21
  end
21
22
 
22
23
  def get(image_id)
@@ -24,7 +24,7 @@ module Fog
24
24
 
25
25
  def get(key)
26
26
  requires :parent
27
- data = service.get_meta(collection_name, @parent.id, key).body["meta"]
27
+ data = service.get_metadata(collection_name, @parent.id, key).body["meta"]
28
28
  metas = []
29
29
  data.each_pair {|k,v| metas << {"key" => k, "value" => v} }
30
30
  new(metas[0])
@@ -34,12 +34,12 @@ module Fog
34
34
 
35
35
  def update(data=nil)
36
36
  requires :parent
37
- service.update_metadata(collection_name, @parent.id, meta_hash(data))
37
+ service.update_metadata(collection_name, @parent.id, to_hash(data))
38
38
  end
39
39
 
40
40
  def set(data=nil)
41
41
  requires :parent
42
- service.set_metadata(collection_name, @parent.id, meta_hash(data))
42
+ service.set_metadata(collection_name, @parent.id, to_hash(data))
43
43
  end
44
44
 
45
45
  def new(attributes = {})
@@ -47,8 +47,7 @@ module Fog
47
47
  super({ :parent => @parent }.merge!(attributes))
48
48
  end
49
49
 
50
- private
51
- def meta_hash(data=nil)
50
+ def to_hash(data=nil)
52
51
  if data.nil?
53
52
  data={}
54
53
  self.each do |meta|
@@ -46,7 +46,6 @@ module Fog
46
46
  def initialize(attributes={})
47
47
  # Old 'connection' is renamed as service and should be used instead
48
48
  prepare_service_value(attributes)
49
- attributes[:metadata] = {}
50
49
 
51
50
  self.security_groups = attributes.delete(:security_groups)
52
51
  self.min_count = attributes.delete(:min_count)
@@ -66,9 +65,10 @@ module Fog
66
65
  end
67
66
 
68
67
  def metadata=(new_metadata={})
68
+ return unless new_metadata
69
69
  metas = []
70
70
  new_metadata.each_pair {|k,v| metas << {"key" => k, "value" => v} }
71
- metadata.load(metas)
71
+ @metadata = metadata.load(metas)
72
72
  end
73
73
 
74
74
  def user_data=(ascii_userdata)
@@ -86,24 +86,41 @@ module Fog
86
86
  service.images(:server => self)
87
87
  end
88
88
 
89
- def private_ip_address
90
- if addresses['private']
91
- #assume only a single private
92
- return addresses['private'].first
93
- elsif addresses['internet']
94
- #assume no private IP means private cloud
95
- return addresses['internet'].first
96
- end
89
+ def all_addresses
90
+ # currently openstack API does not tell us what is a floating ip vs a fixed ip for the vm listing,
91
+ # we fall back to get all addresses and filter sadly.
92
+ @all_addresses ||= service.list_all_addresses.body["floating_ips"].select{|data| data['instance_id'] == id}
97
93
  end
98
94
 
99
- def public_ip_address
100
- if addresses['public']
101
- #assume last is either original or assigned from floating IPs
102
- return addresses['public'].last
103
- elsif addresses['internet']
104
- #assume no public IP means private cloud
105
- return addresses['internet'].first
106
- end
95
+ def reload
96
+ @all_addresses = nil
97
+ super
98
+ end
99
+
100
+ # returns all ip_addresses for a given instance
101
+ # this includes both the fixed ip(s) and the floating ip(s)
102
+ def ip_addresses
103
+ addresses.values.flatten.map{|x| x['addr']}
104
+ end
105
+
106
+ def floating_ip_addresses
107
+ all_addresses.map{|addr| addr["ip"]}
108
+ end
109
+
110
+ alias_method :public_ip_addresses, :floating_ip_addresses
111
+
112
+ def floating_ip_address
113
+ floating_ip_addresses.first
114
+ end
115
+
116
+ alias_method :public_ip_address, :floating_ip_address
117
+
118
+ def private_ip_addresses
119
+ ip_addresses - floating_ip_addresses
120
+ end
121
+
122
+ def private_ip_address
123
+ private_ip_addresses.first
107
124
  end
108
125
 
109
126
  def image_ref
@@ -229,10 +246,7 @@ module Fog
229
246
  def save
230
247
  raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
231
248
  requires :flavor_ref, :image_ref, :name
232
- meta_hash = {}
233
- metadata.each { |meta| meta_hash.store(meta.key, meta.value) }
234
249
  options = {
235
- 'metadata' => meta_hash,
236
250
  'personality' => personality,
237
251
  'accessIPv4' => accessIPv4,
238
252
  'accessIPv6' => accessIPv6,
@@ -244,6 +258,7 @@ module Fog
244
258
  'max_count' => @max_count,
245
259
  'os:scheduler_hints' => @os_scheduler_hints
246
260
  }
261
+ options['metadata'] = metadata.to_hash unless @metadata.nil?
247
262
  options = options.reject {|key, value| value.nil?}
248
263
  data = service.create_server(name, image_ref, flavor_ref, options)
249
264
  merge_attributes(data.body['server'])
@@ -37,7 +37,7 @@ module Fog
37
37
  when :add
38
38
  service.create_user_role(tenant_id, user_id, id).status == 200
39
39
  when :remove
40
- service.delete_user_role(tenant_id, user_id, id).status == 200
40
+ service.delete_user_role(tenant_id, user_id, id).status == 204
41
41
  end
42
42
  end
43
43
 
@@ -32,7 +32,7 @@ module Fog
32
32
  merge_attributes(connection.create_floating_ip(self.floating_network_id,
33
33
 
34
34
 
35
- self.attributes).body['floating_ip'])
35
+ self.attributes).body['floatingip'])
36
36
  self
37
37
  end
38
38
 
@@ -17,11 +17,11 @@ module Fog
17
17
 
18
18
  def all(filters = filters)
19
19
  self.filters = filters
20
- load(connection.list_floating_ips(filters).body['floating_ips'])
20
+ load(connection.list_floating_ips(filters).body['floatingips'])
21
21
  end
22
22
 
23
23
  def get(floating_network_id)
24
- if floating_ip = connection.get_floating_ip(floating_network_id).body['floating_ip']
24
+ if floating_ip = connection.get_floating_ip(floating_network_id).body['floatingip']
25
25
  new(floating_ip)
26
26
  end
27
27
  rescue Fog::Network::OpenStack::NotFound
@@ -12,6 +12,14 @@ module Fog
12
12
  attribute :status
13
13
  attribute :admin_state_up
14
14
  attribute :tenant_id
15
+ attribute :provider_network_type,
16
+ :aliases => 'provider:network_type'
17
+ attribute :provider_physical_network,
18
+ :aliases => 'provider:physical_network'
19
+ attribute :provider_segmentation_id,
20
+ :aliases => 'provider:segmentation_id'
21
+ attribute :router_external,
22
+ :aliases => 'router:external'
15
23
 
16
24
  def initialize(attributes)
17
25
  # Old 'connection' is renamed as service and should be used instead
@@ -0,0 +1,39 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/openstack/models/storage/directory'
3
+
4
+ module Fog
5
+ module Storage
6
+ class OpenStack
7
+
8
+ class Directories < Fog::Collection
9
+
10
+ model Fog::Storage::OpenStack::Directory
11
+
12
+ def all
13
+ data = service.get_containers.body
14
+ load(data)
15
+ end
16
+
17
+ def get(key, options = {})
18
+ data = service.get_container(key, options)
19
+ directory = new(:key => key)
20
+ for key, value in data.headers
21
+ if ['X-Container-Bytes-Used', 'X-Container-Object-Count'].include?(key)
22
+ directory.merge_attributes(key => value)
23
+ end
24
+ end
25
+ directory.files.merge_attributes(options)
26
+ directory.files.instance_variable_set(:@loaded, true)
27
+ data.body.each do |file|
28
+ directory.files << directory.files.new(file)
29
+ end
30
+ directory
31
+ rescue Fog::Storage::OpenStack::NotFound
32
+ nil
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,50 @@
1
+ require 'fog/core/model'
2
+ require 'fog/openstack/models/storage/files'
3
+
4
+ module Fog
5
+ module Storage
6
+ class OpenStack
7
+
8
+ class Directory < Fog::Model
9
+
10
+ identity :key, :aliases => 'name'
11
+
12
+ attribute :bytes, :aliases => 'X-Container-Bytes-Used'
13
+ attribute :count, :aliases => 'X-Container-Object-Count'
14
+
15
+ def destroy
16
+ requires :key
17
+ service.delete_container(key)
18
+ true
19
+ rescue Excon::Errors::NotFound
20
+ false
21
+ end
22
+
23
+ def files
24
+ @files ||= begin
25
+ Fog::Storage::OpenStack::Files.new(
26
+ :directory => self,
27
+ :service => service
28
+ )
29
+ end
30
+ end
31
+
32
+ def public=(new_public)
33
+ @public = new_public
34
+ end
35
+
36
+ def public_url
37
+ raise NotImplementedError
38
+ end
39
+
40
+ def save
41
+ requires :key
42
+ service.put_container(key)
43
+ true
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,150 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Storage
5
+ class OpenStack
6
+
7
+ class File < Fog::Model
8
+
9
+ identity :key, :aliases => 'name'
10
+
11
+ attribute :content_length, :aliases => ['bytes', 'Content-Length'], :type => :integer
12
+ attribute :content_type, :aliases => ['content_type', 'Content-Type']
13
+ attribute :etag, :aliases => ['hash', 'Etag']
14
+ attribute :last_modified, :aliases => ['last_modified', 'Last-Modified'], :type => :time
15
+ attribute :access_control_allow_origin, :aliases => ['Access-Control-Allow-Origin']
16
+ attribute :origin, :aliases => ['Origin']
17
+
18
+ def body
19
+ attributes[:body] ||= if last_modified
20
+ collection.get(identity).body
21
+ else
22
+ ''
23
+ end
24
+ end
25
+
26
+ def body=(new_body)
27
+ attributes[:body] = new_body
28
+ end
29
+
30
+ def directory
31
+ @directory
32
+ end
33
+
34
+ def copy(target_directory_key, target_file_key, options={})
35
+ requires :directory, :key
36
+ options['Content-Type'] ||= content_type if content_type
37
+ options['Access-Control-Allow-Origin'] ||= access_control_allow_origin if access_control_allow_origin
38
+ options['Origin'] ||= origin if origin
39
+ service.copy_object(directory.key, key, target_directory_key, target_file_key, options)
40
+ target_directory = service.directories.new(:key => target_directory_key)
41
+ target_directory.files.get(target_file_key)
42
+ end
43
+
44
+ def destroy
45
+ requires :directory, :key
46
+ service.delete_object(directory.key, key)
47
+ true
48
+ end
49
+
50
+ def metadata
51
+ @metadata ||= headers_to_metadata
52
+ end
53
+
54
+ def owner=(new_owner)
55
+ if new_owner
56
+ attributes[:owner] = {
57
+ :display_name => new_owner['DisplayName'],
58
+ :id => new_owner['ID']
59
+ }
60
+ end
61
+ end
62
+
63
+ def public=(new_public)
64
+ new_public
65
+ end
66
+
67
+ def public_url
68
+ requires :key
69
+ self.collection.get_url(self.key)
70
+ end
71
+
72
+ def save(options = {})
73
+ requires :body, :directory, :key
74
+ options['Content-Type'] = content_type if content_type
75
+ options['Access-Control-Allow-Origin'] = access_control_allow_origin if access_control_allow_origin
76
+ options['Origin'] = origin if origin
77
+ options.merge!(metadata_to_headers)
78
+
79
+ data = service.put_object(directory.key, key, body, options)
80
+ update_attributes_from(data)
81
+ refresh_metadata
82
+
83
+ self.content_length = Fog::Storage.get_body_size(body)
84
+ self.content_type ||= Fog::Storage.get_content_type(body)
85
+ true
86
+ end
87
+
88
+ private
89
+
90
+ def directory=(new_directory)
91
+ @directory = new_directory
92
+ end
93
+
94
+ def refresh_metadata
95
+ metadata.reject! {|k, v| v.nil? }
96
+ end
97
+
98
+ def headers_to_metadata
99
+ key_map = key_mapping
100
+ Hash[metadata_attributes.map {|k, v| [key_map[k], v] }]
101
+ end
102
+
103
+ def key_mapping
104
+ key_map = metadata_attributes
105
+ key_map.each_pair {|k, v| key_map[k] = header_to_key(k)}
106
+ end
107
+
108
+ def header_to_key(opt)
109
+ opt.gsub(metadata_prefix, '').split('-').map {|k| k[0, 1].downcase + k[1..-1]}.join('_').to_sym
110
+ end
111
+
112
+ def metadata_to_headers
113
+ header_map = header_mapping
114
+ Hash[metadata.map {|k, v| [header_map[k], v] }]
115
+ end
116
+
117
+ def header_mapping
118
+ header_map = metadata.dup
119
+ header_map.each_pair {|k, v| header_map[k] = key_to_header(k)}
120
+ end
121
+
122
+ def key_to_header(key)
123
+ metadata_prefix + key.to_s.split(/[-_]/).map(&:capitalize).join('-')
124
+ end
125
+
126
+ def metadata_attributes
127
+ if last_modified
128
+ headers = service.head_object(directory.key, self.key).headers
129
+ headers.reject! {|k, v| !metadata_attribute?(k)}
130
+ else
131
+ {}
132
+ end
133
+ end
134
+
135
+ def metadata_attribute?(key)
136
+ key.to_s =~ /^#{metadata_prefix}/
137
+ end
138
+
139
+ def metadata_prefix
140
+ "X-Object-Meta-"
141
+ end
142
+
143
+ def update_attributes_from(data)
144
+ merge_attributes(data.headers.reject {|key, value| ['Content-Length', 'Content-Type'].include?(key)})
145
+ end
146
+ end
147
+
148
+ end
149
+ end
150
+ end