fog-aws 1.4.1 → 3.27.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 (761) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +17 -603
  3. data/CONTRIBUTING.md +6 -6
  4. data/CONTRIBUTORS.md +104 -1
  5. data/LICENSE.md +1 -1
  6. data/README.md +121 -7
  7. data/fog-aws.gemspec +16 -10
  8. data/lib/fog/aws/auto_scaling.rb +2 -1
  9. data/lib/fog/aws/beanstalk.rb +1 -1
  10. data/lib/fog/aws/cdn.rb +16 -3
  11. data/lib/fog/aws/cloud_formation.rb +1 -1
  12. data/lib/fog/aws/cloud_watch.rb +1 -1
  13. data/lib/fog/aws/compute.rb +119 -19
  14. data/lib/fog/aws/credential_fetcher.rb +93 -9
  15. data/lib/fog/aws/data_pipeline.rb +1 -1
  16. data/lib/fog/aws/dns.rb +155 -6
  17. data/lib/fog/aws/dynamodb.rb +1 -1
  18. data/lib/fog/aws/ecs.rb +1 -1
  19. data/lib/fog/aws/efs.rb +1 -1
  20. data/lib/fog/aws/elasticache.rb +6 -4
  21. data/lib/fog/aws/elb.rb +3 -2
  22. data/lib/fog/aws/elbv2.rb +72 -0
  23. data/lib/fog/aws/emr.rb +1 -1
  24. data/lib/fog/aws/glacier.rb +84 -22
  25. data/lib/fog/aws/iam.rb +1 -1
  26. data/lib/fog/aws/kinesis.rb +24 -16
  27. data/lib/fog/aws/kms.rb +1 -1
  28. data/lib/fog/aws/lambda.rb +1 -1
  29. data/lib/fog/aws/mock.rb +8 -0
  30. data/lib/fog/aws/models/auto_scaling/group.rb +10 -0
  31. data/lib/fog/aws/models/cdn/distribution.rb +4 -4
  32. data/lib/fog/aws/models/cdn/distribution_helper.rb +2 -2
  33. data/lib/fog/aws/models/cdn/distributions.rb +4 -4
  34. data/lib/fog/aws/models/cdn/distributions_helper.rb +2 -2
  35. data/lib/fog/aws/models/cdn/invalidation.rb +2 -2
  36. data/lib/fog/aws/models/cdn/invalidations.rb +3 -3
  37. data/lib/fog/aws/models/cdn/streaming_distribution.rb +3 -3
  38. data/lib/fog/aws/models/cdn/streaming_distributions.rb +4 -4
  39. data/lib/fog/aws/models/compute/address.rb +4 -2
  40. data/lib/fog/aws/models/compute/addresses.rb +3 -3
  41. data/lib/fog/aws/models/compute/dhcp_option.rb +3 -3
  42. data/lib/fog/aws/models/compute/dhcp_options.rb +7 -7
  43. data/lib/fog/aws/models/compute/flavor.rb +2 -2
  44. data/lib/fog/aws/models/compute/flavors.rb +4265 -363
  45. data/lib/fog/aws/models/compute/image.rb +2 -2
  46. data/lib/fog/aws/models/compute/images.rb +3 -3
  47. data/lib/fog/aws/models/compute/internet_gateway.rb +2 -2
  48. data/lib/fog/aws/models/compute/internet_gateways.rb +7 -7
  49. data/lib/fog/aws/models/compute/key_pair.rb +2 -2
  50. data/lib/fog/aws/models/compute/key_pairs.rb +3 -3
  51. data/lib/fog/aws/models/compute/network_acl.rb +4 -4
  52. data/lib/fog/aws/models/compute/network_acls.rb +6 -6
  53. data/lib/fog/aws/models/compute/network_interface.rb +2 -2
  54. data/lib/fog/aws/models/compute/network_interfaces.rb +5 -5
  55. data/lib/fog/aws/models/compute/route_table.rb +2 -2
  56. data/lib/fog/aws/models/compute/route_tables.rb +7 -7
  57. data/lib/fog/aws/models/compute/security_group.rb +15 -7
  58. data/lib/fog/aws/models/compute/security_groups.rb +3 -3
  59. data/lib/fog/aws/models/compute/server.rb +8 -4
  60. data/lib/fog/aws/models/compute/servers.rb +13 -8
  61. data/lib/fog/aws/models/compute/snapshot.rb +9 -8
  62. data/lib/fog/aws/models/compute/snapshots.rb +3 -3
  63. data/lib/fog/aws/models/compute/spot_request.rb +2 -2
  64. data/lib/fog/aws/models/compute/spot_requests.rb +3 -3
  65. data/lib/fog/aws/models/compute/subnet.rb +3 -2
  66. data/lib/fog/aws/models/compute/subnets.rb +3 -3
  67. data/lib/fog/aws/models/compute/tag.rb +2 -2
  68. data/lib/fog/aws/models/compute/tags.rb +3 -3
  69. data/lib/fog/aws/models/compute/volume.rb +21 -32
  70. data/lib/fog/aws/models/compute/volumes.rb +3 -3
  71. data/lib/fog/aws/models/compute/vpc.rb +21 -6
  72. data/lib/fog/aws/models/compute/vpcs.rb +3 -3
  73. data/lib/fog/aws/models/dns/record.rb +2 -2
  74. data/lib/fog/aws/models/dns/records.rb +4 -4
  75. data/lib/fog/aws/models/dns/zone.rb +3 -3
  76. data/lib/fog/aws/models/dns/zones.rb +4 -4
  77. data/lib/fog/aws/models/efs/file_system.rb +4 -0
  78. data/lib/fog/aws/models/elasticache/cluster.rb +1 -1
  79. data/lib/fog/aws/models/elb/backend_server_descriptions.rb +1 -1
  80. data/lib/fog/aws/models/elb/listeners.rb +3 -4
  81. data/lib/fog/aws/models/elb/load_balancer.rb +10 -2
  82. data/lib/fog/aws/models/elb/load_balancers.rb +5 -6
  83. data/lib/fog/aws/models/iam/access_keys.rb +0 -2
  84. data/lib/fog/aws/models/rds/cluster.rb +9 -1
  85. data/lib/fog/aws/models/rds/instance_option.rb +6 -0
  86. data/lib/fog/aws/models/rds/server.rb +66 -63
  87. data/lib/fog/aws/models/storage/directories.rb +4 -3
  88. data/lib/fog/aws/models/storage/directory.rb +40 -6
  89. data/lib/fog/aws/models/storage/file.rb +173 -28
  90. data/lib/fog/aws/models/storage/files.rb +37 -6
  91. data/lib/fog/aws/models/storage/version.rb +2 -2
  92. data/lib/fog/aws/models/storage/versions.rb +3 -3
  93. data/lib/fog/aws/parsers/cdn/distribution.rb +2 -2
  94. data/lib/fog/aws/parsers/cdn/get_distribution_list.rb +2 -2
  95. data/lib/fog/aws/parsers/cdn/get_invalidation.rb +2 -2
  96. data/lib/fog/aws/parsers/cdn/get_invalidation_list.rb +2 -2
  97. data/lib/fog/aws/parsers/cdn/get_streaming_distribution_list.rb +2 -2
  98. data/lib/fog/aws/parsers/cdn/post_invalidation.rb +2 -2
  99. data/lib/fog/aws/parsers/cdn/streaming_distribution.rb +1 -1
  100. data/lib/fog/aws/parsers/compute/allocate_address.rb +2 -2
  101. data/lib/fog/aws/parsers/compute/assign_private_ip_addresses.rb +2 -2
  102. data/lib/fog/aws/parsers/compute/associate_address.rb +2 -2
  103. data/lib/fog/aws/parsers/compute/associate_route_table.rb +2 -2
  104. data/lib/fog/aws/parsers/compute/attach_network_interface.rb +2 -2
  105. data/lib/fog/aws/parsers/compute/attach_volume.rb +2 -2
  106. data/lib/fog/aws/parsers/compute/basic.rb +2 -2
  107. data/lib/fog/aws/parsers/compute/cancel_spot_instance_requests.rb +2 -2
  108. data/lib/fog/aws/parsers/compute/copy_image.rb +2 -2
  109. data/lib/fog/aws/parsers/compute/copy_snapshot.rb +2 -2
  110. data/lib/fog/aws/parsers/compute/create_dhcp_options.rb +2 -2
  111. data/lib/fog/aws/parsers/compute/create_image.rb +2 -2
  112. data/lib/fog/aws/parsers/compute/create_internet_gateway.rb +2 -2
  113. data/lib/fog/aws/parsers/compute/create_key_pair.rb +2 -2
  114. data/lib/fog/aws/parsers/compute/create_network_acl.rb +2 -2
  115. data/lib/fog/aws/parsers/compute/create_network_interface.rb +2 -2
  116. data/lib/fog/aws/parsers/compute/create_route_table.rb +2 -2
  117. data/lib/fog/aws/parsers/compute/create_security_group.rb +2 -2
  118. data/lib/fog/aws/parsers/compute/create_snapshot.rb +3 -3
  119. data/lib/fog/aws/parsers/compute/create_subnet.rb +37 -8
  120. data/lib/fog/aws/parsers/compute/create_volume.rb +2 -2
  121. data/lib/fog/aws/parsers/compute/create_vpc.rb +2 -2
  122. data/lib/fog/aws/parsers/compute/deregister_image.rb +2 -2
  123. data/lib/fog/aws/parsers/compute/describe_account_attributes.rb +2 -2
  124. data/lib/fog/aws/parsers/compute/describe_addresses.rb +32 -11
  125. data/lib/fog/aws/parsers/compute/describe_availability_zones.rb +2 -2
  126. data/lib/fog/aws/parsers/compute/describe_classic_link_instances.rb +2 -2
  127. data/lib/fog/aws/parsers/compute/describe_dhcp_options.rb +2 -2
  128. data/lib/fog/aws/parsers/compute/describe_image_attribute.rb +122 -0
  129. data/lib/fog/aws/parsers/compute/describe_images.rb +2 -2
  130. data/lib/fog/aws/parsers/compute/describe_instance_attribute.rb +2 -2
  131. data/lib/fog/aws/parsers/compute/describe_instance_status.rb +2 -2
  132. data/lib/fog/aws/parsers/compute/describe_instances.rb +2 -2
  133. data/lib/fog/aws/parsers/compute/describe_internet_gateways.rb +2 -2
  134. data/lib/fog/aws/parsers/compute/describe_key_pairs.rb +2 -2
  135. data/lib/fog/aws/parsers/compute/describe_network_acls.rb +2 -2
  136. data/lib/fog/aws/parsers/compute/describe_network_interface_attribute.rb +2 -2
  137. data/lib/fog/aws/parsers/compute/describe_network_interfaces.rb +2 -2
  138. data/lib/fog/aws/parsers/compute/describe_placement_groups.rb +2 -2
  139. data/lib/fog/aws/parsers/compute/describe_regions.rb +2 -2
  140. data/lib/fog/aws/parsers/compute/describe_reserved_instances.rb +2 -2
  141. data/lib/fog/aws/parsers/compute/describe_reserved_instances_offerings.rb +2 -2
  142. data/lib/fog/aws/parsers/compute/describe_route_tables.rb +2 -2
  143. data/lib/fog/aws/parsers/compute/describe_security_groups.rb +21 -7
  144. data/lib/fog/aws/parsers/compute/describe_snapshots.rb +2 -2
  145. data/lib/fog/aws/parsers/compute/describe_spot_price_history.rb +2 -2
  146. data/lib/fog/aws/parsers/compute/describe_subnets.rb +36 -9
  147. data/lib/fog/aws/parsers/compute/describe_tags.rb +2 -2
  148. data/lib/fog/aws/parsers/compute/describe_volume_status.rb +2 -2
  149. data/lib/fog/aws/parsers/compute/describe_volumes.rb +2 -2
  150. data/lib/fog/aws/parsers/compute/describe_volumes_modifications.rb +2 -2
  151. data/lib/fog/aws/parsers/compute/describe_vpc_attribute.rb +2 -2
  152. data/lib/fog/aws/parsers/compute/describe_vpc_classic_link.rb +2 -2
  153. data/lib/fog/aws/parsers/compute/describe_vpc_classic_link_dns_support.rb +2 -2
  154. data/lib/fog/aws/parsers/compute/describe_vpcs.rb +73 -39
  155. data/lib/fog/aws/parsers/compute/detach_volume.rb +2 -2
  156. data/lib/fog/aws/parsers/compute/get_console_output.rb +2 -2
  157. data/lib/fog/aws/parsers/compute/get_password_data.rb +2 -2
  158. data/lib/fog/aws/parsers/compute/import_key_pair.rb +2 -2
  159. data/lib/fog/aws/parsers/compute/modify_subnet_attribute.rb +2 -2
  160. data/lib/fog/aws/parsers/compute/modify_volume.rb +2 -2
  161. data/lib/fog/aws/parsers/compute/monitor_unmonitor_instances.rb +2 -2
  162. data/lib/fog/aws/parsers/compute/move_address_to_vpc.rb +2 -2
  163. data/lib/fog/aws/parsers/compute/network_acl_parser.rb +2 -2
  164. data/lib/fog/aws/parsers/compute/network_interface_parser.rb +2 -2
  165. data/lib/fog/aws/parsers/compute/purchase_reserved_instances_offering.rb +2 -2
  166. data/lib/fog/aws/parsers/compute/register_image.rb +2 -2
  167. data/lib/fog/aws/parsers/compute/replace_network_acl_association.rb +2 -2
  168. data/lib/fog/aws/parsers/compute/restore_address_to_classic.rb +2 -2
  169. data/lib/fog/aws/parsers/compute/run_instances.rb +2 -2
  170. data/lib/fog/aws/parsers/compute/spot_datafeed_subscription.rb +2 -2
  171. data/lib/fog/aws/parsers/compute/spot_instance_requests.rb +2 -2
  172. data/lib/fog/aws/parsers/compute/start_stop_instances.rb +2 -2
  173. data/lib/fog/aws/parsers/compute/terminate_instances.rb +2 -2
  174. data/lib/fog/aws/parsers/dns/change_resource_record_sets.rb +2 -2
  175. data/lib/fog/aws/parsers/dns/create_hosted_zone.rb +3 -3
  176. data/lib/fog/aws/parsers/dns/delete_hosted_zone.rb +2 -2
  177. data/lib/fog/aws/parsers/dns/get_change.rb +2 -2
  178. data/lib/fog/aws/parsers/dns/get_hosted_zone.rb +5 -5
  179. data/lib/fog/aws/parsers/dns/health_check.rb +2 -2
  180. data/lib/fog/aws/parsers/dns/list_health_checks.rb +2 -2
  181. data/lib/fog/aws/parsers/dns/list_hosted_zones.rb +5 -3
  182. data/lib/fog/aws/parsers/dns/list_resource_record_sets.rb +2 -2
  183. data/lib/fog/aws/parsers/elb/describe_load_balancers.rb +3 -3
  184. data/lib/fog/aws/parsers/elbv2/create_load_balancer.rb +88 -0
  185. data/lib/fog/aws/parsers/elbv2/describe_listeners.rb +110 -0
  186. data/lib/fog/aws/parsers/elbv2/describe_load_balancers.rb +88 -0
  187. data/lib/fog/aws/parsers/elbv2/describe_tags.rb +53 -0
  188. data/lib/fog/aws/parsers/elbv2/empty.rb +10 -0
  189. data/lib/fog/aws/parsers/iam/get_group_policy.rb +1 -1
  190. data/lib/fog/aws/parsers/iam/get_role_policy.rb +1 -1
  191. data/lib/fog/aws/parsers/iam/get_user_policy.rb +1 -1
  192. data/lib/fog/aws/parsers/iam/list_access_keys.rb +1 -1
  193. data/lib/fog/aws/parsers/iam/list_server_certificates.rb +1 -1
  194. data/lib/fog/aws/parsers/iam/policy_version.rb +1 -1
  195. data/lib/fog/aws/parsers/rds/db_cluster_parser.rb +1 -1
  196. data/lib/fog/aws/parsers/rds/db_parser.rb +42 -3
  197. data/lib/fog/aws/parsers/rds/describe_orderable_db_instance_options.rb +4 -3
  198. data/lib/fog/aws/parsers/rds/modify_db_subnet_group.rb +1 -1
  199. data/lib/fog/aws/parsers/redshift/cluster_subnet_group_parser.rb +1 -1
  200. data/lib/fog/aws/parsers/storage/access_control_list.rb +2 -2
  201. data/lib/fog/aws/parsers/storage/complete_multipart_upload.rb +2 -2
  202. data/lib/fog/aws/parsers/storage/copy_object.rb +2 -2
  203. data/lib/fog/aws/parsers/storage/cors_configuration.rb +2 -2
  204. data/lib/fog/aws/parsers/storage/delete_multiple_objects.rb +2 -2
  205. data/lib/fog/aws/parsers/storage/get_bucket.rb +2 -2
  206. data/lib/fog/aws/parsers/storage/get_bucket_lifecycle.rb +2 -2
  207. data/lib/fog/aws/parsers/storage/get_bucket_location.rb +2 -2
  208. data/lib/fog/aws/parsers/storage/get_bucket_logging.rb +2 -2
  209. data/lib/fog/aws/parsers/storage/get_bucket_notification.rb +2 -2
  210. data/lib/fog/aws/parsers/storage/get_bucket_object_versions.rb +2 -2
  211. data/lib/fog/aws/parsers/storage/get_bucket_tagging.rb +2 -2
  212. data/lib/fog/aws/parsers/storage/get_bucket_versioning.rb +2 -2
  213. data/lib/fog/aws/parsers/storage/get_bucket_website.rb +2 -2
  214. data/lib/fog/aws/parsers/storage/get_object_tagging.rb +33 -0
  215. data/lib/fog/aws/parsers/storage/get_request_payment.rb +2 -2
  216. data/lib/fog/aws/parsers/storage/get_service.rb +2 -2
  217. data/lib/fog/aws/parsers/storage/initiate_multipart_upload.rb +2 -2
  218. data/lib/fog/aws/parsers/storage/list_multipart_uploads.rb +2 -2
  219. data/lib/fog/aws/parsers/storage/list_parts.rb +2 -2
  220. data/lib/fog/aws/parsers/storage/upload_part_copy_object.rb +18 -0
  221. data/lib/fog/aws/parsers/sts/assume_role_with_web_identity.rb +1 -1
  222. data/lib/fog/aws/rds.rb +1 -1
  223. data/lib/fog/aws/redshift.rb +1 -1
  224. data/lib/fog/aws/requests/auto_scaling/attach_load_balancer_target_groups.rb +1 -1
  225. data/lib/fog/aws/requests/auto_scaling/describe_scaling_activities.rb +1 -1
  226. data/lib/fog/aws/requests/auto_scaling/detach_instances.rb +3 -4
  227. data/lib/fog/aws/requests/auto_scaling/put_scheduled_update_group_action.rb +1 -1
  228. data/lib/fog/aws/requests/auto_scaling/set_instance_protection.rb +67 -0
  229. data/lib/fog/aws/requests/cdn/delete_distribution.rb +6 -6
  230. data/lib/fog/aws/requests/cdn/delete_streaming_distribution.rb +6 -6
  231. data/lib/fog/aws/requests/cdn/get_distribution.rb +5 -5
  232. data/lib/fog/aws/requests/cdn/get_distribution_list.rb +3 -3
  233. data/lib/fog/aws/requests/cdn/get_invalidation.rb +5 -5
  234. data/lib/fog/aws/requests/cdn/get_invalidation_list.rb +4 -4
  235. data/lib/fog/aws/requests/cdn/get_streaming_distribution.rb +5 -5
  236. data/lib/fog/aws/requests/cdn/get_streaming_distribution_list.rb +3 -3
  237. data/lib/fog/aws/requests/cdn/post_distribution.rb +6 -6
  238. data/lib/fog/aws/requests/cdn/post_invalidation.rb +5 -5
  239. data/lib/fog/aws/requests/cdn/post_streaming_distribution.rb +6 -6
  240. data/lib/fog/aws/requests/cdn/put_distribution_config.rb +7 -7
  241. data/lib/fog/aws/requests/cdn/put_streaming_distribution_config.rb +7 -7
  242. data/lib/fog/aws/requests/cloud_formation/create_change_set.rb +1 -1
  243. data/lib/fog/aws/requests/cloud_formation/create_stack.rb +1 -1
  244. data/lib/fog/aws/requests/cloud_formation/get_template_summary.rb +1 -1
  245. data/lib/fog/aws/requests/cloud_formation/update_stack.rb +1 -1
  246. data/lib/fog/aws/requests/cloud_watch/list_metrics.rb +1 -1
  247. data/lib/fog/aws/requests/cloud_watch/put_metric_alarm.rb +2 -2
  248. data/lib/fog/aws/requests/compute/allocate_address.rb +4 -4
  249. data/lib/fog/aws/requests/compute/assign_private_ip_addresses.rb +5 -5
  250. data/lib/fog/aws/requests/compute/associate_address.rb +7 -7
  251. data/lib/fog/aws/requests/compute/associate_dhcp_options.rb +4 -4
  252. data/lib/fog/aws/requests/compute/associate_route_table.rb +5 -5
  253. data/lib/fog/aws/requests/compute/attach_classic_link_vpc.rb +7 -7
  254. data/lib/fog/aws/requests/compute/attach_internet_gateway.rb +4 -4
  255. data/lib/fog/aws/requests/compute/attach_network_interface.rb +6 -6
  256. data/lib/fog/aws/requests/compute/attach_volume.rb +7 -7
  257. data/lib/fog/aws/requests/compute/authorize_security_group_egress.rb +14 -12
  258. data/lib/fog/aws/requests/compute/authorize_security_group_ingress.rb +50 -31
  259. data/lib/fog/aws/requests/compute/cancel_spot_instance_requests.rb +4 -4
  260. data/lib/fog/aws/requests/compute/copy_image.rb +3 -3
  261. data/lib/fog/aws/requests/compute/copy_snapshot.rb +24 -11
  262. data/lib/fog/aws/requests/compute/create_dhcp_options.rb +3 -3
  263. data/lib/fog/aws/requests/compute/create_image.rb +3 -3
  264. data/lib/fog/aws/requests/compute/create_internet_gateway.rb +3 -3
  265. data/lib/fog/aws/requests/compute/create_key_pair.rb +4 -4
  266. data/lib/fog/aws/requests/compute/create_network_acl.rb +4 -4
  267. data/lib/fog/aws/requests/compute/create_network_acl_entry.rb +5 -5
  268. data/lib/fog/aws/requests/compute/create_network_interface.rb +16 -13
  269. data/lib/fog/aws/requests/compute/create_placement_group.rb +3 -3
  270. data/lib/fog/aws/requests/compute/create_route.rb +10 -10
  271. data/lib/fog/aws/requests/compute/create_route_table.rb +5 -5
  272. data/lib/fog/aws/requests/compute/create_security_group.rb +27 -22
  273. data/lib/fog/aws/requests/compute/create_snapshot.rb +3 -3
  274. data/lib/fog/aws/requests/compute/create_spot_datafeed_subscription.rb +3 -3
  275. data/lib/fog/aws/requests/compute/create_subnet.rb +23 -19
  276. data/lib/fog/aws/requests/compute/create_tags.rb +3 -3
  277. data/lib/fog/aws/requests/compute/create_volume.rb +11 -11
  278. data/lib/fog/aws/requests/compute/create_vpc.rb +43 -15
  279. data/lib/fog/aws/requests/compute/delete_dhcp_options.rb +4 -4
  280. data/lib/fog/aws/requests/compute/delete_internet_gateway.rb +4 -4
  281. data/lib/fog/aws/requests/compute/delete_key_pair.rb +3 -3
  282. data/lib/fog/aws/requests/compute/delete_network_acl.rb +5 -5
  283. data/lib/fog/aws/requests/compute/delete_network_acl_entry.rb +5 -5
  284. data/lib/fog/aws/requests/compute/delete_network_interface.rb +5 -5
  285. data/lib/fog/aws/requests/compute/delete_placement_group.rb +3 -3
  286. data/lib/fog/aws/requests/compute/delete_route.rb +6 -6
  287. data/lib/fog/aws/requests/compute/delete_route_table.rb +5 -5
  288. data/lib/fog/aws/requests/compute/delete_security_group.rb +17 -17
  289. data/lib/fog/aws/requests/compute/delete_snapshot.rb +4 -4
  290. data/lib/fog/aws/requests/compute/delete_spot_datafeed_subscription.rb +3 -3
  291. data/lib/fog/aws/requests/compute/delete_subnet.rb +4 -4
  292. data/lib/fog/aws/requests/compute/delete_tags.rb +3 -3
  293. data/lib/fog/aws/requests/compute/delete_volume.rb +5 -5
  294. data/lib/fog/aws/requests/compute/delete_vpc.rb +4 -4
  295. data/lib/fog/aws/requests/compute/deregister_image.rb +4 -4
  296. data/lib/fog/aws/requests/compute/describe_account_attributes.rb +3 -3
  297. data/lib/fog/aws/requests/compute/describe_addresses.rb +3 -3
  298. data/lib/fog/aws/requests/compute/describe_availability_zones.rb +6 -3
  299. data/lib/fog/aws/requests/compute/describe_classic_link_instances.rb +3 -3
  300. data/lib/fog/aws/requests/compute/describe_dhcp_options.rb +3 -3
  301. data/lib/fog/aws/requests/compute/describe_image_attribute.rb +74 -0
  302. data/lib/fog/aws/requests/compute/describe_images.rb +3 -3
  303. data/lib/fog/aws/requests/compute/describe_instance_attribute.rb +4 -4
  304. data/lib/fog/aws/requests/compute/describe_instance_status.rb +3 -3
  305. data/lib/fog/aws/requests/compute/describe_instances.rb +4 -4
  306. data/lib/fog/aws/requests/compute/describe_internet_gateways.rb +3 -3
  307. data/lib/fog/aws/requests/compute/describe_key_pairs.rb +3 -3
  308. data/lib/fog/aws/requests/compute/describe_network_acls.rb +3 -3
  309. data/lib/fog/aws/requests/compute/describe_network_interface_attribute.rb +19 -17
  310. data/lib/fog/aws/requests/compute/describe_network_interfaces.rb +5 -5
  311. data/lib/fog/aws/requests/compute/describe_placement_groups.rb +3 -3
  312. data/lib/fog/aws/requests/compute/describe_regions.rb +3 -3
  313. data/lib/fog/aws/requests/compute/describe_reserved_instances.rb +3 -3
  314. data/lib/fog/aws/requests/compute/describe_reserved_instances_offerings.rb +3 -3
  315. data/lib/fog/aws/requests/compute/describe_route_tables.rb +3 -3
  316. data/lib/fog/aws/requests/compute/describe_security_groups.rb +47 -10
  317. data/lib/fog/aws/requests/compute/describe_snapshots.rb +3 -3
  318. data/lib/fog/aws/requests/compute/describe_spot_datafeed_subscription.rb +3 -3
  319. data/lib/fog/aws/requests/compute/describe_spot_instance_requests.rb +3 -3
  320. data/lib/fog/aws/requests/compute/describe_spot_price_history.rb +5 -5
  321. data/lib/fog/aws/requests/compute/describe_subnets.rb +15 -14
  322. data/lib/fog/aws/requests/compute/describe_tags.rb +3 -3
  323. data/lib/fog/aws/requests/compute/describe_volume_status.rb +3 -3
  324. data/lib/fog/aws/requests/compute/describe_volumes.rb +3 -3
  325. data/lib/fog/aws/requests/compute/describe_volumes_modifications.rb +3 -3
  326. data/lib/fog/aws/requests/compute/describe_vpc_attribute.rb +5 -5
  327. data/lib/fog/aws/requests/compute/describe_vpc_classic_link.rb +4 -4
  328. data/lib/fog/aws/requests/compute/describe_vpc_classic_link_dns_support.rb +3 -3
  329. data/lib/fog/aws/requests/compute/describe_vpcs.rb +3 -3
  330. data/lib/fog/aws/requests/compute/detach_classic_link_vpc.rb +5 -5
  331. data/lib/fog/aws/requests/compute/detach_internet_gateway.rb +4 -4
  332. data/lib/fog/aws/requests/compute/detach_network_interface.rb +4 -4
  333. data/lib/fog/aws/requests/compute/detach_volume.rb +5 -5
  334. data/lib/fog/aws/requests/compute/disable_vpc_classic_link.rb +4 -4
  335. data/lib/fog/aws/requests/compute/disable_vpc_classic_link_dns_support.rb +4 -4
  336. data/lib/fog/aws/requests/compute/disassociate_address.rb +5 -5
  337. data/lib/fog/aws/requests/compute/disassociate_route_table.rb +5 -5
  338. data/lib/fog/aws/requests/compute/enable_vpc_classic_link.rb +4 -4
  339. data/lib/fog/aws/requests/compute/enable_vpc_classic_link_dns_support.rb +4 -4
  340. data/lib/fog/aws/requests/compute/get_console_output.rb +4 -4
  341. data/lib/fog/aws/requests/compute/get_password_data.rb +4 -4
  342. data/lib/fog/aws/requests/compute/import_key_pair.rb +4 -4
  343. data/lib/fog/aws/requests/compute/modify_image_attribute.rb +4 -4
  344. data/lib/fog/aws/requests/compute/modify_instance_attribute.rb +3 -3
  345. data/lib/fog/aws/requests/compute/modify_instance_placement.rb +33 -0
  346. data/lib/fog/aws/requests/compute/modify_network_interface_attribute.rb +12 -12
  347. data/lib/fog/aws/requests/compute/modify_snapshot_attribute.rb +3 -3
  348. data/lib/fog/aws/requests/compute/modify_subnet_attribute.rb +3 -3
  349. data/lib/fog/aws/requests/compute/modify_volume.rb +6 -6
  350. data/lib/fog/aws/requests/compute/modify_volume_attribute.rb +4 -4
  351. data/lib/fog/aws/requests/compute/modify_vpc_attribute.rb +7 -7
  352. data/lib/fog/aws/requests/compute/monitor_instances.rb +4 -4
  353. data/lib/fog/aws/requests/compute/move_address_to_vpc.rb +4 -4
  354. data/lib/fog/aws/requests/compute/purchase_reserved_instances_offering.rb +3 -3
  355. data/lib/fog/aws/requests/compute/reboot_instances.rb +4 -4
  356. data/lib/fog/aws/requests/compute/register_image.rb +4 -4
  357. data/lib/fog/aws/requests/compute/release_address.rb +5 -5
  358. data/lib/fog/aws/requests/compute/replace_network_acl_association.rb +5 -5
  359. data/lib/fog/aws/requests/compute/replace_network_acl_entry.rb +5 -5
  360. data/lib/fog/aws/requests/compute/replace_route.rb +10 -10
  361. data/lib/fog/aws/requests/compute/request_spot_instances.rb +8 -8
  362. data/lib/fog/aws/requests/compute/reset_network_interface_attribute.rb +6 -6
  363. data/lib/fog/aws/requests/compute/restore_address_to_classic.rb +5 -5
  364. data/lib/fog/aws/requests/compute/revoke_security_group_egress.rb +23 -29
  365. data/lib/fog/aws/requests/compute/revoke_security_group_ingress.rb +22 -29
  366. data/lib/fog/aws/requests/compute/run_instances.rb +69 -5
  367. data/lib/fog/aws/requests/compute/start_instances.rb +4 -4
  368. data/lib/fog/aws/requests/compute/stop_instances.rb +15 -7
  369. data/lib/fog/aws/requests/compute/terminate_instances.rb +4 -4
  370. data/lib/fog/aws/requests/compute/unmonitor_instances.rb +4 -4
  371. data/lib/fog/aws/requests/data_pipeline/deactivate_pipeline.rb +1 -1
  372. data/lib/fog/aws/requests/dns/change_resource_record_sets.rb +6 -139
  373. data/lib/fog/aws/requests/dns/create_health_check.rb +3 -3
  374. data/lib/fog/aws/requests/dns/create_hosted_zone.rb +4 -4
  375. data/lib/fog/aws/requests/dns/delete_health_check.rb +2 -2
  376. data/lib/fog/aws/requests/dns/delete_hosted_zone.rb +4 -4
  377. data/lib/fog/aws/requests/dns/get_change.rb +4 -4
  378. data/lib/fog/aws/requests/dns/get_health_check.rb +3 -3
  379. data/lib/fog/aws/requests/dns/get_hosted_zone.rb +4 -4
  380. data/lib/fog/aws/requests/dns/list_health_checks.rb +3 -3
  381. data/lib/fog/aws/requests/dns/list_hosted_zones.rb +3 -3
  382. data/lib/fog/aws/requests/dns/list_resource_record_sets.rb +5 -5
  383. data/lib/fog/aws/requests/dynamodb/update_item.rb +6 -5
  384. data/lib/fog/aws/requests/ecs/list_task_definitions.rb +1 -1
  385. data/lib/fog/aws/requests/efs/create_file_system.rb +15 -3
  386. data/lib/fog/aws/requests/efs/create_mount_target.rb +8 -4
  387. data/lib/fog/aws/requests/elasticache/authorize_cache_security_group_ingress.rb +1 -1
  388. data/lib/fog/aws/requests/elasticache/create_cache_cluster.rb +2 -2
  389. data/lib/fog/aws/requests/elasticache/describe_engine_default_parameters.rb +1 -1
  390. data/lib/fog/aws/requests/elb/create_load_balancer.rb +11 -42
  391. data/lib/fog/aws/requests/elb/create_load_balancer_listeners.rb +24 -21
  392. data/lib/fog/aws/requests/elb/delete_load_balancer_listeners.rb +1 -1
  393. data/lib/fog/aws/requests/elb/deregister_instances_from_load_balancer.rb +1 -1
  394. data/lib/fog/aws/requests/elb/describe_instance_health.rb +1 -1
  395. data/lib/fog/aws/requests/elb/describe_tags.rb +1 -1
  396. data/lib/fog/aws/requests/elb/register_instances_with_load_balancer.rb +1 -1
  397. data/lib/fog/aws/requests/elbv2/add_tags.rb +45 -0
  398. data/lib/fog/aws/requests/elbv2/create_load_balancer.rb +160 -0
  399. data/lib/fog/aws/requests/elbv2/describe_listeners.rb +38 -0
  400. data/lib/fog/aws/requests/elbv2/describe_load_balancers.rb +100 -0
  401. data/lib/fog/aws/requests/elbv2/describe_tags.rb +50 -0
  402. data/lib/fog/aws/requests/elbv2/remove_tags.rb +45 -0
  403. data/lib/fog/aws/requests/glacier/initiate_job.rb +1 -1
  404. data/lib/fog/aws/requests/glacier/initiate_multipart_upload.rb +1 -1
  405. data/lib/fog/aws/requests/kinesis/list_streams.rb +1 -1
  406. data/lib/fog/aws/requests/kinesis/put_record.rb +1 -2
  407. data/lib/fog/aws/requests/kinesis/put_records.rb +1 -2
  408. data/lib/fog/aws/requests/lambda/invoke.rb +8 -8
  409. data/lib/fog/aws/requests/rds/add_tags_to_resource.rb +12 -10
  410. data/lib/fog/aws/requests/rds/authorize_db_security_group_ingress.rb +3 -3
  411. data/lib/fog/aws/requests/rds/create_db_cluster.rb +1 -1
  412. data/lib/fog/aws/requests/rds/create_db_instance.rb +1 -1
  413. data/lib/fog/aws/requests/rds/create_db_subnet_group.rb +2 -2
  414. data/lib/fog/aws/requests/rds/describe_db_snapshots.rb +1 -1
  415. data/lib/fog/aws/requests/rds/describe_orderable_db_instance_options.rb +12 -6
  416. data/lib/fog/aws/requests/rds/list_tags_for_resource.rb +10 -7
  417. data/lib/fog/aws/requests/rds/modify_db_instance.rb +2 -2
  418. data/lib/fog/aws/requests/rds/modify_db_parameter_group.rb +1 -1
  419. data/lib/fog/aws/requests/rds/remove_tags_from_resource.rb +9 -8
  420. data/lib/fog/aws/requests/rds/revoke_db_security_group_ingress.rb +1 -1
  421. data/lib/fog/aws/requests/ses/send_raw_email.rb +1 -1
  422. data/lib/fog/aws/requests/sqs/change_message_visibility.rb +1 -1
  423. data/lib/fog/aws/requests/sqs/delete_message.rb +1 -1
  424. data/lib/fog/aws/requests/storage/abort_multipart_upload.rb +3 -3
  425. data/lib/fog/aws/requests/storage/acl_utils.rb +3 -3
  426. data/lib/fog/aws/requests/storage/complete_multipart_upload.rb +4 -4
  427. data/lib/fog/aws/requests/storage/copy_object.rb +5 -4
  428. data/lib/fog/aws/requests/storage/cors_utils.rb +3 -3
  429. data/lib/fog/aws/requests/storage/delete_bucket.rb +2 -2
  430. data/lib/fog/aws/requests/storage/delete_bucket_cors.rb +2 -2
  431. data/lib/fog/aws/requests/storage/delete_bucket_lifecycle.rb +2 -2
  432. data/lib/fog/aws/requests/storage/delete_bucket_policy.rb +2 -2
  433. data/lib/fog/aws/requests/storage/delete_bucket_tagging.rb +2 -2
  434. data/lib/fog/aws/requests/storage/delete_bucket_website.rb +2 -2
  435. data/lib/fog/aws/requests/storage/delete_multiple_objects.rb +21 -11
  436. data/lib/fog/aws/requests/storage/delete_object.rb +2 -2
  437. data/lib/fog/aws/requests/storage/delete_object_url.rb +40 -0
  438. data/lib/fog/aws/requests/storage/get_bucket.rb +5 -5
  439. data/lib/fog/aws/requests/storage/get_bucket_acl.rb +4 -4
  440. data/lib/fog/aws/requests/storage/get_bucket_cors.rb +4 -4
  441. data/lib/fog/aws/requests/storage/get_bucket_lifecycle.rb +3 -3
  442. data/lib/fog/aws/requests/storage/get_bucket_location.rb +5 -6
  443. data/lib/fog/aws/requests/storage/get_bucket_logging.rb +3 -3
  444. data/lib/fog/aws/requests/storage/get_bucket_notification.rb +3 -3
  445. data/lib/fog/aws/requests/storage/get_bucket_object_versions.rb +5 -5
  446. data/lib/fog/aws/requests/storage/get_bucket_policy.rb +2 -2
  447. data/lib/fog/aws/requests/storage/get_bucket_tagging.rb +3 -3
  448. data/lib/fog/aws/requests/storage/get_bucket_versioning.rb +3 -3
  449. data/lib/fog/aws/requests/storage/get_bucket_website.rb +3 -3
  450. data/lib/fog/aws/requests/storage/get_object.rb +3 -3
  451. data/lib/fog/aws/requests/storage/get_object_acl.rb +4 -4
  452. data/lib/fog/aws/requests/storage/get_object_http_url.rb +2 -2
  453. data/lib/fog/aws/requests/storage/get_object_https_url.rb +2 -2
  454. data/lib/fog/aws/requests/storage/get_object_tagging.rb +41 -0
  455. data/lib/fog/aws/requests/storage/get_object_torrent.rb +2 -2
  456. data/lib/fog/aws/requests/storage/get_object_url.rb +2 -2
  457. data/lib/fog/aws/requests/storage/get_request_payment.rb +3 -3
  458. data/lib/fog/aws/requests/storage/get_service.rb +5 -5
  459. data/lib/fog/aws/requests/storage/head_bucket.rb +2 -2
  460. data/lib/fog/aws/requests/storage/head_object.rb +2 -2
  461. data/lib/fog/aws/requests/storage/head_object_url.rb +2 -2
  462. data/lib/fog/aws/requests/storage/initiate_multipart_upload.rb +4 -4
  463. data/lib/fog/aws/requests/storage/list_multipart_uploads.rb +3 -3
  464. data/lib/fog/aws/requests/storage/list_parts.rb +4 -4
  465. data/lib/fog/aws/requests/storage/post_object_hidden_fields.rb +2 -2
  466. data/lib/fog/aws/requests/storage/post_object_restore.rb +2 -2
  467. data/lib/fog/aws/requests/storage/put_bucket.rb +2 -6
  468. data/lib/fog/aws/requests/storage/put_bucket_acl.rb +4 -4
  469. data/lib/fog/aws/requests/storage/put_bucket_cors.rb +4 -4
  470. data/lib/fog/aws/requests/storage/put_bucket_lifecycle.rb +3 -3
  471. data/lib/fog/aws/requests/storage/put_bucket_logging.rb +2 -2
  472. data/lib/fog/aws/requests/storage/put_bucket_notification.rb +3 -3
  473. data/lib/fog/aws/requests/storage/put_bucket_policy.rb +2 -2
  474. data/lib/fog/aws/requests/storage/put_bucket_tagging.rb +2 -2
  475. data/lib/fog/aws/requests/storage/put_bucket_versioning.rb +2 -2
  476. data/lib/fog/aws/requests/storage/put_bucket_website.rb +2 -2
  477. data/lib/fog/aws/requests/storage/put_object.rb +10 -9
  478. data/lib/fog/aws/requests/storage/put_object_acl.rb +4 -4
  479. data/lib/fog/aws/requests/storage/put_object_tagging.rb +42 -0
  480. data/lib/fog/aws/requests/storage/put_object_url.rb +2 -2
  481. data/lib/fog/aws/requests/storage/put_request_payment.rb +2 -2
  482. data/lib/fog/aws/requests/storage/shared_mock_methods.rb +4 -3
  483. data/lib/fog/aws/requests/storage/sync_clock.rb +11 -3
  484. data/lib/fog/aws/requests/storage/upload_part.rb +3 -3
  485. data/lib/fog/aws/requests/storage/upload_part_copy.rb +119 -0
  486. data/lib/fog/aws/requests/sts/assume_role_with_web_identity.rb +7 -6
  487. data/lib/fog/aws/service_mapper.rb +129 -0
  488. data/lib/fog/aws/ses.rb +1 -1
  489. data/lib/fog/aws/signaturev4.rb +1 -1
  490. data/lib/fog/aws/simpledb.rb +1 -1
  491. data/lib/fog/aws/sns.rb +1 -1
  492. data/lib/fog/aws/sqs.rb +1 -1
  493. data/lib/fog/aws/storage.rb +107 -20
  494. data/lib/fog/aws/support.rb +1 -1
  495. data/lib/fog/aws/version.rb +1 -1
  496. data/lib/fog/aws.rb +31 -19
  497. metadata +70 -297
  498. data/.gitignore +0 -16
  499. data/.travis.yml +0 -54
  500. data/Gemfile +0 -14
  501. data/Rakefile +0 -8
  502. data/gemfiles/Gemfile-edge +0 -14
  503. data/gemfiles/Gemfile-ruby-1.8.7 +0 -6
  504. data/gemfiles/Gemfile-ruby-1.9 +0 -7
  505. data/gemfiles/Gemfile-ruby-2.0 +0 -7
  506. data/tests/credentials_tests.rb +0 -86
  507. data/tests/helper.rb +0 -29
  508. data/tests/helpers/collection_helper.rb +0 -97
  509. data/tests/helpers/compute/flavors_helper.rb +0 -32
  510. data/tests/helpers/compute/server_helper.rb +0 -25
  511. data/tests/helpers/compute/servers_helper.rb +0 -10
  512. data/tests/helpers/dns_helper.rb +0 -55
  513. data/tests/helpers/formats_helper.rb +0 -98
  514. data/tests/helpers/formats_helper_tests.rb +0 -110
  515. data/tests/helpers/mock_helper.rb +0 -109
  516. data/tests/helpers/model_helper.rb +0 -31
  517. data/tests/helpers/responds_to_helper.rb +0 -11
  518. data/tests/helpers/schema_validator_tests.rb +0 -107
  519. data/tests/helpers/succeeds_helper.rb +0 -9
  520. data/tests/lorem.txt +0 -1
  521. data/tests/models/auto_scaling/activities_tests.rb +0 -6
  522. data/tests/models/auto_scaling/configuration_test.rb +0 -13
  523. data/tests/models/auto_scaling/configurations_tests.rb +0 -11
  524. data/tests/models/auto_scaling/groups_test.rb +0 -27
  525. data/tests/models/auto_scaling/helper.rb +0 -0
  526. data/tests/models/auto_scaling/instance_tests.rb +0 -15
  527. data/tests/models/auto_scaling/instances_tests.rb +0 -6
  528. data/tests/models/beanstalk/application_tests.rb +0 -69
  529. data/tests/models/beanstalk/applications_tests.rb +0 -7
  530. data/tests/models/beanstalk/environment_tests.rb +0 -131
  531. data/tests/models/beanstalk/environments_tests.rb +0 -34
  532. data/tests/models/beanstalk/template_tests.rb +0 -47
  533. data/tests/models/beanstalk/templates_tests.rb +0 -62
  534. data/tests/models/beanstalk/version_tests.rb +0 -66
  535. data/tests/models/beanstalk/versions_tests.rb +0 -60
  536. data/tests/models/cdn/distribution_tests.rb +0 -15
  537. data/tests/models/cdn/distributions_tests.rb +0 -15
  538. data/tests/models/cdn/invalidation_tests.rb +0 -31
  539. data/tests/models/cdn/invalidations_tests.rb +0 -14
  540. data/tests/models/cdn/streaming_distribution_tests.rb +0 -15
  541. data/tests/models/cdn/streaming_distributions_tests.rb +0 -15
  542. data/tests/models/cloud_watch/alarm_data_tests.rb +0 -42
  543. data/tests/models/cloud_watch/alarm_history_tests.rb +0 -22
  544. data/tests/models/cloud_watch/metric_statistics_tests.rb +0 -51
  545. data/tests/models/cloud_watch/metrics_tests.rb +0 -32
  546. data/tests/models/compute/address_tests.rb +0 -43
  547. data/tests/models/compute/addresses_tests.rb +0 -5
  548. data/tests/models/compute/dhcp_option_tests.rb +0 -3
  549. data/tests/models/compute/dhcp_options_tests.rb +0 -3
  550. data/tests/models/compute/internet_gateway_tests.rb +0 -3
  551. data/tests/models/compute/internet_gateways_tests.rb +0 -3
  552. data/tests/models/compute/key_pair_tests.rb +0 -26
  553. data/tests/models/compute/key_pairs_tests.rb +0 -5
  554. data/tests/models/compute/network_acl_tests.rb +0 -109
  555. data/tests/models/compute/network_acls_tests.rb +0 -20
  556. data/tests/models/compute/network_interfaces_test.rb +0 -12
  557. data/tests/models/compute/security_group_tests.rb +0 -98
  558. data/tests/models/compute/security_groups_tests.rb +0 -5
  559. data/tests/models/compute/server_tests.rb +0 -94
  560. data/tests/models/compute/snapshot_tests.rb +0 -10
  561. data/tests/models/compute/snapshots_tests.rb +0 -10
  562. data/tests/models/compute/subnet_tests.rb +0 -13
  563. data/tests/models/compute/subnets_tests.rb +0 -5
  564. data/tests/models/compute/volume_tests.rb +0 -58
  565. data/tests/models/compute/volumes_tests.rb +0 -5
  566. data/tests/models/compute/vpc_tests.rb +0 -26
  567. data/tests/models/compute/vpcs_tests.rb +0 -19
  568. data/tests/models/data_pipeline/pipeline_tests.rb +0 -8
  569. data/tests/models/data_pipeline/pipelines_tests.rb +0 -8
  570. data/tests/models/dns/record_tests.rb +0 -33
  571. data/tests/models/dns/records_tests.rb +0 -41
  572. data/tests/models/dns/zone_tests.rb +0 -4
  573. data/tests/models/dns/zones_tests.rb +0 -4
  574. data/tests/models/efs/file_system_tests.rb +0 -12
  575. data/tests/models/efs/mount_target_tests.rb +0 -43
  576. data/tests/models/efs/mount_targets_tests.rb +0 -30
  577. data/tests/models/elasticache/cluster_tests.rb +0 -30
  578. data/tests/models/elasticache/parameter_groups_tests.rb +0 -15
  579. data/tests/models/elasticache/security_groups_tests.rb +0 -52
  580. data/tests/models/elasticache/subnet_groups_tests.rb +0 -44
  581. data/tests/models/elb/model_tests.rb +0 -360
  582. data/tests/models/elb/tagging_tests.rb +0 -15
  583. data/tests/models/glacier/model_tests.rb +0 -47
  584. data/tests/models/iam/access_keys_tests.rb +0 -53
  585. data/tests/models/iam/groups_tests.rb +0 -59
  586. data/tests/models/iam/instance_profile_tests.rb +0 -18
  587. data/tests/models/iam/managed_policies_tests.rb +0 -89
  588. data/tests/models/iam/policies_tests.rb +0 -57
  589. data/tests/models/iam/roles_tests.rb +0 -71
  590. data/tests/models/iam/users_tests.rb +0 -119
  591. data/tests/models/rds/cluster_tests.rb +0 -54
  592. data/tests/models/rds/clusters_tests.rb +0 -5
  593. data/tests/models/rds/event_subscription_tests.rb +0 -9
  594. data/tests/models/rds/event_subscriptions_tests.rb +0 -6
  595. data/tests/models/rds/helper.rb +0 -25
  596. data/tests/models/rds/instance_option_tests.rb +0 -14
  597. data/tests/models/rds/parameter_group_tests.rb +0 -24
  598. data/tests/models/rds/parameter_groups_tests.rb +0 -8
  599. data/tests/models/rds/security_group_tests.rb +0 -77
  600. data/tests/models/rds/security_groups_tests.rb +0 -5
  601. data/tests/models/rds/server_tests.rb +0 -131
  602. data/tests/models/rds/servers_tests.rb +0 -24
  603. data/tests/models/rds/snapshot_tests.rb +0 -12
  604. data/tests/models/rds/snapshots_tests.rb +0 -12
  605. data/tests/models/rds/tagging_tests.rb +0 -20
  606. data/tests/models/sns/topic_tests.rb +0 -15
  607. data/tests/models/sns/topics_tests.rb +0 -6
  608. data/tests/models/storage/directory_tests.rb +0 -91
  609. data/tests/models/storage/file_tests.rb +0 -133
  610. data/tests/models/storage/files_tests.rb +0 -58
  611. data/tests/models/storage/url_tests.rb +0 -44
  612. data/tests/models/storage/version_tests.rb +0 -52
  613. data/tests/models/storage/versions_tests.rb +0 -56
  614. data/tests/models/support/trusted_advisor_tests.rb +0 -25
  615. data/tests/parsers/compute/describe_images_tests.rb +0 -33
  616. data/tests/parsers/elb/describe_load_balancers.rb +0 -65
  617. data/tests/requests/auto_scaling/auto_scaling_tests.rb +0 -103
  618. data/tests/requests/auto_scaling/describe_types_tests.rb +0 -102
  619. data/tests/requests/auto_scaling/helper.rb +0 -229
  620. data/tests/requests/auto_scaling/model_tests.rb +0 -235
  621. data/tests/requests/auto_scaling/notification_configuration_tests.rb +0 -124
  622. data/tests/requests/auto_scaling/tag_tests.rb +0 -63
  623. data/tests/requests/beanstalk/application_tests.rb +0 -140
  624. data/tests/requests/beanstalk/solution_stack_tests.rb +0 -22
  625. data/tests/requests/cdn/cdn_tests.rb +0 -252
  626. data/tests/requests/cloud_formation/stack_tests.rb +0 -167
  627. data/tests/requests/cloud_watch/get_metric_statistics_tests.rb +0 -28
  628. data/tests/requests/cloud_watch/list_metrics_test.rb +0 -64
  629. data/tests/requests/cloud_watch/put_metric_data_tests.rb +0 -36
  630. data/tests/requests/compute/address_tests.rb +0 -144
  631. data/tests/requests/compute/assign_private_ip_tests.rb +0 -55
  632. data/tests/requests/compute/availability_zone_tests.rb +0 -25
  633. data/tests/requests/compute/client_tests.rb +0 -25
  634. data/tests/requests/compute/dhcp_options_tests.rb +0 -39
  635. data/tests/requests/compute/helper.rb +0 -27
  636. data/tests/requests/compute/image_tests.rb +0 -160
  637. data/tests/requests/compute/instance_attrib_tests.rb +0 -168
  638. data/tests/requests/compute/instance_tests.rb +0 -338
  639. data/tests/requests/compute/internet_gateway_tests.rb +0 -49
  640. data/tests/requests/compute/key_pair_tests.rb +0 -67
  641. data/tests/requests/compute/network_acl_tests.rb +0 -112
  642. data/tests/requests/compute/network_interface_tests.rb +0 -250
  643. data/tests/requests/compute/placement_group_tests.rb +0 -48
  644. data/tests/requests/compute/region_tests.rb +0 -52
  645. data/tests/requests/compute/route_tests.rb +0 -341
  646. data/tests/requests/compute/security_group_tests.rb +0 -446
  647. data/tests/requests/compute/snapshot_tests.rb +0 -77
  648. data/tests/requests/compute/spot_datafeed_subscription_tests.rb +0 -47
  649. data/tests/requests/compute/spot_instance_tests.rb +0 -55
  650. data/tests/requests/compute/spot_price_history_tests.rb +0 -23
  651. data/tests/requests/compute/subnet_tests.rb +0 -85
  652. data/tests/requests/compute/tag_tests.rb +0 -101
  653. data/tests/requests/compute/volume_tests.rb +0 -263
  654. data/tests/requests/compute/vpc_tests.rb +0 -214
  655. data/tests/requests/data_pipeline/helper.rb +0 -78
  656. data/tests/requests/data_pipeline/pipeline_tests.rb +0 -80
  657. data/tests/requests/dns/change_resource_record_sets_tests.rb +0 -34
  658. data/tests/requests/dns/dns_tests.rb +0 -244
  659. data/tests/requests/dns/health_check_tests.rb +0 -159
  660. data/tests/requests/dns/helper.rb +0 -21
  661. data/tests/requests/dynamodb/item_tests.rb +0 -137
  662. data/tests/requests/dynamodb/table_tests.rb +0 -99
  663. data/tests/requests/ecs/cluster_tests.rb +0 -112
  664. data/tests/requests/ecs/container_instance_tests.rb +0 -119
  665. data/tests/requests/ecs/helper.rb +0 -276
  666. data/tests/requests/ecs/sample_task_definition1.json +0 -56
  667. data/tests/requests/ecs/service_tests.rb +0 -132
  668. data/tests/requests/ecs/task_definitions_tests.rb +0 -97
  669. data/tests/requests/ecs/task_tests.rb +0 -145
  670. data/tests/requests/efs/file_system_tests.rb +0 -152
  671. data/tests/requests/efs/helper.rb +0 -42
  672. data/tests/requests/elasticache/cache_cluster_tests.rb +0 -137
  673. data/tests/requests/elasticache/describe_events.rb +0 -17
  674. data/tests/requests/elasticache/describe_reserved_cache_nodes.rb +0 -17
  675. data/tests/requests/elasticache/helper.rb +0 -103
  676. data/tests/requests/elasticache/parameter_group_tests.rb +0 -105
  677. data/tests/requests/elasticache/security_group_tests.rb +0 -108
  678. data/tests/requests/elasticache/subnet_group_tests.rb +0 -52
  679. data/tests/requests/elb/helper.rb +0 -91
  680. data/tests/requests/elb/listener_tests.rb +0 -68
  681. data/tests/requests/elb/load_balancer_tests.rb +0 -89
  682. data/tests/requests/elb/policy_tests.rb +0 -132
  683. data/tests/requests/emr/helper.rb +0 -167
  684. data/tests/requests/emr/instance_group_tests.rb +0 -106
  685. data/tests/requests/emr/job_flow_tests.rb +0 -88
  686. data/tests/requests/federation/get_signin_token_tests.rb +0 -11
  687. data/tests/requests/glacier/archive_tests.rb +0 -13
  688. data/tests/requests/glacier/multipart_upload_tests.rb +0 -29
  689. data/tests/requests/glacier/tree_hash_tests.rb +0 -62
  690. data/tests/requests/glacier/vault_tests.rb +0 -35
  691. data/tests/requests/iam/access_key_tests.rb +0 -53
  692. data/tests/requests/iam/account_policy_tests.rb +0 -20
  693. data/tests/requests/iam/account_tests.rb +0 -34
  694. data/tests/requests/iam/group_policy_tests.rb +0 -48
  695. data/tests/requests/iam/group_tests.rb +0 -44
  696. data/tests/requests/iam/helper.rb +0 -154
  697. data/tests/requests/iam/instance_profile_tests.rb +0 -44
  698. data/tests/requests/iam/login_profile_tests.rb +0 -62
  699. data/tests/requests/iam/managed_policy_tests.rb +0 -111
  700. data/tests/requests/iam/mfa_tests.rb +0 -23
  701. data/tests/requests/iam/role_tests.rb +0 -156
  702. data/tests/requests/iam/server_certificate_tests.rb +0 -130
  703. data/tests/requests/iam/user_policy_tests.rb +0 -45
  704. data/tests/requests/iam/user_tests.rb +0 -78
  705. data/tests/requests/iam/versioned_managed_policy_tests.rb +0 -114
  706. data/tests/requests/kinesis/helper.rb +0 -111
  707. data/tests/requests/kinesis/stream_tests.rb +0 -169
  708. data/tests/requests/kms/helper.rb +0 -27
  709. data/tests/requests/kms/key_tests.rb +0 -23
  710. data/tests/requests/lambda/function_sample_1.js +0 -9
  711. data/tests/requests/lambda/function_sample_2.js +0 -9
  712. data/tests/requests/lambda/function_tests.rb +0 -460
  713. data/tests/requests/lambda/helper.rb +0 -81
  714. data/tests/requests/rds/cluster_snapshot_tests.rb +0 -43
  715. data/tests/requests/rds/cluster_tests.rb +0 -37
  716. data/tests/requests/rds/db_engine_versions.rb +0 -7
  717. data/tests/requests/rds/db_snapshot_tests.rb +0 -62
  718. data/tests/requests/rds/describe_events.rb +0 -16
  719. data/tests/requests/rds/event_subscription_tests.rb +0 -30
  720. data/tests/requests/rds/helper.rb +0 -401
  721. data/tests/requests/rds/instance_option_tests.rb +0 -21
  722. data/tests/requests/rds/instance_tests.rb +0 -149
  723. data/tests/requests/rds/log_file_tests.rb +0 -19
  724. data/tests/requests/rds/parameter_group_tests.rb +0 -62
  725. data/tests/requests/rds/parameter_request_tests.rb +0 -32
  726. data/tests/requests/rds/security_group_tests.rb +0 -101
  727. data/tests/requests/rds/subnet_groups_tests.rb +0 -52
  728. data/tests/requests/rds/tagging_tests.rb +0 -78
  729. data/tests/requests/redshift/cluster_parameter_group_tests.rb +0 -76
  730. data/tests/requests/redshift/cluster_security_group_tests.rb +0 -42
  731. data/tests/requests/redshift/cluster_snapshot_tests.rb +0 -73
  732. data/tests/requests/redshift/cluster_tests.rb +0 -80
  733. data/tests/requests/ses/helper.rb +0 -9
  734. data/tests/requests/ses/verified_domain_identity_tests.rb +0 -16
  735. data/tests/requests/ses/verified_email_address_tests.rb +0 -27
  736. data/tests/requests/simpledb/attributes_tests.rb +0 -86
  737. data/tests/requests/simpledb/domain_tests.rb +0 -51
  738. data/tests/requests/simpledb/helper.rb +0 -10
  739. data/tests/requests/sns/helper.rb +0 -9
  740. data/tests/requests/sns/subscription_tests.rb +0 -86
  741. data/tests/requests/sns/topic_tests.rb +0 -53
  742. data/tests/requests/sqs/helper.rb +0 -9
  743. data/tests/requests/sqs/message_tests.rb +0 -51
  744. data/tests/requests/sqs/queue_tests.rb +0 -50
  745. data/tests/requests/storage/acl_utils_tests.rb +0 -209
  746. data/tests/requests/storage/bucket_tests.rb +0 -416
  747. data/tests/requests/storage/cors_utils_tests.rb +0 -108
  748. data/tests/requests/storage/delete_multiple_objects_tests.rb +0 -12
  749. data/tests/requests/storage/multipart_upload_tests.rb +0 -121
  750. data/tests/requests/storage/object_tests.rb +0 -271
  751. data/tests/requests/storage/versioning_tests.rb +0 -262
  752. data/tests/requests/sts/assume_role_tests.rb +0 -19
  753. data/tests/requests/sts/assume_role_with_saml_tests.rb +0 -18
  754. data/tests/requests/sts/assume_role_with_web_identity_tests.rb +0 -26
  755. data/tests/requests/sts/get_federation_token_tests.rb +0 -20
  756. data/tests/requests/sts/session_token_tests.rb +0 -16
  757. data/tests/requests/support/helper.rb +0 -43
  758. data/tests/requests/support/trusted_advisor_check_tests.rb +0 -16
  759. data/tests/signaturev4_tests.rb +0 -107
  760. data/tests/signed_params_tests.rb +0 -17
  761. data/tests/storage_tests.rb +0 -7
@@ -2,8 +2,8 @@ require 'fog/aws/models/storage/files'
2
2
  require 'fog/aws/models/storage/versions'
3
3
 
4
4
  module Fog
5
- module Storage
6
- class AWS
5
+ module AWS
6
+ class Storage
7
7
  class Directory < Fog::Model
8
8
  VALID_ACLS = ['private', 'public-read', 'public-read-write', 'authenticated-read']
9
9
 
@@ -12,7 +12,6 @@ module Fog
12
12
  identity :key, :aliases => ['Name', 'name']
13
13
 
14
14
  attribute :creation_date, :aliases => 'CreationDate', :type => 'time'
15
- attribute :location, :aliases => 'LocationConstraint', :type => 'string'
16
15
 
17
16
  def acl=(new_acl)
18
17
  unless VALID_ACLS.include?(new_acl)
@@ -30,8 +29,32 @@ module Fog
30
29
  false
31
30
  end
32
31
 
32
+ # @param options [Hash] (defaults to: {}) — a customizable set of options.
33
+ # Consider tuning this values for big buckets.
34
+ # @option options timeout [Integer] — default: Fog.timeout — Maximum number of
35
+ # seconds to wait for the bucket to be empty.
36
+ # @option options interval [Proc|Integer] — default: Fog.interval — Seconds to wait before
37
+ # retrying to check if the bucket is empty.
38
+ def destroy!(options = {})
39
+ requires :key
40
+ options = {
41
+ timeout: Fog.timeout,
42
+ interval: Fog.interval,
43
+ }.merge(options)
44
+
45
+ attempts = 0
46
+ begin
47
+ clear!
48
+ Fog.wait_for(options[:timeout], options[:interval]) { objects_keys.size == 0 }
49
+ service.delete_bucket(key)
50
+ true
51
+ rescue Excon::Errors::HTTPStatusError
52
+ false
53
+ end
54
+ end
55
+
33
56
  def location
34
- @location ||= (bucket_location || AWS::DEFAULT_REGION)
57
+ @location ||= (bucket_location || Storage::DEFAULT_REGION)
35
58
  end
36
59
 
37
60
  # NOTE: you can't change the region once the bucket is created
@@ -40,7 +63,7 @@ module Fog
40
63
  end
41
64
 
42
65
  def files
43
- @files ||= Fog::Storage::AWS::Files.new(:directory => self, :service => service)
66
+ @files ||= Fog::AWS::Storage::Files.new(:directory => self, :service => service)
44
67
  end
45
68
 
46
69
  def payer
@@ -67,7 +90,7 @@ module Fog
67
90
  end
68
91
 
69
92
  def versions
70
- @versions ||= Fog::Storage::AWS::Versions.new(:directory => self, :service => service)
93
+ @versions ||= Fog::AWS::Storage::Versions.new(:directory => self, :service => service)
71
94
  end
72
95
 
73
96
  def public=(new_public)
@@ -119,6 +142,17 @@ module Fog
119
142
  data = service.get_bucket_location(key)
120
143
  data.body['LocationConstraint']
121
144
  end
145
+
146
+ def objects_keys
147
+ requires :key
148
+ bucket_query = service.get_bucket(key)
149
+ bucket_query.body["Contents"].map {|c| c["Key"]}
150
+ end
151
+
152
+ def clear!
153
+ requires :key
154
+ service.delete_multiple_objects(key, objects_keys) if objects_keys.size > 0
155
+ end
122
156
  end
123
157
  end
124
158
  end
@@ -1,9 +1,16 @@
1
1
  require 'fog/aws/models/storage/versions'
2
2
 
3
3
  module Fog
4
- module Storage
5
- class AWS
4
+ module AWS
5
+ class Storage
6
6
  class File < Fog::Model
7
+ # @deprecated use {Fog::AWS::Storage::MIN_MULTIPART_CHUNK_SIZE} instead
8
+ MIN_MULTIPART_CHUNK_SIZE = Fog::AWS::Storage::MIN_MULTIPART_CHUNK_SIZE
9
+ # @deprecated use {Fog::AWS::Storage::MAX_SINGLE_PUT_SIZE} instead
10
+ MAX_SINGLE_PUT_SIZE = Fog::AWS::Storage::MAX_SINGLE_PUT_SIZE
11
+ # @deprecated not used for anything
12
+ MULTIPART_COPY_THRESHOLD = 15728640
13
+
7
14
  # @see AWS Object docs http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectOps.html
8
15
 
9
16
  identity :key, :aliases => 'Key'
@@ -25,15 +32,57 @@ module Fog
25
32
  attribute :encryption_key, :aliases => 'x-amz-server-side-encryption-customer-key'
26
33
  attribute :version, :aliases => 'x-amz-version-id'
27
34
  attribute :kms_key_id, :aliases => 'x-amz-server-side-encryption-aws-kms-key-id'
35
+ attribute :tags, :aliases => 'x-amz-tagging'
36
+ attribute :website_redirect_location, :aliases => 'x-amz-website-redirect-location'
37
+
38
+ UploadPartData = Struct.new(:part_number, :upload_options, :etag)
39
+
40
+ class PartList
41
+ def initialize(parts = [])
42
+ @parts = parts
43
+ @mutex = Mutex.new
44
+ end
45
+
46
+ def push(part)
47
+ @mutex.synchronize { @parts.push(part) }
48
+ end
49
+
50
+ def shift
51
+ @mutex.synchronize { @parts.shift }
52
+ end
53
+
54
+ def clear!
55
+ @mutex.synchronize { @parts.clear }
56
+ end
57
+
58
+ def size
59
+ @mutex.synchronize { @parts.size }
60
+ end
61
+
62
+ def to_a
63
+ @mutex.synchronize { @parts.dup }
64
+ end
65
+ end
28
66
 
29
67
  # @note Chunk size to use for multipart uploads.
30
68
  # Use small chunk sizes to minimize memory. E.g. 5242880 = 5mb
31
69
  attr_reader :multipart_chunk_size
32
70
  def multipart_chunk_size=(mp_chunk_size)
33
- raise ArgumentError.new("minimum multipart_chunk_size is 5242880") if mp_chunk_size < 5242880
71
+ service.validate_chunk_size(mp_chunk_size, 'multipart_chunk_size')
34
72
  @multipart_chunk_size = mp_chunk_size
35
73
  end
36
74
 
75
+ # @note Number of threads used to copy files.
76
+ def concurrency=(concurrency)
77
+ raise ArgumentError.new('minimum concurrency is 1') if concurrency.to_i < 1
78
+
79
+ @concurrency = concurrency.to_i
80
+ end
81
+
82
+ def concurrency
83
+ @concurrency || 1
84
+ end
85
+
37
86
  def acl
38
87
  requires :directory, :key
39
88
  service.get_object_acl(directory.key, key).body['AccessControlList']
@@ -59,15 +108,16 @@ module Fog
59
108
  # @return [File]
60
109
  #
61
110
  def body
62
- return attributes[:body] if attributes[:body]
63
- return '' unless last_modified
111
+ return attributes[:body] if attributes.key?(:body)
64
112
 
65
113
  file = collection.get(identity)
66
- if file
67
- attributes[:body] = file.body
68
- else
69
- attributes[:body] = ''
70
- end
114
+
115
+ attributes[:body] =
116
+ if file
117
+ file.body
118
+ else
119
+ ''
120
+ end
71
121
  end
72
122
 
73
123
  # Set body attribute.
@@ -98,7 +148,17 @@ module Fog
98
148
  #
99
149
  def copy(target_directory_key, target_file_key, options = {})
100
150
  requires :directory, :key
101
- service.copy_object(directory.key, key, target_directory_key, target_file_key, options)
151
+
152
+ self.multipart_chunk_size = service.max_copy_chunk_size if multipart_chunk_size.nil?
153
+
154
+ if multipart_chunk_size > 0 && self.content_length.to_i >= multipart_chunk_size
155
+ upload_part_options = options.select { |key, _| ALLOWED_UPLOAD_PART_OPTIONS.include?(key.to_sym) }
156
+ upload_part_options = upload_part_options.merge({ 'x-amz-copy-source' => "#{directory.key}/#{key}" })
157
+ multipart_copy(options, upload_part_options, target_directory_key, target_file_key)
158
+ else
159
+ service.copy_object(directory.key, key, target_directory_key, target_file_key, options)
160
+ end
161
+
102
162
  target_directory = service.directories.new(:key => target_directory_key)
103
163
  target_directory.files.head(target_file_key)
104
164
  end
@@ -120,7 +180,8 @@ module Fog
120
180
 
121
181
  remove_method :metadata
122
182
  def metadata
123
- attributes.reject {|key, value| !(key.to_s =~ /^x-amz-/)}
183
+ attributes.reject {|key, value| !(key.to_s =~ /^x-amz-/) }
184
+ .reject {|key, value| ['x-amz-id-2', 'x-amz-request-id'].include?(key) }
124
185
  end
125
186
 
126
187
  remove_method :metadata=
@@ -185,13 +246,15 @@ module Fog
185
246
  # @param [Hash] options
186
247
  # @option options [String] acl sets x-amz-acl HTTP header. Valid values include, private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control
187
248
  # @option options [String] cache_control sets Cache-Control header. For example, 'No-cache'
188
- # @option options [String] content_disposition sets Content-Disposition HTTP header. For exampple, 'attachment; filename=testing.txt'
249
+ # @option options [String] content_disposition sets Content-Disposition HTTP header. For example, 'attachment; filename=testing.txt'
189
250
  # @option options [String] content_encoding sets Content-Encoding HTTP header. For example, 'x-gzip'
190
251
  # @option options [String] content_md5 sets Content-MD5. For example, '79054025255fb1a26e4bc422aef54eb4'
191
252
  # @option options [String] content_type Content-Type. For example, 'text/plain'
192
253
  # @option options [String] expires sets number of seconds before AWS Object expires.
193
254
  # @option options [String] storage_class sets x-amz-storage-class HTTP header. Defaults to 'STANDARD'. Or, 'REDUCED_REDUNDANCY'
194
255
  # @option options [String] encryption sets HTTP encryption header. Set to 'AES256' to encrypt files at rest on S3
256
+ # @option options [String] tags sets x-amz-tagging HTTP header. For example, 'Org-Id=1' or 'Org-Id=1&Service=MyService'
257
+ # @option options [String] website_redirect_location sets x-amz-website-redirect-location HTTP header. For example, 'website_redirect_location=http://www.rubydoc.info/github/fog/fog-aws'
195
258
  # @return [Boolean] true if no errors
196
259
  #
197
260
  def save(options = {})
@@ -208,19 +271,19 @@ module Fog
208
271
  options['Expires'] = expires if expires
209
272
  options.merge!(metadata)
210
273
  options['x-amz-storage-class'] = storage_class if storage_class
274
+ options['x-amz-tagging'] = tags if tags
275
+ options['x-amz-website-redirect-location'] = website_redirect_location if website_redirect_location
211
276
  options.merge!(encryption_headers)
212
277
 
213
- # With a single PUT operation you can upload objects up to 5 GB in size. Automatically set MP for larger objects.
214
- self.multipart_chunk_size = 5242880 if !multipart_chunk_size && Fog::Storage.get_body_size(body) > 5368709120
215
-
216
- if multipart_chunk_size && Fog::Storage.get_body_size(body) >= multipart_chunk_size && body.respond_to?(:read)
278
+ self.multipart_chunk_size = service.max_put_chunk_size if multipart_chunk_size.nil?
279
+ if multipart_chunk_size > 0 && Fog::Storage.get_body_size(body) >= multipart_chunk_size && body.respond_to?(:read)
217
280
  data = multipart_save(options)
218
281
  merge_attributes(data.body)
219
282
  else
220
283
  data = service.put_object(directory.key, key, body, options)
221
- merge_attributes(data.headers.reject {|key, value| ['Content-Length', 'Content-Type'].include?(key)})
284
+ merge_attributes(data.headers.reject {|key, value| ['Connection', 'Content-Length', 'Content-Type'].include?(key)})
222
285
  end
223
- self.etag.gsub!('"','') if self.etag
286
+ self.etag = self.etag.gsub('"','') if self.etag
224
287
  self.content_length = Fog::Storage.get_body_size(body)
225
288
  self.content_type ||= Fog::Storage.get_content_type(body)
226
289
  true
@@ -240,11 +303,11 @@ module Fog
240
303
  end
241
304
 
242
305
  # File version if exists or creates new version.
243
- # @return [Fog::Storage::AWS::Version]
306
+ # @return [Fog::AWS::Storage::Version]
244
307
  #
245
308
  def versions
246
309
  @versions ||= begin
247
- Fog::Storage::AWS::Versions.new(
310
+ Fog::AWS::Storage::Versions.new(
248
311
  :file => self,
249
312
  :service => service
250
313
  )
@@ -273,12 +336,12 @@ module Fog
273
336
  body.rewind rescue nil
274
337
  end
275
338
  while (chunk = body.read(multipart_chunk_size)) do
276
- part_upload = service.upload_part(directory.key, key, upload_id, part_tags.size + 1, chunk, part_headers(chunk, options))
339
+ part_upload = service.upload_part(directory.key, key, upload_id, part_tags.size + 1, chunk, part_headers(chunk))
277
340
  part_tags << part_upload.headers["ETag"]
278
341
  end
279
342
 
280
343
  if part_tags.empty? #it is an error to have a multipart upload with no parts
281
- part_upload = service.upload_part(directory.key, key, upload_id, 1, '', part_headers('', options))
344
+ part_upload = service.upload_part(directory.key, key, upload_id, 1, '', part_headers(''))
282
345
  part_tags << part_upload.headers["ETag"]
283
346
  end
284
347
 
@@ -291,6 +354,30 @@ module Fog
291
354
  service.complete_multipart_upload(directory.key, key, upload_id, part_tags)
292
355
  end
293
356
 
357
+ def multipart_copy(options, upload_part_options, target_directory_key, target_file_key)
358
+ # Initiate the upload
359
+ res = service.initiate_multipart_upload(target_directory_key, target_file_key, options)
360
+ upload_id = res.body["UploadId"]
361
+
362
+ # Store ETags of upload parts
363
+ part_tags = []
364
+ pending = PartList.new(create_part_list(upload_part_options))
365
+ thread_count = self.concurrency
366
+ completed = PartList.new
367
+ errors = upload_in_threads(target_directory_key, target_file_key, upload_id, pending, completed, thread_count)
368
+
369
+ raise errors.first if errors.any?
370
+
371
+ part_tags = completed.to_a.sort_by { |part| part.part_number }.map(&:etag)
372
+ rescue => e
373
+ # Abort the upload & reraise
374
+ service.abort_multipart_upload(target_directory_key, target_file_key, upload_id) if upload_id
375
+ raise
376
+ else
377
+ # Complete the upload
378
+ service.complete_multipart_upload(target_directory_key, target_file_key, upload_id, part_tags)
379
+ end
380
+
294
381
  def encryption_headers
295
382
  if encryption && encryption_key
296
383
  encryption_customer_key_headers
@@ -301,11 +388,18 @@ module Fog
301
388
  end
302
389
  end
303
390
 
304
- def part_headers(chunk, options)
305
- md5 = Base64.encode64(OpenSSL::Digest::MD5.digest(chunk)).strip
306
- encryption_keys = encryption_customer_key_headers.keys
307
- encryption_headers = options.select { |key| encryption_keys.include?(key) }
308
- { 'Content-MD5' => md5 }.merge(encryption_headers)
391
+ def part_headers(chunk)
392
+ base_headers = part_checksum_headers(chunk)
393
+
394
+ # Only SSE-C headers needed in the UploadPart request. [1]
395
+ # x-amz-server-side-encryption and
396
+ # x-amz-server-side-encryption-aws-kms-key-id are only needed
397
+ # in the CreateMultipartUpload request. [2]
398
+ # [1] https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html
399
+ # [2] https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html
400
+ base_headers.merge!(encryption_customer_key_headers) if encryption && encryption_key
401
+
402
+ base_headers
309
403
  end
310
404
 
311
405
  def encryption_customer_key_headers
@@ -315,6 +409,57 @@ module Fog
315
409
  'x-amz-server-side-encryption-customer-key-md5' => Base64.encode64(OpenSSL::Digest::MD5.digest(encryption_key.to_s)).chomp!
316
410
  }
317
411
  end
412
+
413
+ def part_checksum_headers(chunk)
414
+ if service.disable_content_md5_validation
415
+ {}
416
+ else
417
+ { 'Content-MD5' => Base64.encode64(OpenSSL::Digest::MD5.digest(chunk)).strip }
418
+ end
419
+ end
420
+
421
+ def create_part_list(upload_part_options)
422
+ current_pos = 0
423
+ count = 0
424
+ pending = []
425
+
426
+ while current_pos < self.content_length do
427
+ start_pos = current_pos
428
+ end_pos = [current_pos + self.multipart_chunk_size, self.content_length - 1].min
429
+ range = "bytes=#{start_pos}-#{end_pos}"
430
+ part_options = upload_part_options.dup
431
+ part_options['x-amz-copy-source-range'] = range
432
+ pending << UploadPartData.new(count + 1, part_options, nil)
433
+ count += 1
434
+ current_pos = end_pos + 1
435
+ end
436
+
437
+ pending
438
+ end
439
+
440
+ def upload_in_threads(target_directory_key, target_file_key, upload_id, pending, completed, thread_count)
441
+ threads = []
442
+
443
+ thread_count.times do
444
+ thread = Thread.new do
445
+ begin
446
+ while part = pending.shift
447
+ part_upload = service.upload_part_copy(target_directory_key, target_file_key, upload_id, part.part_number, part.upload_options)
448
+ part.etag = part_upload.body['ETag']
449
+ completed.push(part)
450
+ end
451
+ rescue => error
452
+ pending.clear!
453
+ error
454
+ end
455
+ end
456
+
457
+ thread.abort_on_exception = true
458
+ threads << thread
459
+ end
460
+
461
+ threads.map(&:value).compact
462
+ end
318
463
  end
319
464
  end
320
465
  end
@@ -1,8 +1,8 @@
1
1
  require 'fog/aws/models/storage/file'
2
2
 
3
3
  module Fog
4
- module Storage
5
- class AWS
4
+ module AWS
5
+ class Storage
6
6
  class Files < Fog::Collection
7
7
  extend Fog::Deprecation
8
8
  deprecate :get_url, :get_https_url
@@ -15,7 +15,16 @@ module Fog
15
15
  attribute :max_keys, :aliases => ['MaxKeys', 'max-keys']
16
16
  attribute :prefix, :aliases => 'Prefix'
17
17
 
18
- model Fog::Storage::AWS::File
18
+ model Fog::AWS::Storage::File
19
+
20
+ DASHED_HEADERS = %w(
21
+ Cache-Control
22
+ Content-Disposition
23
+ Content-Encoding
24
+ Content-Length
25
+ Content-MD5
26
+ Content-Type
27
+ ).freeze
19
28
 
20
29
  def all(options = {})
21
30
  requires :directory
@@ -70,7 +79,7 @@ module Fog
70
79
  when /<Code>NoSuchKey<\/Code>/
71
80
  nil
72
81
  when /<Code>NoSuchBucket<\/Code>/
73
- raise(Fog::Storage::AWS::NotFound.new("Directory #{directory.identity} does not exist."))
82
+ raise(Fog::AWS::Storage::NotFound.new("Directory #{directory.identity} does not exist."))
74
83
  else
75
84
  raise(error)
76
85
  end
@@ -114,8 +123,30 @@ module Fog
114
123
  end
115
124
 
116
125
  def normalize_headers(data)
117
- data.headers['Last-Modified'] = Time.parse(data.get_header('Last-Modified'))
118
- data.headers['ETag'] = data.get_header('ETag').gsub('"','')
126
+ data.headers['Last-Modified'] = Time.parse(fetch_and_delete_header(data, 'Last-Modified'))
127
+
128
+ if (etag = fetch_and_delete_header(data, 'ETag'))
129
+ data.headers['ETag'] = etag.gsub('"', '')
130
+ end
131
+
132
+ DASHED_HEADERS.each do |header|
133
+ value = fetch_and_delete_header(data, header)
134
+ data.headers[header] = value if value
135
+ end
136
+ end
137
+
138
+ private
139
+
140
+ def fetch_and_delete_header(response, header)
141
+ value = response.get_header(header)
142
+
143
+ return unless value
144
+
145
+ response.headers.keys.each do |key|
146
+ response.headers.delete(key) if key.downcase == header.downcase
147
+ end
148
+
149
+ value
119
150
  end
120
151
  end
121
152
  end
@@ -1,6 +1,6 @@
1
1
  module Fog
2
- module Storage
3
- class AWS
2
+ module AWS
3
+ class Storage
4
4
  class Version < Fog::Model
5
5
  identity :version, :aliases => 'VersionId'
6
6
 
@@ -1,13 +1,13 @@
1
1
  require 'fog/aws/models/storage/version'
2
2
 
3
3
  module Fog
4
- module Storage
5
- class AWS
4
+ module AWS
5
+ class Storage
6
6
  class Versions < Fog::Collection
7
7
  attribute :file
8
8
  attribute :directory
9
9
 
10
- model Fog::Storage::AWS::Version
10
+ model Fog::AWS::Storage::Version
11
11
 
12
12
  def all(options = {})
13
13
  data = if file
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module CDN
4
- module AWS
3
+ module AWS
4
+ module CDN
5
5
  class Distribution < Fog::Parsers::Base
6
6
  def reset
7
7
  @response = { 'DistributionConfig' => { 'CNAME' => [], 'Logging' => {}, 'TrustedSigners' => [] } }
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module CDN
4
- module AWS
3
+ module AWS
4
+ module CDN
5
5
  class GetDistributionList < Fog::Parsers::Base
6
6
  def reset
7
7
  @distribution_summary = { 'CNAME' => [], 'TrustedSigners' => [] }
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module CDN
4
- module AWS
3
+ module AWS
4
+ module CDN
5
5
  class GetInvalidation < Fog::Parsers::Base
6
6
  def reset
7
7
  @response = { 'InvalidationBatch' => { 'Path' => [] } }
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module CDN
4
- module AWS
3
+ module AWS
4
+ module CDN
5
5
  class GetInvalidationList < Fog::Parsers::Base
6
6
  def reset
7
7
  @invalidation_summary = { }
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module CDN
4
- module AWS
3
+ module AWS
4
+ module CDN
5
5
  class GetStreamingDistributionList < Fog::Parsers::Base
6
6
  def reset
7
7
  @distribution_summary = { 'CNAME' => [], 'TrustedSigners' => [] }
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module CDN
4
- module AWS
3
+ module AWS
4
+ module CDN
5
5
  class PostInvalidation < Fog::Parsers::Base
6
6
  def reset
7
7
  @response = { 'InvalidationBatch' => { 'Path' => [] } }
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
+ module AWS
3
4
  module CDN
4
- module AWS
5
5
 
6
6
  class StreamingDistribution < Fog::Parsers::Base
7
7
  def reset
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module Compute
4
- module AWS
3
+ module AWS
4
+ module Compute
5
5
  class AllocateAddress < Fog::Parsers::Base
6
6
  def end_element(name)
7
7
  case name
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module Compute
4
- module AWS
3
+ module AWS
4
+ module Compute
5
5
  class AssignPrivateIpAddresses < Fog::Parsers::Base
6
6
  def end_element(name)
7
7
  case name
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module Compute
4
- module AWS
3
+ module AWS
4
+ module Compute
5
5
  class AssociateAddress < Fog::Parsers::Base
6
6
  def end_element(name)
7
7
  case name
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module Compute
4
- module AWS
3
+ module AWS
4
+ module Compute
5
5
  class AssociateRouteTable < Fog::Parsers::Base
6
6
  def end_element(name)
7
7
  case name
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module Compute
4
- module AWS
3
+ module AWS
4
+ module Compute
5
5
  class AttachNetworkInterface < Fog::Parsers::Base
6
6
  def end_element(name)
7
7
  case name
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module Compute
4
- module AWS
3
+ module AWS
4
+ module Compute
5
5
  class AttachVolume < Fog::Parsers::Base
6
6
  def end_element(name)
7
7
  case name
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module Compute
4
- module AWS
3
+ module AWS
4
+ module Compute
5
5
  class Basic < Fog::Parsers::Base
6
6
  def end_element(name)
7
7
  case name
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module Compute
4
- module AWS
3
+ module AWS
4
+ module Compute
5
5
  class CancelSpotInstanceRequests < Fog::Parsers::Base
6
6
  def reset
7
7
  @spot_instance_request = {}
@@ -1,7 +1,7 @@
1
1
  module Fog
2
2
  module Parsers
3
- module Compute
4
- module AWS
3
+ module AWS
4
+ module Compute
5
5
  class CopyImage < Fog::Parsers::Base
6
6
  def end_element(name)
7
7
  case name