gapinc-fog 1.12.1.2.1 → 1.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (292) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +16 -1
  3. data/Gemfile.1.8.7 +10 -0
  4. data/README.md +23 -2
  5. data/Rakefile +2 -2
  6. data/changelog.txt +276 -0
  7. data/fog.gemspec +4 -6
  8. data/lib/fog/atmos/models/storage/file.rb +2 -2
  9. data/lib/fog/aws/elb.rb +3 -0
  10. data/lib/fog/aws/elb/policy_types.rb +441 -430
  11. data/lib/fog/aws/models/auto_scaling/activities.rb +11 -3
  12. data/lib/fog/aws/models/auto_scaling/groups.rb +6 -3
  13. data/lib/fog/aws/models/auto_scaling/policies.rb +7 -3
  14. data/lib/fog/aws/models/compute/volume.rb +1 -1
  15. data/lib/fog/aws/models/elb/backend_server_description.rb +11 -0
  16. data/lib/fog/aws/models/elb/backend_server_descriptions.rb +22 -0
  17. data/lib/fog/aws/models/elb/load_balancer.rb +15 -2
  18. data/lib/fog/aws/models/elb/policies.rb +28 -13
  19. data/lib/fog/aws/models/elb/policy.rb +20 -10
  20. data/lib/fog/aws/models/rds/instance_option.rb +21 -0
  21. data/lib/fog/aws/models/rds/instance_options.rb +30 -0
  22. data/lib/fog/aws/models/rds/log_file.rb +26 -0
  23. data/lib/fog/aws/models/rds/log_files.rb +50 -0
  24. data/lib/fog/aws/models/rds/server.rb +1 -0
  25. data/lib/fog/aws/models/rds/snapshots.rb +20 -13
  26. data/lib/fog/aws/parsers/auto_scaling/describe_policies.rb +5 -5
  27. data/lib/fog/aws/parsers/elb/describe_load_balancers.rb +44 -13
  28. data/lib/fog/aws/parsers/rds/db_parser.rb +28 -6
  29. data/lib/fog/aws/parsers/rds/describe_db_log_files.rb +44 -0
  30. data/lib/fog/aws/parsers/rds/describe_orderable_db_instance_options.rb +47 -0
  31. data/lib/fog/aws/parsers/rds/download_db_logfile_portion.rb +26 -0
  32. data/lib/fog/aws/parsers/storage/complete_multipart_upload.rb +1 -1
  33. data/lib/fog/aws/parsers/sts/assume_role.rb +30 -0
  34. data/lib/fog/aws/rds.rb +13 -0
  35. data/lib/fog/aws/requests/auto_scaling/describe_auto_scaling_groups.rb +9 -1
  36. data/lib/fog/aws/requests/auto_scaling/describe_policies.rb +15 -1
  37. data/lib/fog/aws/requests/elb/create_app_cookie_stickiness_policy.rb +0 -2
  38. data/lib/fog/aws/requests/elb/create_lb_cookie_stickiness_policy.rb +0 -2
  39. data/lib/fog/aws/requests/elb/create_load_balancer.rb +7 -0
  40. data/lib/fog/aws/requests/elb/create_load_balancer_policy.rb +11 -8
  41. data/lib/fog/aws/requests/elb/describe_load_balancers.rb +21 -1
  42. data/lib/fog/aws/requests/elb/set_load_balancer_policies_for_backend_server.rb +67 -0
  43. data/lib/fog/aws/requests/rds/describe_db_log_files.rb +67 -0
  44. data/lib/fog/aws/requests/rds/describe_orderable_db_instance_options.rb +76 -0
  45. data/lib/fog/aws/requests/rds/download_db_logfile_portion.rb +63 -0
  46. data/lib/fog/aws/requests/ses/send_raw_email.rb +1 -1
  47. data/lib/fog/aws/requests/ses/verify_domain_identity.rb +1 -1
  48. data/lib/fog/aws/requests/storage/complete_multipart_upload.rb +6 -2
  49. data/lib/fog/aws/requests/storage/get_object.rb +1 -1
  50. data/lib/fog/aws/requests/sts/assume_role.rb +46 -0
  51. data/lib/fog/aws/ses.rb +25 -9
  52. data/lib/fog/aws/sts.rb +22 -6
  53. data/lib/fog/bin/openstack.rb +5 -0
  54. data/lib/fog/bin/rackspace.rb +4 -0
  55. data/lib/fog/brightbox/models/compute/collaboration.rb +10 -2
  56. data/lib/fog/brightbox/models/compute/collaborations.rb +26 -2
  57. data/lib/fog/brightbox/models/compute/user_collaboration.rb +16 -1
  58. data/lib/fog/brightbox/models/compute/user_collaborations.rb +10 -2
  59. data/lib/fog/cloudstack/models/compute/servers.rb +1 -1
  60. data/lib/fog/compute/models/server.rb +16 -10
  61. data/lib/fog/core.rb +1 -0
  62. data/lib/fog/core/collection.rb +18 -0
  63. data/lib/fog/core/mock.rb +16 -0
  64. data/lib/fog/digitalocean/compute.rb +32 -3
  65. data/lib/fog/digitalocean/models/compute/server.rb +43 -14
  66. data/lib/fog/digitalocean/models/compute/servers.rb +27 -4
  67. data/lib/fog/digitalocean/models/compute/ssh_keys.rb +2 -3
  68. data/lib/fog/digitalocean/requests/compute/create_server.rb +9 -7
  69. data/lib/fog/digitalocean/requests/compute/destroy_server.rb +3 -0
  70. data/lib/fog/digitalocean/requests/compute/list_images.rb +6 -6
  71. data/lib/fog/dnsimple/dns.rb +4 -1
  72. data/lib/fog/dnsimple/models/dns/record.rb +3 -3
  73. data/lib/fog/dnsimple/requests/dns/create_domain.rb +36 -0
  74. data/lib/fog/dnsimple/requests/dns/create_record.rb +27 -0
  75. data/lib/fog/dnsimple/requests/dns/delete_domain.rb +12 -0
  76. data/lib/fog/dnsimple/requests/dns/delete_record.rb +12 -0
  77. data/lib/fog/dnsimple/requests/dns/get_domain.rb +12 -0
  78. data/lib/fog/dnsimple/requests/dns/get_record.rb +24 -0
  79. data/lib/fog/dnsimple/requests/dns/list_domains.rb +12 -0
  80. data/lib/fog/dnsimple/requests/dns/list_records.rb +12 -0
  81. data/lib/fog/dnsimple/requests/dns/update_record.rb +20 -0
  82. data/lib/fog/glesys/models/compute/server.rb +6 -0
  83. data/lib/fog/google/README.md +28 -0
  84. data/lib/fog/google/Rakefile +17 -0
  85. data/lib/fog/google/examples/bootstrap.rb +9 -0
  86. data/lib/fog/google/examples/create.rb +37 -0
  87. data/lib/fog/google/examples/eric-fail.rb +19 -0
  88. data/lib/fog/google/examples/get_list_images.rb +27 -0
  89. data/lib/fog/google/examples/launch_micro_instance.rb +21 -0
  90. data/lib/fog/google/examples/metadata.rb +18 -0
  91. data/lib/fog/google/models/compute/disks.rb +16 -6
  92. data/lib/fog/google/models/compute/flavors.rb +2 -1
  93. data/lib/fog/google/models/compute/image.rb +16 -17
  94. data/lib/fog/google/models/compute/images.rb +38 -5
  95. data/lib/fog/google/models/compute/server.rb +2 -2
  96. data/lib/fog/google/models/compute/servers.rb +8 -5
  97. data/lib/fog/google/models/storage/file.rb +7 -1
  98. data/lib/fog/google/parsers/storage/access_control_list.rb +2 -2
  99. data/lib/fog/google/requests/compute/insert_server.rb +1 -2
  100. data/lib/fog/google/requests/compute/list_images.rb +3 -2
  101. data/lib/fog/google/requests/storage/get_object.rb +1 -1
  102. data/lib/fog/hp/requests/storage/get_object.rb +1 -1
  103. data/lib/fog/ibm/requests/compute/create_instance.rb +20 -15
  104. data/lib/fog/internet_archive/requests/storage/get_object.rb +1 -1
  105. data/lib/fog/metering.rb +25 -0
  106. data/lib/fog/openstack.rb +2 -1
  107. data/lib/fog/openstack/metering.rb +215 -0
  108. data/lib/fog/openstack/models/compute/server.rb +5 -2
  109. data/lib/fog/openstack/models/metering/resource.rb +24 -0
  110. data/lib/fog/openstack/models/metering/resources.rb +25 -0
  111. data/lib/fog/openstack/models/volume/volume.rb +3 -1
  112. data/lib/fog/openstack/models/volume/volumes.rb +2 -1
  113. data/lib/fog/openstack/network.rb +24 -1
  114. data/lib/fog/openstack/requests/compute/create_server.rb +19 -1
  115. data/lib/fog/openstack/requests/compute/get_host_details.rb +2 -1
  116. data/lib/fog/openstack/requests/metering/get_resource.rb +32 -0
  117. data/lib/fog/openstack/requests/metering/get_samples.rb +55 -0
  118. data/lib/fog/openstack/requests/metering/get_statistics.rb +56 -0
  119. data/lib/fog/openstack/requests/metering/list_meters.rb +50 -0
  120. data/lib/fog/openstack/requests/metering/list_resources.rb +32 -0
  121. data/lib/fog/openstack/requests/network/delete_quota.rb +26 -0
  122. data/lib/fog/openstack/requests/network/get_quota.rb +31 -0
  123. data/lib/fog/openstack/requests/network/get_quotas.rb +31 -0
  124. data/lib/fog/openstack/requests/network/update_quota.rb +33 -0
  125. data/lib/fog/openstack/requests/storage/put_object.rb +8 -5
  126. data/lib/fog/openstack/requests/volume/create_volume.rb +4 -2
  127. data/lib/fog/rackspace.rb +24 -4
  128. data/lib/fog/rackspace/block_storage.rb +8 -4
  129. data/lib/fog/rackspace/cdn.rb +21 -4
  130. data/lib/fog/rackspace/compute_v2.rb +15 -4
  131. data/lib/fog/rackspace/errors.rb +12 -5
  132. data/lib/fog/rackspace/mock_data.rb +18 -7
  133. data/lib/fog/rackspace/models/compute_v2/key_pair.rb +56 -0
  134. data/lib/fog/rackspace/models/compute_v2/key_pairs.rb +43 -0
  135. data/lib/fog/rackspace/models/compute_v2/server.rb +7 -2
  136. data/lib/fog/rackspace/models/compute_v2/servers.rb +2 -1
  137. data/lib/fog/rackspace/models/identity/service_catalog.rb +34 -16
  138. data/lib/fog/rackspace/models/monitoring/agent_token.rb +40 -0
  139. data/lib/fog/rackspace/models/monitoring/agent_tokens.rb +28 -0
  140. data/lib/fog/rackspace/models/monitoring/alarm.rb +51 -0
  141. data/lib/fog/rackspace/models/monitoring/alarm_example.rb +26 -0
  142. data/lib/fog/rackspace/models/monitoring/alarm_examples.rb +31 -0
  143. data/lib/fog/rackspace/models/monitoring/alarms.rb +40 -0
  144. data/lib/fog/rackspace/models/monitoring/base.rb +36 -0
  145. data/lib/fog/rackspace/models/monitoring/check.rb +75 -0
  146. data/lib/fog/rackspace/models/monitoring/check_type.rb +15 -0
  147. data/lib/fog/rackspace/models/monitoring/check_types.rb +23 -0
  148. data/lib/fog/rackspace/models/monitoring/checks.rb +40 -0
  149. data/lib/fog/rackspace/models/monitoring/data_point.rb +18 -0
  150. data/lib/fog/rackspace/models/monitoring/data_points.rb +49 -0
  151. data/lib/fog/rackspace/models/monitoring/entities.rb +48 -0
  152. data/lib/fog/rackspace/models/monitoring/entity.rb +64 -0
  153. data/lib/fog/rackspace/models/monitoring/metric.rb +25 -0
  154. data/lib/fog/rackspace/models/monitoring/metrics.rb +27 -0
  155. data/lib/fog/rackspace/monitoring.rb +149 -0
  156. data/lib/fog/rackspace/requests/compute_v2/create_keypair.rb +53 -0
  157. data/lib/fog/rackspace/requests/compute_v2/create_server.rb +10 -8
  158. data/lib/fog/rackspace/requests/compute_v2/delete_keypair.rb +36 -0
  159. data/lib/fog/rackspace/requests/compute_v2/get_keypair.rb +41 -0
  160. data/lib/fog/rackspace/requests/compute_v2/list_keypairs.rb +37 -0
  161. data/lib/fog/rackspace/requests/monitoring/create_agent_token.rb +19 -0
  162. data/lib/fog/rackspace/requests/monitoring/create_alarm.rb +19 -0
  163. data/lib/fog/rackspace/requests/monitoring/create_check.rb +19 -0
  164. data/lib/fog/rackspace/requests/monitoring/create_entity.rb +19 -0
  165. data/lib/fog/rackspace/requests/monitoring/delete_agent_token.rb +17 -0
  166. data/lib/fog/rackspace/requests/monitoring/delete_alarm.rb +18 -0
  167. data/lib/fog/rackspace/requests/monitoring/delete_check.rb +17 -0
  168. data/lib/fog/rackspace/requests/monitoring/delete_entity.rb +17 -0
  169. data/lib/fog/rackspace/requests/monitoring/evaluate_alarm_example.rb +21 -0
  170. data/lib/fog/rackspace/requests/monitoring/get_agent_token.rb +19 -0
  171. data/lib/fog/rackspace/requests/monitoring/get_alarm.rb +19 -0
  172. data/lib/fog/rackspace/requests/monitoring/get_alarm_example.rb +19 -0
  173. data/lib/fog/rackspace/requests/monitoring/get_check.rb +19 -0
  174. data/lib/fog/rackspace/requests/monitoring/get_entity.rb +19 -0
  175. data/lib/fog/rackspace/requests/monitoring/list_agent_tokens.rb +19 -0
  176. data/lib/fog/rackspace/requests/monitoring/list_alarm_examples.rb +18 -0
  177. data/lib/fog/rackspace/requests/monitoring/list_alarms.rb +18 -0
  178. data/lib/fog/rackspace/requests/monitoring/list_check_types.rb +17 -0
  179. data/lib/fog/rackspace/requests/monitoring/list_checks.rb +18 -0
  180. data/lib/fog/rackspace/requests/monitoring/list_data_points.rb +18 -0
  181. data/lib/fog/rackspace/requests/monitoring/list_entities.rb +19 -0
  182. data/lib/fog/rackspace/requests/monitoring/list_metrics.rb +18 -0
  183. data/lib/fog/rackspace/requests/monitoring/list_notification_plans.rb +18 -0
  184. data/lib/fog/rackspace/requests/monitoring/list_overview.rb +19 -0
  185. data/lib/fog/rackspace/requests/monitoring/update_alarm.rb +18 -0
  186. data/lib/fog/rackspace/requests/monitoring/update_check.rb +18 -0
  187. data/lib/fog/rackspace/requests/monitoring/update_entity.rb +18 -0
  188. data/lib/fog/rackspace/requests/storage/delete_multiple_objects.rb +75 -0
  189. data/lib/fog/rackspace/requests/storage/delete_static_large_object.rb +50 -0
  190. data/lib/fog/rackspace/requests/storage/put_dynamic_obj_manifest.rb +44 -0
  191. data/lib/fog/rackspace/requests/storage/put_object.rb +1 -1
  192. data/lib/fog/rackspace/requests/storage/put_object_manifest.rb +3 -30
  193. data/lib/fog/rackspace/requests/storage/put_static_obj_manifest.rb +60 -0
  194. data/lib/fog/rackspace/storage.rb +24 -16
  195. data/lib/fog/riakcs/provisioning.rb +2 -1
  196. data/lib/fog/riakcs/usage.rb +2 -1
  197. data/lib/fog/vcloud/compute.rb +1 -1
  198. data/lib/fog/vcloud/requests/compute/configure_vm.rb +2 -2
  199. data/lib/fog/version.rb +1 -1
  200. data/lib/fog/vsphere/compute.rb +131 -0
  201. data/lib/fog/vsphere/models/compute/server.rb +5 -1
  202. data/lib/fog/vsphere/requests/compute/get_datacenter.rb +3 -1
  203. data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +20 -38
  204. data/lib/fog/vsphere/requests/compute/list_datacenters.rb +1 -0
  205. data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +8 -114
  206. data/lib/fog/vsphere/requests/compute/vm_clone.rb +18 -9
  207. data/lib/fog/vsphere/requests/compute/vm_power_off.rb +2 -0
  208. data/lib/fog/xenserver/compute.rb +14 -12
  209. data/lib/fog/xenserver/models/compute/console.rb +27 -0
  210. data/lib/fog/xenserver/models/compute/consoles.rb +25 -0
  211. data/lib/fog/xenserver/models/compute/server.rb +6 -2
  212. data/lib/fog/xenserver/models/compute/servers.rb +5 -0
  213. data/lib/fog/xenserver/requests/compute/create_server.rb +4 -0
  214. data/lib/fog/xml/sax_parser_connection.rb +3 -0
  215. data/lib/tasks/changelog_task.rb +2 -0
  216. data/tests/aws/models/compute/volume_tests.rb +1 -1
  217. data/tests/aws/models/elb/model_tests.rb +28 -1
  218. data/tests/aws/models/rds/instance_option_tests.rb +14 -0
  219. data/tests/aws/parsers/elb/describe_load_balancers.rb +65 -0
  220. data/tests/aws/requests/elb/helper.rb +2 -1
  221. data/tests/aws/requests/elb/listener_tests.rb +1 -1
  222. data/tests/aws/requests/elb/load_balancer_tests.rb +5 -1
  223. data/tests/aws/requests/elb/policy_tests.rb +85 -6
  224. data/tests/aws/requests/iam/helper.rb +4 -1
  225. data/tests/aws/requests/iam/server_certificate_tests.rb +2 -2
  226. data/tests/aws/requests/rds/helper.rb +35 -0
  227. data/tests/aws/requests/rds/instance_option_tests.rb +21 -0
  228. data/tests/aws/requests/rds/log_file_tests.rb +19 -0
  229. data/tests/aws/requests/sts/assume_role_tests.rb +19 -0
  230. data/tests/core/mocking_tests.rb +15 -0
  231. data/tests/digitalocean/helper.rb +23 -16
  232. data/tests/digitalocean/models/compute/flavor_tests.rb +2 -2
  233. data/tests/digitalocean/models/compute/image_tests.rb +2 -2
  234. data/tests/digitalocean/models/compute/region_tests.rb +2 -2
  235. data/tests/digitalocean/models/compute/server_tests.rb +11 -3
  236. data/tests/digitalocean/models/compute/servers_tests.rb +14 -28
  237. data/tests/digitalocean/models/compute/ssh_key_tests.rb +7 -3
  238. data/tests/digitalocean/models/compute/ssh_keys_tests.rb +5 -1
  239. data/tests/digitalocean/requests/compute/create_server_tests.rb +3 -6
  240. data/tests/digitalocean/requests/compute/destroy_server_tests.rb +1 -2
  241. data/tests/digitalocean/requests/compute/get_server_details_tests.rb +1 -1
  242. data/tests/digitalocean/requests/compute/get_ssh_key_tests.rb +4 -1
  243. data/tests/digitalocean/requests/compute/list_ssh_keys_tests.rb +5 -2
  244. data/tests/dnsimple/requests/dns/dns_tests.rb +30 -26
  245. data/tests/helper.rb +2 -2
  246. data/tests/helpers/collection_helper.rb +4 -4
  247. data/tests/helpers/mock_helper.rb +2 -0
  248. data/tests/openstack/requests/metering/meter_tests.rb +52 -0
  249. data/tests/openstack/requests/metering/resource_tests.rb +19 -0
  250. data/tests/openstack/requests/network/quota_tests.rb +65 -0
  251. data/tests/openstack/requests/storage/object_tests.rb +27 -2
  252. data/tests/rackspace/block_storage_tests.rb +2 -1
  253. data/tests/rackspace/cdn_tests.rb +9 -0
  254. data/tests/rackspace/compute_v2_tests.rb +16 -15
  255. data/tests/rackspace/databases_tests.rb +1 -1
  256. data/tests/rackspace/load_balancer_tests.rb +1 -1
  257. data/tests/rackspace/models/compute_v2/keypairs_tests.rb +47 -0
  258. data/tests/rackspace/models/identity/service_catalog_tests.rb +54 -29
  259. data/tests/rackspace/models/monitoring/agent_token_tests.rb +9 -0
  260. data/tests/rackspace/models/monitoring/agent_tokens_tests.rb +9 -0
  261. data/tests/rackspace/models/monitoring/alarm_example_tests.rb +18 -0
  262. data/tests/rackspace/models/monitoring/alarm_examples_tests.rb +19 -0
  263. data/tests/rackspace/models/monitoring/alarm_tests.rb +56 -0
  264. data/tests/rackspace/models/monitoring/alarms_tests.rb +25 -0
  265. data/tests/rackspace/models/monitoring/check_tests.rb +50 -0
  266. data/tests/rackspace/models/monitoring/check_types_tests.rb +14 -0
  267. data/tests/rackspace/models/monitoring/checks_tests.rb +16 -0
  268. data/tests/rackspace/models/monitoring/data_points_tests.rb +19 -0
  269. data/tests/rackspace/models/monitoring/entities_tests.rb +14 -0
  270. data/tests/rackspace/models/monitoring/entity_tests.rb +26 -0
  271. data/tests/rackspace/models/monitoring/metric_tests.rb +19 -0
  272. data/tests/rackspace/models/monitoring/metrics_tests.rb +17 -0
  273. data/tests/rackspace/monitoring_tests.rb +72 -0
  274. data/tests/rackspace/requests/compute_v2/keypair_tests.rb +55 -0
  275. data/tests/rackspace/requests/monitoring/agent_tests.rb +34 -0
  276. data/tests/rackspace/requests/monitoring/alarm_example_tests.rb +30 -0
  277. data/tests/rackspace/requests/monitoring/alarm_tests.rb +56 -0
  278. data/tests/rackspace/requests/monitoring/check_tests.rb +40 -0
  279. data/tests/rackspace/requests/monitoring/entity_tests.rb +37 -0
  280. data/tests/rackspace/requests/monitoring/helper.rb +78 -0
  281. data/tests/rackspace/requests/monitoring/list_tests.rb +60 -0
  282. data/tests/rackspace/requests/storage/large_object_tests.rb +303 -59
  283. data/tests/rackspace/requests/storage/object_tests.rb +73 -18
  284. data/tests/vsphere/models/compute/server_tests.rb +1 -1
  285. data/tests/vsphere/requests/compute/list_virtual_machines_tests.rb +2 -2
  286. data/tests/vsphere/requests/compute/vm_clone_tests.rb +14 -8
  287. data/tests/xenserver/compute_tests.rb +5 -5
  288. data/tests/xenserver/models/compute/console_test.rb +35 -0
  289. data/tests/xenserver/models/compute/consoles_test.rb +19 -0
  290. data/tests/xenserver/models/compute/server_tests.rb +25 -18
  291. data/tests/xenserver/models/compute/servers_tests.rb +1 -0
  292. metadata +177 -14
@@ -0,0 +1,46 @@
1
+ module Fog
2
+ module AWS
3
+ class STS
4
+ class Real
5
+
6
+ require 'fog/aws/parsers/sts/assume_role'
7
+
8
+ # Assume Role
9
+ #
10
+ # ==== Parameters
11
+ # * role_session_name<~String> - An identifier for the assumed role.
12
+ # * role_arn<~String> - The ARN of the role the caller is assuming.
13
+ # * external_id<~String> - An optional unique identifier required by the assuming role's trust identity.
14
+ # * policy<~String> - An optional JSON policy document
15
+ # * duration<~Integer> - Duration (of seconds) for the assumed role credentials to be valid (default 3600)
16
+ #
17
+ # ==== Returns
18
+ # * response<~Excon::Response>:
19
+ # * body<~Hash>:
20
+ # * 'Arn'<~String>: The ARN of the assumed role/user
21
+ # * 'AccessKeyId'<~String>: The AWS access key of the temporary credentials for the assumed role
22
+ # * 'SecretAccessKey'<~String>: The AWS secret key of the temporary credentials for the assumed role
23
+ # * 'SessionToken'<~String>: The AWS session token of the temporary credentials for the assumed role
24
+ # * 'Expiration'<~Time>: The expiration time of the temporary credentials for the assumed role
25
+ #
26
+ # ==== See Also
27
+ # http://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html
28
+ #
29
+
30
+ def assume_role(role_session_name, role_arn, external_id=nil, policy=nil, duration=3600)
31
+ request({
32
+ 'Action' => 'AssumeRole',
33
+ 'RoleSessionName' => role_session_name,
34
+ 'RoleArn' => role_arn,
35
+ 'Policy' => policy && Fog::JSON.encode(policy),
36
+ 'DurationSeconds' => duration,
37
+ 'ExternalId' => external_id,
38
+ :idempotent => true,
39
+ :parser => Fog::Parsers::AWS::STS::AssumeRole.new
40
+ })
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -5,6 +5,9 @@ module Fog
5
5
  class SES < Fog::Service
6
6
  extend Fog::AWS::CredentialFetcher::ServiceMethods
7
7
 
8
+ class InvalidParameterError < Fog::Errors::Error; end
9
+ class MessageRejected < Fog::Errors::Error; end
10
+
8
11
  requires :aws_access_key_id, :aws_secret_access_key
9
12
  recognizes :region, :host, :path, :port, :scheme, :persistent, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at
10
13
 
@@ -103,15 +106,28 @@ module Fog
103
106
  end
104
107
  body.chop! # remove trailing '&'
105
108
 
106
- response = @connection.request({
107
- :body => body,
108
- :expects => 200,
109
- :headers => headers,
110
- :idempotent => idempotent,
111
- :host => @host,
112
- :method => 'POST',
113
- :parser => parser
114
- })
109
+ begin
110
+ response = @connection.request({
111
+ :body => body,
112
+ :expects => 200,
113
+ :headers => headers,
114
+ :idempotent => idempotent,
115
+ :host => @host,
116
+ :method => 'POST',
117
+ :parser => parser
118
+ })
119
+ rescue Excon::Errors::HTTPStatusError => error
120
+ match = Fog::AWS::Errors.match_error(error)
121
+ raise if match.empty?
122
+ raise case match[:code]
123
+ when 'MessageRejected'
124
+ Fog::AWS::SES::MessageRejected.slurp(error, match[:message])
125
+ when 'InvalidParameterValue'
126
+ Fog::AWS::SES::InvalidParameterError.slurp(error, match[:message])
127
+ else
128
+ Fog::AWS::SES::Error.slurp(error, "#{match[:code]} => #{match[:message]}")
129
+ end
130
+ end
115
131
 
116
132
  response
117
133
  end
@@ -3,16 +3,18 @@ require 'fog/aws'
3
3
  module Fog
4
4
  module AWS
5
5
  class STS < Fog::Service
6
+ extend Fog::AWS::CredentialFetcher::ServiceMethods
6
7
 
7
8
  class EntityAlreadyExists < Fog::AWS::STS::Error; end
8
9
  class ValidationError < Fog::AWS::STS::Error; end
9
10
 
10
11
  requires :aws_access_key_id, :aws_secret_access_key
11
- recognizes :host, :path, :port, :scheme, :persistent
12
+ recognizes :host, :path, :port, :scheme, :persistent, :aws_session_token, :use_iam_profile, :aws_credentials_expire_at
12
13
 
13
14
  request_path 'fog/aws/requests/sts'
14
15
  request :get_federation_token
15
16
  request :get_session_token
17
+ request :assume_role
16
18
 
17
19
  class Mock
18
20
  def self.data
@@ -33,7 +35,8 @@ module Fog
33
35
  end
34
36
 
35
37
  def initialize(options={})
36
- @aws_access_key_id = options[:aws_access_key_id]
38
+ @use_iam_profile = options[:use_iam_profile]
39
+ setup_credentials(options)
37
40
  end
38
41
 
39
42
  def data
@@ -43,10 +46,14 @@ module Fog
43
46
  def reset_data
44
47
  self.class.data.delete(@aws_access_key_id)
45
48
  end
49
+
50
+ def setup_credentials(options)
51
+ @aws_access_key_id = options[:aws_access_key_id]
52
+ end
46
53
  end
47
54
 
48
55
  class Real
49
-
56
+ include Fog::AWS::CredentialFetcher::ConnectionMethods
50
57
  # Initialize connection to STS
51
58
  #
52
59
  # ==== Notes
@@ -67,10 +74,10 @@ module Fog
67
74
  def initialize(options={})
68
75
  require 'fog/core/parser'
69
76
 
70
- @aws_access_key_id = options[:aws_access_key_id]
71
- @aws_secret_access_key = options[:aws_secret_access_key]
77
+ @use_iam_profile = options[:use_iam_profile]
78
+ setup_credentials(options)
72
79
  @connection_options = options[:connection_options] || {}
73
- @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
80
+
74
81
  @host = options[:host] || 'sts.amazonaws.com'
75
82
  @path = options[:path] || '/'
76
83
  @persistent = options[:persistent] || false
@@ -85,6 +92,14 @@ module Fog
85
92
 
86
93
  private
87
94
 
95
+ def setup_credentials(options)
96
+ @aws_access_key_id = options[:aws_access_key_id]
97
+ @aws_secret_access_key = options[:aws_secret_access_key]
98
+ @aws_session_token = options[:aws_session_token]
99
+ @aws_credentials_expire_at = options[:aws_credentials_expire_at]
100
+ @hmac = Fog::HMAC.new('sha256', @aws_secret_access_key)
101
+ end
102
+
88
103
  def request(params)
89
104
  idempotent = params.delete(:idempotent)
90
105
  parser = params.delete(:parser)
@@ -93,6 +108,7 @@ module Fog
93
108
  params,
94
109
  {
95
110
  :aws_access_key_id => @aws_access_key_id,
111
+ :aws_session_token => @aws_session_token,
96
112
  :hmac => @hmac,
97
113
  :host => @host,
98
114
  :path => @path,
@@ -15,6 +15,8 @@ class OpenStack < Fog::Bin
15
15
  Fog::Storage::OpenStack
16
16
  when :volume
17
17
  Fog::Volume::OpenStack
18
+ when :metering
19
+ Fog::Metering::OpenStack
18
20
  else
19
21
  raise ArgumentError, "Unrecognized service: #{key}"
20
22
  end
@@ -41,6 +43,9 @@ class OpenStack < Fog::Bin
41
43
  when :volume
42
44
  Fog::Logger.warning("OpenStack[:volume] is not recommended, use Volume[:openstack] for portability")
43
45
  Fog::Volume.new(:provider => 'OpenStack')
46
+ when :metering
47
+ Fog::Logger.warning("OpenStack[:metering] is not recommended, use Metering[:openstack] for portability")
48
+ Fog::Metering.new(:provider => 'OpenStack')
44
49
  else
45
50
  raise ArgumentError, "Unrecognized service: #{key.inspect}"
46
51
  end
@@ -21,6 +21,8 @@ class Rackspace < Fog::Bin
21
21
  Fog::Rackspace::Identity
22
22
  when :databases
23
23
  Fog::Rackspace::Databases
24
+ when :monitoring
25
+ Fog::Rackspace::Monitoring
24
26
  else
25
27
  raise ArgumentError, "Unrecognized service: #{key}"
26
28
  end
@@ -52,6 +54,8 @@ class Rackspace < Fog::Bin
52
54
  Fog::Rackspace::Databases.new
53
55
  when :block_storage
54
56
  Fog::Rackspace::BlockStorage.new
57
+ when :monitoring
58
+ Fog::Rackspace::Monitoring.new
55
59
  else
56
60
  raise ArgumentError, "Unrecognized service: #{key.inspect}"
57
61
  end
@@ -25,14 +25,22 @@ module Fog
25
25
  :email => email
26
26
  }.delete_if { |k, v| v.nil? || v == "" }
27
27
 
28
- data = connection.create_collaboration(options)
28
+ data = service.create_collaboration(options)
29
+ merge_attributes(data)
30
+ true
31
+ end
32
+
33
+ def resend
34
+ requires :identity
35
+ data = service.resend_collaboration(identity)
29
36
  merge_attributes(data)
30
37
  true
31
38
  end
32
39
 
33
40
  def destroy
34
41
  requires :identity
35
- connection.destroy_collaboration(identity)
42
+ data = service.destroy_collaboration(identity)
43
+ merge_attributes(data)
36
44
  true
37
45
  end
38
46
 
@@ -8,13 +8,37 @@ module Fog
8
8
  model Fog::Compute::Brightbox::Collaboration
9
9
 
10
10
  def all
11
- data = connection.list_collaborations
11
+ data = service.list_collaborations
12
12
  load(data)
13
13
  end
14
14
 
15
+ def get(identifier)
16
+ return nil if identifier.nil? || identifier == ""
17
+ data = service.get_collaboration(identifier)
18
+ new(data)
19
+ rescue Excon::Errors::NotFound
20
+ nil
21
+ end
22
+
23
+ # Invites a user (via an email) to collaborate on the currently scoped
24
+ # account at the +role+ level.
25
+ #
26
+ # @param [String] email The email address to use for the invitation
27
+ # @param [String] role The role being granted. Only (+admin+ is
28
+ # currently supported
29
+ # @return [Fog::Compute::Brightbox::Collaboration]
30
+ #
31
+ def invite(email, role)
32
+ return nil if email.nil? || email == ""
33
+ return nil if role.nil? || role == ""
34
+ options = {:email => email, :role => role}
35
+ data = service.create_collaboration(options)
36
+ new(data)
37
+ end
38
+
15
39
  def destroy
16
40
  requires :identity
17
- connection.destroy_collaboration(identity)
41
+ service.destroy_collaboration(identity)
18
42
  true
19
43
  end
20
44
  end
@@ -17,9 +17,24 @@ module Fog
17
17
  account['id'] || account[:id]
18
18
  end
19
19
 
20
+ def accept
21
+ requires :identity
22
+ data = service.accept_user_collaboration(identity)
23
+ merge_attributes(data)
24
+ true
25
+ end
26
+
27
+ def reject
28
+ requires :identity
29
+ data = service.reject_user_collaboration(identity)
30
+ merge_attributes(data)
31
+ true
32
+ end
33
+
20
34
  def destroy
21
35
  requires :identity
22
- connection.destroy_user_collaboration(identity)
36
+ data = service.destroy_user_collaboration(identity)
37
+ merge_attributes(data)
23
38
  true
24
39
  end
25
40
 
@@ -8,13 +8,21 @@ module Fog
8
8
  model Fog::Compute::Brightbox::UserCollaboration
9
9
 
10
10
  def all
11
- data = connection.list_user_collaborations
11
+ data = service.list_user_collaborations
12
12
  load(data)
13
13
  end
14
14
 
15
+ def get(identifier)
16
+ return nil if identifier.nil? || identifier == ""
17
+ data = service.get_user_collaboration(identifier)
18
+ new(data)
19
+ rescue Excon::Errors::NotFound
20
+ nil
21
+ end
22
+
15
23
  def destroy
16
24
  requires :identity
17
- connection.destroy_user_collaboration(identity)
25
+ service.destroy_user_collaboration(identity)
18
26
  true
19
27
  end
20
28
  end
@@ -23,7 +23,7 @@ module Fog
23
23
 
24
24
  def get(server_id)
25
25
  servers = service.list_virtual_machines('id' => server_id)["listvirtualmachinesresponse"]["virtualmachine"]
26
- unless servers.empty? || servers.nil?
26
+ unless servers.nil? || servers.empty?
27
27
  new(servers.first)
28
28
  end
29
29
  rescue Fog::Compute::Cloudstack::BadRequest
@@ -4,7 +4,7 @@ module Fog
4
4
  module Compute
5
5
  class Server < Fog::Model
6
6
 
7
- attr_writer :username, :private_key, :private_key_path, :public_key, :public_key_path, :ssh_port
7
+ attr_writer :username, :private_key, :private_key_path, :public_key, :public_key_path, :ssh_port, :ssh_options
8
8
 
9
9
  def username
10
10
  @username ||= 'root'
@@ -32,13 +32,21 @@ module Fog
32
32
  @ssh_port ||= 22
33
33
  end
34
34
 
35
+ def ssh_options
36
+ @ssh_options ||= {}
37
+ ssh_options = @ssh_options.merge({:port => ssh_port})
38
+ if private_key
39
+ ssh_options[:key_data] = [private_key]
40
+ ssh_options[:auth_methods] = ["publickey"]
41
+ end
42
+ ssh_options
43
+ end
44
+
35
45
  def scp(local_path, remote_path, upload_options = {})
36
46
  require 'net/scp'
37
47
  requires :public_ip_address, :username
38
48
 
39
- scp_options = {:port => ssh_port}
40
- scp_options[:key_data] = [private_key] if private_key
41
- Fog::SCP.new(public_ip_address, username, scp_options).upload(local_path, remote_path, upload_options)
49
+ Fog::SCP.new(public_ip_address, username, ssh_options).upload(local_path, remote_path, upload_options)
42
50
  end
43
51
 
44
52
  alias_method :scp_upload, :scp
@@ -47,23 +55,21 @@ module Fog
47
55
  require 'net/scp'
48
56
  requires :public_ip_address, :username
49
57
 
50
- scp_options = {:port => ssh_port}
51
- scp_options[:key_data] = [private_key] if private_key
52
- Fog::SCP.new(public_ip_address, username, scp_options).download(remote_path, local_path, download_options)
58
+ Fog::SCP.new(public_ip_address, username, ssh_options).download(remote_path, local_path, download_options)
53
59
  end
54
60
 
55
61
  def ssh(commands, options={}, &blk)
56
62
  require 'net/ssh'
57
63
  requires :public_ip_address, :username
58
64
 
59
- options[:key_data] = [private_key] if private_key
60
- options[:port] ||= ssh_port
65
+ options = ssh_options.merge(options)
66
+
61
67
  Fog::SSH.new(public_ip_address, username, options).run(commands, &blk)
62
68
  end
63
69
 
64
70
  def sshable?(options={})
65
71
  ready? && !public_ip_address.nil? && !!Timeout::timeout(8) { ssh('pwd', options) }
66
- rescue SystemCallError, Net::SSH::AuthenticationFailed, Timeout::Error
72
+ rescue SystemCallError, Net::SSH::AuthenticationFailed, Net::SSH::Disconnect, Timeout::Error
67
73
  false
68
74
  end
69
75
 
@@ -8,6 +8,7 @@ require 'formatador'
8
8
  require 'openssl'
9
9
  require 'time'
10
10
  require 'timeout'
11
+ require 'ipaddr'
11
12
 
12
13
  # internal core dependencies
13
14
  require "fog/version"
@@ -142,4 +142,22 @@ module Fog
142
142
  end
143
143
 
144
144
  end
145
+
146
+ # Base class for collection classes whose 'all' method returns only a single page of results and passes the
147
+ # 'Marker' option along as self.filters[:marker]
148
+ class PagedCollection < Collection
149
+
150
+ def each(filters=filters)
151
+ if block_given?
152
+ begin
153
+ page = self.all(filters)
154
+ # We need to explicitly use the base 'each' method here on the page, otherwise we get infinite recursion
155
+ base_each = Fog::Collection.instance_method(:each)
156
+ base_each.bind(page).call { |item| yield item }
157
+ end while self.filters[:marker]
158
+ end
159
+ self
160
+ end
161
+
162
+ end
145
163
  end
@@ -34,6 +34,22 @@ module Fog
34
34
  raise Fog::Errors::MockNotImplemented.new("Contributions welcome!")
35
35
  end
36
36
 
37
+ def self.random_ip(opts = {:version => :v4})
38
+ version = opts[:version]
39
+ if version == :v6
40
+ bit_length = 128
41
+ family = Socket::AF_INET6
42
+ elsif version == :v4
43
+ bit_length = 32
44
+ family = Socket::AF_INET
45
+ else
46
+ raise ArgumentError, "Unknown IP version: #{version}"
47
+ end
48
+
49
+ seed = 1 + rand((2**bit_length)-1)
50
+ IPAddr.new(seed, family).to_s
51
+ end
52
+
37
53
  def self.random_base64(length)
38
54
  random_selection(
39
55
  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",