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,247 @@
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
+ # Data is a light wrapper around a Ruby hash that provides
18
+ # method missing access to the hash contents.
19
+ #
20
+ # ## Method Missing Access
21
+ #
22
+ # You can access hash content with methods if their keys
23
+ # are symbols.
24
+ #
25
+ # data = AWS::Core::Data.new({ :a => 1, :b => 2, :c => true })
26
+ # data.a #=> 1
27
+ # data.b #=> 2
28
+ # data.c #=> true
29
+ # data.d #=> raises NoMethodError
30
+ #
31
+ # ## Boolean Methods
32
+ #
33
+ # Given the structure above you can also use question-mark methods.
34
+ #
35
+ # data.c? #=> true
36
+ # data.d? #=> raises NoMethodError
37
+ #
38
+ # ## Nested Hashes
39
+ #
40
+ # If the data contains nested hashes you can chain methods into
41
+ # the structure.
42
+ #
43
+ # data = AWS::Core::Data.new(:a => { :b => { :c => 'abc' }})
44
+ # data.a.b.c #=> 'abc'
45
+ #
46
+ # ## Nested Arrays
47
+ #
48
+ # Arrays are wrapped in {Data::List} objects. They ensure any
49
+ # data returned is correctly wrapped so you can continue using
50
+ # method-missing access.
51
+ #
52
+ # data = AWS::Core::Data.new(
53
+ # :people => [
54
+ # {:name => 'john'},
55
+ # {:name => 'jane'},
56
+ # ]})
57
+ #
58
+ # data.people[0].name #=> 'john'
59
+ # data.people[1].name #=> 'jane'
60
+ #
61
+ # data.people.map(&:name) #=> ['john','jane']
62
+ #
63
+ class Data
64
+
65
+ module MethodMissingProxy
66
+
67
+ # @api private
68
+ def id
69
+ self[:id] || self.id
70
+ end
71
+
72
+ def [] index_or_key
73
+ Data.cast(@data[index_or_key])
74
+ end
75
+
76
+ # @return [Boolean] Returns true if the passed object equals
77
+ # the wrapped array.
78
+ def eql? other
79
+ if other.is_a?(MethodMissingProxy)
80
+ @data == other._data
81
+ else
82
+ @data == other
83
+ end
84
+ end
85
+ alias_method :==, :eql?
86
+
87
+ def dup
88
+ Data.cast(@data.dup)
89
+ end
90
+ alias_method :clone, :dup
91
+
92
+ protected
93
+
94
+ def method_missing *args, &block
95
+ if block_given?
96
+ return_value = @data.send(*args) do |*values|
97
+ yield(*values.flatten.map{|v| Data.cast(v) })
98
+ end
99
+ Data.cast(return_value)
100
+ else
101
+ Data.cast(@data.send(*args))
102
+ end
103
+ end
104
+
105
+ def _data
106
+ @data
107
+ end
108
+
109
+ end
110
+
111
+ include MethodMissingProxy
112
+
113
+ def method_missing method_name, *args, &block
114
+ if
115
+ args.empty? and !block_given? and
116
+ key = _remove_question_mark(method_name) and
117
+ @data.has_key?(key)
118
+ then
119
+ Data.cast(@data[key])
120
+ else
121
+ super
122
+ end
123
+ end
124
+
125
+ # @param [Hash] data The ruby hash of data you need wrapped.
126
+ def initialize data
127
+ @data = data
128
+ end
129
+
130
+ # @return [Hash] Returns contents of this Data object as a raw hash.
131
+ def to_hash
132
+ @data
133
+ end
134
+ alias_method :to_h, :to_hash
135
+
136
+ # @return [Array]
137
+ def to_a
138
+ @data.to_a
139
+ end
140
+ alias_method :to_ary, :to_a
141
+
142
+ # @param [String,Symbol] method_name
143
+ # @return [Boolean] Returns true if this data object will
144
+ # respond to the given method name.
145
+ def respond_to? method_name
146
+ @data.key?(_remove_question_mark(method_name)) or
147
+ @data.respond_to?(method_name)
148
+ end
149
+
150
+ # Returns an inspection string from the wrapped data.
151
+ #
152
+ # data = AWS::Core::Data.new({ :a => 1, :b => 2, :c => true })
153
+ # data.inspect #=> '{:a=>1, :b=>2, :c=>true}'
154
+ #
155
+ # @return [String]
156
+ #
157
+ def inspect
158
+ @data.inspect
159
+ end
160
+
161
+ # @api private
162
+ def kind_of? klass
163
+ if klass == Hash
164
+ true
165
+ else
166
+ super
167
+ end
168
+ end
169
+ alias_method :is_a?, :kind_of?
170
+
171
+ protected
172
+
173
+ def _remove_question_mark method_name
174
+ case method_name
175
+ when Symbol then method_name.to_s.sub(/\?$/, '').to_sym
176
+ when String then method_name.sub(/\?$/, '')
177
+ else method_name
178
+ end
179
+ end
180
+
181
+ class << self
182
+
183
+ # Given a hash, this method returns a {Data} object. Given
184
+ # an Array, this method returns a {Data::List} object. Everything
185
+ # else is returned as is.
186
+ #
187
+ # @param [Object] value The value to conditionally wrap.
188
+ #
189
+ # @return [Data,Data::List,Object] Wraps hashes and lists with
190
+ # Data and List objects, all other objects are returned as
191
+ # is.
192
+ #
193
+ def cast value
194
+ case value
195
+ when Hash then Data.new(value)
196
+ when Array then Data::List.new(value)
197
+ else value
198
+ end
199
+ end
200
+
201
+ end
202
+
203
+ class List
204
+
205
+ include MethodMissingProxy
206
+
207
+ # @param [Array] array
208
+ def initialize array
209
+ @data = array
210
+ end
211
+
212
+ # @return [String] Returns the inspection string for the
213
+ # wrapped array.
214
+ def inspect
215
+ @data.inspect
216
+ end
217
+
218
+ # @return [Array] Returns the contents of this Data::List as
219
+ # a raw array.
220
+ def to_ary
221
+ @data
222
+ end
223
+ alias_method :to_a, :to_ary
224
+
225
+ # #inject works on Core::Data::List in in 1.8.7 and 1.9.3, but not
226
+ # in 1.9.2 unless we define it like so.
227
+ # @api private
228
+ def inject *args, &block
229
+ @data.inject(*args) do |obj,value|
230
+ yield(Data.cast(obj),Data.cast(value))
231
+ end
232
+ end
233
+
234
+ # @api private
235
+ def kind_of? klass
236
+ if klass == Array
237
+ true
238
+ else
239
+ super
240
+ end
241
+ end
242
+ alias_method :is_a?, :kind_of?
243
+
244
+ end
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,84 @@
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
+ # A utility module that provides a class method that wraps
18
+ # a method such that it generates a deprecation warning when called.
19
+ # Given the following class:
20
+ #
21
+ # class Example
22
+ #
23
+ # def do_something
24
+ # end
25
+ #
26
+ # end
27
+ #
28
+ # If you want to deprecate the `#do_something` method, you can extend
29
+ # this module and then call `deprecated` on the method (after it
30
+ # has been defined).
31
+ #
32
+ # class Example
33
+ #
34
+ # extend AWS::Core::Deprecations
35
+ #
36
+ # def do_something
37
+ # end
38
+ #
39
+ # def do_something_else
40
+ # end
41
+ #
42
+ # deprecated :do_something
43
+ #
44
+ # end
45
+ #
46
+ # The `#do_something` method will continue to function, but will
47
+ # generate a deprecation warning when called.
48
+ #
49
+ # @api private
50
+ module Deprecations
51
+
52
+ # @param [Symbol] method The name of the deprecated method.
53
+ #
54
+ # @option options [String] :message The warning message to issue
55
+ # when the deprecated method is called.
56
+ #
57
+ # @option options [Symbol] :use The name of an use
58
+ # method that should be used.
59
+ #
60
+ def deprecated method, options = {}
61
+
62
+ deprecation_msg = options[:message] || begin
63
+ msg = "DEPRECATION WARNING: called deprecated method `#{method}' "
64
+ msg << "of #{self.name}"
65
+ msg << ", try calling #{options[:use]} instead" if options[:use]
66
+ msg
67
+ end
68
+
69
+ alias_method(:"deprecated_#{method}", method)
70
+
71
+ warned = false # we only want to issue this warning once
72
+
73
+ define_method(method) do |*args,&block|
74
+ unless warned
75
+ warn(deprecation_msg)
76
+ warned = true
77
+ end
78
+ send("deprecated_#{method}", *args, &block)
79
+ end
80
+ end
81
+
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,37 @@
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
+
16
+ module AWS
17
+ module Core
18
+ # Provides a read-only interface to the bundled endpoints.json file.
19
+ module Endpoints
20
+
21
+ def hostname(region, endpoint_prefix)
22
+ region = endpoints["regions"][region] || {}
23
+ endpoint = region[endpoint_prefix] || {}
24
+ endpoint["hostname"]
25
+ end
26
+ module_function :hostname
27
+
28
+ def endpoints
29
+ @endpoints ||= begin
30
+ JSON.parse(File.read(File.join(AWS::ROOT, 'endpoints.json')))
31
+ end
32
+ end
33
+ module_function :endpoints
34
+
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,369 @@
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 'net/http'
15
+ require 'net/https'
16
+ require 'thread'
17
+ require 'logger'
18
+
19
+ module AWS
20
+ module Core
21
+ module Http
22
+
23
+ # @attr_reader [URI::HTTP,nil] proxy_uri Returns the configured proxy uri.
24
+ # @attr_reader [Float,nil] http_continue_timeout
25
+ # @attr_reader [Integer,Float] http_idle_timeout
26
+ # @attr_reader [Integer,Float] http_open_timeout
27
+ # @attr_reader [Integer,Float] http_read_timeout
28
+ # @attr_reader [Boolean] http_wire_trace
29
+ # @attr_reader [Logger,nil] logger
30
+ # @attr_reader [Boolean] ssl_verify_peer
31
+ # @attr_reader [String,nil] ssl_ca_file
32
+ # @attr_reader [String,nil] ssl_ca_path
33
+ # @api private
34
+ class ConnectionPool
35
+
36
+ @pools_mutex = Mutex.new
37
+ @pools = {}
38
+
39
+ # @api private
40
+ OPTIONS = [
41
+ :proxy_uri,
42
+ :http_continue_timeout,
43
+ :http_idle_timeout,
44
+ :http_open_timeout,
45
+ :http_read_timeout,
46
+ :http_wire_trace,
47
+ :logger,
48
+ :ssl_verify_peer,
49
+ :ssl_ca_file,
50
+ :ssl_ca_path,
51
+ ]
52
+
53
+ OPTIONS.each do |attr_name|
54
+ attr_reader(attr_name)
55
+ end
56
+
57
+ alias_method :http_wire_trace?, :http_wire_trace
58
+
59
+ alias_method :ssl_verify_peer?, :ssl_verify_peer
60
+
61
+ # @api private
62
+ def initialize options = {}
63
+ # user supplied options are filtered by the class .for method
64
+ options.each_pair do |opt_name, opt_value|
65
+ instance_variable_set("@#{opt_name}", opt_value)
66
+ end
67
+
68
+ # connection pool
69
+ @pool_mutex = Mutex.new
70
+ @pool = Hash.new do |pool,endpoint|
71
+ pool[endpoint] = []
72
+ pool[endpoint]
73
+ end
74
+ end
75
+
76
+ # @return [Hash] a read-only hash of options for this pool.
77
+ def options
78
+ OPTIONS.inject({}) do |options, opt_name|
79
+ options[opt_name] = send(opt_name)
80
+ options
81
+ end.freeze
82
+ end
83
+
84
+ # Makes an HTTP request, yielding a Net::HTTPResponse object.
85
+ #
86
+ # pool.request('http://google.com', Net::HTTP::Get.new('/')) do |resp|
87
+ # puts resp.code # status code
88
+ # puts resp.to_h.inspect # dump the headers
89
+ # puts resp.body
90
+ # end
91
+ #
92
+ # @param [URI::HTTP,URI::HTTPS,String] endpoint The HTTP(S) endpoint to
93
+ # connect to (e.g. 'https://domain.com').
94
+ #
95
+ # @param [Net::HTTPRequest] request The request to make. This can be
96
+ # any request object from Net::HTTP (e.g. Net::HTTP::Get,
97
+ # Net::HTTP::POST, etc).
98
+ #
99
+ # @yieldparam [Net::HTTPResponse] net_http_response
100
+ #
101
+ # @return (see #session_for
102
+ def request endpoint, request, &block
103
+ session_for(endpoint) do |http|
104
+ yield(http.request(request))
105
+ end
106
+ end
107
+
108
+ # @param [URI::HTTP,URI::HTTPS,String] endpoint The HTTP(S) endpoint to
109
+ # connect to (e.g. 'https://domain.com').
110
+ #
111
+ # @yieldparam [Net::HTTPSession] session
112
+ #
113
+ # @return [nil]
114
+ def session_for endpoint, &block
115
+ endpoint = endpoint.to_s
116
+ session = nil
117
+
118
+ # attempt to recycle an already open session
119
+ @pool_mutex.synchronize do
120
+ _clean
121
+ session = @pool[endpoint].shift
122
+ end
123
+
124
+ begin
125
+ session ||= start_session(endpoint)
126
+ session.read_timeout = http_read_timeout
127
+ session.continue_timeout = http_continue_timeout if
128
+ session.respond_to?(:continue_timeout=)
129
+ yield(session)
130
+ rescue Exception => error
131
+ session.finish if session
132
+ raise error
133
+ else
134
+ # No error raised? Good, check the session into the pool.
135
+ @pool_mutex.synchronize { @pool[endpoint] << session }
136
+ end
137
+ nil
138
+ end
139
+
140
+ # @return [Integer] Returns the count of sessions currently in the pool,
141
+ # not counting those currently in use.
142
+ def size
143
+ @pool_mutex.synchronize do
144
+ size = 0
145
+ @pool.each_pair do |endpoint,sessions|
146
+ size += sessions.size
147
+ end
148
+ size
149
+ end
150
+ end
151
+
152
+ # Removes stale http sessions from the pool (that have exceeded
153
+ # the idle timeout).
154
+ # @return [nil]
155
+ def clean!
156
+ @pool_mutex.synchronize { _clean }
157
+ nil
158
+ end
159
+
160
+ # Closes and removes removes all sessions from the pool.
161
+ # If empty! is called while there are outstanding requests they may
162
+ # get checked back into the pool, leaving the pool in a non-empty state.
163
+ # @return [nil]
164
+ def empty!
165
+ @pool_mutex.synchronize do
166
+ @pool.each_pair do |endpoint,sessions|
167
+ sessions.each(&:finish)
168
+ end
169
+ @pool.clear
170
+ end
171
+ nil
172
+ end
173
+
174
+ class << self
175
+
176
+ # Returns a connection pool constructed from the given options.
177
+ # Calling this method twice with the same options will return
178
+ # the same pool.
179
+ #
180
+ # @option options [URI::HTTP,String] :proxy_uri A proxy to send
181
+ # requests through. Formatted like 'http://proxy.com:123'.
182
+ #
183
+ # @option options [Float] :http_continue_timeout (nil) The number of
184
+ # seconds to wait for a 100-continue response before sending the
185
+ # request body. This option has no effect unless the request has
186
+ # "Expect" header set to "100-continue". Defaults to `nil` which
187
+ # disables this behaviour. This value can safely be set per-request
188
+ # on the session yeidled by {#session_for}.
189
+ #
190
+ # @option options [Float] :http_idle_timeout (15) The number of
191
+ # seconds a connection is allowed to sit idble before it is
192
+ # considered stale. Stale connections are closed and removed
193
+ # from the pool before making a request.
194
+ #
195
+ # @option options [Float] :http_open_timeout (15) The number of
196
+ # seconds to wait when opening a HTTP session before rasing a
197
+ # `Timeout::Error`.
198
+ #
199
+ # @option options [Integer] :http_read_timeout (60) The default
200
+ # number of seconds to wait for response data. This value can
201
+ # safely be set
202
+ # per-request on the session yeidled by {#session_for}.
203
+ #
204
+ # @option options [Boolean] :http_wire_trace (false) When `true`, HTTP
205
+ # debug output will be sent to the `:logger`.
206
+ #
207
+ # @option options [Logger] :logger Where debug output is sent.
208
+ # Defaults to `nil` when `:http_wire_trace` is `false`.
209
+ # Defaults to `Logger.new($stdout)` when `:http_wire_trace` is
210
+ # `true`.
211
+ #
212
+ # @option options [Boolean] :ssl_verify_peer (true) When `true`, SSL
213
+ # peer certificates are verified when establishing a connection.
214
+ #
215
+ # @option options [String] :ssl_ca_file Full path to the SSL
216
+ # certificate authority bundle file that should be used when
217
+ # verifying peer certificates. If you do not pass
218
+ # `:ssl_ca_file` or `:ssl_ca_path` the the system default will be
219
+ # used if available.
220
+ #
221
+ # @option options [String] :ssl_ca_path Full path of the directory
222
+ # that contains the unbundled SSL certificate authority files#
223
+ # for verifying peer certificates. If you do not pass
224
+ # `:ssl_ca_file` or `:ssl_ca_path` the the system default will
225
+ # be used if available.
226
+ #
227
+ # @return [ConnectionPool]
228
+ def new options = {}
229
+ options = pool_options(options)
230
+ @pools_mutex.synchronize do
231
+ @pools[options] ||= build(options)
232
+ end
233
+ end
234
+
235
+ # Constructs and returns a new connection pool. This pool is never
236
+ # shared.
237
+ # @option (see new)
238
+ # @return [ConnectionPool]
239
+ def build(options = {})
240
+ pool = allocate
241
+ pool.send(:initialize, pool_options(options))
242
+ pool
243
+ end
244
+
245
+ # @return [Array<ConnectionPool>] Returns a list of of the constructed
246
+ # connection pools.
247
+ def pools
248
+ @pools.values
249
+ end
250
+
251
+ private
252
+
253
+ # Filters an option hash, merging in default values.
254
+ # @return [Hash]
255
+ def pool_options options
256
+ wire_trace = !!options[:http_wire_trace]
257
+ logger = options[:logger] || Logger.new($stdout) if wire_trace
258
+ verify_peer = options.key?(:ssl_verify_peer) ?
259
+ !!options[:ssl_verify_peer] : true
260
+ {
261
+ :proxy_uri => URI.parse(options[:proxy_uri].to_s),
262
+ :http_continue_timeout => options[:http_continue_timeout],
263
+ :http_open_timeout => options[:http_open_timeout] || 15,
264
+ :http_idle_timeout => options[:http_idle_timeout] || 15,
265
+ :http_read_timeout => options[:http_read_timeout] || 60,
266
+ :http_wire_trace => wire_trace,
267
+ :logger => logger,
268
+ :ssl_verify_peer => verify_peer,
269
+ :ssl_ca_file => options[:ssl_ca_file],
270
+ :ssl_ca_path => options[:ssl_ca_path],
271
+ }
272
+ end
273
+
274
+ end
275
+
276
+ private
277
+
278
+ # Starts and returns a new HTTP(S) session.
279
+ # @param [String] endpoint
280
+ # @return [Net::HTTPSession]
281
+ def start_session endpoint
282
+
283
+ endpoint = URI.parse(endpoint)
284
+
285
+ args = []
286
+ args << endpoint.host
287
+ args << endpoint.port
288
+ args << proxy_uri.host
289
+ args << proxy_uri.port
290
+
291
+ if proxy_uri.user
292
+ args << URI::decode(proxy_uri.user)
293
+ else
294
+ args << nil
295
+ end
296
+
297
+ if proxy_uri.password
298
+ args << URI::decode(proxy_uri.password)
299
+ else
300
+ args << nil
301
+ end
302
+
303
+ http = Net::HTTP.new(*args.compact)
304
+ http.extend(SessionExtensions)
305
+ http.set_debug_output(logger) if http_wire_trace?
306
+ http.open_timeout = http_open_timeout
307
+
308
+ if endpoint.scheme == 'https'
309
+ http.use_ssl = true
310
+ if ssl_verify_peer?
311
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
312
+ http.ca_file = ssl_ca_file if ssl_ca_file
313
+ http.ca_path = ssl_ca_path if ssl_ca_path
314
+ else
315
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
316
+ end
317
+ else
318
+ http.use_ssl = false
319
+ end
320
+
321
+ http.start
322
+ http
323
+ end
324
+
325
+ # Removes stale sessions from the pool. This method *must* be called
326
+ # @note **Must** be called behind a `@pool_mutex` synchronize block.
327
+ def _clean
328
+ now = Time.now
329
+ @pool.each_pair do |endpoint,sessions|
330
+ sessions.delete_if do |session|
331
+ if
332
+ session.last_used.nil? or
333
+ now - session.last_used > http_idle_timeout
334
+ then
335
+ session.finish
336
+ true
337
+ end
338
+ end
339
+ end
340
+ end
341
+
342
+ # Helper methods extended onto Net::HTTPSession objects opend by the
343
+ # connection pool.
344
+ # @api private
345
+ module SessionExtensions
346
+
347
+ # Sends the request and tracks that this session has been used.
348
+ def request *args, &block
349
+ @last_used = Time.now
350
+ super(*args, &block)
351
+ end
352
+
353
+ # @return [Time,nil]
354
+ def last_used
355
+ @last_used
356
+ end
357
+
358
+ # Attempts to close/finish the session without raising an error.
359
+ def finish
360
+ super
361
+ rescue IOError
362
+ nil
363
+ end
364
+
365
+ end
366
+ end
367
+ end
368
+ end
369
+ end