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.
- data/.yardopts +5 -0
- data/LICENSE.txt +12 -0
- data/README.rdoc +189 -0
- data/ca-bundle.crt +3895 -0
- data/lib/aws-sdk-euca.rb +79 -0
- data/lib/aws-sdk.rb +79 -0
- data/lib/aws.rb +14 -0
- data/lib/aws/api_config/AutoScaling-2011-01-01.yml +825 -0
- data/lib/aws/api_config/CloudFormation-2010-05-15.yml +322 -0
- data/lib/aws/api_config/CloudFront-2012-05-05.yml +2102 -0
- data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
- data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
- data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
- data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1160 -0
- data/lib/aws/api_config/EC2-2013-02-01.yml +4368 -0
- data/lib/aws/api_config/ELB-2012-06-01.yml +597 -0
- data/lib/aws/api_config/EMR-2009-03-31.yml +370 -0
- data/lib/aws/api_config/ElastiCache-2012-03-09.yml +777 -0
- data/lib/aws/api_config/ElastiCache-2012-11-15.yml +979 -0
- data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +823 -0
- data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +1036 -0
- data/lib/aws/api_config/Glacier-2012-06-01.yml +618 -0
- data/lib/aws/api_config/IAM-2010-05-08.yml +1222 -0
- data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
- data/lib/aws/api_config/OpsWorks-2013-02-18.yml +1463 -0
- data/lib/aws/api_config/RDS-2012-09-17.yml +1861 -0
- data/lib/aws/api_config/RDS-2013-02-12.yml +2377 -0
- data/lib/aws/api_config/Redshift-2012-12-01.yml +1149 -0
- data/lib/aws/api_config/Route53-2012-02-29.yml +380 -0
- data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
- data/lib/aws/api_config/SNS-2010-03-31.yml +249 -0
- data/lib/aws/api_config/SQS-2012-11-05.yml +317 -0
- data/lib/aws/api_config/STS-2011-06-15.yml +81 -0
- data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
- data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
- data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2358 -0
- data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
- data/lib/aws/auto_scaling.rb +164 -0
- data/lib/aws/auto_scaling/activity.rb +102 -0
- data/lib/aws/auto_scaling/activity_collection.rb +82 -0
- data/lib/aws/auto_scaling/client.rb +521 -0
- data/lib/aws/auto_scaling/config.rb +18 -0
- data/lib/aws/auto_scaling/errors.rb +22 -0
- data/lib/aws/auto_scaling/group.rb +420 -0
- data/lib/aws/auto_scaling/group_collection.rb +96 -0
- data/lib/aws/auto_scaling/group_options.rb +146 -0
- data/lib/aws/auto_scaling/instance.rb +192 -0
- data/lib/aws/auto_scaling/instance_collection.rb +63 -0
- data/lib/aws/auto_scaling/launch_configuration.rb +158 -0
- data/lib/aws/auto_scaling/launch_configuration_collection.rb +154 -0
- data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
- data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
- data/lib/aws/auto_scaling/request.rb +29 -0
- data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
- data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
- data/lib/aws/auto_scaling/scaling_policy_options.rb +64 -0
- data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
- data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
- data/lib/aws/auto_scaling/tag.rb +59 -0
- data/lib/aws/auto_scaling/tag_collection.rb +112 -0
- data/lib/aws/cloud_formation.rb +272 -0
- data/lib/aws/cloud_formation/client.rb +369 -0
- data/lib/aws/cloud_formation/config.rb +18 -0
- data/lib/aws/cloud_formation/errors.rb +22 -0
- data/lib/aws/cloud_formation/request.rb +29 -0
- data/lib/aws/cloud_formation/stack.rb +255 -0
- data/lib/aws/cloud_formation/stack_collection.rb +209 -0
- data/lib/aws/cloud_formation/stack_event.rb +75 -0
- data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
- data/lib/aws/cloud_formation/stack_options.rb +72 -0
- data/lib/aws/cloud_formation/stack_output.rb +53 -0
- data/lib/aws/cloud_formation/stack_resource.rb +117 -0
- data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
- data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
- data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
- data/lib/aws/cloud_front.rb +73 -0
- data/lib/aws/cloud_front/client.rb +1307 -0
- data/lib/aws/cloud_front/config.rb +18 -0
- data/lib/aws/cloud_front/errors.rb +22 -0
- data/lib/aws/cloud_front/request.rb +44 -0
- data/lib/aws/cloud_search.rb +74 -0
- data/lib/aws/cloud_search/client.rb +558 -0
- data/lib/aws/cloud_search/config.rb +18 -0
- data/lib/aws/cloud_search/errors.rb +22 -0
- data/lib/aws/cloud_search/request.rb +23 -0
- data/lib/aws/cloud_watch.rb +119 -0
- data/lib/aws/cloud_watch/alarm.rb +272 -0
- data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
- data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
- data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
- data/lib/aws/cloud_watch/client.rb +247 -0
- data/lib/aws/cloud_watch/config.rb +18 -0
- data/lib/aws/cloud_watch/errors.rb +22 -0
- data/lib/aws/cloud_watch/metric.rb +135 -0
- data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
- data/lib/aws/cloud_watch/metric_collection.rb +131 -0
- data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
- data/lib/aws/cloud_watch/request.rb +23 -0
- data/lib/aws/core.rb +587 -0
- data/lib/aws/core/async_handle.rb +90 -0
- data/lib/aws/core/autoloader.rb +64 -0
- data/lib/aws/core/cacheable.rb +78 -0
- data/lib/aws/core/client.rb +691 -0
- data/lib/aws/core/collection.rb +267 -0
- data/lib/aws/core/collection/simple.rb +82 -0
- data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
- data/lib/aws/core/collection/with_next_token.rb +97 -0
- data/lib/aws/core/configuration.rb +546 -0
- data/lib/aws/core/credential_providers.rb +461 -0
- data/lib/aws/core/data.rb +247 -0
- data/lib/aws/core/http/curb_handler.rb +155 -0
- data/lib/aws/core/http/handler.rb +89 -0
- data/lib/aws/core/http/net_http_handler.rb +128 -0
- data/lib/aws/core/http/request.rb +263 -0
- data/lib/aws/core/http/response.rb +81 -0
- data/lib/aws/core/indifferent_hash.rb +88 -0
- data/lib/aws/core/inflection.rb +56 -0
- data/lib/aws/core/json_client.rb +47 -0
- data/lib/aws/core/json_parser.rb +76 -0
- data/lib/aws/core/json_request_builder.rb +35 -0
- data/lib/aws/core/json_response_parser.rb +79 -0
- data/lib/aws/core/lazy_error_classes.rb +90 -0
- data/lib/aws/core/log_formatter.rb +462 -0
- data/lib/aws/core/managed_file.rb +32 -0
- data/lib/aws/core/meta_utils.rb +45 -0
- data/lib/aws/core/model.rb +57 -0
- data/lib/aws/core/naming.rb +30 -0
- data/lib/aws/core/option_grammar.rb +735 -0
- data/lib/aws/core/options/json_serializer.rb +82 -0
- data/lib/aws/core/options/validator.rb +155 -0
- data/lib/aws/core/options/xml_serializer.rb +118 -0
- data/lib/aws/core/page_result.rb +75 -0
- data/lib/aws/core/policy.rb +916 -0
- data/lib/aws/core/query_client.rb +41 -0
- data/lib/aws/core/query_error_parser.rb +24 -0
- data/lib/aws/core/query_request_builder.rb +47 -0
- data/lib/aws/core/query_response_parser.rb +35 -0
- data/lib/aws/core/resource.rb +413 -0
- data/lib/aws/core/resource_cache.rb +40 -0
- data/lib/aws/core/response.rb +208 -0
- data/lib/aws/core/response_cache.rb +50 -0
- data/lib/aws/core/rest_error_parser.rb +24 -0
- data/lib/aws/core/rest_json_client.rb +40 -0
- data/lib/aws/core/rest_request_builder.rb +146 -0
- data/lib/aws/core/rest_response_parser.rb +66 -0
- data/lib/aws/core/rest_xml_client.rb +47 -0
- data/lib/aws/core/service_interface.rb +61 -0
- data/lib/aws/core/signature/version_2.rb +56 -0
- data/lib/aws/core/signature/version_3.rb +77 -0
- data/lib/aws/core/signature/version_3_https.rb +54 -0
- data/lib/aws/core/signature/version_4.rb +135 -0
- data/lib/aws/core/signer.rb +46 -0
- data/lib/aws/core/uri_escape.rb +44 -0
- data/lib/aws/core/xml/frame.rb +244 -0
- data/lib/aws/core/xml/frame_stack.rb +85 -0
- data/lib/aws/core/xml/grammar.rb +307 -0
- data/lib/aws/core/xml/parser.rb +70 -0
- data/lib/aws/core/xml/root_frame.rb +65 -0
- data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
- data/lib/aws/core/xml/sax_handlers/nokogiri.rb +55 -0
- data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
- data/lib/aws/core/xml/sax_handlers/rexml.rb +43 -0
- data/lib/aws/core/xml/stub.rb +123 -0
- data/lib/aws/data_pipeline.rb +73 -0
- data/lib/aws/data_pipeline/client.rb +339 -0
- data/lib/aws/data_pipeline/config.rb +18 -0
- data/lib/aws/data_pipeline/errors.rb +20 -0
- data/lib/aws/data_pipeline/request.rb +26 -0
- data/lib/aws/dynamo_db.rb +206 -0
- data/lib/aws/dynamo_db/attribute_collection.rb +461 -0
- data/lib/aws/dynamo_db/batch_get.rb +213 -0
- data/lib/aws/dynamo_db/batch_write.rb +252 -0
- data/lib/aws/dynamo_db/binary.rb +35 -0
- data/lib/aws/dynamo_db/client.rb +904 -0
- data/lib/aws/dynamo_db/config.rb +24 -0
- data/lib/aws/dynamo_db/errors.rb +20 -0
- data/lib/aws/dynamo_db/expectations.rb +40 -0
- data/lib/aws/dynamo_db/item.rb +133 -0
- data/lib/aws/dynamo_db/item_collection.rb +852 -0
- data/lib/aws/dynamo_db/item_data.rb +31 -0
- data/lib/aws/dynamo_db/keys.rb +41 -0
- data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
- data/lib/aws/dynamo_db/request.rb +26 -0
- data/lib/aws/dynamo_db/resource.rb +33 -0
- data/lib/aws/dynamo_db/table.rb +491 -0
- data/lib/aws/dynamo_db/table_collection.rb +165 -0
- data/lib/aws/dynamo_db/types.rb +111 -0
- data/lib/aws/ec2.rb +440 -0
- data/lib/aws/ec2/attachment.rb +140 -0
- data/lib/aws/ec2/attachment_collection.rb +54 -0
- data/lib/aws/ec2/availability_zone.rb +86 -0
- data/lib/aws/ec2/availability_zone_collection.rb +43 -0
- data/lib/aws/ec2/block_device_mappings.rb +53 -0
- data/lib/aws/ec2/client.rb +3621 -0
- data/lib/aws/ec2/collection.rb +36 -0
- data/lib/aws/ec2/config.rb +18 -0
- data/lib/aws/ec2/config_transform.rb +63 -0
- data/lib/aws/ec2/customer_gateway.rb +90 -0
- data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
- data/lib/aws/ec2/dhcp_options.rb +106 -0
- data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
- data/lib/aws/ec2/elastic_ip.rb +208 -0
- data/lib/aws/ec2/elastic_ip_collection.rb +97 -0
- data/lib/aws/ec2/errors.rb +32 -0
- data/lib/aws/ec2/export_task.rb +120 -0
- data/lib/aws/ec2/export_task_collection.rb +67 -0
- data/lib/aws/ec2/filtered_collection.rb +89 -0
- data/lib/aws/ec2/has_permissions.rb +44 -0
- data/lib/aws/ec2/image.rb +264 -0
- data/lib/aws/ec2/image_collection.rb +228 -0
- data/lib/aws/ec2/instance.rb +796 -0
- data/lib/aws/ec2/instance_collection.rb +372 -0
- data/lib/aws/ec2/internet_gateway.rb +122 -0
- data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
- data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
- data/lib/aws/ec2/key_pair.rb +82 -0
- data/lib/aws/ec2/key_pair_collection.rb +99 -0
- data/lib/aws/ec2/network_acl.rb +256 -0
- data/lib/aws/ec2/network_acl/association.rb +56 -0
- data/lib/aws/ec2/network_acl/entry.rb +147 -0
- data/lib/aws/ec2/network_acl_collection.rb +64 -0
- data/lib/aws/ec2/network_interface.rb +228 -0
- data/lib/aws/ec2/network_interface/attachment.rb +100 -0
- data/lib/aws/ec2/network_interface_collection.rb +103 -0
- data/lib/aws/ec2/permission_collection.rb +174 -0
- data/lib/aws/ec2/region.rb +106 -0
- data/lib/aws/ec2/region_collection.rb +51 -0
- data/lib/aws/ec2/request.rb +21 -0
- data/lib/aws/ec2/reserved_instances.rb +56 -0
- data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
- data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
- data/lib/aws/ec2/reserved_instances_offering_collection.rb +39 -0
- data/lib/aws/ec2/resource.rb +161 -0
- data/lib/aws/ec2/resource_tag_collection.rb +211 -0
- data/lib/aws/ec2/route_table.rb +205 -0
- data/lib/aws/ec2/route_table/association.rb +119 -0
- data/lib/aws/ec2/route_table/route.rb +119 -0
- data/lib/aws/ec2/route_table_collection.rb +72 -0
- data/lib/aws/ec2/security_group.rb +484 -0
- data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
- data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
- data/lib/aws/ec2/security_group_collection.rb +135 -0
- data/lib/aws/ec2/snapshot.rb +143 -0
- data/lib/aws/ec2/snapshot_collection.rb +132 -0
- data/lib/aws/ec2/subnet.rb +161 -0
- data/lib/aws/ec2/subnet_collection.rb +115 -0
- data/lib/aws/ec2/tag.rb +81 -0
- data/lib/aws/ec2/tag_collection.rb +107 -0
- data/lib/aws/ec2/tagged_collection.rb +53 -0
- data/lib/aws/ec2/tagged_item.rb +85 -0
- data/lib/aws/ec2/volume.rb +174 -0
- data/lib/aws/ec2/volume_collection.rb +101 -0
- data/lib/aws/ec2/vpc.rb +166 -0
- data/lib/aws/ec2/vpc_collection.rb +70 -0
- data/lib/aws/ec2/vpn_connection.rb +99 -0
- data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
- data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
- data/lib/aws/ec2/vpn_gateway.rb +123 -0
- data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
- data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
- data/lib/aws/elastic_beanstalk.rb +50 -0
- data/lib/aws/elastic_beanstalk/client.rb +867 -0
- data/lib/aws/elastic_beanstalk/config.rb +18 -0
- data/lib/aws/elastic_beanstalk/errors.rb +22 -0
- data/lib/aws/elastic_beanstalk/request.rb +29 -0
- data/lib/aws/elastic_transcoder.rb +30 -0
- data/lib/aws/elastic_transcoder/client.rb +672 -0
- data/lib/aws/elastic_transcoder/config.rb +18 -0
- data/lib/aws/elastic_transcoder/errors.rb +23 -0
- data/lib/aws/elastic_transcoder/request.rb +30 -0
- data/lib/aws/elasticache.rb +50 -0
- data/lib/aws/elasticache/client.rb +920 -0
- data/lib/aws/elasticache/config.rb +18 -0
- data/lib/aws/elasticache/errors.rb +22 -0
- data/lib/aws/elasticache/request.rb +23 -0
- data/lib/aws/elb.rb +67 -0
- data/lib/aws/elb/availability_zone_collection.rb +138 -0
- data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
- data/lib/aws/elb/client.rb +500 -0
- data/lib/aws/elb/config.rb +18 -0
- data/lib/aws/elb/errors.rb +26 -0
- data/lib/aws/elb/instance_collection.rb +173 -0
- data/lib/aws/elb/listener.rb +190 -0
- data/lib/aws/elb/listener_collection.rb +113 -0
- data/lib/aws/elb/listener_opts.rb +45 -0
- data/lib/aws/elb/load_balancer.rb +281 -0
- data/lib/aws/elb/load_balancer_collection.rb +134 -0
- data/lib/aws/elb/load_balancer_policy.rb +93 -0
- data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
- data/lib/aws/elb/request.rb +29 -0
- data/lib/aws/emr.rb +86 -0
- data/lib/aws/emr/client.rb +330 -0
- data/lib/aws/emr/config.rb +18 -0
- data/lib/aws/emr/errors.rb +22 -0
- data/lib/aws/emr/instance_group.rb +138 -0
- data/lib/aws/emr/instance_group_collection.rb +82 -0
- data/lib/aws/emr/job_flow.rb +306 -0
- data/lib/aws/emr/job_flow_collection.rb +185 -0
- data/lib/aws/emr/request.rb +23 -0
- data/lib/aws/errors.rb +162 -0
- data/lib/aws/glacier.rb +80 -0
- data/lib/aws/glacier/archive.rb +56 -0
- data/lib/aws/glacier/archive_collection.rb +146 -0
- data/lib/aws/glacier/client.rb +286 -0
- data/lib/aws/glacier/config.rb +19 -0
- data/lib/aws/glacier/errors.rb +22 -0
- data/lib/aws/glacier/request.rb +34 -0
- data/lib/aws/glacier/resource.rb +30 -0
- data/lib/aws/glacier/vault.rb +145 -0
- data/lib/aws/glacier/vault_collection.rb +75 -0
- data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
- data/lib/aws/iam.rb +420 -0
- data/lib/aws/iam/access_key.rb +180 -0
- data/lib/aws/iam/access_key_collection.rb +128 -0
- data/lib/aws/iam/account_alias_collection.rb +79 -0
- data/lib/aws/iam/client.rb +1092 -0
- data/lib/aws/iam/collection.rb +83 -0
- data/lib/aws/iam/config.rb +18 -0
- data/lib/aws/iam/errors.rb +22 -0
- data/lib/aws/iam/group.rb +111 -0
- data/lib/aws/iam/group_collection.rb +132 -0
- data/lib/aws/iam/group_policy_collection.rb +47 -0
- data/lib/aws/iam/group_user_collection.rb +84 -0
- data/lib/aws/iam/login_profile.rb +99 -0
- data/lib/aws/iam/mfa_device.rb +52 -0
- data/lib/aws/iam/mfa_device_collection.rb +127 -0
- data/lib/aws/iam/policy.rb +46 -0
- data/lib/aws/iam/policy_collection.rb +188 -0
- data/lib/aws/iam/request.rb +29 -0
- data/lib/aws/iam/resource.rb +62 -0
- data/lib/aws/iam/server_certificate.rb +141 -0
- data/lib/aws/iam/server_certificate_collection.rb +138 -0
- data/lib/aws/iam/signing_certificate.rb +169 -0
- data/lib/aws/iam/signing_certificate_collection.rb +131 -0
- data/lib/aws/iam/user.rb +205 -0
- data/lib/aws/iam/user_collection.rb +133 -0
- data/lib/aws/iam/user_group_collection.rb +98 -0
- data/lib/aws/iam/user_policy.rb +90 -0
- data/lib/aws/iam/user_policy_collection.rb +45 -0
- data/lib/aws/iam/virtual_mfa_device.rb +139 -0
- data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
- data/lib/aws/import_export.rb +73 -0
- data/lib/aws/import_export/client.rb +109 -0
- data/lib/aws/import_export/config.rb +19 -0
- data/lib/aws/import_export/errors.rb +22 -0
- data/lib/aws/import_export/request.rb +23 -0
- data/lib/aws/ops_works.rb +30 -0
- data/lib/aws/ops_works/client.rb +713 -0
- data/lib/aws/ops_works/config.rb +18 -0
- data/lib/aws/ops_works/errors.rb +20 -0
- data/lib/aws/ops_works/request.rb +27 -0
- data/lib/aws/rails.rb +195 -0
- data/lib/aws/rds.rb +71 -0
- data/lib/aws/rds/client.rb +2228 -0
- data/lib/aws/rds/config.rb +18 -0
- data/lib/aws/rds/db_instance.rb +205 -0
- data/lib/aws/rds/db_instance_collection.rb +75 -0
- data/lib/aws/rds/db_snapshot.rb +163 -0
- data/lib/aws/rds/db_snapshot_collection.rb +89 -0
- data/lib/aws/rds/errors.rb +22 -0
- data/lib/aws/rds/request.rb +23 -0
- data/lib/aws/record.rb +116 -0
- data/lib/aws/record/abstract_base.rb +701 -0
- data/lib/aws/record/attributes.rb +384 -0
- data/lib/aws/record/conversion.rb +38 -0
- data/lib/aws/record/dirty_tracking.rb +285 -0
- data/lib/aws/record/errors.rb +143 -0
- data/lib/aws/record/exceptions.rb +48 -0
- data/lib/aws/record/hash_model.rb +161 -0
- data/lib/aws/record/hash_model/attributes.rb +197 -0
- data/lib/aws/record/hash_model/finder_methods.rb +172 -0
- data/lib/aws/record/hash_model/scope.rb +108 -0
- data/lib/aws/record/model.rb +427 -0
- data/lib/aws/record/model/attributes.rb +379 -0
- data/lib/aws/record/model/finder_methods.rb +232 -0
- data/lib/aws/record/model/scope.rb +213 -0
- data/lib/aws/record/naming.rb +31 -0
- data/lib/aws/record/scope.rb +199 -0
- data/lib/aws/record/validations.rb +712 -0
- data/lib/aws/record/validator.rb +246 -0
- data/lib/aws/record/validators/acceptance.rb +51 -0
- data/lib/aws/record/validators/block.rb +38 -0
- data/lib/aws/record/validators/confirmation.rb +43 -0
- data/lib/aws/record/validators/count.rb +108 -0
- data/lib/aws/record/validators/exclusion.rb +43 -0
- data/lib/aws/record/validators/format.rb +57 -0
- data/lib/aws/record/validators/inclusion.rb +56 -0
- data/lib/aws/record/validators/length.rb +107 -0
- data/lib/aws/record/validators/method.rb +33 -0
- data/lib/aws/record/validators/numericality.rb +138 -0
- data/lib/aws/record/validators/presence.rb +45 -0
- data/lib/aws/redshift.rb +52 -0
- data/lib/aws/redshift/client.rb +1291 -0
- data/lib/aws/redshift/config.rb +18 -0
- data/lib/aws/redshift/errors.rb +22 -0
- data/lib/aws/redshift/request.rb +29 -0
- data/lib/aws/route_53.rb +87 -0
- data/lib/aws/route_53/change_batch.rb +159 -0
- data/lib/aws/route_53/change_info.rb +72 -0
- data/lib/aws/route_53/client.rb +387 -0
- data/lib/aws/route_53/config.rb +18 -0
- data/lib/aws/route_53/errors.rb +22 -0
- data/lib/aws/route_53/hosted_zone.rb +111 -0
- data/lib/aws/route_53/hosted_zone_collection.rb +100 -0
- data/lib/aws/route_53/request.rb +23 -0
- data/lib/aws/route_53/resource_record_set.rb +237 -0
- data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
- data/lib/aws/s3.rb +155 -0
- data/lib/aws/s3/access_control_list.rb +257 -0
- data/lib/aws/s3/acl_object.rb +264 -0
- data/lib/aws/s3/acl_options.rb +204 -0
- data/lib/aws/s3/bucket.rb +742 -0
- data/lib/aws/s3/bucket_collection.rb +160 -0
- data/lib/aws/s3/bucket_lifecycle_configuration.rb +458 -0
- data/lib/aws/s3/bucket_tag_collection.rb +109 -0
- data/lib/aws/s3/bucket_version_collection.rb +77 -0
- data/lib/aws/s3/cipher_io.rb +119 -0
- data/lib/aws/s3/client.rb +1700 -0
- data/lib/aws/s3/client/xml.rb +231 -0
- data/lib/aws/s3/config.rb +36 -0
- data/lib/aws/s3/cors_rule.rb +106 -0
- data/lib/aws/s3/cors_rule_collection.rb +192 -0
- data/lib/aws/s3/data_options.rb +185 -0
- data/lib/aws/s3/encryption_utils.rb +139 -0
- data/lib/aws/s3/errors.rb +94 -0
- data/lib/aws/s3/multipart_upload.rb +320 -0
- data/lib/aws/s3/multipart_upload_collection.rb +68 -0
- data/lib/aws/s3/object_collection.rb +355 -0
- data/lib/aws/s3/object_metadata.rb +96 -0
- data/lib/aws/s3/object_upload_collection.rb +77 -0
- data/lib/aws/s3/object_version.rb +148 -0
- data/lib/aws/s3/object_version_collection.rb +89 -0
- data/lib/aws/s3/paginated_collection.rb +75 -0
- data/lib/aws/s3/policy.rb +74 -0
- data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
- data/lib/aws/s3/prefixed_collection.rb +81 -0
- data/lib/aws/s3/presigned_post.rb +555 -0
- data/lib/aws/s3/request.rb +201 -0
- data/lib/aws/s3/s3_object.rb +1690 -0
- data/lib/aws/s3/tree.rb +118 -0
- data/lib/aws/s3/tree/branch_node.rb +68 -0
- data/lib/aws/s3/tree/child_collection.rb +104 -0
- data/lib/aws/s3/tree/leaf_node.rb +94 -0
- data/lib/aws/s3/tree/node.rb +22 -0
- data/lib/aws/s3/tree/parent.rb +87 -0
- data/lib/aws/s3/uploaded_part.rb +80 -0
- data/lib/aws/s3/uploaded_part_collection.rb +84 -0
- data/lib/aws/s3/website_configuration.rb +102 -0
- data/lib/aws/simple_db.rb +219 -0
- data/lib/aws/simple_db/attribute.rb +154 -0
- data/lib/aws/simple_db/attribute_collection.rb +231 -0
- data/lib/aws/simple_db/client.rb +287 -0
- data/lib/aws/simple_db/config.rb +20 -0
- data/lib/aws/simple_db/consistent_read_option.rb +42 -0
- data/lib/aws/simple_db/delete_attributes.rb +62 -0
- data/lib/aws/simple_db/domain.rb +121 -0
- data/lib/aws/simple_db/domain_collection.rb +86 -0
- data/lib/aws/simple_db/domain_metadata.rb +110 -0
- data/lib/aws/simple_db/errors.rb +55 -0
- data/lib/aws/simple_db/expect_condition_option.rb +45 -0
- data/lib/aws/simple_db/item.rb +93 -0
- data/lib/aws/simple_db/item_collection.rb +649 -0
- data/lib/aws/simple_db/item_data.rb +73 -0
- data/lib/aws/simple_db/put_attributes.rb +60 -0
- data/lib/aws/simple_db/request.rb +23 -0
- data/lib/aws/simple_email_service.rb +428 -0
- data/lib/aws/simple_email_service/client.rb +276 -0
- data/lib/aws/simple_email_service/config.rb +19 -0
- data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
- data/lib/aws/simple_email_service/errors.rb +22 -0
- data/lib/aws/simple_email_service/identity.rb +209 -0
- data/lib/aws/simple_email_service/identity_collection.rb +81 -0
- data/lib/aws/simple_email_service/quotas.rb +64 -0
- data/lib/aws/simple_email_service/request.rb +27 -0
- data/lib/aws/simple_workflow.rb +228 -0
- data/lib/aws/simple_workflow/activity_task.rb +173 -0
- data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
- data/lib/aws/simple_workflow/activity_type.rb +131 -0
- data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
- data/lib/aws/simple_workflow/client.rb +1204 -0
- data/lib/aws/simple_workflow/config.rb +18 -0
- data/lib/aws/simple_workflow/count.rb +49 -0
- data/lib/aws/simple_workflow/decision_task.rb +603 -0
- data/lib/aws/simple_workflow/decision_task_collection.rb +225 -0
- data/lib/aws/simple_workflow/domain.rb +122 -0
- data/lib/aws/simple_workflow/domain_collection.rb +169 -0
- data/lib/aws/simple_workflow/errors.rb +20 -0
- data/lib/aws/simple_workflow/history_event.rb +276 -0
- data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
- data/lib/aws/simple_workflow/option_formatters.rb +82 -0
- data/lib/aws/simple_workflow/request.rb +33 -0
- data/lib/aws/simple_workflow/resource.rb +94 -0
- data/lib/aws/simple_workflow/type.rb +89 -0
- data/lib/aws/simple_workflow/type_collection.rb +140 -0
- data/lib/aws/simple_workflow/workflow_execution.rb +386 -0
- data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
- data/lib/aws/simple_workflow/workflow_type.rb +177 -0
- data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
- data/lib/aws/sns.rb +76 -0
- data/lib/aws/sns/client.rb +266 -0
- data/lib/aws/sns/config.rb +18 -0
- data/lib/aws/sns/errors.rb +22 -0
- data/lib/aws/sns/has_delivery_policy.rb +68 -0
- data/lib/aws/sns/policy.rb +47 -0
- data/lib/aws/sns/request.rb +23 -0
- data/lib/aws/sns/subscription.rb +144 -0
- data/lib/aws/sns/subscription_collection.rb +78 -0
- data/lib/aws/sns/topic.rb +403 -0
- data/lib/aws/sns/topic_collection.rb +62 -0
- data/lib/aws/sns/topic_subscription_collection.rb +54 -0
- data/lib/aws/sqs.rb +81 -0
- data/lib/aws/sqs/client.rb +258 -0
- data/lib/aws/sqs/config.rb +18 -0
- data/lib/aws/sqs/errors.rb +101 -0
- data/lib/aws/sqs/policy.rb +48 -0
- data/lib/aws/sqs/queue.rb +764 -0
- data/lib/aws/sqs/queue_collection.rb +174 -0
- data/lib/aws/sqs/received_message.rb +181 -0
- data/lib/aws/sqs/received_sns_message.rb +116 -0
- data/lib/aws/sqs/request.rb +67 -0
- data/lib/aws/storage_gateway.rb +73 -0
- data/lib/aws/storage_gateway/client.rb +472 -0
- data/lib/aws/storage_gateway/config.rb +18 -0
- data/lib/aws/storage_gateway/errors.rb +22 -0
- data/lib/aws/storage_gateway/request.rb +28 -0
- data/lib/aws/sts.rb +163 -0
- data/lib/aws/sts/client.rb +157 -0
- data/lib/aws/sts/config.rb +18 -0
- data/lib/aws/sts/errors.rb +22 -0
- data/lib/aws/sts/federated_session.rb +56 -0
- data/lib/aws/sts/policy.rb +30 -0
- data/lib/aws/sts/request.rb +29 -0
- data/lib/aws/sts/session.rb +48 -0
- data/lib/aws/version.rb +18 -0
- data/lib/net/http/connection_pool.rb +226 -0
- data/lib/net/http/connection_pool/connection.rb +189 -0
- data/lib/net/http/connection_pool/session.rb +126 -0
- data/rails/init.rb +15 -0
- 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
|