fog 1.7.0 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (219) hide show
  1. data/.gitignore +2 -2
  2. data/README.md +9 -10
  3. data/Rakefile +15 -299
  4. data/changelog.txt +153 -0
  5. data/docs/about/contributing.markdown +1 -0
  6. data/docs/dns/index.markdown +1 -1
  7. data/docs/index.markdown +8 -3
  8. data/fog.gemspec +3 -3
  9. data/lib/fog.rb +0 -5
  10. data/lib/fog/aws/auto_scaling.rb +1 -1
  11. data/lib/fog/aws/cloud_watch.rb +1 -1
  12. data/lib/fog/aws/compute.rb +2 -1
  13. data/lib/fog/aws/dynamodb.rb +30 -64
  14. data/lib/fog/aws/elb.rb +1 -1
  15. data/lib/fog/aws/glacier.rb +1 -1
  16. data/lib/fog/aws/iam.rb +1 -0
  17. data/lib/fog/aws/models/auto_scaling/group.rb +1 -1
  18. data/lib/fog/aws/models/compute/server.rb +2 -0
  19. data/lib/fog/aws/models/compute/volume.rb +0 -1
  20. data/lib/fog/aws/models/iam/user.rb +1 -1
  21. data/lib/fog/aws/parsers/compute/describe_instances.rb +3 -1
  22. data/lib/fog/aws/parsers/compute/describe_reserved_instances_offerings.rb +1 -1
  23. data/lib/fog/aws/parsers/storage/delete_multiple_objects.rb +50 -0
  24. data/lib/fog/aws/rds.rb +2 -2
  25. data/lib/fog/aws/requests/compute/describe_availability_zones.rb +3 -0
  26. data/lib/fog/aws/requests/compute/describe_reserved_instances_offerings.rb +11 -8
  27. data/lib/fog/aws/requests/compute/modify_volume_attribute.rb +51 -0
  28. data/lib/fog/aws/requests/dns/change_resource_record_sets.rb +1 -0
  29. data/lib/fog/aws/requests/storage/delete_multiple_objects.rb +172 -0
  30. data/lib/fog/aws/signaturev4.rb +1 -1
  31. data/lib/fog/aws/sqs.rb +1 -1
  32. data/lib/fog/aws/storage.rb +2 -0
  33. data/lib/fog/bluebox/requests/compute/create_block.rb +1 -3
  34. data/lib/fog/brightbox/compute.rb +239 -84
  35. data/lib/fog/brightbox/models/compute/account.rb +9 -3
  36. data/lib/fog/brightbox/models/compute/server.rb +2 -1
  37. data/lib/fog/brightbox/models/compute/servers.rb +33 -1
  38. data/lib/fog/brightbox/oauth2.rb +164 -0
  39. data/lib/fog/brightbox/requests/compute/activate_console_server.rb +9 -2
  40. data/lib/fog/brightbox/requests/compute/add_listeners_load_balancer.rb +11 -2
  41. data/lib/fog/brightbox/requests/compute/add_nodes_load_balancer.rb +11 -2
  42. data/lib/fog/brightbox/requests/compute/add_servers_server_group.rb +9 -11
  43. data/lib/fog/brightbox/requests/compute/apply_to_firewall_policy.rb +11 -2
  44. data/lib/fog/brightbox/requests/compute/create_api_client.rb +11 -2
  45. data/lib/fog/brightbox/requests/compute/create_application.rb +11 -2
  46. data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +11 -1
  47. data/lib/fog/brightbox/requests/compute/create_firewall_policy.rb +13 -2
  48. data/lib/fog/brightbox/requests/compute/create_firewall_rule.rb +17 -2
  49. data/lib/fog/brightbox/requests/compute/create_image.rb +18 -2
  50. data/lib/fog/brightbox/requests/compute/create_load_balancer.rb +14 -2
  51. data/lib/fog/brightbox/requests/compute/create_server.rb +17 -2
  52. data/lib/fog/brightbox/requests/compute/create_server_group.rb +11 -2
  53. data/lib/fog/brightbox/requests/compute/destroy_api_client.rb +9 -2
  54. data/lib/fog/brightbox/requests/compute/destroy_application.rb +9 -2
  55. data/lib/fog/brightbox/requests/compute/destroy_cloud_ip.rb +9 -2
  56. data/lib/fog/brightbox/requests/compute/destroy_firewall_policy.rb +9 -2
  57. data/lib/fog/brightbox/requests/compute/destroy_firewall_rule.rb +9 -2
  58. data/lib/fog/brightbox/requests/compute/destroy_image.rb +9 -2
  59. data/lib/fog/brightbox/requests/compute/destroy_load_balancer.rb +9 -2
  60. data/lib/fog/brightbox/requests/compute/destroy_server.rb +9 -2
  61. data/lib/fog/brightbox/requests/compute/destroy_server_group.rb +9 -2
  62. data/lib/fog/brightbox/requests/compute/get_account.rb +7 -15
  63. data/lib/fog/brightbox/requests/compute/get_api_client.rb +9 -2
  64. data/lib/fog/brightbox/requests/compute/get_application.rb +9 -2
  65. data/lib/fog/brightbox/requests/compute/get_authenticated_user.rb +1 -3
  66. data/lib/fog/brightbox/requests/compute/get_cloud_ip.rb +9 -2
  67. data/lib/fog/brightbox/requests/compute/get_firewall_policy.rb +9 -2
  68. data/lib/fog/brightbox/requests/compute/get_firewall_rule.rb +9 -2
  69. data/lib/fog/brightbox/requests/compute/get_image.rb +9 -2
  70. data/lib/fog/brightbox/requests/compute/get_interface.rb +9 -2
  71. data/lib/fog/brightbox/requests/compute/get_load_balancer.rb +9 -2
  72. data/lib/fog/brightbox/requests/compute/get_scoped_account.rb +1 -5
  73. data/lib/fog/brightbox/requests/compute/get_server.rb +9 -2
  74. data/lib/fog/brightbox/requests/compute/get_server_group.rb +9 -2
  75. data/lib/fog/brightbox/requests/compute/get_server_type.rb +9 -2
  76. data/lib/fog/brightbox/requests/compute/get_user.rb +7 -15
  77. data/lib/fog/brightbox/requests/compute/get_zone.rb +9 -2
  78. data/lib/fog/brightbox/requests/compute/list_accounts.rb +6 -2
  79. data/lib/fog/brightbox/requests/compute/list_api_clients.rb +8 -2
  80. data/lib/fog/brightbox/requests/compute/list_applications.rb +8 -2
  81. data/lib/fog/brightbox/requests/compute/list_cloud_ips.rb +8 -2
  82. data/lib/fog/brightbox/requests/compute/list_firewall_policies.rb +8 -2
  83. data/lib/fog/brightbox/requests/compute/list_images.rb +8 -2
  84. data/lib/fog/brightbox/requests/compute/list_load_balancers.rb +8 -2
  85. data/lib/fog/brightbox/requests/compute/list_server_groups.rb +8 -2
  86. data/lib/fog/brightbox/requests/compute/list_server_types.rb +8 -2
  87. data/lib/fog/brightbox/requests/compute/list_servers.rb +8 -2
  88. data/lib/fog/brightbox/requests/compute/list_users.rb +8 -2
  89. data/lib/fog/brightbox/requests/compute/list_zones.rb +8 -2
  90. data/lib/fog/brightbox/requests/compute/map_cloud_ip.rb +11 -2
  91. data/lib/fog/brightbox/requests/compute/move_servers_server_group.rb +10 -12
  92. data/lib/fog/brightbox/requests/compute/remove_firewall_policy.rb +11 -2
  93. data/lib/fog/brightbox/requests/compute/remove_listeners_load_balancer.rb +11 -2
  94. data/lib/fog/brightbox/requests/compute/remove_nodes_load_balancer.rb +11 -2
  95. data/lib/fog/brightbox/requests/compute/remove_servers_server_group.rb +9 -10
  96. data/lib/fog/brightbox/requests/compute/reset_ftp_password_account.rb +22 -3
  97. data/lib/fog/brightbox/requests/compute/reset_ftp_password_scoped_account.rb +18 -0
  98. data/lib/fog/brightbox/requests/compute/reset_secret_api_client.rb +13 -1
  99. data/lib/fog/brightbox/requests/compute/reset_secret_application.rb +9 -2
  100. data/lib/fog/brightbox/requests/compute/shutdown_server.rb +9 -2
  101. data/lib/fog/brightbox/requests/compute/snapshot_server.rb +9 -2
  102. data/lib/fog/brightbox/requests/compute/start_server.rb +9 -2
  103. data/lib/fog/brightbox/requests/compute/stop_server.rb +9 -2
  104. data/lib/fog/brightbox/requests/compute/unmap_cloud_ip.rb +9 -2
  105. data/lib/fog/brightbox/requests/compute/update_account.rb +32 -34
  106. data/lib/fog/brightbox/requests/compute/update_api_client.rb +12 -2
  107. data/lib/fog/brightbox/requests/compute/update_application.rb +12 -2
  108. data/lib/fog/brightbox/requests/compute/update_cloud_ip.rb +13 -2
  109. data/lib/fog/brightbox/requests/compute/update_firewall_rule.rb +16 -1
  110. data/lib/fog/brightbox/requests/compute/update_image.rb +17 -2
  111. data/lib/fog/brightbox/requests/compute/update_load_balancer.rb +15 -2
  112. data/lib/fog/brightbox/requests/compute/update_scoped_account.rb +12 -19
  113. data/lib/fog/brightbox/requests/compute/update_server.rb +12 -2
  114. data/lib/fog/brightbox/requests/compute/update_server_group.rb +12 -2
  115. data/lib/fog/brightbox/requests/compute/update_user.rb +15 -2
  116. data/lib/fog/cloudstack/models/compute/server.rb +3 -1
  117. data/lib/fog/core.rb +1 -0
  118. data/lib/fog/core/connection.rb +1 -0
  119. data/lib/fog/google/storage.rb +13 -2
  120. data/lib/fog/libvirt/models/compute/server.rb +1 -0
  121. data/lib/fog/libvirt/requests/compute/list_domains.rb +2 -2
  122. data/lib/fog/openstack.rb +57 -58
  123. data/lib/fog/openstack/compute.rb +15 -14
  124. data/lib/fog/openstack/identity.rb +10 -2
  125. data/lib/fog/openstack/image.rb +1 -1
  126. data/lib/fog/openstack/models/compute/flavor.rb +5 -1
  127. data/lib/fog/openstack/models/compute/security_group.rb +1 -1
  128. data/lib/fog/openstack/models/compute/server.rb +5 -0
  129. data/lib/fog/openstack/models/identity/users.rb +1 -2
  130. data/lib/fog/openstack/requests/compute/create_flavor.rb +4 -1
  131. data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
  132. data/lib/fog/openstack/requests/compute/get_limits.rb +93 -0
  133. data/lib/fog/openstack/requests/compute/list_tenants.rb +1 -0
  134. data/lib/fog/openstack/requests/compute/release_address.rb +13 -1
  135. data/lib/fog/openstack/requests/compute/reset_server_state.rb +24 -0
  136. data/lib/fog/openstack/requests/identity/create_role.rb +1 -1
  137. data/lib/fog/openstack/requests/identity/set_tenant.rb +21 -0
  138. data/lib/fog/openstack/volume.rb +2 -1
  139. data/lib/fog/rackspace/models/compute_v2/server.rb +27 -0
  140. data/lib/fog/rackspace/models/compute_v2/servers.rb +8 -0
  141. data/lib/fog/rackspace/models/dns/record.rb +14 -1
  142. data/lib/fog/rackspace/models/storage/file.rb +68 -2
  143. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +3 -0
  144. data/lib/fog/version.rb +5 -0
  145. data/lib/fog/vsphere/compute.rb +74 -8
  146. data/lib/fog/vsphere/models/compute/cluster.rb +31 -0
  147. data/lib/fog/vsphere/models/compute/clusters.rb +26 -0
  148. data/lib/fog/vsphere/models/compute/datacenter.rb +35 -0
  149. data/lib/fog/vsphere/models/compute/datacenters.rb +23 -0
  150. data/lib/fog/vsphere/models/compute/datastore.rb +24 -0
  151. data/lib/fog/vsphere/models/compute/datastores.rb +25 -0
  152. data/lib/fog/vsphere/models/compute/folder.rb +28 -0
  153. data/lib/fog/vsphere/models/compute/folders.rb +27 -0
  154. data/lib/fog/vsphere/models/compute/interface.rb +39 -0
  155. data/lib/fog/vsphere/models/compute/interfaces.rb +33 -0
  156. data/lib/fog/vsphere/models/compute/network.rb +21 -0
  157. data/lib/fog/vsphere/models/compute/networks.rb +25 -0
  158. data/lib/fog/vsphere/models/compute/resource_pool.rb +23 -0
  159. data/lib/fog/vsphere/models/compute/resource_pools.rb +26 -0
  160. data/lib/fog/vsphere/models/compute/server.rb +78 -12
  161. data/lib/fog/vsphere/models/compute/servers.rb +16 -20
  162. data/lib/fog/vsphere/models/compute/template.rb +13 -0
  163. data/lib/fog/vsphere/models/compute/templates.rb +23 -0
  164. data/lib/fog/vsphere/models/compute/volume.rb +45 -0
  165. data/lib/fog/vsphere/models/compute/volumes.rb +33 -0
  166. data/lib/fog/vsphere/requests/compute/create_vm.rb +114 -0
  167. data/lib/fog/vsphere/requests/compute/get_cluster.rb +25 -0
  168. data/lib/fog/vsphere/requests/compute/get_datacenter.rb +29 -0
  169. data/lib/fog/vsphere/requests/compute/get_datastore.rb +25 -0
  170. data/lib/fog/vsphere/requests/compute/get_folder.rb +73 -0
  171. data/lib/fog/vsphere/requests/compute/get_network.rb +25 -0
  172. data/lib/fog/vsphere/requests/compute/get_resource_pool.rb +26 -0
  173. data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +62 -0
  174. data/lib/fog/vsphere/requests/compute/list_clusters.rb +37 -0
  175. data/lib/fog/vsphere/requests/compute/list_datacenters.rb +34 -0
  176. data/lib/fog/vsphere/requests/compute/list_datastores.rb +40 -0
  177. data/lib/fog/vsphere/requests/compute/list_folders.rb +45 -0
  178. data/lib/fog/vsphere/requests/compute/list_networks.rb +38 -0
  179. data/lib/fog/vsphere/requests/compute/list_resource_pools.rb +39 -0
  180. data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +132 -166
  181. data/lib/fog/vsphere/requests/compute/list_vm_interfaces.rb +52 -0
  182. data/lib/fog/vsphere/requests/compute/list_vm_volumes.rb +51 -0
  183. data/lib/fog/vsphere/requests/compute/vm_clone.rb +6 -8
  184. data/lib/fog/vsphere/requests/compute/vm_destroy.rb +1 -8
  185. data/lib/fog/vsphere/requests/compute/vm_reconfig_hardware.rb +1 -2
  186. data/lib/tasks/changelog_task.rb +98 -0
  187. data/lib/tasks/documentation_task.rb +155 -0
  188. data/lib/tasks/test_task.rb +46 -0
  189. data/tests/aws/models/iam/users_tests.rb +16 -2
  190. data/tests/aws/requests/auto_scaling/notification_configuration_tests.rb +1 -0
  191. data/tests/aws/requests/auto_scaling/tag_tests.rb +1 -0
  192. data/tests/aws/requests/compute/instance_tests.rb +2 -0
  193. data/tests/aws/requests/compute/volume_tests.rb +8 -0
  194. data/tests/aws/requests/storage/object_tests.rb +18 -1
  195. data/tests/aws/requests/storage/versioning_tests.rb +70 -0
  196. data/tests/brightbox/compute_tests.rb +96 -4
  197. data/tests/brightbox/models/compute/account_tests.rb +15 -0
  198. data/tests/brightbox/oauth2_tests.rb +103 -0
  199. data/tests/brightbox/requests/compute/account_tests.rb +9 -2
  200. data/tests/brightbox/requests/compute/interface_tests.rb +18 -4
  201. data/tests/dns/models/record_tests.rb +17 -3
  202. data/tests/openstack/requests/compute/address_tests.rb +22 -19
  203. data/tests/openstack/requests/compute/flavor_tests.rb +4 -2
  204. data/tests/openstack/requests/compute/limit_tests.rb +60 -0
  205. data/tests/openstack/requests/compute/quota_tests.rb +16 -3
  206. data/tests/openstack/requests/compute/security_group_tests.rb +1 -1
  207. data/tests/rackspace/models/compute_v2/servers_tests.rb +6 -0
  208. data/tests/rackspace/models/storage/file_tests.rb +172 -0
  209. data/tests/rackspace/requests/dns/helper.rb +12 -26
  210. data/tests/vsphere/compute_tests.rb +3 -3
  211. data/tests/vsphere/models/compute/server_tests.rb +1 -2
  212. data/tests/vsphere/requests/compute/list_virtual_machines_tests.rb +5 -13
  213. data/tests/vsphere/requests/compute/vm_clone_tests.rb +2 -2
  214. metadata +59 -11
  215. data/lib/fog/vsphere/requests/compute/datacenters.rb +0 -34
  216. data/lib/fog/vsphere/requests/compute/find_vm_by_ref.rb +0 -41
  217. data/lib/fog/vsphere/requests/compute/vm_create.rb +0 -97
  218. data/tests/vsphere/requests/compute/find_vm_by_ref_tests.rb +0 -26
  219. data/tests/vsphere/requests/compute/vm_create_tests.rb +0 -20
@@ -9,6 +9,7 @@ First off, high five for coming to visit this page. You are my new hero.
9
9
 
10
10
  * Organize your patches by keeping all related changes together in a topic branch.
11
11
  * Rebase your branch against master before submitting a pull request (and squish any 'oops' or work in progress commits).
12
+ * Ensure your changes work with both Ruby 1.8.7 and 1.9! We support both!
12
13
  * Submit changes as pull requests describing what the changes should cover and referencing issues (if any).
13
14
  * Use 'tags' in your commits to indicate the scope, so things like '\[aws|compute\] fixed something'.
14
15
  * Write and run tests. Tests should follow through usage workflows and ought to pass both with mocking on and off.
@@ -76,4 +76,4 @@ If you already have an account with another service you can just as easily use t
76
76
 
77
77
  ## Go Forth and Resolve
78
78
 
79
- You can see an example of reusing code like this in the <a href="https://github.com/fog/fog/blob/master/examples/dns_tests.rb">examples folder</a>. Using this makes it easier to give yourself shortcuts to your cloud servers and manage how clients and users access them as well. It is great to have this flexibility so that you can modify your cloud infrastructure as needed while keeping everything ship shape. It also provides a nice way to create custom subdomains for users and just generally round out your cloud solution.
79
+ Using this makes it easier to give yourself shortcuts to your cloud servers and manage how clients and users access them as well. It is great to have this flexibility so that you can modify your cloud infrastructure as needed while keeping everything ship shape. It also provides a nice way to create custom subdomains for users and just generally round out your cloud solution.
@@ -42,10 +42,15 @@ geemus says: "That should give you everything you need to get started, but let m
42
42
 
43
43
  ## Contributing
44
44
 
45
- * Find something you would like to work on. For suggestions look for the `easy`, `medium` and `hard` tags in the [issues](http://github.com/fog/fog/issues)
45
+ * Find something you would like to work on.
46
+ * Look for anything you can help with in the [issue tracker](https://github.com/fog/fog/issues).
47
+ * Look at the [code quality metrics](https://codeclimate.com/github/fog/fog) for anything you can help clean up.
48
+ * Or anything else!
46
49
  * Fork the project and do your work in a topic branch.
50
+ * Make sure your changes will work on both Ruby 1.8.7 and Ruby 1.9.
51
+ * Add a config at `tests/.fog` for the component you want to test.
47
52
  * Add shindo tests to prove your code works and run all the tests using `bundle exec rake`.
48
- * Rebase your branch against fog/fog to make sure everything is up to date.
53
+ * Rebase your branch against `fog/fog` to make sure everything is up to date.
49
54
  * Commit your changes and send a pull request.
50
55
 
51
56
  ## Resources
@@ -53,7 +58,7 @@ geemus says: "That should give you everything you need to get started, but let m
53
58
  Enjoy, and let me know what I can do to continue improving fog!
54
59
 
55
60
  * Work through the [fog tutorial](https://github.com/downloads/geemus/learn_fog/learn_fog.tar.gz)
56
- * Read fog's [API documentation](/rdoc)
61
+ * Read fog's API documentation [master branch](http://rubydoc.info/github/fog/fog) or [latest gem release](http://rubydoc.info/gems/fog)
57
62
  * Stay up to date by following [@fog](http://twitter.com/fog) and/or [@geemus](http://twitter.com/geemus) on Twitter.
58
63
  * Get and give help on the [#ruby-fog](irc://irc.freenode.net/ruby-fog) irc channel on Freenode
59
64
  * Follow release notes and discussions on the [mailing list](http://groups.google.com/group/ruby-fog)
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
6
6
  ## If your rubyforge_project name is different, then edit it and comment out
7
7
  ## the sub! line in the Rakefile
8
8
  s.name = 'fog'
9
- s.version = '1.7.0'
10
- s.date = '2012-11-04'
9
+ s.version = '1.8.0'
10
+ s.date = '2012-12-01'
11
11
  s.rubyforge_project = 'fog'
12
12
 
13
13
 
@@ -56,7 +56,7 @@ Gem::Specification.new do |s|
56
56
  s.add_development_dependency('jekyll')
57
57
  s.add_development_dependency('rake')
58
58
  s.add_development_dependency('rbvmomi')
59
- s.add_development_dependency('rdoc')
59
+ s.add_development_dependency('yard')
60
60
  s.add_development_dependency('thor')
61
61
  s.add_development_dependency('rspec', '~>1.3.1')
62
62
  s.add_development_dependency('rbovirt', '>=0.0.11')
data/lib/fog.rb CHANGED
@@ -1,11 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), 'fog', 'core')
2
2
 
3
3
  module Fog
4
-
5
- unless const_defined?(:VERSION)
6
- VERSION = '1.7.0'
7
- end
8
-
9
4
  end
10
5
 
11
6
  # FIXME: these should go away (force usage of Fog::[Compute, CDN, DNS, Storage] etc)
@@ -258,7 +258,7 @@ module Fog
258
258
  setup_credentials(options)
259
259
  @region = options[:region] || 'us-east-1'
260
260
 
261
- unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'sa-east-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
261
+ unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-west-1', 'sa-east-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
262
262
  raise ArgumentError, "Unknown region: #{@region.inspect}"
263
263
  end
264
264
  end
@@ -55,7 +55,7 @@ module Fog
55
55
 
56
56
  @region = options[:region] || 'us-east-1'
57
57
 
58
- unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'sa-east-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
58
+ unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-west-1', 'sa-east-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
59
59
  raise ArgumentError, "Unknown region: #{@region.inspect}"
60
60
  end
61
61
  end
@@ -113,6 +113,7 @@ module Fog
113
113
  request :modify_instance_attribute
114
114
  request :modify_network_interface_attribute
115
115
  request :modify_snapshot_attribute
116
+ request :modify_volume_attribute
116
117
  request :purchase_reserved_instances_offering
117
118
  request :reboot_instances
118
119
  request :release_address
@@ -220,7 +221,7 @@ module Fog
220
221
  setup_credentials(options)
221
222
  @region = options[:region] || 'us-east-1'
222
223
 
223
- unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2', 'sa-east-1'].include?(@region)
224
+ unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2', 'sa-east-1'].include?(@region)
224
225
  raise ArgumentError, "Unknown region: #{@region.inspect}"
225
226
  end
226
227
  end
@@ -76,41 +76,30 @@ module Fog
76
76
  # * DynamoDB object with connection to aws
77
77
  def initialize(options={})
78
78
  @use_iam_profile = options[:use_iam_profile]
79
- #TODO check dynamodb stuff
79
+ @region = options[:region] || 'us-east-1'
80
80
 
81
81
  setup_credentials(options)
82
-
82
+
83
83
  @connection_options = options[:connection_options] || {}
84
-
85
- options[:region] ||= 'us-east-1'
86
- @host = options[:host] || "dynamodb.#{options[:region]}.amazonaws.com"
84
+
85
+ @host = options[:host] || "dynamodb.#{@region}.amazonaws.com"
87
86
  @path = options[:path] || '/'
88
87
  @persistent = options[:persistent] || false
89
88
  @port = options[:port] || '80' #443
90
89
  @scheme = options[:scheme] || 'http' #'https'
90
+
91
91
  @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)
92
92
  end
93
93
 
94
94
  private
95
95
 
96
96
  def setup_credentials(options)
97
- if options[:aws_session_token]
98
- @aws_access_key_id = options[:aws_access_key_id]
99
- @aws_secret_access_key = options[:aws_secret_access_key]
100
- @aws_session_token = options[:aws_session_token]
101
- @aws_credentials_expire_at = options[:aws_credentials_expire_at]
102
- else
103
- sts = Fog::AWS::STS.new(
104
- :aws_access_key_id => options[:aws_access_key_id],
105
- :aws_secret_access_key => options[:aws_secret_access_key]
106
- )
107
- session_data = sts.get_session_token.body
108
-
109
- @aws_access_key_id = session_data['AccessKeyId']
110
- @aws_secret_access_key = session_data['SecretAccessKey']
111
- @aws_session_token = session_data['SessionToken']
112
- end
113
- @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
97
+ @aws_access_key_id = options[:aws_access_key_id]
98
+ @aws_secret_access_key = options[:aws_secret_access_key]
99
+ @aws_session_token = options[:aws_session_token]
100
+ @aws_credentials_expire_at = options[:aws_credentials_expire_at]
101
+
102
+ @signer = Fog::AWS::SignatureV4.new(@aws_access_key_id, @aws_secret_access_key, @region, 'dynamodb')
114
103
  end
115
104
 
116
105
  def reload
@@ -119,25 +108,27 @@ module Fog
119
108
 
120
109
  def request(params)
121
110
  refresh_credentials_if_expired
122
- idempotent = params.delete(:idempotent)
123
-
124
- headers = {
125
- 'Content-Type' => 'application/x-amz-json-1.0',
126
- 'x-amz-date' => Fog::Time.now.to_date_header,
127
- 'x-amz-security-token' => @aws_session_token
128
- }.merge(params[:headers])
129
-
130
- headers['x-amzn-authorization'] = signed_authorization_header(params, headers)
131
-
132
- response = @connection.request({
133
- :body => params[:body],
134
- :expects => 200,
135
- :headers => headers,
136
- :host => @host,
137
- :idempotent => idempotent,
138
- :method => 'POST',
111
+
112
+ # defaults for all dynamodb requests
113
+ params.merge!({
114
+ :expects => 200,
115
+ :host => @host,
116
+ :method => :post,
117
+ :path => '/'
139
118
  })
140
119
 
120
+ # setup headers and sign with signature v4
121
+ date = Fog::Time.now
122
+ params[:headers] = {
123
+ 'Content-Type' => 'application/x-amz-json-1.0',
124
+ 'Date' => date.to_iso8601_basic,
125
+ 'Host' => @host,
126
+ }.merge!(params[:headers])
127
+ params[:headers]['x-amz-security-token'] = @aws_session_token if @aws_session_token
128
+ params[:headers]['Authorization'] = @signer.sign(params, date)
129
+
130
+ response = @connection.request(params)
131
+
141
132
  unless response.body.empty?
142
133
  response.body = Fog::JSON.decode(response.body)
143
134
  end
@@ -145,31 +136,6 @@ module Fog
145
136
  response
146
137
  end
147
138
 
148
- def signed_authorization_header(params, headers)
149
- string_to_sign = "POST\n/\n\nhost:#{@host}:#{@port}\n"
150
-
151
- amz_headers, canonical_amz_headers = {}, ''
152
- for key, value in headers
153
- if key[0..5] == 'x-amz-'
154
- amz_headers[key] = value
155
- end
156
- end
157
- amz_headers = amz_headers.sort {|x, y| x[0] <=> y[0]}
158
- for key, value in amz_headers
159
- canonical_amz_headers << "#{key}:#{value}\n"
160
- end
161
- string_to_sign << canonical_amz_headers
162
- string_to_sign << "\n"
163
- string_to_sign << (params[:body] || '')
164
-
165
- string_to_sign = OpenSSL::Digest::SHA256.digest(string_to_sign)
166
-
167
- signed_string = @hmac.sign(string_to_sign)
168
- signature = Base64.encode64(signed_string).chomp!
169
-
170
- "AWS3 AWSAccessKeyId=#{@aws_access_key_id},Algorithm=HmacSHA256,Signature=#{signature}"
171
- end
172
-
173
139
  end
174
140
  end
175
141
  end
@@ -81,7 +81,7 @@ module Fog
81
81
 
82
82
  @region = options[:region] || 'us-east-1'
83
83
 
84
- unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
84
+ unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
85
85
  raise ArgumentError, "Unknown region: #{@region.inspect}"
86
86
  end
87
87
  end
@@ -169,4 +169,4 @@ module Fog
169
169
  end
170
170
  end
171
171
  end
172
- end
172
+ end
@@ -89,6 +89,7 @@ module Fog
89
89
  :users => Hash.new do |uhash, ukey|
90
90
  uhash[ukey] = {
91
91
  :user_id => Fog::AWS::Mock.key_id,
92
+ :path => '/',
92
93
  :arn => "arn:aws:iam::#{Fog::AWS::Mock.owner_id}:user/#{ukey}",
93
94
  :access_keys => [],
94
95
  :policies => {}
@@ -125,7 +125,7 @@ module Fog
125
125
  requires :id
126
126
 
127
127
  opts = {}
128
- opts.merge({'ForceDelete' => true}) if options[:force]
128
+ opts.merge!({'ForceDelete' => true}) if options[:force]
129
129
 
130
130
  connection.delete_auto_scaling_group(id, opts)
131
131
  end
@@ -60,6 +60,8 @@ module Fog
60
60
  'ami-5e0fa45f'
61
61
  when 'ap-southeast-1'
62
62
  'ami-f092eca2'
63
+ when 'ap-southeast-2'
64
+ 'ami-fb8611c1' # Ubuntu 12.04 LTS 64bit (EBS)
63
65
  when 'eu-west-1'
64
66
  'ami-3d1f2b49'
65
67
  when 'sa-east-1'
@@ -125,7 +125,6 @@ module Fog
125
125
  end
126
126
 
127
127
  end
128
-
129
128
  end
130
129
  end
131
130
  end
@@ -13,7 +13,7 @@ module Fog
13
13
 
14
14
  def save
15
15
  requires :id
16
- data = connection.create_user(id).body['User']
16
+ data = connection.create_user(id, path || '/').body['User']
17
17
  merge_attributes(data)
18
18
  true
19
19
  end
@@ -41,7 +41,9 @@ module Fog
41
41
  when *@contexts
42
42
  @context.pop
43
43
  when 'code'
44
- @instance[@context.last][name] = value.to_i
44
+ @instance[@context.last][name] = @context.last == 'stateReason' ? value : value.to_i
45
+ when 'message'
46
+ @instance[@context.last][name] = value
45
47
  when 'deleteOnTermination'
46
48
  @block_device_mapping[name] = (value == 'true')
47
49
  when 'deviceName', 'status', 'volumeId'
@@ -12,7 +12,7 @@ module Fog
12
12
 
13
13
  def end_element(name)
14
14
  case name
15
- when 'availabilityZone', 'currencyCode', 'instanceType', 'instanceTenancy', 'productDescription', 'reservedInstancesOfferingId'
15
+ when 'availabilityZone', 'currencyCode', 'instanceType', 'offeringType', 'instanceTenancy', 'productDescription', 'reservedInstancesOfferingId'
16
16
  @reserved_instances_offering[name] = value
17
17
  when 'duration'
18
18
  @reserved_instances_offering[name] = value.to_i
@@ -0,0 +1,50 @@
1
+ module Fog
2
+ module Parsers
3
+ module Storage
4
+ module AWS
5
+
6
+ class DeleteMultipleObjects < Fog::Parsers::Base
7
+
8
+ def reset
9
+ @deleted = { 'Deleted' => {} }
10
+ @error = { 'Error' => {} }
11
+ @response = { 'DeleteResult' => [] }
12
+ end
13
+
14
+ def start_element(name, attrs = [])
15
+ super
16
+ case name
17
+ when 'Deleted'
18
+ @in_deleted = true
19
+ end
20
+ end
21
+
22
+ def end_element(name)
23
+ case name
24
+ when 'Deleted'
25
+ @response['DeleteResult'] << @deleted
26
+ @deleted = { 'Deleted' => {} }
27
+ @in_deleted = false
28
+ when 'Error'
29
+ @response['DeleteResult'] << @error
30
+ @error = { 'Error' => {} }
31
+ when 'Key', 'VersionId'
32
+ if @in_deleted
33
+ @deleted['Deleted'][name] = value
34
+ else
35
+ @error['Error'][name] = value
36
+ end
37
+ when 'DeleteMarker', 'DeletemarkerVersionId'
38
+ @deleted['Deleted'][name] = value
39
+ when 'Code', 'Message'
40
+ @error['Error'][name] = value
41
+ end
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+ end
48
+ end
49
+ end
50
+
@@ -101,7 +101,7 @@ module Fog
101
101
  @use_iam_profile = options[:use_iam_profile]
102
102
  @region = options[:region] || 'us-east-1'
103
103
 
104
- unless ['ap-northeast-1', 'ap-southeast-1', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2', 'sa-east-1'].include?(@region)
104
+ unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-west-1', 'us-east-1', 'us-west-1', 'us-west-2', 'sa-east-1'].include?(@region)
105
105
  raise ArgumentError, "Unknown region: #{@region.inspect}"
106
106
  end
107
107
 
@@ -158,7 +158,7 @@ module Fog
158
158
  end
159
159
 
160
160
  def owner_id
161
- @owner_id ||= Fog::AWS[:rds].security_groups.get('default').owner_id
161
+ @owner_id ||= security_groups.get('default').owner_id
162
162
  end
163
163
 
164
164
  def reload
@@ -71,6 +71,9 @@ module Fog
71
71
 
72
72
  {"messageSet" => [], "regionName" => "ap-southeast-1", "zoneName" => "ap-southeast-1a", "zoneState" => "available"},
73
73
  {"messageSet" => [], "regionName" => "ap-southeast-1", "zoneName" => "ap-southeast-1b", "zoneState" => "available"},
74
+
75
+ {"messageSet" => [], "regionName" => "ap-southeast-2", "zoneName" => "ap-southeast-2a", "zoneState" => "available"},
76
+ {"messageSet" => [], "regionName" => "ap-southeast-2", "zoneName" => "ap-southeast-2b", "zoneState" => "available"},
74
77
  ]
75
78
 
76
79
  availability_zone_info = all_zones.select { |zoneinfo| zoneinfo["regionName"] == @region }
@@ -18,7 +18,9 @@ module Fog
18
18
  # * 'availabilityZone'<~String> - availability zone of offering
19
19
  # * 'duration'<~Integer> - duration, in seconds, of offering
20
20
  # * 'fixedPrice'<~Float> - purchase price of offering
21
+ # * 'includeMarketplace'<~Boolean> - whether or not to include marketplace offerings
21
22
  # * 'instanceType'<~String> - instance type of offering
23
+ # * 'offeringType'<~String> - type of offering, in ['Heavy Utilization', 'Medium Utilization', 'Light Utilization']
22
24
  # * 'productDescription'<~String> - description of offering
23
25
  # * 'reservedInstancesOfferingId'<~String> - id of offering
24
26
  # * 'usagePrice'<~Float> - usage price of offering, per hour
@@ -41,14 +43,15 @@ module Fog
41
43
 
42
44
  self.data[:reserved_instances_offerings] ||= [{
43
45
  'reservedInstancesOfferingId' => Fog::AWS::Mock.reserved_instances_offering_id,
44
- 'instanceType' => 'm1.small',
45
- 'availabilityZone' => 'us-east-1d',
46
- 'duration' => 31536000,
47
- 'fixedPrice' => 350.0,
48
- 'usagePrice' => 0.03,
49
- 'productDescription' => 'Linux/UNIX',
50
- 'instanceTenancy' => 'default',
51
- 'currencyCode' => 'USD'
46
+ 'instanceType' => 'm1.small',
47
+ 'availabilityZone' => 'us-east-1d',
48
+ 'duration' => 31536000,
49
+ 'fixedPrice' => 350.0,
50
+ 'offeringType' => 'Medium Utilization',
51
+ 'usagePrice' => 0.03,
52
+ 'productDescription' => 'Linux/UNIX',
53
+ 'instanceTenancy' => 'default',
54
+ 'currencyCode' => 'USD'
52
55
  }]
53
56
 
54
57
  response.body = {
@@ -0,0 +1,51 @@
1
+ module Fog
2
+ module Compute
3
+ class AWS
4
+ class Real
5
+
6
+ require 'fog/aws/parsers/compute/basic'
7
+
8
+ # Modifies a volume attribute.
9
+ #
10
+ # ==== Parameters
11
+ # * volume_id<~String> - The ID of the volume.
12
+ # * auto_enable_io_value<~Boolean> - This attribute exists to auto-enable the I/O operations to the volume.
13
+ #
14
+ # ==== Returns
15
+ # * response<~Excon::Response>:
16
+ # * body<~Hash>:
17
+ # * 'requestId'<~String> - Id of request
18
+ # * 'return'<~Boolean> - success?
19
+ #
20
+ # {Amazon API Reference}[http://http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyVolumeAttribute.html]
21
+ def modify_volume_attribute(volume_id=nil, auto_enable_io_value=false)
22
+ request(
23
+ 'Action' => 'ModifyVolumeAttribute',
24
+ 'VolumeId' => volume_id,
25
+ 'AutoEnableIO.Value' => auto_enable_io_value,
26
+ :idempotent => true,
27
+ :parser => Fog::Parsers::Compute::AWS::Basic.new
28
+ )
29
+ end
30
+
31
+ end
32
+
33
+ class Mock
34
+
35
+ def modify_volume_attribute(volume_id=nil, auto_enable_io_value=false)
36
+ response = Excon::Response.new
37
+ if volume = self.data[:volumes][volume_id]
38
+ response.status = 200
39
+ response.body = {
40
+ 'requestId' => Fog::AWS::Mock.request_id,
41
+ 'return' => true
42
+ }
43
+ response
44
+ else
45
+ raise Fog::Compute::AWS::NotFound.new("The volume '#{volume_id}' does not exist.")
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end