aws-sdk-v1 1.52.0

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