aws-sdk-euca 1.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. data/.yardopts +5 -0
  2. data/LICENSE.txt +12 -0
  3. data/README.rdoc +189 -0
  4. data/ca-bundle.crt +3895 -0
  5. data/lib/aws-sdk-euca.rb +79 -0
  6. data/lib/aws-sdk.rb +79 -0
  7. data/lib/aws.rb +14 -0
  8. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +825 -0
  9. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +322 -0
  10. data/lib/aws/api_config/CloudFront-2012-05-05.yml +2102 -0
  11. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  12. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  13. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  14. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1160 -0
  15. data/lib/aws/api_config/EC2-2013-02-01.yml +4368 -0
  16. data/lib/aws/api_config/ELB-2012-06-01.yml +597 -0
  17. data/lib/aws/api_config/EMR-2009-03-31.yml +370 -0
  18. data/lib/aws/api_config/ElastiCache-2012-03-09.yml +777 -0
  19. data/lib/aws/api_config/ElastiCache-2012-11-15.yml +979 -0
  20. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +823 -0
  21. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +1036 -0
  22. data/lib/aws/api_config/Glacier-2012-06-01.yml +618 -0
  23. data/lib/aws/api_config/IAM-2010-05-08.yml +1222 -0
  24. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  25. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +1463 -0
  26. data/lib/aws/api_config/RDS-2012-09-17.yml +1861 -0
  27. data/lib/aws/api_config/RDS-2013-02-12.yml +2377 -0
  28. data/lib/aws/api_config/Redshift-2012-12-01.yml +1149 -0
  29. data/lib/aws/api_config/Route53-2012-02-29.yml +380 -0
  30. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  31. data/lib/aws/api_config/SNS-2010-03-31.yml +249 -0
  32. data/lib/aws/api_config/SQS-2012-11-05.yml +317 -0
  33. data/lib/aws/api_config/STS-2011-06-15.yml +81 -0
  34. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  35. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  36. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2358 -0
  37. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  38. data/lib/aws/auto_scaling.rb +164 -0
  39. data/lib/aws/auto_scaling/activity.rb +102 -0
  40. data/lib/aws/auto_scaling/activity_collection.rb +82 -0
  41. data/lib/aws/auto_scaling/client.rb +521 -0
  42. data/lib/aws/auto_scaling/config.rb +18 -0
  43. data/lib/aws/auto_scaling/errors.rb +22 -0
  44. data/lib/aws/auto_scaling/group.rb +420 -0
  45. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  46. data/lib/aws/auto_scaling/group_options.rb +146 -0
  47. data/lib/aws/auto_scaling/instance.rb +192 -0
  48. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  49. data/lib/aws/auto_scaling/launch_configuration.rb +158 -0
  50. data/lib/aws/auto_scaling/launch_configuration_collection.rb +154 -0
  51. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  52. data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
  53. data/lib/aws/auto_scaling/request.rb +29 -0
  54. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  55. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  56. data/lib/aws/auto_scaling/scaling_policy_options.rb +64 -0
  57. data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
  58. data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
  59. data/lib/aws/auto_scaling/tag.rb +59 -0
  60. data/lib/aws/auto_scaling/tag_collection.rb +112 -0
  61. data/lib/aws/cloud_formation.rb +272 -0
  62. data/lib/aws/cloud_formation/client.rb +369 -0
  63. data/lib/aws/cloud_formation/config.rb +18 -0
  64. data/lib/aws/cloud_formation/errors.rb +22 -0
  65. data/lib/aws/cloud_formation/request.rb +29 -0
  66. data/lib/aws/cloud_formation/stack.rb +255 -0
  67. data/lib/aws/cloud_formation/stack_collection.rb +209 -0
  68. data/lib/aws/cloud_formation/stack_event.rb +75 -0
  69. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  70. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  71. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  72. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  73. data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
  74. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  75. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  76. data/lib/aws/cloud_front.rb +73 -0
  77. data/lib/aws/cloud_front/client.rb +1307 -0
  78. data/lib/aws/cloud_front/config.rb +18 -0
  79. data/lib/aws/cloud_front/errors.rb +22 -0
  80. data/lib/aws/cloud_front/request.rb +44 -0
  81. data/lib/aws/cloud_search.rb +74 -0
  82. data/lib/aws/cloud_search/client.rb +558 -0
  83. data/lib/aws/cloud_search/config.rb +18 -0
  84. data/lib/aws/cloud_search/errors.rb +22 -0
  85. data/lib/aws/cloud_search/request.rb +23 -0
  86. data/lib/aws/cloud_watch.rb +119 -0
  87. data/lib/aws/cloud_watch/alarm.rb +272 -0
  88. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  89. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  90. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  91. data/lib/aws/cloud_watch/client.rb +247 -0
  92. data/lib/aws/cloud_watch/config.rb +18 -0
  93. data/lib/aws/cloud_watch/errors.rb +22 -0
  94. data/lib/aws/cloud_watch/metric.rb +135 -0
  95. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  96. data/lib/aws/cloud_watch/metric_collection.rb +131 -0
  97. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  98. data/lib/aws/cloud_watch/request.rb +23 -0
  99. data/lib/aws/core.rb +587 -0
  100. data/lib/aws/core/async_handle.rb +90 -0
  101. data/lib/aws/core/autoloader.rb +64 -0
  102. data/lib/aws/core/cacheable.rb +78 -0
  103. data/lib/aws/core/client.rb +691 -0
  104. data/lib/aws/core/collection.rb +267 -0
  105. data/lib/aws/core/collection/simple.rb +82 -0
  106. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  107. data/lib/aws/core/collection/with_next_token.rb +97 -0
  108. data/lib/aws/core/configuration.rb +546 -0
  109. data/lib/aws/core/credential_providers.rb +461 -0
  110. data/lib/aws/core/data.rb +247 -0
  111. data/lib/aws/core/http/curb_handler.rb +155 -0
  112. data/lib/aws/core/http/handler.rb +89 -0
  113. data/lib/aws/core/http/net_http_handler.rb +128 -0
  114. data/lib/aws/core/http/request.rb +263 -0
  115. data/lib/aws/core/http/response.rb +81 -0
  116. data/lib/aws/core/indifferent_hash.rb +88 -0
  117. data/lib/aws/core/inflection.rb +56 -0
  118. data/lib/aws/core/json_client.rb +47 -0
  119. data/lib/aws/core/json_parser.rb +76 -0
  120. data/lib/aws/core/json_request_builder.rb +35 -0
  121. data/lib/aws/core/json_response_parser.rb +79 -0
  122. data/lib/aws/core/lazy_error_classes.rb +90 -0
  123. data/lib/aws/core/log_formatter.rb +462 -0
  124. data/lib/aws/core/managed_file.rb +32 -0
  125. data/lib/aws/core/meta_utils.rb +45 -0
  126. data/lib/aws/core/model.rb +57 -0
  127. data/lib/aws/core/naming.rb +30 -0
  128. data/lib/aws/core/option_grammar.rb +735 -0
  129. data/lib/aws/core/options/json_serializer.rb +82 -0
  130. data/lib/aws/core/options/validator.rb +155 -0
  131. data/lib/aws/core/options/xml_serializer.rb +118 -0
  132. data/lib/aws/core/page_result.rb +75 -0
  133. data/lib/aws/core/policy.rb +916 -0
  134. data/lib/aws/core/query_client.rb +41 -0
  135. data/lib/aws/core/query_error_parser.rb +24 -0
  136. data/lib/aws/core/query_request_builder.rb +47 -0
  137. data/lib/aws/core/query_response_parser.rb +35 -0
  138. data/lib/aws/core/resource.rb +413 -0
  139. data/lib/aws/core/resource_cache.rb +40 -0
  140. data/lib/aws/core/response.rb +208 -0
  141. data/lib/aws/core/response_cache.rb +50 -0
  142. data/lib/aws/core/rest_error_parser.rb +24 -0
  143. data/lib/aws/core/rest_json_client.rb +40 -0
  144. data/lib/aws/core/rest_request_builder.rb +146 -0
  145. data/lib/aws/core/rest_response_parser.rb +66 -0
  146. data/lib/aws/core/rest_xml_client.rb +47 -0
  147. data/lib/aws/core/service_interface.rb +61 -0
  148. data/lib/aws/core/signature/version_2.rb +56 -0
  149. data/lib/aws/core/signature/version_3.rb +77 -0
  150. data/lib/aws/core/signature/version_3_https.rb +54 -0
  151. data/lib/aws/core/signature/version_4.rb +135 -0
  152. data/lib/aws/core/signer.rb +46 -0
  153. data/lib/aws/core/uri_escape.rb +44 -0
  154. data/lib/aws/core/xml/frame.rb +244 -0
  155. data/lib/aws/core/xml/frame_stack.rb +85 -0
  156. data/lib/aws/core/xml/grammar.rb +307 -0
  157. data/lib/aws/core/xml/parser.rb +70 -0
  158. data/lib/aws/core/xml/root_frame.rb +65 -0
  159. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  160. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +55 -0
  161. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  162. data/lib/aws/core/xml/sax_handlers/rexml.rb +43 -0
  163. data/lib/aws/core/xml/stub.rb +123 -0
  164. data/lib/aws/data_pipeline.rb +73 -0
  165. data/lib/aws/data_pipeline/client.rb +339 -0
  166. data/lib/aws/data_pipeline/config.rb +18 -0
  167. data/lib/aws/data_pipeline/errors.rb +20 -0
  168. data/lib/aws/data_pipeline/request.rb +26 -0
  169. data/lib/aws/dynamo_db.rb +206 -0
  170. data/lib/aws/dynamo_db/attribute_collection.rb +461 -0
  171. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  172. data/lib/aws/dynamo_db/batch_write.rb +252 -0
  173. data/lib/aws/dynamo_db/binary.rb +35 -0
  174. data/lib/aws/dynamo_db/client.rb +904 -0
  175. data/lib/aws/dynamo_db/config.rb +24 -0
  176. data/lib/aws/dynamo_db/errors.rb +20 -0
  177. data/lib/aws/dynamo_db/expectations.rb +40 -0
  178. data/lib/aws/dynamo_db/item.rb +133 -0
  179. data/lib/aws/dynamo_db/item_collection.rb +852 -0
  180. data/lib/aws/dynamo_db/item_data.rb +31 -0
  181. data/lib/aws/dynamo_db/keys.rb +41 -0
  182. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  183. data/lib/aws/dynamo_db/request.rb +26 -0
  184. data/lib/aws/dynamo_db/resource.rb +33 -0
  185. data/lib/aws/dynamo_db/table.rb +491 -0
  186. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  187. data/lib/aws/dynamo_db/types.rb +111 -0
  188. data/lib/aws/ec2.rb +440 -0
  189. data/lib/aws/ec2/attachment.rb +140 -0
  190. data/lib/aws/ec2/attachment_collection.rb +54 -0
  191. data/lib/aws/ec2/availability_zone.rb +86 -0
  192. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  193. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  194. data/lib/aws/ec2/client.rb +3621 -0
  195. data/lib/aws/ec2/collection.rb +36 -0
  196. data/lib/aws/ec2/config.rb +18 -0
  197. data/lib/aws/ec2/config_transform.rb +63 -0
  198. data/lib/aws/ec2/customer_gateway.rb +90 -0
  199. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  200. data/lib/aws/ec2/dhcp_options.rb +106 -0
  201. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  202. data/lib/aws/ec2/elastic_ip.rb +208 -0
  203. data/lib/aws/ec2/elastic_ip_collection.rb +97 -0
  204. data/lib/aws/ec2/errors.rb +32 -0
  205. data/lib/aws/ec2/export_task.rb +120 -0
  206. data/lib/aws/ec2/export_task_collection.rb +67 -0
  207. data/lib/aws/ec2/filtered_collection.rb +89 -0
  208. data/lib/aws/ec2/has_permissions.rb +44 -0
  209. data/lib/aws/ec2/image.rb +264 -0
  210. data/lib/aws/ec2/image_collection.rb +228 -0
  211. data/lib/aws/ec2/instance.rb +796 -0
  212. data/lib/aws/ec2/instance_collection.rb +372 -0
  213. data/lib/aws/ec2/internet_gateway.rb +122 -0
  214. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  215. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  216. data/lib/aws/ec2/key_pair.rb +82 -0
  217. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  218. data/lib/aws/ec2/network_acl.rb +256 -0
  219. data/lib/aws/ec2/network_acl/association.rb +56 -0
  220. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  221. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  222. data/lib/aws/ec2/network_interface.rb +228 -0
  223. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  224. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  225. data/lib/aws/ec2/permission_collection.rb +174 -0
  226. data/lib/aws/ec2/region.rb +106 -0
  227. data/lib/aws/ec2/region_collection.rb +51 -0
  228. data/lib/aws/ec2/request.rb +21 -0
  229. data/lib/aws/ec2/reserved_instances.rb +56 -0
  230. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  231. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  232. data/lib/aws/ec2/reserved_instances_offering_collection.rb +39 -0
  233. data/lib/aws/ec2/resource.rb +161 -0
  234. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  235. data/lib/aws/ec2/route_table.rb +205 -0
  236. data/lib/aws/ec2/route_table/association.rb +119 -0
  237. data/lib/aws/ec2/route_table/route.rb +119 -0
  238. data/lib/aws/ec2/route_table_collection.rb +72 -0
  239. data/lib/aws/ec2/security_group.rb +484 -0
  240. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  241. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  242. data/lib/aws/ec2/security_group_collection.rb +135 -0
  243. data/lib/aws/ec2/snapshot.rb +143 -0
  244. data/lib/aws/ec2/snapshot_collection.rb +132 -0
  245. data/lib/aws/ec2/subnet.rb +161 -0
  246. data/lib/aws/ec2/subnet_collection.rb +115 -0
  247. data/lib/aws/ec2/tag.rb +81 -0
  248. data/lib/aws/ec2/tag_collection.rb +107 -0
  249. data/lib/aws/ec2/tagged_collection.rb +53 -0
  250. data/lib/aws/ec2/tagged_item.rb +85 -0
  251. data/lib/aws/ec2/volume.rb +174 -0
  252. data/lib/aws/ec2/volume_collection.rb +101 -0
  253. data/lib/aws/ec2/vpc.rb +166 -0
  254. data/lib/aws/ec2/vpc_collection.rb +70 -0
  255. data/lib/aws/ec2/vpn_connection.rb +99 -0
  256. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  257. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  258. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  259. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  260. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  261. data/lib/aws/elastic_beanstalk.rb +50 -0
  262. data/lib/aws/elastic_beanstalk/client.rb +867 -0
  263. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  264. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  265. data/lib/aws/elastic_beanstalk/request.rb +29 -0
  266. data/lib/aws/elastic_transcoder.rb +30 -0
  267. data/lib/aws/elastic_transcoder/client.rb +672 -0
  268. data/lib/aws/elastic_transcoder/config.rb +18 -0
  269. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  270. data/lib/aws/elastic_transcoder/request.rb +30 -0
  271. data/lib/aws/elasticache.rb +50 -0
  272. data/lib/aws/elasticache/client.rb +920 -0
  273. data/lib/aws/elasticache/config.rb +18 -0
  274. data/lib/aws/elasticache/errors.rb +22 -0
  275. data/lib/aws/elasticache/request.rb +23 -0
  276. data/lib/aws/elb.rb +67 -0
  277. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  278. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  279. data/lib/aws/elb/client.rb +500 -0
  280. data/lib/aws/elb/config.rb +18 -0
  281. data/lib/aws/elb/errors.rb +26 -0
  282. data/lib/aws/elb/instance_collection.rb +173 -0
  283. data/lib/aws/elb/listener.rb +190 -0
  284. data/lib/aws/elb/listener_collection.rb +113 -0
  285. data/lib/aws/elb/listener_opts.rb +45 -0
  286. data/lib/aws/elb/load_balancer.rb +281 -0
  287. data/lib/aws/elb/load_balancer_collection.rb +134 -0
  288. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  289. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  290. data/lib/aws/elb/request.rb +29 -0
  291. data/lib/aws/emr.rb +86 -0
  292. data/lib/aws/emr/client.rb +330 -0
  293. data/lib/aws/emr/config.rb +18 -0
  294. data/lib/aws/emr/errors.rb +22 -0
  295. data/lib/aws/emr/instance_group.rb +138 -0
  296. data/lib/aws/emr/instance_group_collection.rb +82 -0
  297. data/lib/aws/emr/job_flow.rb +306 -0
  298. data/lib/aws/emr/job_flow_collection.rb +185 -0
  299. data/lib/aws/emr/request.rb +23 -0
  300. data/lib/aws/errors.rb +162 -0
  301. data/lib/aws/glacier.rb +80 -0
  302. data/lib/aws/glacier/archive.rb +56 -0
  303. data/lib/aws/glacier/archive_collection.rb +146 -0
  304. data/lib/aws/glacier/client.rb +286 -0
  305. data/lib/aws/glacier/config.rb +19 -0
  306. data/lib/aws/glacier/errors.rb +22 -0
  307. data/lib/aws/glacier/request.rb +34 -0
  308. data/lib/aws/glacier/resource.rb +30 -0
  309. data/lib/aws/glacier/vault.rb +145 -0
  310. data/lib/aws/glacier/vault_collection.rb +75 -0
  311. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  312. data/lib/aws/iam.rb +420 -0
  313. data/lib/aws/iam/access_key.rb +180 -0
  314. data/lib/aws/iam/access_key_collection.rb +128 -0
  315. data/lib/aws/iam/account_alias_collection.rb +79 -0
  316. data/lib/aws/iam/client.rb +1092 -0
  317. data/lib/aws/iam/collection.rb +83 -0
  318. data/lib/aws/iam/config.rb +18 -0
  319. data/lib/aws/iam/errors.rb +22 -0
  320. data/lib/aws/iam/group.rb +111 -0
  321. data/lib/aws/iam/group_collection.rb +132 -0
  322. data/lib/aws/iam/group_policy_collection.rb +47 -0
  323. data/lib/aws/iam/group_user_collection.rb +84 -0
  324. data/lib/aws/iam/login_profile.rb +99 -0
  325. data/lib/aws/iam/mfa_device.rb +52 -0
  326. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  327. data/lib/aws/iam/policy.rb +46 -0
  328. data/lib/aws/iam/policy_collection.rb +188 -0
  329. data/lib/aws/iam/request.rb +29 -0
  330. data/lib/aws/iam/resource.rb +62 -0
  331. data/lib/aws/iam/server_certificate.rb +141 -0
  332. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  333. data/lib/aws/iam/signing_certificate.rb +169 -0
  334. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  335. data/lib/aws/iam/user.rb +205 -0
  336. data/lib/aws/iam/user_collection.rb +133 -0
  337. data/lib/aws/iam/user_group_collection.rb +98 -0
  338. data/lib/aws/iam/user_policy.rb +90 -0
  339. data/lib/aws/iam/user_policy_collection.rb +45 -0
  340. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  341. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  342. data/lib/aws/import_export.rb +73 -0
  343. data/lib/aws/import_export/client.rb +109 -0
  344. data/lib/aws/import_export/config.rb +19 -0
  345. data/lib/aws/import_export/errors.rb +22 -0
  346. data/lib/aws/import_export/request.rb +23 -0
  347. data/lib/aws/ops_works.rb +30 -0
  348. data/lib/aws/ops_works/client.rb +713 -0
  349. data/lib/aws/ops_works/config.rb +18 -0
  350. data/lib/aws/ops_works/errors.rb +20 -0
  351. data/lib/aws/ops_works/request.rb +27 -0
  352. data/lib/aws/rails.rb +195 -0
  353. data/lib/aws/rds.rb +71 -0
  354. data/lib/aws/rds/client.rb +2228 -0
  355. data/lib/aws/rds/config.rb +18 -0
  356. data/lib/aws/rds/db_instance.rb +205 -0
  357. data/lib/aws/rds/db_instance_collection.rb +75 -0
  358. data/lib/aws/rds/db_snapshot.rb +163 -0
  359. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  360. data/lib/aws/rds/errors.rb +22 -0
  361. data/lib/aws/rds/request.rb +23 -0
  362. data/lib/aws/record.rb +116 -0
  363. data/lib/aws/record/abstract_base.rb +701 -0
  364. data/lib/aws/record/attributes.rb +384 -0
  365. data/lib/aws/record/conversion.rb +38 -0
  366. data/lib/aws/record/dirty_tracking.rb +285 -0
  367. data/lib/aws/record/errors.rb +143 -0
  368. data/lib/aws/record/exceptions.rb +48 -0
  369. data/lib/aws/record/hash_model.rb +161 -0
  370. data/lib/aws/record/hash_model/attributes.rb +197 -0
  371. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  372. data/lib/aws/record/hash_model/scope.rb +108 -0
  373. data/lib/aws/record/model.rb +427 -0
  374. data/lib/aws/record/model/attributes.rb +379 -0
  375. data/lib/aws/record/model/finder_methods.rb +232 -0
  376. data/lib/aws/record/model/scope.rb +213 -0
  377. data/lib/aws/record/naming.rb +31 -0
  378. data/lib/aws/record/scope.rb +199 -0
  379. data/lib/aws/record/validations.rb +712 -0
  380. data/lib/aws/record/validator.rb +246 -0
  381. data/lib/aws/record/validators/acceptance.rb +51 -0
  382. data/lib/aws/record/validators/block.rb +38 -0
  383. data/lib/aws/record/validators/confirmation.rb +43 -0
  384. data/lib/aws/record/validators/count.rb +108 -0
  385. data/lib/aws/record/validators/exclusion.rb +43 -0
  386. data/lib/aws/record/validators/format.rb +57 -0
  387. data/lib/aws/record/validators/inclusion.rb +56 -0
  388. data/lib/aws/record/validators/length.rb +107 -0
  389. data/lib/aws/record/validators/method.rb +33 -0
  390. data/lib/aws/record/validators/numericality.rb +138 -0
  391. data/lib/aws/record/validators/presence.rb +45 -0
  392. data/lib/aws/redshift.rb +52 -0
  393. data/lib/aws/redshift/client.rb +1291 -0
  394. data/lib/aws/redshift/config.rb +18 -0
  395. data/lib/aws/redshift/errors.rb +22 -0
  396. data/lib/aws/redshift/request.rb +29 -0
  397. data/lib/aws/route_53.rb +87 -0
  398. data/lib/aws/route_53/change_batch.rb +159 -0
  399. data/lib/aws/route_53/change_info.rb +72 -0
  400. data/lib/aws/route_53/client.rb +387 -0
  401. data/lib/aws/route_53/config.rb +18 -0
  402. data/lib/aws/route_53/errors.rb +22 -0
  403. data/lib/aws/route_53/hosted_zone.rb +111 -0
  404. data/lib/aws/route_53/hosted_zone_collection.rb +100 -0
  405. data/lib/aws/route_53/request.rb +23 -0
  406. data/lib/aws/route_53/resource_record_set.rb +237 -0
  407. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  408. data/lib/aws/s3.rb +155 -0
  409. data/lib/aws/s3/access_control_list.rb +257 -0
  410. data/lib/aws/s3/acl_object.rb +264 -0
  411. data/lib/aws/s3/acl_options.rb +204 -0
  412. data/lib/aws/s3/bucket.rb +742 -0
  413. data/lib/aws/s3/bucket_collection.rb +160 -0
  414. data/lib/aws/s3/bucket_lifecycle_configuration.rb +458 -0
  415. data/lib/aws/s3/bucket_tag_collection.rb +109 -0
  416. data/lib/aws/s3/bucket_version_collection.rb +77 -0
  417. data/lib/aws/s3/cipher_io.rb +119 -0
  418. data/lib/aws/s3/client.rb +1700 -0
  419. data/lib/aws/s3/client/xml.rb +231 -0
  420. data/lib/aws/s3/config.rb +36 -0
  421. data/lib/aws/s3/cors_rule.rb +106 -0
  422. data/lib/aws/s3/cors_rule_collection.rb +192 -0
  423. data/lib/aws/s3/data_options.rb +185 -0
  424. data/lib/aws/s3/encryption_utils.rb +139 -0
  425. data/lib/aws/s3/errors.rb +94 -0
  426. data/lib/aws/s3/multipart_upload.rb +320 -0
  427. data/lib/aws/s3/multipart_upload_collection.rb +68 -0
  428. data/lib/aws/s3/object_collection.rb +355 -0
  429. data/lib/aws/s3/object_metadata.rb +96 -0
  430. data/lib/aws/s3/object_upload_collection.rb +77 -0
  431. data/lib/aws/s3/object_version.rb +148 -0
  432. data/lib/aws/s3/object_version_collection.rb +89 -0
  433. data/lib/aws/s3/paginated_collection.rb +75 -0
  434. data/lib/aws/s3/policy.rb +74 -0
  435. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  436. data/lib/aws/s3/prefixed_collection.rb +81 -0
  437. data/lib/aws/s3/presigned_post.rb +555 -0
  438. data/lib/aws/s3/request.rb +201 -0
  439. data/lib/aws/s3/s3_object.rb +1690 -0
  440. data/lib/aws/s3/tree.rb +118 -0
  441. data/lib/aws/s3/tree/branch_node.rb +68 -0
  442. data/lib/aws/s3/tree/child_collection.rb +104 -0
  443. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  444. data/lib/aws/s3/tree/node.rb +22 -0
  445. data/lib/aws/s3/tree/parent.rb +87 -0
  446. data/lib/aws/s3/uploaded_part.rb +80 -0
  447. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  448. data/lib/aws/s3/website_configuration.rb +102 -0
  449. data/lib/aws/simple_db.rb +219 -0
  450. data/lib/aws/simple_db/attribute.rb +154 -0
  451. data/lib/aws/simple_db/attribute_collection.rb +231 -0
  452. data/lib/aws/simple_db/client.rb +287 -0
  453. data/lib/aws/simple_db/config.rb +20 -0
  454. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  455. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  456. data/lib/aws/simple_db/domain.rb +121 -0
  457. data/lib/aws/simple_db/domain_collection.rb +86 -0
  458. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  459. data/lib/aws/simple_db/errors.rb +55 -0
  460. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  461. data/lib/aws/simple_db/item.rb +93 -0
  462. data/lib/aws/simple_db/item_collection.rb +649 -0
  463. data/lib/aws/simple_db/item_data.rb +73 -0
  464. data/lib/aws/simple_db/put_attributes.rb +60 -0
  465. data/lib/aws/simple_db/request.rb +23 -0
  466. data/lib/aws/simple_email_service.rb +428 -0
  467. data/lib/aws/simple_email_service/client.rb +276 -0
  468. data/lib/aws/simple_email_service/config.rb +19 -0
  469. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  470. data/lib/aws/simple_email_service/errors.rb +22 -0
  471. data/lib/aws/simple_email_service/identity.rb +209 -0
  472. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  473. data/lib/aws/simple_email_service/quotas.rb +64 -0
  474. data/lib/aws/simple_email_service/request.rb +27 -0
  475. data/lib/aws/simple_workflow.rb +228 -0
  476. data/lib/aws/simple_workflow/activity_task.rb +173 -0
  477. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  478. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  479. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  480. data/lib/aws/simple_workflow/client.rb +1204 -0
  481. data/lib/aws/simple_workflow/config.rb +18 -0
  482. data/lib/aws/simple_workflow/count.rb +49 -0
  483. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  484. data/lib/aws/simple_workflow/decision_task_collection.rb +225 -0
  485. data/lib/aws/simple_workflow/domain.rb +122 -0
  486. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  487. data/lib/aws/simple_workflow/errors.rb +20 -0
  488. data/lib/aws/simple_workflow/history_event.rb +276 -0
  489. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  490. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  491. data/lib/aws/simple_workflow/request.rb +33 -0
  492. data/lib/aws/simple_workflow/resource.rb +94 -0
  493. data/lib/aws/simple_workflow/type.rb +89 -0
  494. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  495. data/lib/aws/simple_workflow/workflow_execution.rb +386 -0
  496. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  497. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  498. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  499. data/lib/aws/sns.rb +76 -0
  500. data/lib/aws/sns/client.rb +266 -0
  501. data/lib/aws/sns/config.rb +18 -0
  502. data/lib/aws/sns/errors.rb +22 -0
  503. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  504. data/lib/aws/sns/policy.rb +47 -0
  505. data/lib/aws/sns/request.rb +23 -0
  506. data/lib/aws/sns/subscription.rb +144 -0
  507. data/lib/aws/sns/subscription_collection.rb +78 -0
  508. data/lib/aws/sns/topic.rb +403 -0
  509. data/lib/aws/sns/topic_collection.rb +62 -0
  510. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  511. data/lib/aws/sqs.rb +81 -0
  512. data/lib/aws/sqs/client.rb +258 -0
  513. data/lib/aws/sqs/config.rb +18 -0
  514. data/lib/aws/sqs/errors.rb +101 -0
  515. data/lib/aws/sqs/policy.rb +48 -0
  516. data/lib/aws/sqs/queue.rb +764 -0
  517. data/lib/aws/sqs/queue_collection.rb +174 -0
  518. data/lib/aws/sqs/received_message.rb +181 -0
  519. data/lib/aws/sqs/received_sns_message.rb +116 -0
  520. data/lib/aws/sqs/request.rb +67 -0
  521. data/lib/aws/storage_gateway.rb +73 -0
  522. data/lib/aws/storage_gateway/client.rb +472 -0
  523. data/lib/aws/storage_gateway/config.rb +18 -0
  524. data/lib/aws/storage_gateway/errors.rb +22 -0
  525. data/lib/aws/storage_gateway/request.rb +28 -0
  526. data/lib/aws/sts.rb +163 -0
  527. data/lib/aws/sts/client.rb +157 -0
  528. data/lib/aws/sts/config.rb +18 -0
  529. data/lib/aws/sts/errors.rb +22 -0
  530. data/lib/aws/sts/federated_session.rb +56 -0
  531. data/lib/aws/sts/policy.rb +30 -0
  532. data/lib/aws/sts/request.rb +29 -0
  533. data/lib/aws/sts/session.rb +48 -0
  534. data/lib/aws/version.rb +18 -0
  535. data/lib/net/http/connection_pool.rb +226 -0
  536. data/lib/net/http/connection_pool/connection.rb +189 -0
  537. data/lib/net/http/connection_pool/session.rb +126 -0
  538. data/rails/init.rb +15 -0
  539. metadata +632 -0
@@ -0,0 +1,185 @@
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 'pathname'
15
+
16
+ module AWS
17
+ class S3
18
+
19
+ # Used by S3#S3Object and S3::Client to accept options with
20
+ # data that should be uploaded (streamed).
21
+ # @private
22
+ module DataOptions
23
+
24
+ protected
25
+
26
+ # @return [Hash] Returns a hash of options with a :data option that
27
+ # responds to #read and #eof?.
28
+ def compute_write_options *args, &block
29
+
30
+ options = convert_args_to_options_hash(*args)
31
+
32
+ validate_data!(options, &block)
33
+
34
+ rename_file_to_data(options)
35
+
36
+ convert_data_to_io_obj(options, &block)
37
+
38
+ try_to_determine_content_length(options)
39
+
40
+ options
41
+
42
+ end
43
+
44
+ # Converts an argument list into a single hash of options. Treats
45
+ # non-hash arguments in the first position as a data option.
46
+ def convert_args_to_options_hash *args
47
+ case args.count
48
+ when 0 then {}
49
+ when 1 then args[0].is_a?(Hash) ? args[0] : { :data => args[0] }
50
+ when 2 then args[1].merge(:data => args[0])
51
+ else
52
+ msg = "expected 0, 1 or 2 arguments, got #{args.count}"
53
+ raise ArgumentError, msg
54
+ end
55
+ end
56
+
57
+ # Moves options[:file] to options[:data]. If this option is a string
58
+ # then it is treated as a file path and is converted to an open file.
59
+ def rename_file_to_data options
60
+ if file = options.delete(:file)
61
+ options[:data] = file.is_a?(String) ? open_file(file) : file
62
+ end
63
+ end
64
+
65
+ # Converts the :data option to an IO-like object. This allows us
66
+ # to always perform streaming uploads.
67
+ def convert_data_to_io_obj options, &block
68
+
69
+ data = options.delete(:data)
70
+
71
+ if block_given?
72
+ options[:data] = IOProxy.new(block)
73
+ elsif data.is_a?(String)
74
+ data.force_encoding("BINARY") if data.respond_to?(:force_encoding)
75
+ options[:data] = StringIO.new(data)
76
+ elsif data.is_a?(Pathname)
77
+ options[:data] = open_file(data.to_s)
78
+ elsif io_like?(data)
79
+ options[:data] = data
80
+ else
81
+ msg = "invalid :data option, expected a String, Pathname or "
82
+ msg << "an object that responds to #read and #eof?"
83
+ raise ArgumentError, msg
84
+ end
85
+
86
+ end
87
+
88
+ # Attempts to determine the content length of the :data option.
89
+ # This is only done when a content length is not already provided.
90
+ def try_to_determine_content_length options
91
+ unless options[:content_length]
92
+
93
+ data = options[:data]
94
+
95
+ length = case
96
+ when data.respond_to?(:bytesize) then data.bytesize
97
+ when data.respond_to?(:size) then data.size
98
+ when data.respond_to?(:length) then data.length
99
+ when data.respond_to?(:path) then File.size(data.path)
100
+ else nil
101
+ end
102
+
103
+ options[:content_length] = length if length
104
+
105
+ end
106
+ end
107
+
108
+ def validate_data! options, &block
109
+
110
+ data = options[:data]
111
+ file = options[:file]
112
+
113
+ raise ArgumentError, 'Object data passed multiple ways.' if
114
+ [data, file, block].compact.count > 1
115
+
116
+ data = file if file
117
+
118
+ return if block_given?
119
+ return if data.kind_of?(String)
120
+ return if data.kind_of?(Pathname)
121
+ return if io_like?(data)
122
+
123
+ msg = ":data must be provided as a String, Pathname, File, or "
124
+ msg << "an object that responds to #read and #eof?"
125
+ raise ArgumentError, msg
126
+
127
+ end
128
+
129
+ # @return [Boolean] Returns +true+ if the object responds to
130
+ # +#read+ and +#eof?+.
131
+ def io_like? io
132
+ io.respond_to?(:read) and io.respond_to?(:eof?)
133
+ end
134
+
135
+ # @param [String] path Path to a file on disk.
136
+ # @return [File] Given a path string, returns an open File.
137
+ def open_file path
138
+ Core::ManagedFile.open(path)
139
+ end
140
+
141
+ # A utility class that turns a block (with 2 args) into an
142
+ # IO object that responds to #read and #eof.
143
+ # @private
144
+ class IOProxy
145
+
146
+ def initialize write_block
147
+ unless write_block.arity == 2
148
+ msg = "a write block must accept 2 yield params: a buffer and "
149
+ msg << "a number of bytes to write"
150
+ raise ArgumentError, msg
151
+ end
152
+ @write_block = write_block
153
+ @eof = false
154
+ end
155
+
156
+ def read bytes = nil
157
+ if bytes
158
+ buffer = StringIO.new
159
+ @write_block.call(buffer, bytes)
160
+ buffer.rewind
161
+ @eof = true if buffer.size < bytes
162
+ buffer.size == 0 ? nil : buffer.read
163
+ else
164
+ read_all
165
+ end
166
+ end
167
+
168
+ def eof?
169
+ @eof
170
+ end
171
+
172
+ protected
173
+
174
+ def read_all
175
+ buffer = StringIO.new
176
+ buffer << read(1024 * 1024 * 5) until eof?
177
+ buffer.rewind
178
+ buffer.read
179
+ end
180
+
181
+ end
182
+
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,139 @@
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 'openssl'
15
+
16
+ module AWS
17
+ class S3
18
+ # @private
19
+ module EncryptionUtils
20
+
21
+ protected
22
+
23
+
24
+ # @param [OpenSSL::PKey::RSA, String] key Key used to encrypt.
25
+ #
26
+ # @param [String] data Data to be encrypted.
27
+ #
28
+ # @note Use check_encryption_materials before this method to check
29
+ # formatting of keys
30
+ #
31
+ # @return [String] Returns the data encrypted with the key given.
32
+ def encrypt data, key
33
+ rsa = OpenSSL::PKey::RSA
34
+ ## Encrypting data key
35
+ case key
36
+ when rsa # Asymmetric encryption
37
+ key.public_encrypt(data)
38
+ when String # Symmetric encryption
39
+ cipher = get_aes_cipher(:encrypt, :ECB, key)
40
+ cipher.update(data) + cipher.final
41
+ end
42
+ end
43
+
44
+ # @param [OpenSSL::PKey::RSA, String] key Key used to encrypt.
45
+ #
46
+ # @param [String] data Data to be encrypted.
47
+ #
48
+ # @note Use check_encryption_materials before this method to check
49
+ # formatting of keys
50
+ #
51
+ # @return [String] Returns the data decrypted with the key given.
52
+ def decrypt data, key
53
+ rsa = OpenSSL::PKey::RSA
54
+ begin
55
+ case key
56
+ when rsa # Asymmetric Decryption
57
+ key.private_decrypt(data)
58
+ when String # Symmetric Decryption
59
+ cipher = get_aes_cipher(:decrypt, :ECB, key)
60
+ cipher.update(data) + cipher.final
61
+ end
62
+ rescue OpenSSL::Cipher::CipherError
63
+ raise RuntimeError, "decryption failed, incorrect key?"
64
+ end
65
+ end
66
+
67
+ # Checks for any formatting problems for keys and initialization vectors
68
+ # supported with EncryptionUtils.
69
+ def check_encryption_materials mode, key
70
+ rsa = OpenSSL::PKey::RSA
71
+ case key
72
+ when rsa
73
+ unless key.private? or mode == :encrypt
74
+ msg = "invalid key, #{rsa} requires a private key"
75
+ raise ArgumentError, msg
76
+ end
77
+ when String # no problem
78
+ else
79
+ msg = "invalid key, must be an #{rsa} or a cipher key string"
80
+ raise ArgumentError, msg
81
+ end
82
+ end
83
+
84
+ # @param [OpenSSL::Cipher] cipher The cipher with configured key and iv.
85
+ #
86
+ # @yield [String, String] key_iv_pair A randomly generated key, iv pair
87
+ # for use with the given cipher. Sets the key and iv on the cipher.
88
+ def generate_aes_key cipher, &block
89
+ key_iv_pair = [cipher.random_key, cipher.random_iv]
90
+ yield(key_iv_pair) if block_given?
91
+ end
92
+
93
+ # @param [Symbol] mode The encryption/decryption mode. Valid inputs are
94
+ # :encrypt or :decrypt
95
+ #
96
+ # @param [String] key Key for the cipher.
97
+ #
98
+ # @param [String] iv IV for the cipher.
99
+ #
100
+ # @return [OpenSSL::Cipher] Will return a configured +OpenSSL::Cipher+.
101
+ def get_aes_cipher mode, block_mode, key = nil, iv = nil
102
+
103
+ # If no key given, default to 256 bit
104
+ cipher_size = (key) ? get_cipher_size(key.length) : 256
105
+
106
+ cipher = OpenSSL::Cipher.new("AES-#{cipher_size}-#{block_mode}")
107
+
108
+ (mode == :encrypt) ? cipher.encrypt : cipher.decrypt
109
+ cipher.key = key if key
110
+ cipher.iv = iv if iv
111
+ cipher
112
+ end
113
+
114
+ # @param [Integer] size Size of data given.
115
+ # @return [Integer] Returns the AES encrypted size based on a given size.
116
+ def get_encrypted_size size
117
+ # The next multiple of 16
118
+ ((size / 16) + 1) * 16
119
+ end
120
+ module_function :get_encrypted_size
121
+
122
+ private
123
+
124
+ # @param [Fixnum] key_length Length of the key given.
125
+ # @return [Fixnum] Returns the cipher size based on the key length.
126
+ def get_cipher_size(key_length)
127
+ case key_length
128
+ when 32 then 256
129
+ when 24 then 192
130
+ when 16 then 128
131
+ else
132
+ msg = "invalid key, symmetric key required to be 16, 24, or 32 bytes "
133
+ msg << "in length, saw length #{key_length}"
134
+ raise ArgumentError, msg
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,94 @@
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
+ class S3
16
+
17
+ # This module contains exception classes for each of the error
18
+ # types that S3 can return. You can use these classes to rescue
19
+ # specific errors, for example:
20
+ #
21
+ # begin
22
+ # S3.new.buckets.mybucket.
23
+ # objects.myobj.write("HELLO")
24
+ # rescue S3::Errors::NoSuchBucket => e
25
+ # S3.new.buckets.create("mybucket")
26
+ # retry
27
+ # end
28
+ #
29
+ # All errors raised as a result of error responses from the
30
+ # service are instances of either {ClientError} or {ServerError}.
31
+ module Errors
32
+
33
+ # @private
34
+ GRAMMAR = Core::XML::Grammar.customize
35
+
36
+ extend Core::LazyErrorClasses
37
+
38
+ class BatchDeleteError < StandardError
39
+
40
+ def initialize error_counts
41
+ @error_counts = error_counts
42
+ total = error_counts.values.inject(0) {|sum,count| sum + count }
43
+ super("Failed to delete #{total} objects")
44
+ end
45
+
46
+ # @return [Hash] Returns a hash of error codes and how many
47
+ # objects failed with that code.
48
+ attr_reader :error_counts
49
+
50
+ end
51
+
52
+ # This error is special, because S3 does not (and must not
53
+ # according to RFC 2616) return a body with the HTTP response.
54
+ # The interface is the same as for any other client error.
55
+ class NotModified < AWS::Errors::Base
56
+
57
+ include AWS::Errors::ClientError
58
+
59
+ def initialize(req, resp)
60
+ super(req, resp, "NotModified", "Not Modified")
61
+ end
62
+
63
+ end
64
+
65
+ # This error is special, because S3 does not return a body with
66
+ # the HTTP response. The interface is the same as for any other
67
+ # client error.
68
+ class NoSuchKey < AWS::Errors::Base
69
+
70
+ include AWS::Errors::ClientError
71
+
72
+ def initialize(req, resp, code = nil, message = nil)
73
+ super(req, resp, "NoSuchKey", "No Such Key")
74
+ end
75
+
76
+ end
77
+
78
+ # This error is special, because S3 must first retrieve the client
79
+ # side encryption key in it's encrypted form before finding if the
80
+ # key is incorrect.
81
+ class IncorrectClientSideEncryptionKey < AWS::Errors::Base
82
+
83
+ include AWS::Errors::ClientError
84
+
85
+ def initialize(msg)
86
+ super("",
87
+ "",
88
+ "IncorrectClientSideEncryptionKey",
89
+ msg)
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,320 @@
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 'thread'
15
+
16
+ module AWS
17
+ class S3
18
+
19
+ # Represents a multipart upload to an S3 object. See
20
+ # {S3Object#multipart_upload} for a convenient way to initiate a
21
+ # multipart upload.
22
+ class MultipartUpload
23
+
24
+ include Core::Model
25
+
26
+ # @private
27
+ def initialize(object, id, options = {})
28
+ @id = id
29
+ @object = object
30
+
31
+ super
32
+
33
+ @completed_parts = {}
34
+ @increment_mutex = Mutex.new
35
+ @completed_mutex = Mutex.new
36
+ @last_part = 0
37
+ end
38
+
39
+ def bucket
40
+ object.bucket
41
+ end
42
+
43
+ def inspect
44
+ "<#{self.class}:#{object.bucket.name}/#{object.key}:#{id}>"
45
+ end
46
+ # @return [String] Returns the upload id.
47
+ attr_reader :id
48
+
49
+ alias_method :upload_id, :id
50
+
51
+ # @return [S3Object] Returns the object this upload is intended for.
52
+ attr_reader :object
53
+
54
+ # @return [Boolean] Returns true if both multipart uploads
55
+ # represent the same object and upload.
56
+ def ==(other)
57
+ other.kind_of?(MultipartUpload) and
58
+ other.object == object and
59
+ other.id == id
60
+ end
61
+
62
+ alias_method :eql?, :==
63
+
64
+ # @return [Boolean] True if the upload exists.
65
+ def exists?
66
+ client.list_parts(base_opts)
67
+ rescue Errors::NoSuchUpload => e
68
+ false
69
+ else
70
+ true
71
+ end
72
+
73
+ # @return The upload initiator. This object will have +:id+
74
+ # and +:display_name+ methods; if the initiator is an IAM
75
+ # user, the +:id+ method will return the ARN of the user, and
76
+ # if the initiator is an AWS account, this method will return
77
+ # the same data as {#owner}.
78
+ def initiator
79
+ client.list_parts(base_opts).initiator
80
+ end
81
+
82
+ # @return The upload owner. This object will have +:id+
83
+ # and +:display_name+ methods.
84
+ def owner
85
+ client.list_parts(base_opts).owner
86
+ end
87
+
88
+ # @return [Symbol] The class of storage used to store the
89
+ # uploaded object. Possible values:
90
+ #
91
+ # * +:standard+
92
+ # * +:reduced_redundancy?+
93
+ def storage_class
94
+ client.list_parts(base_opts).storage_class.downcase.to_sym
95
+ end
96
+
97
+ # @return [Boolean] True if the uploaded object will be stored
98
+ # with reduced redundancy.
99
+ def reduced_redundancy?
100
+ storage_class == :reduced_redundancy
101
+ end
102
+
103
+ # Aborts the upload. After a multipart upload is aborted, no
104
+ # additional parts can be uploaded using that upload ID. The
105
+ # storage consumed by any previously uploaded parts will be
106
+ # freed. However, if any part uploads are currently in
107
+ # progress, those part uploads might or might not succeed. As
108
+ # a result, it might be necessary to abort a given multipart
109
+ # upload multiple times in order to completely free all
110
+ # storage consumed by all parts.
111
+ # @return [nil]
112
+ def abort
113
+ unless aborted?
114
+ client.abort_multipart_upload(base_opts)
115
+ @aborted = true
116
+ end
117
+ nil
118
+ end
119
+ alias_method :delete, :abort
120
+ alias_method :cancel, :abort
121
+
122
+ # @return [Boolean] True if the upload has been aborted.
123
+ # @see #abort
124
+ def aborted?
125
+ @aborted
126
+ end
127
+
128
+ # Uploads a part.
129
+ #
130
+ # @overload add_part(data, options = {})
131
+ #
132
+ # @param data The data to upload. Valid values include:
133
+ #
134
+ # * A string
135
+ #
136
+ # * A Pathname object
137
+ #
138
+ # * Any object responding to +read+ and +eof?+; the object
139
+ # must support the following access methods:
140
+ #
141
+ # read # all at once
142
+ # read(length) until eof? # in chunks
143
+ #
144
+ # If you specify data this way, you must also include
145
+ # the +:content_length+ option.
146
+ #
147
+ # @param [Hash] options Additional options for the upload.
148
+ #
149
+ # @option options [Integer] :content_length If provided,
150
+ # this option must match the total number of bytes written
151
+ # to S3 during the operation. This option is required if
152
+ # +:data+ is an IO-like object without a +size+ method.
153
+ #
154
+ # @overload add_part(options)
155
+ #
156
+ # @param [Hash] options Options for the upload. Either
157
+ # +:data+ or +:file+ is required.
158
+ #
159
+ # @option options :data The data to upload. Valid values
160
+ # include:
161
+ #
162
+ # * A string
163
+ #
164
+ # * A Pathname object
165
+ #
166
+ # * Any object responding to +read+ and +eof?+; the object
167
+ # must support the following access methods:
168
+ #
169
+ # read # all at once
170
+ # read(length) until eof? # in chunks
171
+ #
172
+ # If you specify data this way, you must also include
173
+ # the +:content_length+ option.
174
+ #
175
+ # @option options [String] :file Can be specified instead of
176
+ # +:data+; its value specifies the path of a file to
177
+ # upload.
178
+ #
179
+ # @option options [Integer] :content_length If provided,
180
+ # this option must match the total number of bytes written
181
+ # to S3 during the operation. This option is required if
182
+ # +:data+ is an IO-like object without a +size+ method.
183
+ #
184
+ # @option options [Integer] :part_number The part number.
185
+ def add_part(data_or_options, options = {})
186
+ if data_or_options.kind_of?(Hash)
187
+ part_options = base_opts.merge(data_or_options)
188
+ else
189
+ part_options = base_opts.merge(:data => data_or_options)
190
+ end
191
+ part_options.merge!(options)
192
+
193
+ unless part_options[:part_number]
194
+ @increment_mutex.synchronize do
195
+ part_options[:part_number] = (@last_part += 1)
196
+ end
197
+ end
198
+ part_number = part_options[:part_number]
199
+
200
+ resp = client.upload_part(part_options)
201
+ @completed_mutex.synchronize do
202
+ @completed_parts[part_number] = {
203
+ :part_number => part_number,
204
+ :etag => resp.etag
205
+ }
206
+ end
207
+ UploadedPart.new(self, part_number)
208
+ end
209
+
210
+ # Completes the upload by assembling previously uploaded
211
+ # parts.
212
+ #
213
+ # @return [S3Object, ObjectVersion] If the bucket has versioning
214
+ # enabled, returns the {ObjectVersion} representing the
215
+ # version that was uploaded. If versioning is disabled,
216
+ # returns the object.
217
+ def complete(*parts)
218
+ parts = parts.flatten
219
+ case parts.first
220
+ when :remote_parts
221
+ complete_opts = get_complete_opts
222
+ when :local_parts, nil
223
+ complete_opts = base_opts.merge(:parts => completed_parts)
224
+ else
225
+ part_numbers = parts.map do |part|
226
+ case part
227
+ when Integer
228
+ part
229
+ when UploadedPart
230
+ raise ArgumentError.new("cannot complete an upload with parts "+
231
+ "from a different upload") unless
232
+ part.upload == self
233
+
234
+ part.part_number
235
+ else
236
+ raise ArgumentError.new("expected number or UploadedPart")
237
+ end
238
+ end
239
+ complete_opts = get_complete_opts(part_numbers)
240
+ end
241
+
242
+ raise "no parts uploaded" if complete_opts[:parts].empty?
243
+
244
+ resp = client.complete_multipart_upload(complete_opts)
245
+ if resp.data[:version_id]
246
+ ObjectVersion.new(object, resp.data[:version_id])
247
+ else
248
+ object
249
+ end
250
+ end
251
+
252
+ # Completes the upload or aborts it if no parts have been
253
+ # uploaded yet. Does nothing if the upload has already been
254
+ # aborted.
255
+ #
256
+ # @return [S3Object, ObjectVersion] If the bucket has versioning
257
+ # enabled, returns the {ObjectVersion} representing the
258
+ # version that was uploaded. If versioning is disabled,
259
+ # returns the object. If no upload was attempted (e.g. if it
260
+ # was aborted or if no parts were uploaded), returns +nil+.
261
+ def close
262
+ if aborted?
263
+ nil
264
+ elsif completed_parts.empty?
265
+ abort
266
+ else
267
+ complete
268
+ end
269
+ end
270
+
271
+ # @return [UploadedPartCollection] A collection representing
272
+ # the parts that have been uploaded to S3 for this upload.
273
+ def parts
274
+ UploadedPartCollection.new(self)
275
+ end
276
+
277
+ # @private
278
+ def completed_parts
279
+ @completed_parts.values.
280
+ sort { |a, b| a[:part_number] <=> b[:part_number] }
281
+ end
282
+
283
+ # @private
284
+ def inspect
285
+ "<#{self.class}:#{object.bucket.name}/#{object.key}:#{id}>"
286
+ end
287
+
288
+ # @private
289
+ private
290
+ def get_complete_opts(part_numbers = nil)
291
+ parts_resp = client.list_parts(base_opts)
292
+ complete_opts =
293
+ base_opts.merge(:parts =>
294
+ parts_resp.parts.map do |part|
295
+ { :part_number => part.part_number,
296
+ :etag => part.etag }
297
+ end)
298
+
299
+ complete_opts[:parts].reject! do |part|
300
+ !part_numbers.include?(part[:part_number])
301
+ end if part_numbers
302
+
303
+ complete_opts
304
+ end
305
+
306
+ # @private
307
+ private
308
+ def base_opts
309
+ opts = {
310
+ :bucket_name => object.bucket.name,
311
+ :key => object.key
312
+ }
313
+ opts[:upload_id] = upload_id if upload_id
314
+ opts
315
+ end
316
+
317
+ end
318
+
319
+ end
320
+ end