fog 1.4.0 → 1.5.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 (236) hide show
  1. data/.document +1 -1
  2. data/.irbrc +5 -10
  3. data/{README.rdoc → README.md} +66 -61
  4. data/Rakefile +4 -6
  5. data/changelog.txt +491 -0
  6. data/docs/about/users.markdown +1 -0
  7. data/fog.gemspec +4 -4
  8. data/lib/fog.rb +1 -1
  9. data/lib/fog/aws.rb +4 -0
  10. data/lib/fog/aws/auto_scaling.rb +3 -0
  11. data/lib/fog/aws/cloud_watch.rb +28 -0
  12. data/lib/fog/aws/compute.rb +7 -1
  13. data/lib/fog/aws/elasticache.rb +64 -6
  14. data/lib/fog/aws/models/auto_scaling/configuration.rb +3 -1
  15. data/lib/fog/aws/models/auto_scaling/group.rb +10 -9
  16. data/lib/fog/aws/models/auto_scaling/policies.rb +33 -0
  17. data/lib/fog/aws/models/auto_scaling/policy.rb +46 -0
  18. data/lib/fog/aws/models/cloud_watch/alarm.rb +50 -2
  19. data/lib/fog/aws/models/cloud_watch/alarms.rb +18 -1
  20. data/lib/fog/aws/models/compute/address.rb +2 -2
  21. data/lib/fog/aws/models/dns/records.rb +5 -0
  22. data/lib/fog/aws/models/elasticache/cluster.rb +1 -1
  23. data/lib/fog/aws/models/iam/users.rb +26 -4
  24. data/lib/fog/aws/parsers/auto_scaling/describe_policies.rb +7 -5
  25. data/lib/fog/aws/parsers/elb/describe_load_balancers.rb +1 -1
  26. data/lib/fog/aws/rds.rb +1 -1
  27. data/lib/fog/aws/requests/auto_scaling/create_auto_scaling_group.rb +8 -0
  28. data/lib/fog/aws/requests/auto_scaling/create_launch_configuration.rb +1 -2
  29. data/lib/fog/aws/requests/auto_scaling/delete_auto_scaling_group.rb +10 -2
  30. data/lib/fog/aws/requests/auto_scaling/delete_launch_configuration.rb +1 -1
  31. data/lib/fog/aws/requests/auto_scaling/delete_policy.rb +10 -1
  32. data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_instances.rb +0 -1
  33. data/lib/fog/aws/requests/auto_scaling/describe_policies.rb +13 -1
  34. data/lib/fog/aws/requests/auto_scaling/put_scaling_policy.rb +20 -1
  35. data/lib/fog/aws/requests/auto_scaling/update_auto_scaling_group.rb +1 -1
  36. data/lib/fog/aws/requests/cloud_watch/delete_alarms.rb +19 -1
  37. data/lib/fog/aws/requests/cloud_watch/describe_alarms.rb +20 -2
  38. data/lib/fog/aws/requests/cloud_watch/put_metric_alarm.rb +9 -0
  39. data/lib/fog/aws/requests/compute/allocate_address.rb +4 -5
  40. data/lib/fog/aws/requests/compute/create_dhcp_options.rb +6 -5
  41. data/lib/fog/aws/requests/compute/create_internet_gateway.rb +7 -6
  42. data/lib/fog/aws/requests/compute/create_subnet.rb +11 -10
  43. data/lib/fog/aws/requests/compute/create_vpc.rb +8 -7
  44. data/lib/fog/aws/requests/compute/delete_dhcp_options.rb +1 -0
  45. data/lib/fog/aws/requests/compute/delete_internet_gateway.rb +1 -0
  46. data/lib/fog/aws/requests/compute/delete_subnet.rb +1 -0
  47. data/lib/fog/aws/requests/compute/delete_vpc.rb +2 -1
  48. data/lib/fog/aws/requests/compute/describe_availability_zones.rb +1 -0
  49. data/lib/fog/aws/requests/compute/describe_dhcp_options.rb +1 -8
  50. data/lib/fog/aws/requests/compute/describe_instances.rb +3 -1
  51. data/lib/fog/aws/requests/compute/describe_internet_gateways.rb +1 -8
  52. data/lib/fog/aws/requests/compute/describe_subnets.rb +1 -9
  53. data/lib/fog/aws/requests/compute/describe_vpcs.rb +1 -8
  54. data/lib/fog/aws/requests/compute/release_address.rb +12 -4
  55. data/lib/fog/aws/requests/compute/start_instances.rb +1 -0
  56. data/lib/fog/aws/requests/compute/stop_instances.rb +1 -0
  57. data/lib/fog/aws/requests/elasticache/create_cache_cluster.rb +26 -2
  58. data/lib/fog/aws/requests/elasticache/delete_cache_cluster.rb +10 -1
  59. data/lib/fog/aws/requests/elasticache/describe_cache_clusters.rb +16 -1
  60. data/lib/fog/aws/requests/elasticache/modify_cache_cluster.rb +35 -3
  61. data/lib/fog/aws/requests/elasticache/reboot_cache_cluster.rb +10 -2
  62. data/lib/fog/aws/requests/elb/create_load_balancer.rb +1 -1
  63. data/lib/fog/aws/requests/rds/describe_db_instances.rb +3 -3
  64. data/lib/fog/aws/sqs.rb +1 -1
  65. data/lib/fog/aws/storage.rb +1 -1
  66. data/lib/fog/bin/rackspace.rb +4 -0
  67. data/lib/fog/cloudstack/compute.rb +25 -18
  68. data/lib/fog/cloudstack/models/compute/image.rb +34 -34
  69. data/lib/fog/cloudstack/models/compute/job.rb +14 -1
  70. data/lib/fog/cloudstack/models/compute/jobs.rb +1 -1
  71. data/lib/fog/cloudstack/models/compute/security_group.rb +50 -0
  72. data/lib/fog/cloudstack/models/compute/security_group_rule.rb +62 -0
  73. data/lib/fog/cloudstack/models/compute/security_group_rules.rb +37 -0
  74. data/lib/fog/cloudstack/models/compute/security_groups.rb +27 -0
  75. data/lib/fog/cloudstack/models/compute/server.rb +63 -39
  76. data/lib/fog/cloudstack/models/compute/volume.rb +3 -7
  77. data/lib/fog/cloudstack/models/compute/zone.rb +1 -2
  78. data/lib/fog/cloudstack/requests/compute/assign_virtual_machine.rb +18 -0
  79. data/lib/fog/cloudstack/requests/compute/authorize_security_group_egress.rb +68 -0
  80. data/lib/fog/cloudstack/requests/compute/authorize_security_group_ingress.rb +55 -4
  81. data/lib/fog/cloudstack/requests/compute/create_security_group.rb +12 -4
  82. data/lib/fog/cloudstack/requests/compute/create_zone.rb +20 -0
  83. data/lib/fog/cloudstack/requests/compute/delete_security_group.rb +17 -0
  84. data/lib/fog/cloudstack/requests/compute/destroy_virtual_machine.rb +23 -1
  85. data/lib/fog/cloudstack/requests/compute/list_firewall_rules.rb +15 -0
  86. data/lib/fog/cloudstack/requests/compute/list_security_groups.rb +22 -4
  87. data/lib/fog/cloudstack/requests/compute/query_async_job_result.rb +15 -3
  88. data/lib/fog/cloudstack/requests/compute/revoke_security_group_egress.rb +42 -0
  89. data/lib/fog/cloudstack/requests/compute/revoke_security_group_ingress.rb +29 -3
  90. data/lib/fog/core.rb +1 -0
  91. data/lib/fog/core/attributes.rb +1 -1
  92. data/lib/fog/core/current_machine.rb +2 -2
  93. data/lib/fog/core/scp.rb +8 -0
  94. data/lib/fog/core/ssh.rb +8 -0
  95. data/lib/fog/dynect/dns.rb +14 -5
  96. data/lib/fog/ibm/requests/compute/create_instance.rb +1 -1
  97. data/lib/fog/libvirt/requests/compute/create_volume.rb +1 -1
  98. data/lib/fog/libvirt/requests/compute/list_volumes.rb +1 -1
  99. data/lib/fog/local/models/storage/file.rb +12 -1
  100. data/lib/fog/local/storage.rb +25 -1
  101. data/lib/fog/ninefold/compute.rb +1 -0
  102. data/lib/fog/openstack.rb +3 -1
  103. data/lib/fog/openstack/compute.rb +13 -2
  104. data/lib/fog/openstack/models/compute/servers.rb +10 -2
  105. data/lib/fog/openstack/requests/compute/create_flavor.rb +2 -2
  106. data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
  107. data/lib/fog/openstack/requests/compute/create_server.rb +1 -1
  108. data/lib/fog/openstack/requests/compute/create_volume.rb +1 -1
  109. data/lib/fog/openstack/requests/compute/get_flavor_details.rb +7 -7
  110. data/lib/fog/openstack/requests/compute/get_quota.rb +1 -12
  111. data/lib/fog/openstack/requests/compute/get_quota_defaults.rb +1 -12
  112. data/lib/fog/openstack/requests/compute/get_volume_details.rb +1 -1
  113. data/lib/fog/openstack/requests/compute/list_flavors.rb +7 -7
  114. data/lib/fog/openstack/requests/compute/list_flavors_detail.rb +7 -7
  115. data/lib/fog/openstack/requests/compute/list_security_groups.rb +7 -7
  116. data/lib/fog/openstack/requests/compute/list_servers_detail.rb +4 -3
  117. data/lib/fog/openstack/requests/compute/list_volumes.rb +6 -8
  118. data/lib/fog/openstack/requests/compute/update_quota.rb +2 -15
  119. data/lib/fog/openstack/requests/identity/delete_role.rb +1 -1
  120. data/lib/fog/openstack/requests/identity/list_roles.rb +1 -1
  121. data/lib/fog/openstack/requests/image/create_image.rb +3 -1
  122. data/lib/fog/openstack/requests/image/list_public_images.rb +19 -1
  123. data/lib/fog/openstack/requests/image/list_public_images_detailed.rb +20 -2
  124. data/lib/fog/openstack/requests/image/update_image.rb +1 -1
  125. data/lib/fog/rackspace.rb +2 -0
  126. data/lib/fog/rackspace/databases.rb +121 -0
  127. data/lib/fog/rackspace/identity.rb +83 -0
  128. data/lib/fog/rackspace/load_balancers.rb +3 -0
  129. data/lib/fog/rackspace/models/databases/database.rb +32 -0
  130. data/lib/fog/rackspace/models/databases/databases.rb +31 -0
  131. data/lib/fog/rackspace/models/databases/flavor.rb +15 -0
  132. data/lib/fog/rackspace/models/databases/flavors.rb +25 -0
  133. data/lib/fog/rackspace/models/databases/instance.rb +104 -0
  134. data/lib/fog/rackspace/models/databases/instances.rb +25 -0
  135. data/lib/fog/rackspace/models/databases/user.rb +32 -0
  136. data/lib/fog/rackspace/models/databases/users.rb +31 -0
  137. data/lib/fog/rackspace/models/identity/credential.rb +13 -0
  138. data/lib/fog/rackspace/models/identity/credentials.rb +32 -0
  139. data/lib/fog/rackspace/models/identity/role.rb +14 -0
  140. data/lib/fog/rackspace/models/identity/roles.rb +32 -0
  141. data/lib/fog/rackspace/models/identity/tenant.rb +15 -0
  142. data/lib/fog/rackspace/models/identity/tenants.rb +28 -0
  143. data/lib/fog/rackspace/models/identity/user.rb +53 -0
  144. data/lib/fog/rackspace/models/identity/users.rb +36 -0
  145. data/lib/fog/rackspace/models/load_balancers/load_balancer.rb +17 -0
  146. data/lib/fog/rackspace/requests/databases/check_root_user.rb +15 -0
  147. data/lib/fog/rackspace/requests/databases/create_database.rb +24 -0
  148. data/lib/fog/rackspace/requests/databases/create_instance.rb +26 -0
  149. data/lib/fog/rackspace/requests/databases/create_user.rb +24 -0
  150. data/lib/fog/rackspace/requests/databases/delete_database.rb +15 -0
  151. data/lib/fog/rackspace/requests/databases/delete_instance.rb +15 -0
  152. data/lib/fog/rackspace/requests/databases/delete_user.rb +15 -0
  153. data/lib/fog/rackspace/requests/databases/enable_root_user.rb +15 -0
  154. data/lib/fog/rackspace/requests/databases/get_flavor.rb +15 -0
  155. data/lib/fog/rackspace/requests/databases/get_instance.rb +15 -0
  156. data/lib/fog/rackspace/requests/databases/list_databases.rb +15 -0
  157. data/lib/fog/rackspace/requests/databases/list_flavors.rb +15 -0
  158. data/lib/fog/rackspace/requests/databases/list_instances.rb +15 -0
  159. data/lib/fog/rackspace/requests/databases/list_users.rb +15 -0
  160. data/lib/fog/rackspace/requests/databases/resize_instance.rb +22 -0
  161. data/lib/fog/rackspace/requests/databases/resize_instance_volume.rb +24 -0
  162. data/lib/fog/rackspace/requests/databases/restart_instance.rb +20 -0
  163. data/lib/fog/rackspace/requests/identity/create_token.rb +25 -0
  164. data/lib/fog/rackspace/requests/identity/create_user.rb +25 -0
  165. data/lib/fog/rackspace/requests/identity/delete_user.rb +15 -0
  166. data/lib/fog/rackspace/requests/identity/get_credentials.rb +15 -0
  167. data/lib/fog/rackspace/requests/identity/get_user_by_id.rb +15 -0
  168. data/lib/fog/rackspace/requests/identity/get_user_by_name.rb +15 -0
  169. data/lib/fog/rackspace/requests/identity/list_credentials.rb +22 -0
  170. data/lib/fog/rackspace/requests/identity/list_tenants.rb +22 -0
  171. data/lib/fog/rackspace/requests/identity/list_user_roles.rb +22 -0
  172. data/lib/fog/rackspace/requests/identity/list_users.rb +22 -0
  173. data/lib/fog/rackspace/requests/identity/update_user.rb +24 -0
  174. data/lib/fog/rackspace/requests/load_balancers/get_ssl_termination.rb +15 -0
  175. data/lib/fog/rackspace/requests/load_balancers/remove_ssl_termination.rb +15 -0
  176. data/lib/fog/rackspace/requests/load_balancers/set_ssl_termination.rb +31 -0
  177. data/lib/fog/rackspace/storage.rb +1 -1
  178. data/lib/fog/vsphere/models/compute/server.rb +1 -0
  179. data/lib/fog/vsphere/requests/compute/vm_clone.rb +2 -2
  180. data/tests/aws/models/compute/address_tests.rb +2 -1
  181. data/tests/aws/models/compute/volume_tests.rb +1 -1
  182. data/tests/aws/models/dns/records_tests.rb +19 -1
  183. data/tests/aws/models/storage/directory_tests.rb +1 -1
  184. data/tests/aws/models/storage/url_tests.rb +7 -1
  185. data/tests/aws/requests/auto_scaling/auto_scaling_tests.rb +4 -2
  186. data/tests/aws/requests/compute/address_tests.rb +19 -1
  187. data/tests/aws/requests/elasticache/cache_cluster_tests.rb +4 -4
  188. data/tests/aws/requests/elb/helper.rb +13 -2
  189. data/tests/aws/requests/iam/access_key_tests.rb +1 -3
  190. data/tests/cloudstack/compute/models/security_group_rule_tests.rb +29 -0
  191. data/tests/cloudstack/compute/models/security_group_tests.rb +16 -0
  192. data/tests/cloudstack/compute/models/security_groups_tests.rb +19 -0
  193. data/tests/cloudstack/compute/models/server_tests.rb +18 -0
  194. data/tests/cloudstack/compute/models/volume_tests.rb +34 -0
  195. data/tests/cloudstack/compute/models/volumes_tests.rb +17 -0
  196. data/tests/compute/helper.rb +10 -3
  197. data/tests/core/current_machine_tests.rb +32 -0
  198. data/tests/helper.rb +1 -1
  199. data/tests/helpers/mock_helper.rb +3 -0
  200. data/tests/hp/requests/compute/address_tests.rb +2 -1
  201. data/tests/joyent/requests/compute/datasets_tests.rb +12 -3
  202. data/tests/local/models/file_tests.rb +43 -0
  203. data/tests/local/storage_tests.rb +40 -0
  204. data/tests/openstack/requests/compute/flavor_tests.rb +1 -1
  205. data/tests/openstack/requests/compute/server_tests.rb +3 -3
  206. data/tests/openstack/requests/compute/volume_tests.rb +1 -1
  207. data/tests/openstack/requests/identity/role_tests.rb +1 -1
  208. data/tests/rackspace/databases_tests.rb +26 -0
  209. data/tests/rackspace/models/databases/database_tests.rb +17 -0
  210. data/tests/rackspace/models/databases/databases_tests.rb +17 -0
  211. data/tests/rackspace/models/databases/flavors_tests.rb +20 -0
  212. data/tests/rackspace/models/databases/instance_tests.rb +43 -0
  213. data/tests/rackspace/models/databases/instances_tests.rb +14 -0
  214. data/tests/rackspace/models/databases/user_tests.rb +21 -0
  215. data/tests/rackspace/models/databases/users_tests.rb +21 -0
  216. data/tests/rackspace/models/identity/credentials_tests.rb +16 -0
  217. data/tests/rackspace/models/identity/roles_tests.rb +16 -0
  218. data/tests/rackspace/models/identity/tenants_tests.rb +21 -0
  219. data/tests/rackspace/models/identity/user_tests.rb +17 -0
  220. data/tests/rackspace/models/identity/users_tests.rb +17 -0
  221. data/tests/rackspace/models/load_balancers/load_balancer_tests.rb +20 -0
  222. data/tests/rackspace/requests/databases/database_tests.rb +36 -0
  223. data/tests/rackspace/requests/databases/flavor_tests.rb +16 -0
  224. data/tests/rackspace/requests/databases/helper.rb +84 -0
  225. data/tests/rackspace/requests/databases/instance_tests.rb +77 -0
  226. data/tests/rackspace/requests/databases/user_tests.rb +37 -0
  227. data/tests/rackspace/requests/identity/tenants_tests.rb +21 -0
  228. data/tests/rackspace/requests/identity/token_tests.rb +63 -0
  229. data/tests/rackspace/requests/identity/user_tests.rb +107 -0
  230. data/tests/rackspace/requests/load_balancers/helper.rb +70 -1
  231. data/tests/rackspace/requests/load_balancers/ssl_termination_tests.rb +38 -0
  232. data/tests/storage/models/file_tests.rb +1 -1
  233. metadata +129 -13
  234. data/spec/core/current_machine_spec.rb +0 -32
  235. data/spec/lib/fog/aws/parsers/sqs/receive_message_spec.rb +0 -58
  236. data/spec/spec_helper.rb +0 -8
@@ -19,18 +19,7 @@ module Fog
19
19
  response = Excon::Response.new
20
20
  response.status = 200
21
21
  response.body = {
22
- 'quota_set' => {
23
- 'metadata_items' => 128,
24
- 'injected_file_content_bytes' => 10240,
25
- 'injected_files' => 5,
26
- 'gigabytes' => 1000,
27
- 'ram' => 51200,
28
- 'floating_ips' => 10,
29
- 'instances' => 10,
30
- 'volumes' => 10,
31
- 'cores' => 20,
32
- 'id' => tenant_id
33
- }
22
+ 'quota_set' => self.data[:quota].merge({'id' => tenant_id})
34
23
  }
35
24
  response
36
25
  end
@@ -30,7 +30,7 @@ module Fog
30
30
  'status' => 'online',
31
31
  'availabilityZone' => 'nova',
32
32
  'createdAt' => Time.now,
33
- 'attchments' => []
33
+ 'attachments' => []
34
34
  }
35
35
  }
36
36
  response
@@ -20,13 +20,13 @@ module Fog
20
20
  response.status = 200
21
21
  response.body = {
22
22
  'flavors' => [
23
- { 'name' => '256 server', 'id' => '1', 'links' => [] },
24
- { 'name' => '512 server', 'id' => '2', 'links' => [] },
25
- { 'name' => '1GB server', 'id' => '3', 'links' => [] },
26
- { 'name' => '2GB server', 'id' => '4', 'links' => [] },
27
- { 'name' => '4GB server', 'id' => '5', 'links' => [] },
28
- { 'name' => '8GB server', 'id' => '6', 'links' => [] },
29
- { 'name' => '15.5GB server', 'id' => '7', 'links' => [] }
23
+ { 'name' => '256 server', 'id' => '1', 'links' => ['https://itdoesntmatterwhatshere.heh'] },
24
+ { 'name' => '512 server', 'id' => '2', 'links' => ['https://itdoesntmatterwhatshere.heh'] },
25
+ { 'name' => '1GB server', 'id' => '3', 'links' => ['https://itdoesntmatterwhatshere.heh'] },
26
+ { 'name' => '2GB server', 'id' => '4', 'links' => ['https://itdoesntmatterwhatshere.heh'] },
27
+ { 'name' => '4GB server', 'id' => '5', 'links' => ['https://itdoesntmatterwhatshere.heh'] },
28
+ { 'name' => '8GB server', 'id' => '6', 'links' => ['https://itdoesntmatterwhatshere.heh'] },
29
+ { 'name' => '15.5GB server', 'id' => '7', 'links' => ['https://itdoesntmatterwhatshere.heh'] }
30
30
  ]
31
31
  }
32
32
  response
@@ -20,13 +20,13 @@ module Fog
20
20
  response.status = 200
21
21
  response.body = {
22
22
  'flavors' => [
23
- { 'name' => '256 server', 'id' => '1', 'ram' => 256, 'disk' => 10, 'links' => [] },
24
- { 'name' => '512 server', 'id' => '2', 'ram' => 512, 'disk' => 20, 'links' => [] },
25
- { 'name' => '1GB server', 'id' => '3', 'ram' => 1024, 'disk' => 40, 'links' => [] },
26
- { 'name' => '2GB server', 'id' => '4', 'ram' => 2048, 'disk' => 80, 'links' => [] },
27
- { 'name' => '4GB server', 'id' => '5', 'ram' => 4096, 'disk' => 160, 'links' => [] },
28
- { 'name' => '8GB server', 'id' => '6', 'ram' => 8192, 'disk' => 320, 'links' => [] },
29
- { 'name' => '15.5GB server', 'id' => '7', 'ram' => 15872, 'disk' => 620, 'links' => [] }
23
+ { 'id' => '1', 'name' => '256 server', 'ram' => 256, 'disk' => 10, 'swap' => '1', 'vcpus' => 1, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => [] },
24
+ { 'id' => '2', 'name' => '512 server', 'ram' => 512, 'disk' => 20, 'swap' => '1', 'vcpus' => 2, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => [] },
25
+ { 'id' => '3', 'name' => '1GB server', 'ram' => 1024, 'disk' => 40, 'swap' => '2', 'vcpus' => 2, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => [] },
26
+ { 'id' => '4', 'name' => '2GB server', 'ram' => 2048, 'disk' => 80, 'swap' => '4', 'vcpus' => 4, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => [] },
27
+ { 'id' => '5', 'name' => '4GB server', 'ram' => 4096, 'disk' => 160, 'swap' => '8', 'vcpus' => 8, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => [] },
28
+ { 'id' => '6', 'name' => '8GB server', 'ram' => 8192, 'disk' => 320, 'swap' => '16', 'vcpus' => 16, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => [] },
29
+ { 'id' => '7', 'name' => '15.5GB server', 'ram' => 15872, 'disk' => 620, 'swap' => '32', 'vcpus' => 32, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => [] }
30
30
  ]
31
31
  }
32
32
  response
@@ -19,7 +19,7 @@ module Fog
19
19
 
20
20
  class Mock
21
21
  def list_security_groups
22
- self.data[:security_groups] ||= [
22
+ self.data[:security_groups] = [
23
23
  { "rules" => [
24
24
  { "from_port" => 44,
25
25
  "group" => {},
@@ -27,7 +27,7 @@ module Fog
27
27
  "to_port" => 55,
28
28
  "parent_group_id" => 1,
29
29
  "ip_range" => {"cidr"=>"10.10.10.10/24"},
30
- "id" => Fog::Mock.random_base64(36)
30
+ "id" => Fog::Mock.random_numbers(2).to_i
31
31
  },
32
32
  { "from_port" => 2,
33
33
  "group" => {},
@@ -35,10 +35,10 @@ module Fog
35
35
  "to_port" => 3,
36
36
  "parent_group_id" => 1,
37
37
  "ip_range" => {"cidr"=>"10.10.10.10/24"},
38
- "id" => Fog::Mock.random_base64(36)
38
+ "id" => Fog::Mock.random_numbers(2).to_i
39
39
  } ],
40
40
  "tenant_id" => @openstack_tenant,
41
- "id" => Fog::Mock.random_base64(36),
41
+ "id" => Fog::Mock.random_numbers(2).to_i,
42
42
  "name" => "default",
43
43
  "description" => "default"
44
44
  },
@@ -50,14 +50,14 @@ module Fog
50
50
  "to_port" => 55,
51
51
  "parent_group_id" => 2,
52
52
  "ip_range" => { "cidr"=>"10.10.10.10/24" },
53
- "id"=> Fog::Mock.random_base64(36)
53
+ "id"=> Fog::Mock.random_numbers(2).to_i
54
54
  } ],
55
55
  "tenant_id" => @openstack_tenant,
56
- "id" => Fog::Mock.random_base64(36),
56
+ "id" => Fog::Mock.random_numbers(2).to_i,
57
57
  "name" => "test",
58
58
  "description" => "this is a test"
59
59
  }
60
- ]
60
+ ] unless self.data.empty?
61
61
  Excon::Response.new(
62
62
  :body => { 'security_groups' => self.data[:security_groups] },
63
63
  :headers => {
@@ -3,9 +3,10 @@ module Fog
3
3
  class OpenStack
4
4
  class Real
5
5
 
6
- def list_servers_detail(options = {})
6
+ # Available filters: name, status, image, flavor, changes_since, reservation_id
7
+ def list_servers_detail(filters = {})
7
8
  params = Hash.new
8
- params['all_tenants'] = 'True' if options[:all_tenants]
9
+ filters[:all_tenants] ? params['all_tenants'] = 'True' : params = filters
9
10
 
10
11
  request(
11
12
  :expects => [200, 203],
@@ -19,7 +20,7 @@ module Fog
19
20
 
20
21
  class Mock
21
22
 
22
- def list_servers_detail
23
+ def list_servers_detail(filters = {})
23
24
  response = Excon::Response.new
24
25
 
25
26
  servers = self.data[:servers].values
@@ -26,22 +26,20 @@ module Fog
26
26
  "displayName" => "test 1",
27
27
  "attachments" => [{}],
28
28
  "volumeType" => nil,
29
- "snapshotId" => nil,
29
+ "snapshotId" => Fog::Mock.random_numbers(2),
30
30
  "size" => 1,
31
- "id" => 6,
32
- "createdAt" => "2012-03-30 05:31:00.655058",
33
- "metadata" => {} },
31
+ "id" => "6",
32
+ "createdAt" => Time.now },
34
33
  { "status" => "available",
35
34
  "displayDescription" => "",
36
35
  "availabilityZone" => "nova",
37
36
  "displayName" => "test 2",
38
37
  "attachments" => [{}],
39
38
  "volumeType" => nil,
40
- "snapshotId" => nil,
39
+ "snapshotId" => Fog::Mock.random_numbers(2),
41
40
  "size" => 1,
42
- "id" => 8,
43
- "createdAt" => "2012-03-30 16:14:55.582717",
44
- "metadata" => {} }
41
+ "id" => "8",
42
+ "createdAt" => Time.now}
45
43
  ]
46
44
  response.body = { 'volumes' => self.data[:volumes] }
47
45
  response
@@ -18,24 +18,11 @@ module Fog
18
18
  class Mock
19
19
 
20
20
  def update_quota(tenant_id, options = {})
21
- defaults = {
22
- 'metadata_items' => 128,
23
- 'injected_file_content_bytes' => 10240,
24
- 'injected_files' => 5,
25
- 'gigabytes' => 1000,
26
- 'ram' => 51200,
27
- 'floating_ips' => 10,
28
- 'instances' => 10,
29
- 'volumes' => 10,
30
- 'cores' => 20,
31
- 'id' => tenant_id
32
- }
33
-
34
- defaults.merge options
21
+ self.data[:quota_updated] = self.data[:quota].merge options
35
22
 
36
23
  response = Excon::Response.new
37
24
  response.status = 200
38
- response.body = { 'quota_set' => options }
25
+ response.body = { 'quota_set' => self.data[:quota_updated] }
39
26
  response
40
27
  end
41
28
 
@@ -17,7 +17,7 @@ module Fog
17
17
 
18
18
  def delete_role(role_id)
19
19
  response = Excon::Response.new
20
- if role = list_roles.body['roles'][role_id]
20
+ if list_roles.body['roles'].map { |r| r['id'] }.include? role_id
21
21
  self.data[:roles].delete(role_id)
22
22
  response.status = 204
23
23
  response
@@ -17,7 +17,7 @@ module Fog
17
17
 
18
18
  def list_roles
19
19
  Excon::Response.new(
20
- :body => { 'roles' => self.data[:roles] },
20
+ :body => { 'roles' => self.data[:roles].values },
21
21
  :status => 200
22
22
  )
23
23
  end
@@ -20,7 +20,7 @@ module Fog
20
20
  body = String.new
21
21
  if attributes[:location]
22
22
  file = File.open(attributes[:location], "rb")
23
- body = file.read
23
+ body = file
24
24
  end
25
25
 
26
26
  unless attributes[:properties].nil?
@@ -38,6 +38,8 @@ module Fog
38
38
  :method => 'POST',
39
39
  :path => "images"
40
40
  )
41
+ ensure
42
+ body.close if body.respond_to?(:close)
41
43
  end
42
44
 
43
45
  end
@@ -22,7 +22,25 @@ module Fog
22
22
  "disk_format"=>"ami",
23
23
  "container_format"=>"ami",
24
24
  "id"=>"0e09fbd6-43c5-448a-83e9-0d3d05f9747e",
25
- "checksum"=>"2f81976cae15c16ef0010c51e3a6c163"}]
25
+ "checksum"=>"2f81976cae15c16ef0010c51e3a6c163"},
26
+ {"name"=>"new image",
27
+ "size"=>0,
28
+ "min_disk"=>0,
29
+ "disk_format"=>nil,
30
+ "created_at"=>"2012-02-24T06:45:00",
31
+ "container_format"=>nil,
32
+ "deleted_at"=>nil,
33
+ "updated_at"=>"2012-02-24T06:45:00",
34
+ "checksum"=>nil,
35
+ "id"=>"e41304f3-2453-42b4-9829-2e220a737395",
36
+ "deleted"=>false,
37
+ "protected"=>false,
38
+ "is_public"=>false,
39
+ "status"=>"queued",
40
+ "min_ram"=>0,
41
+ "owner"=>"728ecc7c10614a1faa6fbabd1a68a4a0",
42
+ "properties"=>{}
43
+ }]
26
44
  }
27
45
  response
28
46
  end # def list_tenants
@@ -42,8 +42,26 @@ module Fog
42
42
  "properties"=>{
43
43
  "ramdisk_id"=>"b45aa128-cd36-4ad9-a026-1a1c2bfd8fdc",
44
44
  "kernel_id"=>"cd28951e-e1c2-4bc5-95d3-f0495abbcdc5"}
45
- }]
46
- }
45
+ },
46
+ {"name"=>"new image",
47
+ "size"=>0,
48
+ "min_disk"=>0,
49
+ "disk_format"=>nil,
50
+ "created_at"=>"2012-02-24T06:45:00",
51
+ "container_format"=>nil,
52
+ "deleted_at"=>nil,
53
+ "updated_at"=>"2012-02-24T06:45:00",
54
+ "checksum"=>nil,
55
+ "id"=>"e41304f3-2453-42b4-9829-2e220a737395",
56
+ "deleted"=>false,
57
+ "protected"=>false,
58
+ "is_public"=>false,
59
+ "status"=>"queued",
60
+ "min_ram"=>0,
61
+ "owner"=>"728ecc7c10614a1faa6fbabd1a68a4a0",
62
+ "properties"=>{}
63
+ }]
64
+ }
47
65
  response
48
66
  end # def list_tenants
49
67
  end # class Mock
@@ -36,7 +36,7 @@ module Fog
36
36
  response = Excon::Response.new
37
37
  response.status = 200
38
38
  response.body = {"image"=>
39
- {"name"=>"new image",
39
+ {"name"=>"edit test image",
40
40
  "size"=>0,
41
41
  "min_disk"=>0,
42
42
  "disk_format"=>nil,
data/lib/fog/rackspace.rb CHANGED
@@ -47,6 +47,8 @@ module Fog
47
47
  service(:dns, 'rackspace/dns', 'DNS')
48
48
  service(:storage, 'rackspace/storage', 'Storage')
49
49
  service(:load_balancers, 'rackspace/load_balancers', 'LoadBalancers')
50
+ service(:identity, 'rackspace/identity', 'Identity')
51
+ service(:databases, 'rackspace/databases', 'Databases')
50
52
 
51
53
  def self.authenticate(options, connection_options = {})
52
54
  rackspace_auth_url = options[:rackspace_auth_url] || "auth.api.rackspacecloud.com"
@@ -0,0 +1,121 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'rackspace'))
2
+
3
+ module Fog
4
+ module Rackspace
5
+ class Databases < Fog::Service
6
+
7
+ class ServiceError < Fog::Rackspace::Errors::ServiceError; end
8
+ class InternalServerError < Fog::Rackspace::Errors::InternalServerError; end
9
+ class BadRequest < Fog::Rackspace::Errors::BadRequest; end
10
+
11
+ DFW_ENDPOINT = 'https://dfw.databases.api.rackspacecloud.com/v1.0/'
12
+ LON_ENDPOINT = 'https://lon.databases.api.rackspacecloud.com/v1.0/'
13
+ ORD_ENDPOINT = 'https://ord.databases.api.rackspacecloud.com/v1.0/'
14
+
15
+ requires :rackspace_api_key, :rackspace_username
16
+ recognizes :rackspace_auth_url
17
+ recognizes :rackspace_auth_token
18
+ recognizes :rackspace_endpoint
19
+
20
+ model_path 'fog/rackspace/models/databases'
21
+ model :flavor
22
+ collection :flavors
23
+ model :instance
24
+ collection :instances
25
+ model :database
26
+ collection :databases
27
+ model :user
28
+ collection :users
29
+
30
+ request_path 'fog/rackspace/requests/databases'
31
+ request :list_flavors
32
+ request :get_flavor
33
+
34
+ request :list_instances
35
+ request :get_instance
36
+ request :create_instance
37
+ request :delete_instance
38
+ request :check_root_user
39
+ request :enable_root_user
40
+ request :restart_instance
41
+ request :resize_instance
42
+ request :resize_instance_volume
43
+
44
+ request :list_databases
45
+ request :create_database
46
+ request :delete_database
47
+
48
+ request :list_users
49
+ request :create_user
50
+ request :delete_user
51
+
52
+ class Mock
53
+ def request(params)
54
+ Fog::Mock.not_implemented
55
+ end
56
+ end
57
+
58
+ class Real
59
+ def initialize(options = {})
60
+ @rackspace_api_key = options[:rackspace_api_key]
61
+ @rackspace_username = options[:rackspace_username]
62
+ @rackspace_auth_url = options[:rackspace_auth_url]
63
+ @rackspace_must_reauthenticate = false
64
+ @connection_options = options[:connection_options] || {}
65
+
66
+ endpoint = options[:rackspace_endpoint] || DFW_ENDPOINT
67
+ uri = URI.parse(endpoint)
68
+
69
+ @host = uri.host
70
+ @persistent = options[:persistent] || false
71
+ @path = uri.path
72
+ @port = uri.port
73
+ @scheme = uri.scheme
74
+
75
+ authenticate
76
+
77
+ @connection = Fog::Connection.new(uri.to_s, @persistent, @connection_options)
78
+ end
79
+
80
+ def request(params)
81
+ begin
82
+ response = @connection.request(params.merge!({
83
+ :headers => {
84
+ 'Content-Type' => 'application/json',
85
+ 'X-Auth-Token' => @auth_token
86
+ }.merge!(params[:headers] || {}),
87
+ :host => @host,
88
+ :path => "#{@path}/#{params[:path]}"
89
+ }))
90
+ rescue Excon::Errors::NotFound => error
91
+ raise NotFound.slurp error
92
+ rescue Excon::Errors::BadRequest => error
93
+ raise BadRequest.slurp error
94
+ rescue Excon::Errors::InternalServerError => error
95
+ raise InternalServerError.slurp error
96
+ rescue Excon::Errors::HTTPStatusError => error
97
+ raise ServiceError.slurp error
98
+ end
99
+ unless response.body.empty?
100
+ response.body = Fog::JSON.decode(response.body)
101
+ end
102
+ response
103
+ end
104
+
105
+ private
106
+
107
+ def authenticate
108
+ options = {
109
+ :rackspace_api_key => @rackspace_api_key,
110
+ :rackspace_username => @rackspace_username,
111
+ :rackspace_auth_url => @rackspace_auth_url
112
+ }
113
+ credentials = Fog::Rackspace.authenticate(options, @connection_options)
114
+ @auth_token = credentials['X-Auth-Token']
115
+ account_id = credentials['X-Server-Management-Url'].match(/.*\/([\d]+)$/)[1]
116
+ @path = "#{@path}/#{account_id}"
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,83 @@
1
+ require 'fog/rackspace'
2
+
3
+ module Fog
4
+ module Rackspace
5
+ class Identity < Fog::Service
6
+ US_ENDPOINT = 'https://identity.api.rackspacecloud.com/v2.0'
7
+ UK_ENDPOINT = 'https://lon.identity.api.rackspacecloud.com/v2.0'
8
+
9
+ requires :rackspace_username, :rackspace_api_key
10
+ recognizes :rackspace_auth_url
11
+
12
+ model_path 'fog/rackspace/models/identity'
13
+ model :user
14
+ collection :users
15
+ model :role
16
+ collection :roles
17
+ model :credential
18
+ collection :credentials
19
+ model :tenant
20
+ collection :tenants
21
+
22
+ request_path 'fog/rackspace/requests/identity'
23
+ request :create_token
24
+
25
+ request :list_users
26
+ request :list_user_roles
27
+ request :list_credentials
28
+ request :list_tenants
29
+ request :get_user_by_id
30
+ request :get_user_by_name
31
+ request :create_user
32
+ request :update_user
33
+ request :delete_user
34
+ request :get_credentials
35
+
36
+ class Mock
37
+ def request
38
+ Fog::Mock.not_implemented
39
+ end
40
+ end
41
+
42
+ class Real
43
+ def initialize(options={})
44
+ @rackspace_username = options[:rackspace_username]
45
+ @rackspace_api_key = options[:rackspace_api_key]
46
+ @rackspace_auth_url = options[:rackspace_auth_url] || US_ENDPOINT
47
+
48
+ uri = URI.parse(@rackspace_auth_url)
49
+ @host = uri.host
50
+ @path = uri.path
51
+ @port = uri.port
52
+ @scheme = uri.scheme
53
+ @persistent = options[:persistent] || false
54
+ @connection_options = options[:connection_options] || {}
55
+ @connection = Fog::Connection.new(uri.to_s, @persistent, @connection_options)
56
+
57
+ authenticate
58
+ end
59
+
60
+ def request(params)
61
+ begin
62
+ parameters = params.merge!({
63
+ :headers => {
64
+ 'Content-Type' => 'application/json',
65
+ 'X-Auth-Token' => @auth_token
66
+ },
67
+ :host => @host,
68
+ :path => "#{@path}/#{params[:path]}"
69
+ })
70
+ response = @connection.request(parameters)
71
+ response.body = Fog::JSON.decode(response.body) unless response.body.empty?
72
+ response
73
+ end
74
+ end
75
+
76
+ def authenticate
77
+ data = self.create_token(@rackspace_username, @rackspace_api_key).body
78
+ @auth_token = data['access']['token']['id']
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end