fog 1.24.0 → 1.25.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (304) hide show
  1. checksums.yaml +5 -13
  2. data/CHANGELOG.md +184 -1
  3. data/CONTRIBUTORS.md +23 -0
  4. data/README.md +17 -9
  5. data/Rakefile +4 -0
  6. data/fog.gemspec +18 -6
  7. data/lib/fog.rb +1 -1
  8. data/lib/fog/aws/auto_scaling.rb +12 -12
  9. data/lib/fog/aws/beanstalk.rb +12 -10
  10. data/lib/fog/aws/cdn.rb +0 -1
  11. data/lib/fog/aws/cloud_formation.rb +13 -11
  12. data/lib/fog/aws/cloud_watch.rb +14 -11
  13. data/lib/fog/aws/compute.rb +19 -19
  14. data/lib/fog/aws/core.rb +21 -0
  15. data/lib/fog/aws/dns.rb +0 -1
  16. data/lib/fog/aws/elasticache.rb +13 -9
  17. data/lib/fog/aws/elb.rb +23 -14
  18. data/lib/fog/aws/emr.rb +11 -9
  19. data/lib/fog/aws/iam.rb +14 -11
  20. data/lib/fog/aws/models/compute/security_group.rb +41 -0
  21. data/lib/fog/aws/models/elb/load_balancer.rb +31 -0
  22. data/lib/fog/aws/models/glacier/archive.rb +3 -1
  23. data/lib/fog/aws/models/iam/role.rb +1 -1
  24. data/lib/fog/aws/models/iam/roles.rb +1 -1
  25. data/lib/fog/aws/models/storage/file.rb +1 -1
  26. data/lib/fog/aws/parsers/compute/describe_security_groups.rb +68 -53
  27. data/lib/fog/aws/parsers/elb/describe_load_balancer_attributes.rb +7 -0
  28. data/lib/fog/aws/parsers/elb/describe_tags.rb +26 -0
  29. data/lib/fog/aws/parsers/elb/tag_list_parser.rb +57 -0
  30. data/lib/fog/aws/parsers/storage/get_bucket_website.rb +5 -1
  31. data/lib/fog/aws/rds.rb +13 -11
  32. data/lib/fog/aws/region_methods.rb +1 -1
  33. data/lib/fog/aws/requests/dynamodb/put_item.rb +1 -1
  34. data/lib/fog/aws/requests/elb/add_tags.rb +46 -0
  35. data/lib/fog/aws/requests/elb/create_load_balancer.rb +4 -1
  36. data/lib/fog/aws/requests/elb/describe_load_balancer_attributes.rb +3 -0
  37. data/lib/fog/aws/requests/elb/describe_tags.rb +56 -0
  38. data/lib/fog/aws/requests/elb/modify_load_balancer_attributes.rb +9 -3
  39. data/lib/fog/aws/requests/elb/remove_tags.rb +46 -0
  40. data/lib/fog/aws/requests/storage/copy_object.rb +1 -1
  41. data/lib/fog/aws/requests/storage/delete_object.rb +4 -3
  42. data/lib/fog/aws/requests/storage/post_object_hidden_fields.rb +23 -5
  43. data/lib/fog/aws/requests/storage/post_object_restore.rb +1 -1
  44. data/lib/fog/aws/requests/storage/put_bucket_website.rb +46 -18
  45. data/lib/fog/aws/ses.rb +1 -2
  46. data/lib/fog/aws/signaturev4.rb +62 -15
  47. data/lib/fog/aws/simpledb.rb +0 -1
  48. data/lib/fog/aws/sns.rb +12 -9
  49. data/lib/fog/aws/sqs.rb +14 -10
  50. data/lib/fog/aws/storage.rb +102 -78
  51. data/lib/fog/aws/sts.rb +10 -9
  52. data/lib/fog/bare_metal_cloud/compute.rb +0 -1
  53. data/lib/fog/bin.rb +1 -0
  54. data/lib/fog/bin/brightbox.rb +3 -1
  55. data/lib/fog/bin/rackspace.rb +4 -0
  56. data/lib/fog/bluebox/models/compute/server.rb +1 -0
  57. data/lib/fog/cloudstack/models/compute/server.rb +12 -1
  58. data/lib/fog/cloudstack/models/compute/snapshots.rb +3 -2
  59. data/lib/fog/cloudstack/models/compute/volume.rb +5 -0
  60. data/lib/fog/cloudstack/models/compute/volumes.rb +3 -2
  61. data/lib/fog/core/parser.rb +2 -112
  62. data/lib/fog/dnsmadeeasy/dns.rb +0 -1
  63. data/lib/fog/dynect/core.rb +0 -1
  64. data/lib/fog/dynect/dns.rb +11 -3
  65. data/lib/fog/ecloud/compute.rb +0 -1
  66. data/lib/fog/ecloud/core.rb +1 -1
  67. data/lib/fog/fogdocker/compute.rb +4 -1
  68. data/lib/fog/fogdocker/core.rb +1 -7
  69. data/lib/fog/fogdocker/errors.rb +9 -0
  70. data/lib/fog/fogdocker/models/compute/images.rb +4 -0
  71. data/lib/fog/fogdocker/models/compute/server.rb +18 -1
  72. data/lib/fog/fogdocker/requests/compute/container_action.rb +53 -3
  73. data/lib/fog/fogdocker/requests/compute/container_get.rb +31 -12
  74. data/lib/fog/fogdocker/requests/compute/image_search.rb +29 -0
  75. data/lib/fog/google/dns.rb +46 -12
  76. data/lib/fog/google/examples/dns/project.rb +8 -0
  77. data/lib/fog/google/examples/dns/zones.rb +43 -0
  78. data/lib/fog/google/models/compute/images.rb +2 -1
  79. data/lib/fog/google/models/dns/change.rb +40 -0
  80. data/lib/fog/google/models/dns/changes.rb +52 -0
  81. data/lib/fog/google/models/dns/project.rb +75 -0
  82. data/lib/fog/google/models/dns/projects.rb +25 -0
  83. data/lib/fog/google/models/dns/record.rb +112 -0
  84. data/lib/fog/google/models/dns/records.rb +52 -0
  85. data/lib/fog/google/models/dns/zone.rb +74 -0
  86. data/lib/fog/google/models/dns/zones.rb +34 -0
  87. data/lib/fog/google/models/storage/file.rb +1 -1
  88. data/lib/fog/google/models/storage/files.rb +1 -5
  89. data/lib/fog/google/requests/dns/create_change.rb +64 -0
  90. data/lib/fog/google/requests/dns/create_managed_zone.rb +64 -31
  91. data/lib/fog/google/requests/dns/delete_managed_zone.rb +20 -24
  92. data/lib/fog/google/requests/dns/get_change.rb +42 -0
  93. data/lib/fog/google/requests/dns/get_managed_zone.rb +22 -16
  94. data/lib/fog/google/requests/dns/get_project.rb +42 -0
  95. data/lib/fog/google/requests/dns/list_changes.rb +41 -0
  96. data/lib/fog/google/requests/dns/list_managed_zones.rb +15 -10
  97. data/lib/fog/google/requests/dns/list_resource_record_sets.rb +50 -0
  98. data/lib/fog/google/storage.rb +0 -1
  99. data/lib/fog/hp/storage.rb +1 -1
  100. data/lib/fog/internet_archive/storage.rb +0 -1
  101. data/lib/fog/libvirt/models/compute/server.rb +17 -7
  102. data/lib/fog/opennebula/models/compute/flavor.rb +46 -8
  103. data/lib/fog/opennebula/models/compute/flavors.rb +7 -0
  104. data/lib/fog/opennebula/models/compute/interface.rb +1 -1
  105. data/lib/fog/opennebula/models/compute/network.rb +1 -0
  106. data/lib/fog/opennebula/models/compute/networks.rb +5 -1
  107. data/lib/fog/opennebula/requests/compute/list_networks.rb +34 -25
  108. data/lib/fog/opennebula/requests/compute/template_pool.rb +47 -5
  109. data/lib/fog/openstack/compute.rb +2 -2
  110. data/lib/fog/openstack/docs/storage.md +18 -0
  111. data/lib/fog/openstack/identity.rb +1 -1
  112. data/lib/fog/openstack/image.rb +1 -1
  113. data/lib/fog/openstack/metering.rb +1 -1
  114. data/lib/fog/openstack/models/compute/server.rb +1 -0
  115. data/lib/fog/openstack/models/storage/directory.rb +8 -2
  116. data/lib/fog/openstack/network.rb +1 -1
  117. data/lib/fog/openstack/orchestration.rb +1 -1
  118. data/lib/fog/openstack/requests/compute/create_security_group.rb +1 -1
  119. data/lib/fog/openstack/requests/storage/public_url.rb +28 -0
  120. data/lib/fog/openstack/requests/storage/put_container.rb +1 -0
  121. data/lib/fog/openstack/storage.rb +1 -0
  122. data/lib/fog/openstack/volume.rb +1 -1
  123. data/lib/fog/ovirt/compute.rb +1 -0
  124. data/lib/fog/ovirt/models/compute/server.rb +5 -0
  125. data/lib/fog/ovirt/requests/compute/update_volume.rb +39 -0
  126. data/lib/fog/rackspace.rb +1 -0
  127. data/lib/fog/rackspace/core.rb +1 -0
  128. data/lib/fog/rackspace/docs/networking.md +315 -0
  129. data/lib/fog/rackspace/mock_data.rb +1 -2
  130. data/lib/fog/rackspace/models/dns/zones.rb +2 -1
  131. data/lib/fog/rackspace/models/load_balancers/node.rb +7 -0
  132. data/lib/fog/rackspace/models/networking/network.rb +27 -0
  133. data/lib/fog/rackspace/models/networking/networks.rb +23 -0
  134. data/lib/fog/rackspace/models/networking/virtual_interface.rb +85 -0
  135. data/lib/fog/rackspace/models/networking/virtual_interfaces.rb +45 -0
  136. data/lib/fog/rackspace/models/queues/queue.rb +1 -1
  137. data/lib/fog/rackspace/networking.rb +192 -0
  138. data/lib/fog/rackspace/requests/load_balancers/create_node.rb +3 -0
  139. data/lib/fog/rackspace/requests/load_balancers/update_node.rb +3 -0
  140. data/lib/fog/rackspace/requests/networking/create_network.rb +36 -0
  141. data/lib/fog/rackspace/requests/networking/create_virtual_interface.rb +30 -0
  142. data/lib/fog/rackspace/requests/networking/delete_network.rb +21 -0
  143. data/lib/fog/rackspace/requests/networking/delete_virtual_interface.rb +23 -0
  144. data/lib/fog/rackspace/requests/networking/get_network.rb +21 -0
  145. data/lib/fog/rackspace/requests/networking/list_networks.rb +18 -0
  146. data/lib/fog/rackspace/requests/networking/list_virtual_interfaces.rb +22 -0
  147. data/lib/fog/vcloud/compute.rb +0 -1
  148. data/lib/fog/vcloud/core.rb +1 -0
  149. data/lib/fog/vcloud_director/compute.rb +1 -1
  150. data/lib/fog/version.rb +1 -1
  151. data/lib/fog/vsphere/compute.rb +38 -1
  152. data/lib/fog/vsphere/requests/compute/list_clusters.rb +31 -1
  153. data/lib/fog/vsphere/requests/compute/modify_vm_interface.rb +1 -1
  154. data/lib/fog/zerigo/dns.rb +0 -1
  155. data/lib/tasks/changelog_task.rb +1 -0
  156. data/tests/aws/models/elb/model_tests.rb +6 -0
  157. data/tests/aws/models/elb/tagging_tests.rb +15 -0
  158. data/tests/aws/models/iam/access_keys_tests.rb +1 -1
  159. data/tests/aws/models/iam/policies_tests.rb +2 -1
  160. data/tests/aws/models/iam/users_tests.rb +7 -4
  161. data/tests/aws/models/storage/url_tests.rb +5 -9
  162. data/tests/aws/requests/compute/tag_tests.rb +2 -0
  163. data/tests/aws/requests/elb/load_balancer_tests.rb +5 -1
  164. data/tests/aws/requests/storage/bucket_tests.rb +15 -1
  165. data/tests/aws/signaturev4_tests.rb +47 -0
  166. data/tests/bluebox/requests/compute/block_tests.rb +2 -1
  167. data/tests/compute/helper.rb +0 -10
  168. data/tests/compute/models/flavors_tests.rb +1 -1
  169. data/tests/fogdocker/compute_tests.rb +1 -1
  170. data/tests/fogdocker/models/compute/server_tests.rb +13 -3
  171. data/tests/fogdocker/requests/compute/container_action_tests.rb +19 -8
  172. data/tests/fogdocker/requests/compute/image_search_tests.rb +11 -0
  173. data/tests/google/models/dns/change_tests.rb +28 -0
  174. data/tests/google/models/dns/changes_tests.rb +36 -0
  175. data/tests/google/models/dns/projects_tests.rb +12 -0
  176. data/tests/google/models/dns/record_tests.rb +42 -0
  177. data/tests/google/models/dns/records_tests.rb +36 -0
  178. data/tests/google/models/dns/zone_tests.rb +28 -0
  179. data/tests/google/models/dns/zones_tests.rb +14 -0
  180. data/tests/google/requests/dns/change_tests.rb +86 -0
  181. data/tests/google/requests/dns/managed_zone_tests.rb +1 -1
  182. data/tests/google/requests/dns/project_tests.rb +29 -0
  183. data/tests/google/requests/dns/record_tests.rb +49 -0
  184. data/tests/helper.rb +1 -1
  185. data/tests/helpers/mock_helper.rb +2 -2
  186. data/tests/opennebula/models/compute/flavor_tests.rb +29 -0
  187. data/tests/opennebula/models/compute/flavors_tests.rb +17 -0
  188. data/tests/opennebula/models/compute/network_tests.rb +2 -2
  189. data/tests/opennebula/models/compute/networks_tests.rb +2 -0
  190. data/tests/openstack/requests/storage/object_tests.rb +10 -0
  191. data/tests/ovirt/compute_tests.rb +1 -1
  192. data/tests/ovirt/requests/compute/update_volume_tests.rb +20 -0
  193. data/tests/rackspace/models/networking/network_tests.rb +10 -0
  194. data/tests/rackspace/models/networking/networks_tests.rb +10 -0
  195. data/tests/rackspace/models/networking/virtual_interface_tests.rb +33 -0
  196. data/tests/rackspace/models/networking/virtual_interfaces_tests.rb +24 -0
  197. data/tests/rackspace/models/queues/queue_tests.rb +9 -0
  198. data/tests/rackspace/networking_tests.rb +118 -0
  199. data/tests/rackspace/requests/networking/network_tests.rb +49 -0
  200. data/tests/rackspace/requests/networking/virtual_interface_tests.rb +49 -0
  201. data/tests/vsphere/requests/compute/list_clusters_tests.rb +11 -0
  202. metadata +228 -180
  203. data/lib/fog/bin/terremark.rb +0 -29
  204. data/lib/fog/bin/vmfusion.rb +0 -58
  205. data/lib/fog/bin/voxel.rb +0 -29
  206. data/lib/fog/terremark.rb +0 -11
  207. data/lib/fog/terremark/models/shared/address.rb +0 -25
  208. data/lib/fog/terremark/models/shared/addresses.rb +0 -45
  209. data/lib/fog/terremark/models/shared/image.rb +0 -19
  210. data/lib/fog/terremark/models/shared/images.rb +0 -41
  211. data/lib/fog/terremark/models/shared/internetservice.rb +0 -66
  212. data/lib/fog/terremark/models/shared/internetservices.rb +0 -39
  213. data/lib/fog/terremark/models/shared/network.rb +0 -31
  214. data/lib/fog/terremark/models/shared/networks.rb +0 -48
  215. data/lib/fog/terremark/models/shared/nodeservice.rb +0 -50
  216. data/lib/fog/terremark/models/shared/nodeservices.rb +0 -29
  217. data/lib/fog/terremark/models/shared/server.rb +0 -210
  218. data/lib/fog/terremark/models/shared/servers.rb +0 -50
  219. data/lib/fog/terremark/models/shared/task.rb +0 -46
  220. data/lib/fog/terremark/models/shared/tasks.rb +0 -54
  221. data/lib/fog/terremark/models/shared/vdc.rb +0 -40
  222. data/lib/fog/terremark/models/shared/vdcs.rb +0 -48
  223. data/lib/fog/terremark/parser.rb +0 -18
  224. data/lib/fog/terremark/parsers/shared/get_catalog.rb +0 -33
  225. data/lib/fog/terremark/parsers/shared/get_catalog_item.rb +0 -32
  226. data/lib/fog/terremark/parsers/shared/get_internet_services.rb +0 -57
  227. data/lib/fog/terremark/parsers/shared/get_keys_list.rb +0 -39
  228. data/lib/fog/terremark/parsers/shared/get_network_ips.rb +0 -24
  229. data/lib/fog/terremark/parsers/shared/get_node_services.rb +0 -32
  230. data/lib/fog/terremark/parsers/shared/get_organization.rb +0 -50
  231. data/lib/fog/terremark/parsers/shared/get_organizations.rb +0 -31
  232. data/lib/fog/terremark/parsers/shared/get_public_ips.rb +0 -26
  233. data/lib/fog/terremark/parsers/shared/get_tasks_list.rb +0 -35
  234. data/lib/fog/terremark/parsers/shared/get_vapp_template.rb +0 -31
  235. data/lib/fog/terremark/parsers/shared/get_vdc.rb +0 -87
  236. data/lib/fog/terremark/parsers/shared/instantiate_vapp_template.rb +0 -26
  237. data/lib/fog/terremark/parsers/shared/internet_service.rb +0 -58
  238. data/lib/fog/terremark/parsers/shared/network.rb +0 -39
  239. data/lib/fog/terremark/parsers/shared/node_service.rb +0 -28
  240. data/lib/fog/terremark/parsers/shared/public_ip.rb +0 -22
  241. data/lib/fog/terremark/parsers/shared/task.rb +0 -25
  242. data/lib/fog/terremark/parsers/shared/vapp.rb +0 -61
  243. data/lib/fog/terremark/requests/shared/add_internet_service.rb +0 -54
  244. data/lib/fog/terremark/requests/shared/add_node_service.rb +0 -51
  245. data/lib/fog/terremark/requests/shared/configure_vapp.rb +0 -59
  246. data/lib/fog/terremark/requests/shared/create_internet_service.rb +0 -59
  247. data/lib/fog/terremark/requests/shared/delete_internet_service.rb +0 -21
  248. data/lib/fog/terremark/requests/shared/delete_node_service.rb +0 -21
  249. data/lib/fog/terremark/requests/shared/delete_public_ip.rb +0 -21
  250. data/lib/fog/terremark/requests/shared/delete_vapp.rb +0 -20
  251. data/lib/fog/terremark/requests/shared/deploy_vapp.rb +0 -33
  252. data/lib/fog/terremark/requests/shared/get_catalog.rb +0 -30
  253. data/lib/fog/terremark/requests/shared/get_catalog_item.rb +0 -33
  254. data/lib/fog/terremark/requests/shared/get_internet_services.rb +0 -34
  255. data/lib/fog/terremark/requests/shared/get_keys_list.rb +0 -34
  256. data/lib/fog/terremark/requests/shared/get_network.rb +0 -69
  257. data/lib/fog/terremark/requests/shared/get_network_ips.rb +0 -29
  258. data/lib/fog/terremark/requests/shared/get_node_services.rb +0 -29
  259. data/lib/fog/terremark/requests/shared/get_organization.rb +0 -82
  260. data/lib/fog/terremark/requests/shared/get_organizations.rb +0 -45
  261. data/lib/fog/terremark/requests/shared/get_public_ip.rb +0 -31
  262. data/lib/fog/terremark/requests/shared/get_public_ips.rb +0 -68
  263. data/lib/fog/terremark/requests/shared/get_task.rb +0 -37
  264. data/lib/fog/terremark/requests/shared/get_tasks_list.rb +0 -30
  265. data/lib/fog/terremark/requests/shared/get_vapp.rb +0 -40
  266. data/lib/fog/terremark/requests/shared/get_vapp_template.rb +0 -33
  267. data/lib/fog/terremark/requests/shared/get_vdc.rb +0 -121
  268. data/lib/fog/terremark/requests/shared/instantiate_vapp_template.rb +0 -79
  269. data/lib/fog/terremark/requests/shared/power_off.rb +0 -33
  270. data/lib/fog/terremark/requests/shared/power_on.rb +0 -33
  271. data/lib/fog/terremark/requests/shared/power_reset.rb +0 -33
  272. data/lib/fog/terremark/requests/shared/power_shutdown.rb +0 -22
  273. data/lib/fog/terremark/shared.rb +0 -304
  274. data/lib/fog/terremark/vcloud.rb +0 -129
  275. data/lib/fog/vmfusion.rb +0 -1
  276. data/lib/fog/vmfusion/compute.rb +0 -28
  277. data/lib/fog/vmfusion/core.rb +0 -9
  278. data/lib/fog/vmfusion/models/compute/server.rb +0 -256
  279. data/lib/fog/vmfusion/models/compute/servers.rb +0 -36
  280. data/lib/fog/voxel.rb +0 -1
  281. data/lib/fog/voxel/compute.rb +0 -122
  282. data/lib/fog/voxel/core.rb +0 -16
  283. data/lib/fog/voxel/models/compute/image.rb +0 -13
  284. data/lib/fog/voxel/models/compute/images.rb +0 -27
  285. data/lib/fog/voxel/models/compute/server.rb +0 -73
  286. data/lib/fog/voxel/models/compute/servers.rb +0 -29
  287. data/lib/fog/voxel/parsers/compute/basic.rb +0 -27
  288. data/lib/fog/voxel/parsers/compute/devices_list.rb +0 -107
  289. data/lib/fog/voxel/parsers/compute/images_list.rb +0 -55
  290. data/lib/fog/voxel/parsers/compute/voxcloud_create.rb +0 -36
  291. data/lib/fog/voxel/parsers/compute/voxcloud_delete.rb +0 -27
  292. data/lib/fog/voxel/parsers/compute/voxcloud_status.rb +0 -42
  293. data/lib/fog/voxel/requests/compute/devices_list.rb +0 -22
  294. data/lib/fog/voxel/requests/compute/devices_power.rb +0 -20
  295. data/lib/fog/voxel/requests/compute/images_list.rb +0 -29
  296. data/lib/fog/voxel/requests/compute/voxcloud_create.rb +0 -20
  297. data/lib/fog/voxel/requests/compute/voxcloud_delete.rb +0 -18
  298. data/lib/fog/voxel/requests/compute/voxcloud_status.rb +0 -22
  299. data/lib/fog/xml.rb +0 -4
  300. data/lib/fog/xml/connection.rb +0 -24
  301. data/lib/fog/xml/sax_parser_connection.rb +0 -45
  302. data/tests/core/connection_tests.rb +0 -26
  303. data/tests/voxel/requests/compute/image_tests.rb +0 -52
  304. data/tests/voxel/requests/compute/server_tests.rb +0 -123
data/lib/fog.rb CHANGED
@@ -10,7 +10,6 @@ require 'fog/core'
10
10
  # data exchange specific (to be extracted and used on a per provider basis)
11
11
  require 'fog/xml'
12
12
  require 'fog/json'
13
- require 'fog/core/parser'
14
13
 
15
14
  # deprecation wrappers (XML wrapped version)
16
15
  require 'fog/core/deprecated/connection'
@@ -48,6 +47,7 @@ require 'fog/rage4'
48
47
  require 'fog/riakcs'
49
48
  require 'fog/openstack'
50
49
  require 'fog/ovirt'
50
+ require 'fog/profitbricks'
51
51
  require 'fog/sakuracloud'
52
52
  require 'fog/serverlove'
53
53
  require 'fog/softlayer'
@@ -86,10 +86,7 @@ module Fog
86
86
  # * AutoScaling object with connection to AWS.
87
87
 
88
88
  def initialize(options={})
89
- require 'fog/core/parser'
90
-
91
89
  @use_iam_profile = options[:use_iam_profile]
92
- setup_credentials(options)
93
90
 
94
91
  @connection_options = options[:connection_options] || {}
95
92
 
@@ -105,6 +102,8 @@ module Fog
105
102
  @persistent = options[:persistent] || false
106
103
  @scheme = options[:scheme] || 'https'
107
104
  @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)
105
+
106
+ setup_credentials(options)
108
107
  end
109
108
 
110
109
  def reload
@@ -119,12 +118,13 @@ module Fog
119
118
  idempotent = params.delete(:idempotent)
120
119
  parser = params.delete(:parser)
121
120
 
122
- body = AWS.signed_params(
121
+ body, headers = AWS.signed_params_v4(
123
122
  params,
123
+ { 'Content-Type' => 'application/x-www-form-urlencoded' },
124
124
  {
125
- :aws_access_key_id => @aws_access_key_id,
126
125
  :aws_session_token => @aws_session_token,
127
- :hmac => @hmac,
126
+ :method => 'POST',
127
+ :signer => @signer,
128
128
  :host => @host,
129
129
  :path => @path,
130
130
  :port => @port,
@@ -134,20 +134,20 @@ module Fog
134
134
 
135
135
  if @instrumentor
136
136
  @instrumentor.instrument("#{@instrumentor_name}.request", params) do
137
- _request(body, idempotent, parser)
137
+ _request(body, headers, idempotent, parser)
138
138
  end
139
139
  else
140
- _request(body, idempotent, parser)
140
+ _request(body, headers, idempotent, parser)
141
141
  end
142
142
  end
143
143
 
144
- def _request(body, idempotent, parser)
144
+ def _request(body, headers, idempotent, parser)
145
145
  begin
146
146
  @connection.request({
147
147
  :body => body,
148
148
  :expects => 200,
149
149
  :idempotent => idempotent,
150
- :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
150
+ :headers => headers,
151
151
  :method => 'POST',
152
152
  :parser => parser
153
153
  })
@@ -173,7 +173,7 @@ module Fog
173
173
  @aws_session_token = options[:aws_session_token]
174
174
  @aws_credentials_expire_at = options[:aws_credentials_expire_at]
175
175
 
176
- @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
176
+ @signer = Fog::AWS::SignatureV4.new( @aws_access_key_id, @aws_secret_access_key, @region, 'autoscaling')
177
177
  end
178
178
  end
179
179
 
@@ -253,7 +253,7 @@ module Fog
253
253
  setup_credentials(options)
254
254
  @region = options[:region] || 'us-east-1'
255
255
 
256
- 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)
256
+ unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-central-1', 'eu-west-1', 'sa-east-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
257
257
  raise ArgumentError, "Unknown region: #{@region.inspect}"
258
258
  end
259
259
  end
@@ -64,10 +64,8 @@ module Fog
64
64
  class Real
65
65
  include Fog::AWS::CredentialFetcher::ConnectionMethods
66
66
  def initialize(options={})
67
- require 'fog/core/parser'
68
67
 
69
68
  @use_iam_profile = options[:use_iam_profile]
70
- setup_credentials(options)
71
69
 
72
70
  @connection_options = options[:connection_options] || {}
73
71
  options[:region] ||= 'us-east-1'
@@ -79,6 +77,9 @@ module Fog
79
77
  @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)
80
78
  @instrumentor = options[:instrumentor]
81
79
  @instrumentor_name = options[:instrumentor_name] || 'fog.aws.beanstalk'
80
+
81
+ @region = options[:region]
82
+ setup_credentials(options)
82
83
  end
83
84
 
84
85
  def reload
@@ -98,7 +99,7 @@ module Fog
98
99
  @aws_session_token = options[:aws_session_token]
99
100
  @aws_credentials_expire_at = options[:aws_credentials_expire_at]
100
101
 
101
- @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
102
+ @signer = Fog::AWS::SignatureV4.new( @aws_access_key_id, @aws_secret_access_key, @region, 'elasticbeanstalk')
102
103
  end
103
104
 
104
105
  def request(params)
@@ -107,12 +108,13 @@ module Fog
107
108
  idempotent = params.delete(:idempotent)
108
109
  parser = params.delete(:parser)
109
110
 
110
- body = AWS.signed_params(
111
+ body, headers = AWS.signed_params_v4(
111
112
  params,
113
+ { 'Content-Type' => 'application/x-www-form-urlencoded' },
112
114
  {
113
- :aws_access_key_id => @aws_access_key_id,
115
+ :signer => @signer,
114
116
  :aws_session_token => @aws_session_token,
115
- :hmac => @hmac,
117
+ :method => "POST",
116
118
  :host => @host,
117
119
  :path => @path,
118
120
  :port => @port,
@@ -122,18 +124,18 @@ module Fog
122
124
 
123
125
  if @instrumentor
124
126
  @instrumentor.instrument("#{@instrumentor_name}.request", params) do
125
- _request(body, idempotent, parser)
127
+ _request(body, headers, idempotent, parser)
126
128
  end
127
129
  else
128
- _request(body, idempotent, parser)
130
+ _request(body, headers, idempotent, parser)
129
131
  end
130
132
  end
131
133
 
132
- def _request(body, idempotent, parser)
134
+ def _request(body, headers, idempotent, parser)
133
135
  @connection.request({
134
136
  :body => body,
135
137
  :expects => 200,
136
- :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
138
+ :headers => headers,
137
139
  :idempotent => idempotent,
138
140
  :method => 'POST',
139
141
  :parser => parser
@@ -142,7 +142,6 @@ EOF
142
142
  # ==== Returns
143
143
  # * cdn object with connection to aws.
144
144
  def initialize(options={})
145
- require 'fog/core/parser'
146
145
 
147
146
  @use_iam_profile = options[:use_iam_profile]
148
147
  setup_credentials(options)
@@ -46,21 +46,22 @@ module Fog
46
46
  # ==== Returns
47
47
  # * CloudFormation object with connection to AWS.
48
48
  def initialize(options={})
49
- require 'fog/core/parser'
50
49
 
51
50
  @use_iam_profile = options[:use_iam_profile]
52
- setup_credentials(options)
53
51
 
54
52
  @instrumentor = options[:instrumentor]
55
53
  @instrumentor_name = options[:instrumentor_name] || 'fog.aws.cloud_formation'
56
54
  @connection_options = options[:connection_options] || {}
57
55
  options[:region] ||= 'us-east-1'
56
+ @region = options[:region]
58
57
  @host = options[:host] || "cloudformation.#{options[:region]}.amazonaws.com"
59
58
  @path = options[:path] || '/'
60
59
  @persistent = options[:persistent] || false
61
60
  @port = options[:port] || 443
62
61
  @scheme = options[:scheme] || 'https'
63
62
  @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)
63
+
64
+ setup_credentials(options)
64
65
  end
65
66
 
66
67
  def reload
@@ -75,7 +76,7 @@ module Fog
75
76
  @aws_session_token = options[:aws_session_token]
76
77
  @aws_credentials_expire_at = options[:aws_credentials_expire_at]
77
78
 
78
- @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
79
+ @signer = Fog::AWS::SignatureV4.new( @aws_access_key_id, @aws_secret_access_key, @region, 'cloudformation')
79
80
  end
80
81
 
81
82
  def request(params)
@@ -84,34 +85,35 @@ module Fog
84
85
  idempotent = params.delete(:idempotent)
85
86
  parser = params.delete(:parser)
86
87
 
87
- body = Fog::AWS.signed_params(
88
+ body, headers = Fog::AWS.signed_params_v4(
88
89
  params,
90
+ { 'Content-Type' => 'application/x-www-form-urlencoded' },
89
91
  {
90
- :aws_access_key_id => @aws_access_key_id,
92
+ :signer => @signer,
91
93
  :aws_session_token => @aws_session_token,
92
- :hmac => @hmac,
93
94
  :host => @host,
94
95
  :path => @path,
95
96
  :port => @port,
96
- :version => '2010-05-15'
97
+ :version => '2010-05-15',
98
+ :method => 'POST'
97
99
  }
98
100
  )
99
101
 
100
102
  if @instrumentor
101
103
  @instrumentor.instrument("#{@instrumentor_name}.request", params) do
102
- _request(body, idempotent, parser)
104
+ _request(body, headers, idempotent, parser)
103
105
  end
104
106
  else
105
- _request(body, idempotent, parser)
107
+ _request(body, headers, idempotent, parser)
106
108
  end
107
109
  end
108
110
 
109
- def _request(body, idempotent, parser)
111
+ def _request(body, headers, idempotent, parser)
110
112
  @connection.request({
111
113
  :body => body,
112
114
  :expects => 200,
113
115
  :idempotent => idempotent,
114
- :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
116
+ :headers => headers,
115
117
  :method => 'POST',
116
118
  :parser => parser
117
119
  })
@@ -54,7 +54,7 @@ module Fog
54
54
 
55
55
  @region = options[:region] || 'us-east-1'
56
56
 
57
- 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)
57
+ unless ['ap-northeast-1', 'ap-southeast-1', 'ap-southeast-2', 'eu-central-1', 'eu-west-1', 'sa-east-1', 'us-east-1', 'us-west-1', 'us-west-2'].include?(@region)
58
58
  raise ArgumentError, "Unknown region: #{@region.inspect}"
59
59
  end
60
60
  end
@@ -90,7 +90,6 @@ module Fog
90
90
  # * CloudWatch object with connection to AWS.
91
91
  def initialize(options={})
92
92
  @use_iam_profile = options[:use_iam_profile]
93
- setup_credentials(options)
94
93
 
95
94
  @connection_options = options[:connection_options] || {}
96
95
 
@@ -98,12 +97,15 @@ module Fog
98
97
  @instrumentor_name = options[:instrumentor_name] || 'fog.aws.cloud_watch'
99
98
 
100
99
  options[:region] ||= 'us-east-1'
100
+ @region = options[:region]
101
101
  @host = options[:host] || "monitoring.#{options[:region]}.amazonaws.com"
102
102
  @path = options[:path] || '/'
103
103
  @persistent = options[:persistent] || false
104
104
  @port = options[:port] || 443
105
105
  @scheme = options[:scheme] || 'https'
106
106
  @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", @persistent, @connection_options)
107
+
108
+ setup_credentials(options)
107
109
  end
108
110
 
109
111
  def reload
@@ -118,7 +120,7 @@ module Fog
118
120
  @aws_session_token = options[:aws_session_token]
119
121
  @aws_credentials_expire_at = options[:aws_credentials_expire_at]
120
122
 
121
- @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
123
+ @signer = Fog::AWS::SignatureV4.new( @aws_access_key_id, @aws_secret_access_key,@region,'monitoring')
122
124
  end
123
125
 
124
126
  def request(params)
@@ -126,33 +128,34 @@ module Fog
126
128
  idempotent = params.delete(:idempotent)
127
129
  parser = params.delete(:parser)
128
130
 
129
- body = AWS.signed_params(
131
+ body, headers = AWS.signed_params_v4(
130
132
  params,
133
+ { 'Content-Type' => 'application/x-www-form-urlencoded' },
131
134
  {
132
- :aws_access_key_id => @aws_access_key_id,
135
+ :signer => @signer,
133
136
  :aws_session_token => @aws_session_token,
134
- :hmac => @hmac,
135
137
  :host => @host,
136
138
  :path => @path,
137
139
  :port => @port,
138
- :version => '2010-08-01'
140
+ :version => '2010-08-01',
141
+ :method => 'POST'
139
142
  }
140
143
  )
141
144
 
142
145
  if @instrumentor
143
146
  @instrumentor.instrument("#{@instrumentor_name}.request", params) do
144
- _request(body, idempotent, parser)
147
+ _request(body, headers, idempotent, parser)
145
148
  end
146
149
  else
147
- _request(body, idempotent, parser)
150
+ _request(body, headers, idempotent, parser)
148
151
  end
149
152
  end
150
153
 
151
- def _request(body, idempotent, parser)
154
+ def _request(body, headers, idempotent, parser)
152
155
  @connection.request({
153
156
  :body => body,
154
157
  :expects => 200,
155
- :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
158
+ :headers => headers,
156
159
  :idempotent => idempotent,
157
160
  :method => 'POST',
158
161
  :parser => parser
@@ -449,16 +449,16 @@ module Fog
449
449
  attr_accessor :region
450
450
 
451
451
  def initialize(options={})
452
- require 'fog/core/parser'
453
452
 
454
- @use_iam_profile = options[:use_iam_profile]
455
- setup_credentials(options)
456
453
  @connection_options = options[:connection_options] || {}
457
454
  @region = options[:region] ||= 'us-east-1'
458
455
  @instrumentor = options[:instrumentor]
459
456
  @instrumentor_name = options[:instrumentor_name] || 'fog.aws.compute'
460
457
  @version = options[:version] || '2014-06-15'
461
458
 
459
+ @use_iam_profile = options[:use_iam_profile]
460
+ setup_credentials(options)
461
+
462
462
  if @endpoint = options[:endpoint]
463
463
  endpoint = URI.parse(@endpoint)
464
464
  @host = endpoint.host or raise InvalidURIError.new("could not parse endpoint: #{@endpoint}")
@@ -488,7 +488,7 @@ module Fog
488
488
  @aws_session_token = options[:aws_session_token]
489
489
  @aws_credentials_expire_at = options[:aws_credentials_expire_at]
490
490
 
491
- @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
491
+ @signer = Fog::AWS::SignatureV4.new( @aws_access_key_id, @aws_secret_access_key,@region,'ec2')
492
492
  end
493
493
 
494
494
  def request(params)
@@ -496,33 +496,33 @@ module Fog
496
496
  idempotent = params.delete(:idempotent)
497
497
  parser = params.delete(:parser)
498
498
 
499
- body = Fog::AWS.signed_params(
500
- params,
501
- {
502
- :aws_access_key_id => @aws_access_key_id,
503
- :aws_session_token => @aws_session_token,
504
- :hmac => @hmac,
505
- :host => @host,
506
- :path => @path,
507
- :port => @port,
508
- :version => @version
499
+ body, headers = Fog::AWS.signed_params_v4(
500
+ params,
501
+ {'Content-Type' => 'application/x-www-form-urlencoded'},
502
+ {
503
+ :host => @host,
504
+ :path => @path,
505
+ :port => @port,
506
+ :version => @version,
507
+ :signer => @signer,
508
+ :aws_session_token => @aws_session_token,
509
+ :method => "POST"
509
510
  }
510
511
  )
511
-
512
512
  if @instrumentor
513
513
  @instrumentor.instrument("#{@instrumentor_name}.request", params) do
514
- _request(body, idempotent, parser)
514
+ _request(body, headers, idempotent, parser)
515
515
  end
516
516
  else
517
- _request(body, idempotent, parser)
517
+ _request(body, headers, idempotent, parser)
518
518
  end
519
519
  end
520
520
 
521
- def _request(body, idempotent, parser)
521
+ def _request(body, headers, idempotent, parser)
522
522
  @connection.request({
523
523
  :body => body,
524
524
  :expects => 200,
525
- :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
525
+ :headers => headers,
526
526
  :idempotent => idempotent,
527
527
  :method => 'POST',
528
528
  :parser => parser
@@ -94,6 +94,27 @@ module Fog
94
94
  }
95
95
  end
96
96
 
97
+ def self.signed_params_v4(params, headers, options={})
98
+ date = Fog::Time.now
99
+
100
+ params = params.merge('Version' => options[:version])
101
+
102
+ headers = headers.merge('Host' => options[:host], 'x-amz-date' => date.to_iso8601_basic)
103
+ headers['x-amz-security-token'] = options[:aws_session_token] if options[:aws_session_token]
104
+
105
+ body = ''
106
+ for key in params.keys.sort
107
+ unless (value = params[key]).nil?
108
+ body << "#{key}=#{escape(value.to_s)}&"
109
+ end
110
+ end
111
+ body.chop!
112
+
113
+ headers['Authorization'] = options[:signer].sign({:method => options[:method], :headers => headers, :body => body, :query => {}, :path => options[:path]}, date)
114
+
115
+ return body, headers
116
+ end
117
+
97
118
  def self.signed_params(params, options = {})
98
119
  params.merge!({
99
120
  'AWSAccessKeyId' => options[:aws_access_key_id],
@@ -90,7 +90,6 @@ module Fog
90
90
  # ==== Returns
91
91
  # * dns object with connection to aws.
92
92
  def initialize(options={})
93
- require 'fog/core/parser'
94
93
 
95
94
  @use_iam_profile = options[:use_iam_profile]
96
95
  setup_credentials(options)
@@ -55,11 +55,12 @@ module Fog
55
55
  include Fog::AWS::CredentialFetcher::ConnectionMethods
56
56
  def initialize(options={})
57
57
  @use_iam_profile = options[:use_iam_profile]
58
- setup_credentials(options)
59
58
 
60
59
  @instrumentor = options[:instrumentor]
61
60
  @instrumentor_name = options[:instrumentor_name] || 'fog.aws.elasticache'
62
61
  options[:region] ||= 'us-east-1'
62
+
63
+ @region = options[:region]
63
64
  @host = options[:host] || "elasticache.#{options[:region]}.amazonaws.com"
64
65
  @path = options[:path] || '/'
65
66
  @port = options[:port] || 443
@@ -67,6 +68,8 @@ module Fog
67
68
  @connection = Fog::XML::Connection.new(
68
69
  "#{@scheme}://#{@host}:#{@port}#{@path}", options[:persistent]
69
70
  )
71
+
72
+ setup_credentials(options)
70
73
  end
71
74
 
72
75
  def reload
@@ -81,7 +84,7 @@ module Fog
81
84
  @aws_session_token = options[:aws_session_token]
82
85
  @aws_credentials_expire_at = options[:aws_credentials_expire_at]
83
86
 
84
- @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
87
+ @signer = Fog::AWS::SignatureV4.new( @aws_access_key_id, @aws_secret_access_key, @region, 'elasticache')
85
88
  end
86
89
 
87
90
  def request(params)
@@ -90,12 +93,13 @@ module Fog
90
93
  idempotent = params.delete(:idempotent)
91
94
  parser = params.delete(:parser)
92
95
 
93
- body = Fog::AWS.signed_params(
96
+ body, headers = Fog::AWS.signed_params_v4(
94
97
  params,
98
+ { 'Content-Type' => 'application/x-www-form-urlencoded' },
95
99
  {
96
- :aws_access_key_id => @aws_access_key_id,
100
+ :signer => @signer,
97
101
  :aws_session_token => @aws_session_token,
98
- :hmac => @hmac,
102
+ :method => 'POST',
99
103
  :host => @host,
100
104
  :path => @path,
101
105
  :port => @port,
@@ -105,18 +109,18 @@ module Fog
105
109
 
106
110
  if @instrumentor
107
111
  @instrumentor.instrument("#{@instrumentor_name}.request", params) do
108
- _request(body, idempotent, parser)
112
+ _request(body, headers, idempotent, parser)
109
113
  end
110
114
  else
111
- _request(body, idempotent, parser)
115
+ _request(body, headers, idempotent, parser)
112
116
  end
113
117
  end
114
118
 
115
- def _request(body, idempotent, parser)
119
+ def _request(body, headers, idempotent, parser)
116
120
  @connection.request({
117
121
  :body => body,
118
122
  :expects => 200,
119
- :headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
123
+ :headers => headers,
120
124
  :idempotent => idempotent,
121
125
  :method => 'POST',
122
126
  :parser => parser