aws-sdk-euca 1.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. data/.yardopts +5 -0
  2. data/LICENSE.txt +12 -0
  3. data/README.rdoc +189 -0
  4. data/ca-bundle.crt +3895 -0
  5. data/lib/aws-sdk-euca.rb +79 -0
  6. data/lib/aws-sdk.rb +79 -0
  7. data/lib/aws.rb +14 -0
  8. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +825 -0
  9. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +322 -0
  10. data/lib/aws/api_config/CloudFront-2012-05-05.yml +2102 -0
  11. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  12. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  13. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  14. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1160 -0
  15. data/lib/aws/api_config/EC2-2013-02-01.yml +4368 -0
  16. data/lib/aws/api_config/ELB-2012-06-01.yml +597 -0
  17. data/lib/aws/api_config/EMR-2009-03-31.yml +370 -0
  18. data/lib/aws/api_config/ElastiCache-2012-03-09.yml +777 -0
  19. data/lib/aws/api_config/ElastiCache-2012-11-15.yml +979 -0
  20. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +823 -0
  21. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +1036 -0
  22. data/lib/aws/api_config/Glacier-2012-06-01.yml +618 -0
  23. data/lib/aws/api_config/IAM-2010-05-08.yml +1222 -0
  24. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  25. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +1463 -0
  26. data/lib/aws/api_config/RDS-2012-09-17.yml +1861 -0
  27. data/lib/aws/api_config/RDS-2013-02-12.yml +2377 -0
  28. data/lib/aws/api_config/Redshift-2012-12-01.yml +1149 -0
  29. data/lib/aws/api_config/Route53-2012-02-29.yml +380 -0
  30. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  31. data/lib/aws/api_config/SNS-2010-03-31.yml +249 -0
  32. data/lib/aws/api_config/SQS-2012-11-05.yml +317 -0
  33. data/lib/aws/api_config/STS-2011-06-15.yml +81 -0
  34. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  35. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  36. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2358 -0
  37. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  38. data/lib/aws/auto_scaling.rb +164 -0
  39. data/lib/aws/auto_scaling/activity.rb +102 -0
  40. data/lib/aws/auto_scaling/activity_collection.rb +82 -0
  41. data/lib/aws/auto_scaling/client.rb +521 -0
  42. data/lib/aws/auto_scaling/config.rb +18 -0
  43. data/lib/aws/auto_scaling/errors.rb +22 -0
  44. data/lib/aws/auto_scaling/group.rb +420 -0
  45. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  46. data/lib/aws/auto_scaling/group_options.rb +146 -0
  47. data/lib/aws/auto_scaling/instance.rb +192 -0
  48. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  49. data/lib/aws/auto_scaling/launch_configuration.rb +158 -0
  50. data/lib/aws/auto_scaling/launch_configuration_collection.rb +154 -0
  51. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  52. data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
  53. data/lib/aws/auto_scaling/request.rb +29 -0
  54. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  55. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  56. data/lib/aws/auto_scaling/scaling_policy_options.rb +64 -0
  57. data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
  58. data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
  59. data/lib/aws/auto_scaling/tag.rb +59 -0
  60. data/lib/aws/auto_scaling/tag_collection.rb +112 -0
  61. data/lib/aws/cloud_formation.rb +272 -0
  62. data/lib/aws/cloud_formation/client.rb +369 -0
  63. data/lib/aws/cloud_formation/config.rb +18 -0
  64. data/lib/aws/cloud_formation/errors.rb +22 -0
  65. data/lib/aws/cloud_formation/request.rb +29 -0
  66. data/lib/aws/cloud_formation/stack.rb +255 -0
  67. data/lib/aws/cloud_formation/stack_collection.rb +209 -0
  68. data/lib/aws/cloud_formation/stack_event.rb +75 -0
  69. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  70. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  71. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  72. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  73. data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
  74. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  75. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  76. data/lib/aws/cloud_front.rb +73 -0
  77. data/lib/aws/cloud_front/client.rb +1307 -0
  78. data/lib/aws/cloud_front/config.rb +18 -0
  79. data/lib/aws/cloud_front/errors.rb +22 -0
  80. data/lib/aws/cloud_front/request.rb +44 -0
  81. data/lib/aws/cloud_search.rb +74 -0
  82. data/lib/aws/cloud_search/client.rb +558 -0
  83. data/lib/aws/cloud_search/config.rb +18 -0
  84. data/lib/aws/cloud_search/errors.rb +22 -0
  85. data/lib/aws/cloud_search/request.rb +23 -0
  86. data/lib/aws/cloud_watch.rb +119 -0
  87. data/lib/aws/cloud_watch/alarm.rb +272 -0
  88. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  89. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  90. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  91. data/lib/aws/cloud_watch/client.rb +247 -0
  92. data/lib/aws/cloud_watch/config.rb +18 -0
  93. data/lib/aws/cloud_watch/errors.rb +22 -0
  94. data/lib/aws/cloud_watch/metric.rb +135 -0
  95. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  96. data/lib/aws/cloud_watch/metric_collection.rb +131 -0
  97. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  98. data/lib/aws/cloud_watch/request.rb +23 -0
  99. data/lib/aws/core.rb +587 -0
  100. data/lib/aws/core/async_handle.rb +90 -0
  101. data/lib/aws/core/autoloader.rb +64 -0
  102. data/lib/aws/core/cacheable.rb +78 -0
  103. data/lib/aws/core/client.rb +691 -0
  104. data/lib/aws/core/collection.rb +267 -0
  105. data/lib/aws/core/collection/simple.rb +82 -0
  106. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  107. data/lib/aws/core/collection/with_next_token.rb +97 -0
  108. data/lib/aws/core/configuration.rb +546 -0
  109. data/lib/aws/core/credential_providers.rb +461 -0
  110. data/lib/aws/core/data.rb +247 -0
  111. data/lib/aws/core/http/curb_handler.rb +155 -0
  112. data/lib/aws/core/http/handler.rb +89 -0
  113. data/lib/aws/core/http/net_http_handler.rb +128 -0
  114. data/lib/aws/core/http/request.rb +263 -0
  115. data/lib/aws/core/http/response.rb +81 -0
  116. data/lib/aws/core/indifferent_hash.rb +88 -0
  117. data/lib/aws/core/inflection.rb +56 -0
  118. data/lib/aws/core/json_client.rb +47 -0
  119. data/lib/aws/core/json_parser.rb +76 -0
  120. data/lib/aws/core/json_request_builder.rb +35 -0
  121. data/lib/aws/core/json_response_parser.rb +79 -0
  122. data/lib/aws/core/lazy_error_classes.rb +90 -0
  123. data/lib/aws/core/log_formatter.rb +462 -0
  124. data/lib/aws/core/managed_file.rb +32 -0
  125. data/lib/aws/core/meta_utils.rb +45 -0
  126. data/lib/aws/core/model.rb +57 -0
  127. data/lib/aws/core/naming.rb +30 -0
  128. data/lib/aws/core/option_grammar.rb +735 -0
  129. data/lib/aws/core/options/json_serializer.rb +82 -0
  130. data/lib/aws/core/options/validator.rb +155 -0
  131. data/lib/aws/core/options/xml_serializer.rb +118 -0
  132. data/lib/aws/core/page_result.rb +75 -0
  133. data/lib/aws/core/policy.rb +916 -0
  134. data/lib/aws/core/query_client.rb +41 -0
  135. data/lib/aws/core/query_error_parser.rb +24 -0
  136. data/lib/aws/core/query_request_builder.rb +47 -0
  137. data/lib/aws/core/query_response_parser.rb +35 -0
  138. data/lib/aws/core/resource.rb +413 -0
  139. data/lib/aws/core/resource_cache.rb +40 -0
  140. data/lib/aws/core/response.rb +208 -0
  141. data/lib/aws/core/response_cache.rb +50 -0
  142. data/lib/aws/core/rest_error_parser.rb +24 -0
  143. data/lib/aws/core/rest_json_client.rb +40 -0
  144. data/lib/aws/core/rest_request_builder.rb +146 -0
  145. data/lib/aws/core/rest_response_parser.rb +66 -0
  146. data/lib/aws/core/rest_xml_client.rb +47 -0
  147. data/lib/aws/core/service_interface.rb +61 -0
  148. data/lib/aws/core/signature/version_2.rb +56 -0
  149. data/lib/aws/core/signature/version_3.rb +77 -0
  150. data/lib/aws/core/signature/version_3_https.rb +54 -0
  151. data/lib/aws/core/signature/version_4.rb +135 -0
  152. data/lib/aws/core/signer.rb +46 -0
  153. data/lib/aws/core/uri_escape.rb +44 -0
  154. data/lib/aws/core/xml/frame.rb +244 -0
  155. data/lib/aws/core/xml/frame_stack.rb +85 -0
  156. data/lib/aws/core/xml/grammar.rb +307 -0
  157. data/lib/aws/core/xml/parser.rb +70 -0
  158. data/lib/aws/core/xml/root_frame.rb +65 -0
  159. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  160. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +55 -0
  161. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  162. data/lib/aws/core/xml/sax_handlers/rexml.rb +43 -0
  163. data/lib/aws/core/xml/stub.rb +123 -0
  164. data/lib/aws/data_pipeline.rb +73 -0
  165. data/lib/aws/data_pipeline/client.rb +339 -0
  166. data/lib/aws/data_pipeline/config.rb +18 -0
  167. data/lib/aws/data_pipeline/errors.rb +20 -0
  168. data/lib/aws/data_pipeline/request.rb +26 -0
  169. data/lib/aws/dynamo_db.rb +206 -0
  170. data/lib/aws/dynamo_db/attribute_collection.rb +461 -0
  171. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  172. data/lib/aws/dynamo_db/batch_write.rb +252 -0
  173. data/lib/aws/dynamo_db/binary.rb +35 -0
  174. data/lib/aws/dynamo_db/client.rb +904 -0
  175. data/lib/aws/dynamo_db/config.rb +24 -0
  176. data/lib/aws/dynamo_db/errors.rb +20 -0
  177. data/lib/aws/dynamo_db/expectations.rb +40 -0
  178. data/lib/aws/dynamo_db/item.rb +133 -0
  179. data/lib/aws/dynamo_db/item_collection.rb +852 -0
  180. data/lib/aws/dynamo_db/item_data.rb +31 -0
  181. data/lib/aws/dynamo_db/keys.rb +41 -0
  182. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  183. data/lib/aws/dynamo_db/request.rb +26 -0
  184. data/lib/aws/dynamo_db/resource.rb +33 -0
  185. data/lib/aws/dynamo_db/table.rb +491 -0
  186. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  187. data/lib/aws/dynamo_db/types.rb +111 -0
  188. data/lib/aws/ec2.rb +440 -0
  189. data/lib/aws/ec2/attachment.rb +140 -0
  190. data/lib/aws/ec2/attachment_collection.rb +54 -0
  191. data/lib/aws/ec2/availability_zone.rb +86 -0
  192. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  193. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  194. data/lib/aws/ec2/client.rb +3621 -0
  195. data/lib/aws/ec2/collection.rb +36 -0
  196. data/lib/aws/ec2/config.rb +18 -0
  197. data/lib/aws/ec2/config_transform.rb +63 -0
  198. data/lib/aws/ec2/customer_gateway.rb +90 -0
  199. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  200. data/lib/aws/ec2/dhcp_options.rb +106 -0
  201. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  202. data/lib/aws/ec2/elastic_ip.rb +208 -0
  203. data/lib/aws/ec2/elastic_ip_collection.rb +97 -0
  204. data/lib/aws/ec2/errors.rb +32 -0
  205. data/lib/aws/ec2/export_task.rb +120 -0
  206. data/lib/aws/ec2/export_task_collection.rb +67 -0
  207. data/lib/aws/ec2/filtered_collection.rb +89 -0
  208. data/lib/aws/ec2/has_permissions.rb +44 -0
  209. data/lib/aws/ec2/image.rb +264 -0
  210. data/lib/aws/ec2/image_collection.rb +228 -0
  211. data/lib/aws/ec2/instance.rb +796 -0
  212. data/lib/aws/ec2/instance_collection.rb +372 -0
  213. data/lib/aws/ec2/internet_gateway.rb +122 -0
  214. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  215. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  216. data/lib/aws/ec2/key_pair.rb +82 -0
  217. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  218. data/lib/aws/ec2/network_acl.rb +256 -0
  219. data/lib/aws/ec2/network_acl/association.rb +56 -0
  220. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  221. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  222. data/lib/aws/ec2/network_interface.rb +228 -0
  223. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  224. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  225. data/lib/aws/ec2/permission_collection.rb +174 -0
  226. data/lib/aws/ec2/region.rb +106 -0
  227. data/lib/aws/ec2/region_collection.rb +51 -0
  228. data/lib/aws/ec2/request.rb +21 -0
  229. data/lib/aws/ec2/reserved_instances.rb +56 -0
  230. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  231. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  232. data/lib/aws/ec2/reserved_instances_offering_collection.rb +39 -0
  233. data/lib/aws/ec2/resource.rb +161 -0
  234. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  235. data/lib/aws/ec2/route_table.rb +205 -0
  236. data/lib/aws/ec2/route_table/association.rb +119 -0
  237. data/lib/aws/ec2/route_table/route.rb +119 -0
  238. data/lib/aws/ec2/route_table_collection.rb +72 -0
  239. data/lib/aws/ec2/security_group.rb +484 -0
  240. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  241. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  242. data/lib/aws/ec2/security_group_collection.rb +135 -0
  243. data/lib/aws/ec2/snapshot.rb +143 -0
  244. data/lib/aws/ec2/snapshot_collection.rb +132 -0
  245. data/lib/aws/ec2/subnet.rb +161 -0
  246. data/lib/aws/ec2/subnet_collection.rb +115 -0
  247. data/lib/aws/ec2/tag.rb +81 -0
  248. data/lib/aws/ec2/tag_collection.rb +107 -0
  249. data/lib/aws/ec2/tagged_collection.rb +53 -0
  250. data/lib/aws/ec2/tagged_item.rb +85 -0
  251. data/lib/aws/ec2/volume.rb +174 -0
  252. data/lib/aws/ec2/volume_collection.rb +101 -0
  253. data/lib/aws/ec2/vpc.rb +166 -0
  254. data/lib/aws/ec2/vpc_collection.rb +70 -0
  255. data/lib/aws/ec2/vpn_connection.rb +99 -0
  256. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  257. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  258. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  259. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  260. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  261. data/lib/aws/elastic_beanstalk.rb +50 -0
  262. data/lib/aws/elastic_beanstalk/client.rb +867 -0
  263. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  264. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  265. data/lib/aws/elastic_beanstalk/request.rb +29 -0
  266. data/lib/aws/elastic_transcoder.rb +30 -0
  267. data/lib/aws/elastic_transcoder/client.rb +672 -0
  268. data/lib/aws/elastic_transcoder/config.rb +18 -0
  269. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  270. data/lib/aws/elastic_transcoder/request.rb +30 -0
  271. data/lib/aws/elasticache.rb +50 -0
  272. data/lib/aws/elasticache/client.rb +920 -0
  273. data/lib/aws/elasticache/config.rb +18 -0
  274. data/lib/aws/elasticache/errors.rb +22 -0
  275. data/lib/aws/elasticache/request.rb +23 -0
  276. data/lib/aws/elb.rb +67 -0
  277. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  278. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  279. data/lib/aws/elb/client.rb +500 -0
  280. data/lib/aws/elb/config.rb +18 -0
  281. data/lib/aws/elb/errors.rb +26 -0
  282. data/lib/aws/elb/instance_collection.rb +173 -0
  283. data/lib/aws/elb/listener.rb +190 -0
  284. data/lib/aws/elb/listener_collection.rb +113 -0
  285. data/lib/aws/elb/listener_opts.rb +45 -0
  286. data/lib/aws/elb/load_balancer.rb +281 -0
  287. data/lib/aws/elb/load_balancer_collection.rb +134 -0
  288. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  289. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  290. data/lib/aws/elb/request.rb +29 -0
  291. data/lib/aws/emr.rb +86 -0
  292. data/lib/aws/emr/client.rb +330 -0
  293. data/lib/aws/emr/config.rb +18 -0
  294. data/lib/aws/emr/errors.rb +22 -0
  295. data/lib/aws/emr/instance_group.rb +138 -0
  296. data/lib/aws/emr/instance_group_collection.rb +82 -0
  297. data/lib/aws/emr/job_flow.rb +306 -0
  298. data/lib/aws/emr/job_flow_collection.rb +185 -0
  299. data/lib/aws/emr/request.rb +23 -0
  300. data/lib/aws/errors.rb +162 -0
  301. data/lib/aws/glacier.rb +80 -0
  302. data/lib/aws/glacier/archive.rb +56 -0
  303. data/lib/aws/glacier/archive_collection.rb +146 -0
  304. data/lib/aws/glacier/client.rb +286 -0
  305. data/lib/aws/glacier/config.rb +19 -0
  306. data/lib/aws/glacier/errors.rb +22 -0
  307. data/lib/aws/glacier/request.rb +34 -0
  308. data/lib/aws/glacier/resource.rb +30 -0
  309. data/lib/aws/glacier/vault.rb +145 -0
  310. data/lib/aws/glacier/vault_collection.rb +75 -0
  311. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  312. data/lib/aws/iam.rb +420 -0
  313. data/lib/aws/iam/access_key.rb +180 -0
  314. data/lib/aws/iam/access_key_collection.rb +128 -0
  315. data/lib/aws/iam/account_alias_collection.rb +79 -0
  316. data/lib/aws/iam/client.rb +1092 -0
  317. data/lib/aws/iam/collection.rb +83 -0
  318. data/lib/aws/iam/config.rb +18 -0
  319. data/lib/aws/iam/errors.rb +22 -0
  320. data/lib/aws/iam/group.rb +111 -0
  321. data/lib/aws/iam/group_collection.rb +132 -0
  322. data/lib/aws/iam/group_policy_collection.rb +47 -0
  323. data/lib/aws/iam/group_user_collection.rb +84 -0
  324. data/lib/aws/iam/login_profile.rb +99 -0
  325. data/lib/aws/iam/mfa_device.rb +52 -0
  326. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  327. data/lib/aws/iam/policy.rb +46 -0
  328. data/lib/aws/iam/policy_collection.rb +188 -0
  329. data/lib/aws/iam/request.rb +29 -0
  330. data/lib/aws/iam/resource.rb +62 -0
  331. data/lib/aws/iam/server_certificate.rb +141 -0
  332. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  333. data/lib/aws/iam/signing_certificate.rb +169 -0
  334. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  335. data/lib/aws/iam/user.rb +205 -0
  336. data/lib/aws/iam/user_collection.rb +133 -0
  337. data/lib/aws/iam/user_group_collection.rb +98 -0
  338. data/lib/aws/iam/user_policy.rb +90 -0
  339. data/lib/aws/iam/user_policy_collection.rb +45 -0
  340. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  341. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  342. data/lib/aws/import_export.rb +73 -0
  343. data/lib/aws/import_export/client.rb +109 -0
  344. data/lib/aws/import_export/config.rb +19 -0
  345. data/lib/aws/import_export/errors.rb +22 -0
  346. data/lib/aws/import_export/request.rb +23 -0
  347. data/lib/aws/ops_works.rb +30 -0
  348. data/lib/aws/ops_works/client.rb +713 -0
  349. data/lib/aws/ops_works/config.rb +18 -0
  350. data/lib/aws/ops_works/errors.rb +20 -0
  351. data/lib/aws/ops_works/request.rb +27 -0
  352. data/lib/aws/rails.rb +195 -0
  353. data/lib/aws/rds.rb +71 -0
  354. data/lib/aws/rds/client.rb +2228 -0
  355. data/lib/aws/rds/config.rb +18 -0
  356. data/lib/aws/rds/db_instance.rb +205 -0
  357. data/lib/aws/rds/db_instance_collection.rb +75 -0
  358. data/lib/aws/rds/db_snapshot.rb +163 -0
  359. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  360. data/lib/aws/rds/errors.rb +22 -0
  361. data/lib/aws/rds/request.rb +23 -0
  362. data/lib/aws/record.rb +116 -0
  363. data/lib/aws/record/abstract_base.rb +701 -0
  364. data/lib/aws/record/attributes.rb +384 -0
  365. data/lib/aws/record/conversion.rb +38 -0
  366. data/lib/aws/record/dirty_tracking.rb +285 -0
  367. data/lib/aws/record/errors.rb +143 -0
  368. data/lib/aws/record/exceptions.rb +48 -0
  369. data/lib/aws/record/hash_model.rb +161 -0
  370. data/lib/aws/record/hash_model/attributes.rb +197 -0
  371. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  372. data/lib/aws/record/hash_model/scope.rb +108 -0
  373. data/lib/aws/record/model.rb +427 -0
  374. data/lib/aws/record/model/attributes.rb +379 -0
  375. data/lib/aws/record/model/finder_methods.rb +232 -0
  376. data/lib/aws/record/model/scope.rb +213 -0
  377. data/lib/aws/record/naming.rb +31 -0
  378. data/lib/aws/record/scope.rb +199 -0
  379. data/lib/aws/record/validations.rb +712 -0
  380. data/lib/aws/record/validator.rb +246 -0
  381. data/lib/aws/record/validators/acceptance.rb +51 -0
  382. data/lib/aws/record/validators/block.rb +38 -0
  383. data/lib/aws/record/validators/confirmation.rb +43 -0
  384. data/lib/aws/record/validators/count.rb +108 -0
  385. data/lib/aws/record/validators/exclusion.rb +43 -0
  386. data/lib/aws/record/validators/format.rb +57 -0
  387. data/lib/aws/record/validators/inclusion.rb +56 -0
  388. data/lib/aws/record/validators/length.rb +107 -0
  389. data/lib/aws/record/validators/method.rb +33 -0
  390. data/lib/aws/record/validators/numericality.rb +138 -0
  391. data/lib/aws/record/validators/presence.rb +45 -0
  392. data/lib/aws/redshift.rb +52 -0
  393. data/lib/aws/redshift/client.rb +1291 -0
  394. data/lib/aws/redshift/config.rb +18 -0
  395. data/lib/aws/redshift/errors.rb +22 -0
  396. data/lib/aws/redshift/request.rb +29 -0
  397. data/lib/aws/route_53.rb +87 -0
  398. data/lib/aws/route_53/change_batch.rb +159 -0
  399. data/lib/aws/route_53/change_info.rb +72 -0
  400. data/lib/aws/route_53/client.rb +387 -0
  401. data/lib/aws/route_53/config.rb +18 -0
  402. data/lib/aws/route_53/errors.rb +22 -0
  403. data/lib/aws/route_53/hosted_zone.rb +111 -0
  404. data/lib/aws/route_53/hosted_zone_collection.rb +100 -0
  405. data/lib/aws/route_53/request.rb +23 -0
  406. data/lib/aws/route_53/resource_record_set.rb +237 -0
  407. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  408. data/lib/aws/s3.rb +155 -0
  409. data/lib/aws/s3/access_control_list.rb +257 -0
  410. data/lib/aws/s3/acl_object.rb +264 -0
  411. data/lib/aws/s3/acl_options.rb +204 -0
  412. data/lib/aws/s3/bucket.rb +742 -0
  413. data/lib/aws/s3/bucket_collection.rb +160 -0
  414. data/lib/aws/s3/bucket_lifecycle_configuration.rb +458 -0
  415. data/lib/aws/s3/bucket_tag_collection.rb +109 -0
  416. data/lib/aws/s3/bucket_version_collection.rb +77 -0
  417. data/lib/aws/s3/cipher_io.rb +119 -0
  418. data/lib/aws/s3/client.rb +1700 -0
  419. data/lib/aws/s3/client/xml.rb +231 -0
  420. data/lib/aws/s3/config.rb +36 -0
  421. data/lib/aws/s3/cors_rule.rb +106 -0
  422. data/lib/aws/s3/cors_rule_collection.rb +192 -0
  423. data/lib/aws/s3/data_options.rb +185 -0
  424. data/lib/aws/s3/encryption_utils.rb +139 -0
  425. data/lib/aws/s3/errors.rb +94 -0
  426. data/lib/aws/s3/multipart_upload.rb +320 -0
  427. data/lib/aws/s3/multipart_upload_collection.rb +68 -0
  428. data/lib/aws/s3/object_collection.rb +355 -0
  429. data/lib/aws/s3/object_metadata.rb +96 -0
  430. data/lib/aws/s3/object_upload_collection.rb +77 -0
  431. data/lib/aws/s3/object_version.rb +148 -0
  432. data/lib/aws/s3/object_version_collection.rb +89 -0
  433. data/lib/aws/s3/paginated_collection.rb +75 -0
  434. data/lib/aws/s3/policy.rb +74 -0
  435. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  436. data/lib/aws/s3/prefixed_collection.rb +81 -0
  437. data/lib/aws/s3/presigned_post.rb +555 -0
  438. data/lib/aws/s3/request.rb +201 -0
  439. data/lib/aws/s3/s3_object.rb +1690 -0
  440. data/lib/aws/s3/tree.rb +118 -0
  441. data/lib/aws/s3/tree/branch_node.rb +68 -0
  442. data/lib/aws/s3/tree/child_collection.rb +104 -0
  443. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  444. data/lib/aws/s3/tree/node.rb +22 -0
  445. data/lib/aws/s3/tree/parent.rb +87 -0
  446. data/lib/aws/s3/uploaded_part.rb +80 -0
  447. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  448. data/lib/aws/s3/website_configuration.rb +102 -0
  449. data/lib/aws/simple_db.rb +219 -0
  450. data/lib/aws/simple_db/attribute.rb +154 -0
  451. data/lib/aws/simple_db/attribute_collection.rb +231 -0
  452. data/lib/aws/simple_db/client.rb +287 -0
  453. data/lib/aws/simple_db/config.rb +20 -0
  454. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  455. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  456. data/lib/aws/simple_db/domain.rb +121 -0
  457. data/lib/aws/simple_db/domain_collection.rb +86 -0
  458. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  459. data/lib/aws/simple_db/errors.rb +55 -0
  460. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  461. data/lib/aws/simple_db/item.rb +93 -0
  462. data/lib/aws/simple_db/item_collection.rb +649 -0
  463. data/lib/aws/simple_db/item_data.rb +73 -0
  464. data/lib/aws/simple_db/put_attributes.rb +60 -0
  465. data/lib/aws/simple_db/request.rb +23 -0
  466. data/lib/aws/simple_email_service.rb +428 -0
  467. data/lib/aws/simple_email_service/client.rb +276 -0
  468. data/lib/aws/simple_email_service/config.rb +19 -0
  469. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  470. data/lib/aws/simple_email_service/errors.rb +22 -0
  471. data/lib/aws/simple_email_service/identity.rb +209 -0
  472. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  473. data/lib/aws/simple_email_service/quotas.rb +64 -0
  474. data/lib/aws/simple_email_service/request.rb +27 -0
  475. data/lib/aws/simple_workflow.rb +228 -0
  476. data/lib/aws/simple_workflow/activity_task.rb +173 -0
  477. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  478. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  479. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  480. data/lib/aws/simple_workflow/client.rb +1204 -0
  481. data/lib/aws/simple_workflow/config.rb +18 -0
  482. data/lib/aws/simple_workflow/count.rb +49 -0
  483. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  484. data/lib/aws/simple_workflow/decision_task_collection.rb +225 -0
  485. data/lib/aws/simple_workflow/domain.rb +122 -0
  486. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  487. data/lib/aws/simple_workflow/errors.rb +20 -0
  488. data/lib/aws/simple_workflow/history_event.rb +276 -0
  489. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  490. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  491. data/lib/aws/simple_workflow/request.rb +33 -0
  492. data/lib/aws/simple_workflow/resource.rb +94 -0
  493. data/lib/aws/simple_workflow/type.rb +89 -0
  494. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  495. data/lib/aws/simple_workflow/workflow_execution.rb +386 -0
  496. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  497. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  498. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  499. data/lib/aws/sns.rb +76 -0
  500. data/lib/aws/sns/client.rb +266 -0
  501. data/lib/aws/sns/config.rb +18 -0
  502. data/lib/aws/sns/errors.rb +22 -0
  503. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  504. data/lib/aws/sns/policy.rb +47 -0
  505. data/lib/aws/sns/request.rb +23 -0
  506. data/lib/aws/sns/subscription.rb +144 -0
  507. data/lib/aws/sns/subscription_collection.rb +78 -0
  508. data/lib/aws/sns/topic.rb +403 -0
  509. data/lib/aws/sns/topic_collection.rb +62 -0
  510. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  511. data/lib/aws/sqs.rb +81 -0
  512. data/lib/aws/sqs/client.rb +258 -0
  513. data/lib/aws/sqs/config.rb +18 -0
  514. data/lib/aws/sqs/errors.rb +101 -0
  515. data/lib/aws/sqs/policy.rb +48 -0
  516. data/lib/aws/sqs/queue.rb +764 -0
  517. data/lib/aws/sqs/queue_collection.rb +174 -0
  518. data/lib/aws/sqs/received_message.rb +181 -0
  519. data/lib/aws/sqs/received_sns_message.rb +116 -0
  520. data/lib/aws/sqs/request.rb +67 -0
  521. data/lib/aws/storage_gateway.rb +73 -0
  522. data/lib/aws/storage_gateway/client.rb +472 -0
  523. data/lib/aws/storage_gateway/config.rb +18 -0
  524. data/lib/aws/storage_gateway/errors.rb +22 -0
  525. data/lib/aws/storage_gateway/request.rb +28 -0
  526. data/lib/aws/sts.rb +163 -0
  527. data/lib/aws/sts/client.rb +157 -0
  528. data/lib/aws/sts/config.rb +18 -0
  529. data/lib/aws/sts/errors.rb +22 -0
  530. data/lib/aws/sts/federated_session.rb +56 -0
  531. data/lib/aws/sts/policy.rb +30 -0
  532. data/lib/aws/sts/request.rb +29 -0
  533. data/lib/aws/sts/session.rb +48 -0
  534. data/lib/aws/version.rb +18 -0
  535. data/lib/net/http/connection_pool.rb +226 -0
  536. data/lib/net/http/connection_pool/connection.rb +189 -0
  537. data/lib/net/http/connection_pool/session.rb +126 -0
  538. data/rails/init.rb +15 -0
  539. metadata +632 -0
@@ -0,0 +1,90 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ module Core
16
+
17
+ # Mixin that provides a generic callback facility for asynchronous
18
+ # tasks that can either succeed or fail.
19
+ module AsyncHandle
20
+
21
+ # Called to signal success and fire off the success and complete callbacks.
22
+ def signal_success
23
+ __send_signal(:success)
24
+ end
25
+
26
+ # Called to signal failure and fire off the failure and complete callbacks.
27
+ def signal_failure
28
+ __send_signal(:failure)
29
+ end
30
+
31
+ # Registers a callback to be called on successful completion of
32
+ # the task.
33
+ #
34
+ # handle.on_success { puts "It worked!" }
35
+ #
36
+ # If this is called when the task has already completed
37
+ # successfully, it will call the callback immediately.
38
+ def on_success(&block)
39
+ if @_async_status == :success
40
+ block.call
41
+ else
42
+ (@_async_callbacks ||= []) << { :success => block }
43
+ end
44
+ end
45
+
46
+ # Registers a callback to be called when the task fails.
47
+ #
48
+ # handle.on_failure { puts "It didn't work!" }
49
+ #
50
+ # If this is called when the task has already failed, it will
51
+ # call the callback immediately.
52
+ def on_failure(&block)
53
+ if @_async_status == :failure
54
+ block.call
55
+ else
56
+ (@_async_callbacks ||= []) << { :failure => block }
57
+ end
58
+ end
59
+
60
+ # Registers a callback to be called when the task is complete,
61
+ # regardless of its status. Yields the status to the block.
62
+ #
63
+ # handle.on_complete do |status|
64
+ # puts "It #{status == :success ? 'did' : 'did not'} work!"
65
+ # end
66
+ #
67
+ # If this is called when the task has already completed, it will
68
+ # call the callback immediately.
69
+ def on_complete(&block)
70
+ if !@_async_status.nil?
71
+ block.call(@_async_status)
72
+ else
73
+ (@_async_callbacks ||= []) << {
74
+ :failure => lambda { block.call(:failure) },
75
+ :success => lambda { block.call(:success) }
76
+ }
77
+ end
78
+ end
79
+
80
+ private
81
+ def __send_signal(kind)
82
+ @_async_status = kind
83
+ @_async_callbacks.map do |cb|
84
+ cb[kind]
85
+ end.compact.each {|block| block.call } if @_async_callbacks
86
+ end
87
+
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,64 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'set'
15
+
16
+ module AWS
17
+
18
+ @@eager = false
19
+ @@autoloads = {}
20
+
21
+ def self.register_autoloads klass, prefix = nil, &block
22
+ autoloader = Core::Autoloader.new(klass, prefix)
23
+ autoloader.instance_eval(&block)
24
+ autoloader.autoloads.each_pair do |const_name, file_path|
25
+ require(file_path) if @@eager
26
+ @@autoloads["#{klass}::#{const_name}"] = file_path
27
+ end
28
+ end
29
+
30
+ def self.eager_autoload!
31
+ unless @@eager
32
+ @@eager = true
33
+ @@autoloads.values.uniq.each {|file_path| require(file_path) }
34
+ end
35
+ end
36
+
37
+ def self.autoloads
38
+ @@autoloads
39
+ end
40
+
41
+ module Core
42
+
43
+ # @private
44
+ class Autoloader
45
+
46
+ def initialize klass, prefix = nil
47
+ @klass = klass
48
+ @prefix = prefix || klass.name.gsub(/::/, '/').downcase
49
+ @autoloads = {}
50
+ end
51
+
52
+ attr_reader :autoloads
53
+
54
+ def autoload const_name, file_name
55
+ path = "#{@prefix}/#{file_name}"
56
+ @klass.autoload(const_name, path)
57
+ @autoloads[const_name] = path
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+
64
+ end
@@ -0,0 +1,78 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ module Core
16
+
17
+ # @private
18
+ module Cacheable
19
+
20
+ # @private
21
+ class NoData < StandardError; end
22
+
23
+ def self.included base
24
+ base.extend Naming unless base.respond_to?(:service_ruby_name)
25
+ end
26
+
27
+ # @private
28
+ protected
29
+ def local_cache_key
30
+ raise NotImplementedError
31
+ end
32
+
33
+ # @private
34
+ protected
35
+ def cache_key
36
+ @cache_key ||= begin
37
+ endpoint_method = self.class.service_ruby_name + "_endpoint"
38
+ config.credential_provider.access_key_id + ":" +
39
+ config.send(endpoint_method) + ":" +
40
+ self.class.name + ":" +
41
+ local_cache_key
42
+ end
43
+ end
44
+
45
+ # @private
46
+ public
47
+ def retrieve_attribute attr, &block
48
+
49
+ if cache = AWS.response_cache
50
+
51
+ if cache.resource_cache.cached?(cache_key, attr.name)
52
+ return cache.resource_cache.get(cache_key, attr.name)
53
+ end
54
+
55
+ cache.select(*attr.request_types).each do |response|
56
+ if attributes = attributes_from_response(response)
57
+ cache.resource_cache.store(cache_key, attributes)
58
+ return attributes[attr.name] if attributes.key?(attr.name)
59
+ end
60
+ end
61
+
62
+ end
63
+
64
+ response = yield
65
+
66
+ if attributes = attributes_from_response(response)
67
+ if cache = AWS.response_cache
68
+ cache.resource_cache.store(cache_key, attributes)
69
+ end
70
+ attributes[attr.name] if attributes.key?(attr.name)
71
+ else
72
+ raise NoData.new("no data in #{response.request_type} response")
73
+ end
74
+ end
75
+
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,691 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'json'
15
+ require 'set'
16
+ require 'yaml'
17
+ require 'uri'
18
+
19
+ module AWS
20
+ module Core
21
+
22
+ # Base client class for all of the Amazon AWS service clients.
23
+ class Client
24
+
25
+ # Raised when a request failed due to a networking issue (e.g.
26
+ # EOFError, IOError, Errno::ECONNRESET, Errno::EPIPE,
27
+ # Timeout::Error, etc)
28
+ class NetworkError < StandardError; end
29
+
30
+ extend Naming
31
+
32
+ # @private
33
+ CACHEABLE_REQUESTS = Set[]
34
+
35
+ # Creates a new low-level client.
36
+ # @param [Hash] options
37
+ # @option options [Core::Configuration] :config (AWS.config)
38
+ # The base configuration object to use. All other options
39
+ # are merged with this. Defaults to the AWS.config.
40
+ # @option (see AWS.config)
41
+ def initialize options = {}
42
+
43
+ options = options.dup # so we don't modify the options passed in
44
+
45
+ @service_ruby_name = self.class.service_ruby_name
46
+
47
+ # translate these into service specific configuration options,
48
+ # e.g. :endpoint into :s3_endpoint
49
+ [:endpoint, :region, :port].each do |opt|
50
+ if options[opt]
51
+ options[:"#{service_ruby_name}_#{opt}"] = options.delete(opt)
52
+ end
53
+ end
54
+
55
+ @config = (options.delete(:config) || AWS.config)
56
+ @config = @config.with(options)
57
+
58
+ @credential_provider = @config.credential_provider
59
+ @http_handler = @config.http_handler
60
+ @endpoint = config.send(:"#{service_ruby_name}_endpoint")
61
+ @port = config.send(:"#{service_ruby_name}_port")
62
+ if config.send(:"#{service_ruby_name}_service_path") <=> "/"
63
+ @uri = config.send(:"#{service_ruby_name}_service_path")
64
+ end
65
+ @http_read_timeout = @config.http_read_timeout
66
+
67
+ end
68
+
69
+ # @return [Configuration] This clients configuration.
70
+ attr_reader :config
71
+
72
+ # @return [CredentialProviders::Provider] Returns the credential
73
+ # provider for this client.
74
+ # @private
75
+ attr_reader :credential_provider
76
+
77
+ # @return [String] The snake-cased ruby name for the service
78
+ # (e.g. 's3', 'iam', 'dynamo_db', etc).
79
+ # @private
80
+ attr_reader :service_ruby_name
81
+
82
+ # @return [Integer] What port this client makes requests via.
83
+ # @private
84
+ attr_reader :port
85
+
86
+ # @return [Integer] The number of seconds before requests made by
87
+ # this client should timeout if they have not received a response.
88
+ attr_reader :http_read_timeout
89
+
90
+ # @return [String] Returns the service endpoint (hostname) this client
91
+ # makes requests against.
92
+ # @private
93
+ attr_reader :endpoint
94
+
95
+ # @return [String] Returns the service path this client
96
+ # makes requests against.
97
+ # @private
98
+ attr_reader :uri
99
+
100
+ # @return (see Client.operations)
101
+ def operations
102
+ self.class.operations
103
+ end
104
+
105
+ # Returns a copy of the client with a different HTTP handler.
106
+ # You can pass an object like BuiltinHttpHandler or you can
107
+ # use a block; for example:
108
+ #
109
+ # s3_with_logging = s3.with_http_handler do |request, response|
110
+ # $stderr.puts request.inspect
111
+ # super(request, response)
112
+ # $stderr.puts response.inspect
113
+ # end
114
+ #
115
+ # The block executes in the context of an HttpHandler
116
+ # instance, and +super+ delegates to the HTTP handler used by
117
+ # this client. This provides an easy way to spy on requests
118
+ # and responses. See HttpHandler, HttpRequest, and
119
+ # HttpResponse for more details on how to implement a fully
120
+ # functional HTTP handler using a different HTTP library than
121
+ # the one that ships with Ruby.
122
+ # @param handler (nil) A new http handler. Leave blank and pass a
123
+ # block to wrap the current handler with the block.
124
+ # @return [Core::Client] Returns a new instance of the client class with
125
+ # the modified or wrapped http handler.
126
+ def with_http_handler(handler = nil, &blk)
127
+ handler ||= Http::Handler.new(@http_handler, &blk)
128
+ with_options(:http_handler => handler)
129
+ end
130
+
131
+ # Returns a new client with the passed configuration options
132
+ # merged with the current configuration options.
133
+ #
134
+ # no_retry_client = client.with_options(:max_retries => 0)
135
+ #
136
+ # @param [Hash] options
137
+ # @option (see AWS.config)
138
+ # @return [Client]
139
+ def with_options options
140
+ with_config(config.with(options))
141
+ end
142
+
143
+ # @param [Configuration] config The configuration object to use.
144
+ # @return [Core::Client] Returns a new client object with the given
145
+ # configuration.
146
+ # @private
147
+ def with_config config
148
+ self.class.new(:config => config)
149
+ end
150
+
151
+ # The stub returned is memoized.
152
+ # @see new_stub_for
153
+ # @private
154
+ def stub_for method_name
155
+ @stubs ||= {}
156
+ @stubs[method_name] ||= new_stub_for(method_name)
157
+ end
158
+
159
+ # Primarily used for testing, this method returns an empty pseudo
160
+ # service response without making a request. Its used primarily for
161
+ # testing the lighter level service interfaces.
162
+ # @private
163
+ def new_stub_for method_name
164
+ response = Response.new(Http::Request.new, Http::Response.new)
165
+ response.request_type = method_name
166
+ response.request_options = {}
167
+ send("simulate_#{method_name}_response", response)
168
+ response.signal_success
169
+ response
170
+ end
171
+
172
+ # Logs the warning to the configured logger, otherwise to stderr.
173
+ # @param [String] warning
174
+ # @return [nil]
175
+ def log_warning warning
176
+ message = '[aws-sdk-gem-warning] ' + warning
177
+ if config.logger
178
+ config.logger.warn(message)
179
+ else
180
+ $stderr.puts(message)
181
+ end
182
+ nil
183
+ end
184
+
185
+ protected
186
+
187
+ def new_request
188
+ eval(self.class.name.sub(/::Client$/, ''))::Request.new
189
+ end
190
+
191
+ def new_response(*args, &block)
192
+ Response.new(*args, &block)
193
+ end
194
+
195
+ def make_async_request response
196
+
197
+ pauses = async_request_with_retries(response, response.http_request)
198
+
199
+ response
200
+
201
+ end
202
+
203
+ def async_request_with_retries response, http_request, retry_delays = nil
204
+
205
+ response.http_response = Http::Response.new
206
+
207
+ handle = Object.new
208
+ handle.extend AsyncHandle
209
+ handle.on_complete do |status|
210
+ case status
211
+ when :failure
212
+ response.error = StandardError.new("failed to contact the service")
213
+ response.signal_failure
214
+ when :success
215
+ populate_error(response)
216
+ retry_delays ||= sleep_durations(response)
217
+ if should_retry?(response) and !retry_delays.empty?
218
+ rebuild_http_request(response)
219
+ @http_handler.sleep_with_callback(retry_delays.shift) do
220
+ async_request_with_retries(response, response.http_request, retry_delays)
221
+ end
222
+ else
223
+ response.error ?
224
+ response.signal_failure :
225
+ response.signal_success
226
+ end
227
+ end
228
+ end
229
+
230
+ @http_handler.handle_async(http_request, response.http_response, handle)
231
+
232
+ end
233
+
234
+ def make_sync_request response, &read_block
235
+ retry_server_errors do
236
+
237
+ response.http_response = Http::Response.new
238
+
239
+ @http_handler.handle(
240
+ response.http_request,
241
+ response.http_response,
242
+ &read_block)
243
+
244
+ if
245
+ block_given? and
246
+ response.http_response.status < 300 and
247
+ response.http_response.body
248
+ then
249
+
250
+ msg = ":http_handler read the entire http response body into "
251
+ msg << "memory, it should have instead yielded chunks"
252
+ log_warning(msg)
253
+
254
+ # go ahead and yield the body on behalf of the handler
255
+ yield(response.http_response.body)
256
+
257
+ end
258
+
259
+ populate_error(response)
260
+ response.signal_success unless response.error
261
+ response
262
+
263
+ end
264
+ end
265
+
266
+ def retry_server_errors &block
267
+
268
+ response = yield
269
+
270
+ sleeps = sleep_durations(response)
271
+ while should_retry?(response)
272
+ break if sleeps.empty?
273
+ Kernel.sleep(sleeps.shift)
274
+ rebuild_http_request(response)
275
+ response = yield
276
+ end
277
+
278
+ response
279
+
280
+ end
281
+
282
+ def rebuild_http_request response
283
+ credential_provider.refresh if expired_credentials?(response)
284
+ response.rebuild_request
285
+ if redirected?(response)
286
+ loc = URI.parse(response.http_response.headers['location'].first)
287
+ AWS::Core::MetaUtils.extend_method(response.http_request, :host) do
288
+ loc.host
289
+ end
290
+ response.http_request.host = loc.host
291
+ response.http_request.port = loc.port
292
+ response.http_request.uri = loc.path
293
+ end
294
+ response.retry_count += 1
295
+ end
296
+
297
+ def sleep_durations response
298
+ if expired_credentials?(response)
299
+ [0]
300
+ else
301
+ factor = scaling_factor(response)
302
+ Array.new(config.max_retries) {|n| (2 ** n) * factor }
303
+ end
304
+ end
305
+
306
+ def scaling_factor response
307
+ throttled?(response) ? (0.5 + Kernel.rand * 0.1) : 0.3
308
+ end
309
+
310
+ def should_retry? response
311
+ if retryable_error?(response)
312
+ response.safe_to_retry?
313
+ else
314
+ false
315
+ end
316
+ end
317
+
318
+ def retryable_error? response
319
+ expired_credentials?(response) or
320
+ response.network_error? or
321
+ throttled?(response) or
322
+ redirected?(response) or
323
+ response.error.kind_of?(Errors::ServerError)
324
+ end
325
+
326
+ # @return [Boolean] Returns +true+ if the response contains an
327
+ # error message that indicates credentials have expired.
328
+ def expired_credentials? response
329
+ response.error and
330
+ response.error.respond_to?(:code) and
331
+ (response.error.code == 'ExpiredTokenException' || response.error.code == 'ExpiredToken')
332
+ end
333
+
334
+ def throttled? response
335
+ response.error and
336
+ response.error.respond_to?(:code) and
337
+ response.error.code.to_s.match(/Throttling/i)
338
+ end
339
+
340
+ def redirected? response
341
+ response.http_response.status == 307
342
+ end
343
+
344
+ def return_or_raise options, &block
345
+ response = yield
346
+ unless options[:async]
347
+ raise response.error if response.error
348
+ end
349
+ response
350
+ end
351
+
352
+ # Yields to the given block (which should be making a
353
+ # request and returning a {Response} object). The results of the
354
+ # request/response are logged.
355
+ #
356
+ # @param [Hash] options
357
+ # @option options [Boolean] :async
358
+ # @return [Response]
359
+ def log_client_request options, &block
360
+
361
+ # time the request, retries and all
362
+ start = Time.now
363
+ response = yield
364
+ response.duration = Time.now - start
365
+
366
+ if options[:async]
367
+ response.on_complete { log_response(response) }
368
+ else
369
+ log_response(response)
370
+ end
371
+
372
+ response
373
+
374
+ end
375
+
376
+ # Logs the response to the configured logger.
377
+ # @param [Response] response
378
+ # @return [nil]
379
+ def log_response response
380
+ if config.logger
381
+ message = config.log_formatter.format(response)
382
+ config.logger.send(config.log_level, message)
383
+ end
384
+ nil
385
+ end
386
+
387
+ def populate_error response
388
+
389
+ status = response.http_response.status
390
+
391
+ error_code, error_message = extract_error_details(response)
392
+
393
+ error_args = [
394
+ response.http_request,
395
+ response.http_response,
396
+ error_code,
397
+ error_message
398
+ ]
399
+
400
+ response.error =
401
+ case
402
+ when response.network_error? then response.http_response.network_error
403
+ when error_code then error_class(error_code).new(*error_args)
404
+ when status >= 500 then Errors::ServerError.new(*error_args)
405
+ when status >= 300 then Errors::ClientError.new(*error_args)
406
+ else nil # no error
407
+ end
408
+
409
+ end
410
+
411
+ # Extracts the error code and error message from a response
412
+ # if it contains an error. Returns nil otherwise. Should be defined
413
+ # in sub-classes (e.g. QueryClient, RESTClient, etc).
414
+ # @param [Response] response
415
+ # @return [Array<Code,Message>,nil] Should return an array with an
416
+ # error code and message, or +nil+.
417
+ def extract_error_details response
418
+ raise NotImplementedError
419
+ end
420
+
421
+ # Given an error code string, this method will return an error class.
422
+ #
423
+ # AWS::EC2::Client.new.send(:error_code, 'InvalidInstanceId')
424
+ # #=> AWS::EC2::Errors::InvalidInstanceId
425
+ #
426
+ # @param [String] error_code The error code string as returned by
427
+ # the service. If this class contains periods, they will be
428
+ # converted into namespaces (e.g. 'Foo.Bar' becomes Errors::Foo::Bar).
429
+ #
430
+ # @return [Class]
431
+ #
432
+ def error_class error_code
433
+ errors_module.error_class(error_code)
434
+ end
435
+
436
+ # Returns the ::Errors module for the current client.
437
+ #
438
+ # AWS::S3::Client.new.errors_module
439
+ # #=> AWS::S3::Errors
440
+ #
441
+ # @return [Module]
442
+ #
443
+ def errors_module
444
+ AWS.const_get(self.class.to_s[/(\w+)::Client/, 1])::Errors
445
+ end
446
+
447
+ def client_request name, options, &read_block
448
+ return_or_raise(options) do
449
+ log_client_request(options) do
450
+
451
+ if config.stub_requests?
452
+
453
+ response = stub_for(name)
454
+ response.http_request = build_request(name, options)
455
+ response.request_options = options
456
+ response
457
+
458
+ else
459
+
460
+ client = self
461
+
462
+ response = new_response do
463
+ client.send(:build_request, name, options)
464
+ end
465
+
466
+ response.request_type = name
467
+ response.request_options = options
468
+
469
+ if
470
+ cacheable_request?(name, options) and
471
+ cache = AWS.response_cache and
472
+ cached_response = cache.cached(response)
473
+ then
474
+ cached_response.cached = true
475
+ cached_response
476
+ else
477
+ # process the http request
478
+ options[:async] ?
479
+ make_async_request(response, &read_block) :
480
+ make_sync_request(response, &read_block)
481
+
482
+ # process the http response
483
+ response.on_success do
484
+ send("process_#{name}_response", response)
485
+ if cache = AWS.response_cache
486
+ cache.add(response)
487
+ end
488
+ end
489
+
490
+ # close files we opened
491
+ response.on_complete do
492
+ if response.http_request.body_stream.is_a?(ManagedFile)
493
+ response.http_request.body_stream.close
494
+ end
495
+ end
496
+
497
+ response
498
+
499
+ end
500
+
501
+ end
502
+
503
+ end
504
+ end
505
+ end
506
+
507
+ def cacheable_request? name, options
508
+ self.class::CACHEABLE_REQUESTS.include?(name)
509
+ end
510
+
511
+ def build_request name, options
512
+
513
+ # we dont want to pass the async option to the configure block
514
+ opts = options.dup
515
+ opts.delete(:async)
516
+
517
+ http_request = new_request
518
+ http_request.access_key_id = credential_provider.access_key_id
519
+
520
+ # configure the http request
521
+ http_request.service_ruby_name = service_ruby_name
522
+ http_request.default_read_timeout = http_read_timeout
523
+ http_request.host = endpoint
524
+ http_request.port = port
525
+ http_request.uri = uri
526
+ http_request.region = config.send(:"#{service_ruby_name}_region")
527
+ http_request.proxy_uri = config.proxy_uri
528
+ http_request.use_ssl = config.use_ssl?
529
+ http_request.ssl_verify_peer = config.ssl_verify_peer?
530
+ http_request.ssl_ca_file = config.ssl_ca_file if config.ssl_ca_file
531
+ http_request.ssl_ca_path = config.ssl_ca_path if config.ssl_ca_path
532
+
533
+ send("configure_#{name}_request", http_request, opts)
534
+
535
+ http_request.headers["user-agent"] = user_agent_string
536
+ http_request.add_authorization!(credential_provider)
537
+
538
+ http_request
539
+
540
+ end
541
+
542
+ def user_agent_string
543
+ engine = (RUBY_ENGINE rescue nil or "ruby")
544
+ user_agent = "%s aws-sdk-ruby/#{VERSION} %s/%s %s" %
545
+ [config.user_agent_prefix, engine, RUBY_VERSION, RUBY_PLATFORM]
546
+ user_agent.strip!
547
+ if AWS.memoizing?
548
+ user_agent << " memoizing"
549
+ end
550
+ user_agent
551
+ end
552
+
553
+ class << self
554
+
555
+ # @return [Array<Symbol>] Returns a list of service operations as
556
+ # method names supported by this client.
557
+ def operations
558
+ @operations ||= []
559
+ end
560
+
561
+ # @private
562
+ def request_builders
563
+ @request_builders ||= {}
564
+ end
565
+
566
+ # @private
567
+ def response_parsers
568
+ @response_parsers ||= {}
569
+ end
570
+
571
+ protected
572
+
573
+ # Define this in sub-classes (e.g. QueryClient, RESTClient, etc)
574
+ def request_builder_for api_config, operation
575
+ raise NotImplementedError
576
+ end
577
+
578
+ # Define this in sub-classes (e.g. QueryClient, RESTClient, etc)
579
+ def response_parser_for api_config, operation
580
+ raise NotImplementedError
581
+ end
582
+
583
+ # Adds a single method to the current client class. This method
584
+ # yields a request method builder that allows you to specify how:
585
+ #
586
+ # * the request is built
587
+ # * the response is processed
588
+ # * the response is stubbed for testing
589
+ #
590
+ def add_client_request_method method_name, options = {}, &block
591
+
592
+ operations << method_name
593
+
594
+ ClientRequestMethodBuilder.new(self, method_name, &block)
595
+
596
+ method_def = <<-METHOD
597
+ def #{method_name}(*args, &block)
598
+ options = args.first ? args.first : {}
599
+ client_request(#{method_name.inspect}, options, &block)
600
+ end
601
+ METHOD
602
+
603
+ module_eval(method_def)
604
+
605
+ end
606
+
607
+ # Loads the API configuration for the given API version.
608
+ # @param [String] api_version The API version date string
609
+ # (e.g. '2012-01-05').
610
+ # @return [Hash]
611
+ def load_api_config api_version
612
+ lib = File.dirname(File.dirname(__FILE__))
613
+ path = "#{lib}/api_config/#{service_name}-#{api_version}.yml"
614
+ YAML.load(File.read(path))
615
+ end
616
+
617
+ # Defines one method for each service operation described in
618
+ # the API configuration.
619
+ # @param [String] api_version
620
+ def define_client_methods api_version
621
+
622
+ const_set(:API_VERSION, api_version)
623
+
624
+ api_config = load_api_config(api_version)
625
+
626
+ api_config[:operations].each do |operation|
627
+
628
+ builder = request_builder_for(api_config, operation)
629
+ parser = response_parser_for(api_config, operation)
630
+
631
+ define_client_method(operation[:method], builder, parser)
632
+
633
+ end
634
+ end
635
+
636
+ def define_client_method method_name, builder, parser
637
+
638
+ request_builders[method_name] = builder
639
+ response_parsers[method_name] = parser
640
+
641
+ add_client_request_method(method_name) do
642
+
643
+ configure_request do |request, request_options|
644
+ builder.populate_request(request, request_options)
645
+ end
646
+
647
+ process_response do |response|
648
+ response.data = parser.extract_data(response)
649
+ end
650
+
651
+ simulate_response do |response|
652
+ response.data = parser.simulate
653
+ end
654
+
655
+ end
656
+ end
657
+
658
+ end
659
+
660
+ # @private
661
+ class ClientRequestMethodBuilder
662
+
663
+ def initialize client_class, method_name, &block
664
+ @client_class = client_class
665
+ @method_name = method_name
666
+ configure_request {|request, options|}
667
+ process_response {|response|}
668
+ simulate_response {|response|}
669
+ instance_eval(&block)
670
+ end
671
+
672
+ def configure_request options = {}, &block
673
+ name = "configure_#{@method_name}_request"
674
+ MetaUtils.class_extend_method(@client_class, name, &block)
675
+ end
676
+
677
+ def process_response &block
678
+ name = "process_#{@method_name}_response"
679
+ MetaUtils.class_extend_method(@client_class, name, &block)
680
+ end
681
+
682
+ def simulate_response &block
683
+ name = "simulate_#{@method_name}_response"
684
+ MetaUtils.class_extend_method(@client_class, name, &block)
685
+ end
686
+
687
+ end
688
+
689
+ end
690
+ end
691
+ end