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,228 @@
|
|
|
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 EC2
|
|
16
|
+
|
|
17
|
+
# Represents a collection of EC2 images. You can use this to
|
|
18
|
+
# find out which images exist with the characteristics you are
|
|
19
|
+
# interested in:
|
|
20
|
+
#
|
|
21
|
+
# ec2 = EC2.new
|
|
22
|
+
# all_images = ec2.images
|
|
23
|
+
# amazon_owned_images = all_images.with_owner('amazon')
|
|
24
|
+
# my_images = all_images.with_owner('self')
|
|
25
|
+
# tagged_amis = all_images.tagged('mytag')
|
|
26
|
+
# tagged_amis.map(&:id) # => ["ami-123", ...]
|
|
27
|
+
#
|
|
28
|
+
# You can also use it to create new images. For example:
|
|
29
|
+
#
|
|
30
|
+
# ec2.images.create(:instance_id => "i-123",
|
|
31
|
+
# :name => "my-image")
|
|
32
|
+
#
|
|
33
|
+
class ImageCollection < Collection
|
|
34
|
+
|
|
35
|
+
include TaggedCollection
|
|
36
|
+
include BlockDeviceMappings
|
|
37
|
+
|
|
38
|
+
# @private
|
|
39
|
+
def initialize(options = {})
|
|
40
|
+
@owners = options[:owners] || []
|
|
41
|
+
@executable_users = options[:executable_users] || []
|
|
42
|
+
super(options)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @return [Image] image_id The ID of the image.
|
|
46
|
+
def [] image_id
|
|
47
|
+
super
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# @return [ImageCollection] A new collection that only includes
|
|
51
|
+
# images owned by one or more of the specified AWS accounts.
|
|
52
|
+
# The IDs +:amazon+ and +:self+ can be used to include AMIs
|
|
53
|
+
# owned by Amazon or AMIs owned by you, respectively.
|
|
54
|
+
#
|
|
55
|
+
# @param [Array of Strings] owners The AWS account IDs by
|
|
56
|
+
# which the new collection should be filtered.
|
|
57
|
+
def with_owner(*owners)
|
|
58
|
+
collection_with(:owners => @owners + owners)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# @return [ImageCollection] A new collection that only includes
|
|
62
|
+
# images for which the specified user ID has explicit launch
|
|
63
|
+
# permissions. The user ID can be an AWS account ID, +:self+
|
|
64
|
+
# to return AMIs for which the sender of the request has
|
|
65
|
+
# explicit launch permissions, or +:all+ to return AMIs with
|
|
66
|
+
# public launch permissions.
|
|
67
|
+
#
|
|
68
|
+
# @param [Array of Strings] users The AWS account IDs by which
|
|
69
|
+
# the new collection should be filtered.
|
|
70
|
+
def executable_by(*users)
|
|
71
|
+
collection_with(:executable_users => @executable_users + users)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# @yield [image] Each image in the collection.
|
|
75
|
+
# @return [nil]
|
|
76
|
+
def each &block
|
|
77
|
+
opts = {}
|
|
78
|
+
opts[:owners] = @owners.map { |id| id.to_s } unless @owners.empty?
|
|
79
|
+
opts[:executable_users] = @executable_users.map { |id| id.to_s } unless
|
|
80
|
+
@executable_users.empty?
|
|
81
|
+
response = filtered_request(:describe_images, opts)
|
|
82
|
+
response.images_set.each do |i|
|
|
83
|
+
image = Image.new_from(:describe_images, i, i.image_id, :config => config)
|
|
84
|
+
yield(image)
|
|
85
|
+
end
|
|
86
|
+
nil
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Creates an AMI. There are several ways to create an AMI
|
|
90
|
+
# using this method; for detailed information on each strategy
|
|
91
|
+
# see {the EC2 Developer
|
|
92
|
+
# Guide}[http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/creating-an-ami.html].
|
|
93
|
+
#
|
|
94
|
+
# @param [Hash] options Options for creating the image.
|
|
95
|
+
# +:name+ is required, and you must also specify one of the
|
|
96
|
+
# following options:
|
|
97
|
+
#
|
|
98
|
+
# * +:instance_id+
|
|
99
|
+
# * +:image_location+
|
|
100
|
+
# * +:root_device_name+
|
|
101
|
+
#
|
|
102
|
+
# @option options [String] :instance_id The ID of a running
|
|
103
|
+
# instance. This instance will be rebooted unless
|
|
104
|
+
# +:no_reboot+ is set to +true+.
|
|
105
|
+
#
|
|
106
|
+
# @option options [String] :description A description of the
|
|
107
|
+
# new image.
|
|
108
|
+
#
|
|
109
|
+
# @option options [Boolean] :no_reboot By default this
|
|
110
|
+
# option is set to +false+, which means Amazon EC2
|
|
111
|
+
# attempts to cleanly shut down the instance before image
|
|
112
|
+
# creation and reboots the instance afterwards. When the
|
|
113
|
+
# option is set to +true+, Amazon EC2 does not shut down
|
|
114
|
+
# the instance before creating the image. When this option
|
|
115
|
+
# is used, file system integrity on the created image cannot
|
|
116
|
+
# be guaranteed.
|
|
117
|
+
#
|
|
118
|
+
# *Note*: This option is only valid when used with
|
|
119
|
+
# +:instance_id+.
|
|
120
|
+
#
|
|
121
|
+
# @option options [String] :image_location Full path to your
|
|
122
|
+
# AMI manifest in Amazon S3 storage. This must be of the
|
|
123
|
+
# form "bucket_name/key".
|
|
124
|
+
#
|
|
125
|
+
# @option options [String] :architecture The architecture of
|
|
126
|
+
# the image. Valid values:
|
|
127
|
+
#
|
|
128
|
+
# * +:i386+
|
|
129
|
+
# * +:x86_64+
|
|
130
|
+
#
|
|
131
|
+
# *Note*: This option is only valid with +:image_location+
|
|
132
|
+
# or +:root_device_name+
|
|
133
|
+
#
|
|
134
|
+
# @option options [String] :kernel_id The ID of the kernel to
|
|
135
|
+
# select.
|
|
136
|
+
#
|
|
137
|
+
# *Note*: This option is only valid with +:image_location+
|
|
138
|
+
# or +:root_device_name+
|
|
139
|
+
#
|
|
140
|
+
# @option options [Image] :kernel The kernel image to use.
|
|
141
|
+
# Equivalent to passing +:kernel_id+ with the ID of the
|
|
142
|
+
# image.
|
|
143
|
+
#
|
|
144
|
+
# *Note*: This option is only valid with +:image_location+
|
|
145
|
+
# or +:root_device_name+
|
|
146
|
+
#
|
|
147
|
+
# @option options [String] :ramdisk_id The ID of the RAM disk
|
|
148
|
+
# to select. Some kernels require additional drivers at
|
|
149
|
+
# launch. Check the kernel requirements for information on
|
|
150
|
+
# whether you need to specify a RAM disk. To find kernel
|
|
151
|
+
# requirements, refer to the Resource Center and search for
|
|
152
|
+
# the kernel ID.
|
|
153
|
+
#
|
|
154
|
+
# *Note*: This option is only valid with +:image_location+
|
|
155
|
+
# or +:root_device_name+
|
|
156
|
+
#
|
|
157
|
+
# @option options [Image] :ramdisk The ramdisk image to use.
|
|
158
|
+
# Equivalent to passing +:ramdisk_id+ with the ID of the
|
|
159
|
+
# image.
|
|
160
|
+
#
|
|
161
|
+
# *Note*: This option is only valid with +:image_location+
|
|
162
|
+
# or +:root_device_name+
|
|
163
|
+
#
|
|
164
|
+
# @option options [String] :root_device_name The root device
|
|
165
|
+
# name (e.g., /dev/sda1, or xvda).
|
|
166
|
+
#
|
|
167
|
+
# @option options [Hash] :block_device_mappings This must be a
|
|
168
|
+
# hash; the keys are device names to map, and the value for
|
|
169
|
+
# each entry determines how that device is mapped. Valid
|
|
170
|
+
# values include:
|
|
171
|
+
#
|
|
172
|
+
# * A string, which is interpreted as a virtual device name.
|
|
173
|
+
#
|
|
174
|
+
# * A hash with any of the following options. One of
|
|
175
|
+
# +:snapshot+, +:snapshot_id+ or +:volume_size+ is
|
|
176
|
+
# required.
|
|
177
|
+
#
|
|
178
|
+
# [:snapshot] A snapshot to use when creating the block
|
|
179
|
+
# device.
|
|
180
|
+
#
|
|
181
|
+
# [:snapshot_id] The ID of a snapshot to use when creating
|
|
182
|
+
# the block device.
|
|
183
|
+
#
|
|
184
|
+
# [:volume_size] The size of volume to create, in gigabytes.
|
|
185
|
+
#
|
|
186
|
+
# [:delete_on_termination] Setting this to true causes EC2
|
|
187
|
+
# to delete the volume when the
|
|
188
|
+
# instance is terminated.
|
|
189
|
+
# @return [Image]
|
|
190
|
+
def create options = {}
|
|
191
|
+
resp = case
|
|
192
|
+
when options[:instance_id]
|
|
193
|
+
client.create_image(options)
|
|
194
|
+
when options[:image_location] || options[:root_device_name]
|
|
195
|
+
if kernel = options.delete(:kernel)
|
|
196
|
+
options[:kernel_id] = kernel.id
|
|
197
|
+
end
|
|
198
|
+
if ramdisk = options.delete(:ramdisk)
|
|
199
|
+
options[:ramdisk_id] = ramdisk.id
|
|
200
|
+
end
|
|
201
|
+
options[:block_device_mappings] =
|
|
202
|
+
translate_block_device_mappings(options[:block_device_mappings]) if
|
|
203
|
+
options[:block_device_mappings]
|
|
204
|
+
client.register_image(options)
|
|
205
|
+
else
|
|
206
|
+
raise(ArgumentError,
|
|
207
|
+
"expected instance_id, image_location, " +
|
|
208
|
+
"or root_device_name")
|
|
209
|
+
end
|
|
210
|
+
Image.new(resp.image_id, :config => config)
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
# @private
|
|
214
|
+
protected
|
|
215
|
+
def member_class
|
|
216
|
+
Image
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# @private
|
|
220
|
+
protected
|
|
221
|
+
def preserved_options
|
|
222
|
+
super.merge(:owners => @owners, :executable_users => @executable_users)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
end
|
|
228
|
+
end
|
|
@@ -0,0 +1,796 @@
|
|
|
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 EC2
|
|
16
|
+
|
|
17
|
+
# Represents an EC2 instance.
|
|
18
|
+
#
|
|
19
|
+
# @attr [String] user_data Arbitrary metadata that is available
|
|
20
|
+
# to the instance while it is running. This interface handles
|
|
21
|
+
# the details of encoding the user data for transmission; you
|
|
22
|
+
# should set the user data exactly as you want it to be made
|
|
23
|
+
# available to the instance.
|
|
24
|
+
#
|
|
25
|
+
# The instance must be in a stopped state to change user data;
|
|
26
|
+
# for example:
|
|
27
|
+
#
|
|
28
|
+
# i.user_data # => "HELLO"
|
|
29
|
+
# i.status # => :running
|
|
30
|
+
# i.user_data = "GOODBYE" # raises an exception
|
|
31
|
+
# i.stop; sleep 1 until i.status == :stopped
|
|
32
|
+
# i.user_data = "GOODBYE" # => "GOODBYE"
|
|
33
|
+
#
|
|
34
|
+
# @attr [String] instance_type The instance type,
|
|
35
|
+
# e.g. "m1.small". The instance must be in a stopped state to
|
|
36
|
+
# change the instance type.
|
|
37
|
+
#
|
|
38
|
+
# @attr [Boolean] ebs_optimized The instance must be in a stopped state to
|
|
39
|
+
# change the ebs_optimized state.
|
|
40
|
+
#
|
|
41
|
+
# @attr [Boolean] api_termination_disabled True if the instance
|
|
42
|
+
# cannot be terminated using the {#terminate} method. This
|
|
43
|
+
# attribute can be changed at any time.
|
|
44
|
+
#
|
|
45
|
+
# @attr [String] instance_initiated_shutdown_behavior Valid
|
|
46
|
+
# values are:
|
|
47
|
+
#
|
|
48
|
+
# ["stop"] When the instance shuts down, it will go into a
|
|
49
|
+
# "stopped" state.
|
|
50
|
+
#
|
|
51
|
+
# ["terminate"] When the instance shuts down, it will be
|
|
52
|
+
# terminated.
|
|
53
|
+
#
|
|
54
|
+
# @attr_reader [String] image_id Image ID of the AMI used to
|
|
55
|
+
# launch the instance.
|
|
56
|
+
#
|
|
57
|
+
# @attr_reader [String] key_name The name of the key pair with
|
|
58
|
+
# which this instance was associated at launch.
|
|
59
|
+
#
|
|
60
|
+
# @attr [String] kernel_id The ID of the kernel that the image
|
|
61
|
+
# currently uses. The instance must be in a stopped state to
|
|
62
|
+
# change this attribute.
|
|
63
|
+
#
|
|
64
|
+
# @attr [String] ramdisk_id The ID of the RAM disk that the
|
|
65
|
+
# image currently uses. The instance must be in a stopped
|
|
66
|
+
# state to change this attribute.
|
|
67
|
+
#
|
|
68
|
+
# @attr_reader [Symbol] root_device_type The root device type
|
|
69
|
+
# used by the AMI. The AMI can use an Amazon EBS or instance
|
|
70
|
+
# store root device. Valid values:
|
|
71
|
+
# * +:ebs+
|
|
72
|
+
# * +:instance_store+
|
|
73
|
+
#
|
|
74
|
+
# @attr_reader [String] root_device_name The name of the root
|
|
75
|
+
# device.
|
|
76
|
+
#
|
|
77
|
+
# @attr_reader [String] private_dns_name The DNS name of the
|
|
78
|
+
# instance within the EC2 network.
|
|
79
|
+
#
|
|
80
|
+
# @attr_reader [String] dns_name The DNS name of the instance on
|
|
81
|
+
# the internet.
|
|
82
|
+
#
|
|
83
|
+
# @attr_reader [Integer] ami_launch_index The AMI launch index,
|
|
84
|
+
# which can be used to find this instance within the launch
|
|
85
|
+
# group.
|
|
86
|
+
#
|
|
87
|
+
# @attr_reader [String] private_ip_address The private IP
|
|
88
|
+
# address assigned to the instance.
|
|
89
|
+
#
|
|
90
|
+
# @attr_reader [String] ip_address The IP address of the
|
|
91
|
+
# instance.
|
|
92
|
+
#
|
|
93
|
+
# @attr_reader [Symbol] status The instance status. Valid values are:
|
|
94
|
+
# * +:pending+
|
|
95
|
+
# * +:running+
|
|
96
|
+
# * +:shutting_down+
|
|
97
|
+
# * +:terminated+
|
|
98
|
+
# * +:stopping+
|
|
99
|
+
# * +:stopped+
|
|
100
|
+
#
|
|
101
|
+
# @attr_reader [Integer] status_code The numeric instance status code.
|
|
102
|
+
#
|
|
103
|
+
# @attr_reader [Symbol] architecture The architecture of the
|
|
104
|
+
# image.
|
|
105
|
+
#
|
|
106
|
+
# @attr_reader [Symbol] virtualization_type The instance's
|
|
107
|
+
# virtualization type. Valid values:
|
|
108
|
+
# * +:paravirtual+
|
|
109
|
+
# * +:hvm+
|
|
110
|
+
#
|
|
111
|
+
# @attr_reader [String] reservation_id The ID of the reservation
|
|
112
|
+
# in which this instance was launched.
|
|
113
|
+
#
|
|
114
|
+
# @attr_reader [String] requester_id ID of the requester that
|
|
115
|
+
# launched the instance on your behalf (e.g., AWS Management
|
|
116
|
+
# Console, Auto Scaling).
|
|
117
|
+
#
|
|
118
|
+
# @attr_reader [String] owner_id ID of the AWS account that owns
|
|
119
|
+
# the reservation in which the instance was launched.
|
|
120
|
+
#
|
|
121
|
+
# @attr_reader [Symbol] monitoring The status of CloudWatch
|
|
122
|
+
# monitoring for the instance. Valid values:
|
|
123
|
+
# * +:enabled+
|
|
124
|
+
# * +:disabled+
|
|
125
|
+
# * +:pending+
|
|
126
|
+
#
|
|
127
|
+
# @attr_reader [String] state_transition_reason A string
|
|
128
|
+
# describing the reason for the last state transition.
|
|
129
|
+
#
|
|
130
|
+
# @attr_reader [Time] launch_time The time at which the instance
|
|
131
|
+
# was launched.
|
|
132
|
+
#
|
|
133
|
+
# @attr_reader [String] platform A string describing the
|
|
134
|
+
# platform of the image (e.g. "windows").
|
|
135
|
+
#
|
|
136
|
+
# @attr_reader [Symbol] hypervisor The instance's hypervisor
|
|
137
|
+
# type. Valid values:
|
|
138
|
+
# * +:ovm+
|
|
139
|
+
# * +:xen+
|
|
140
|
+
#
|
|
141
|
+
# @attr_reader [String] client_token Idempotency token you
|
|
142
|
+
# provided when you launched the instance.
|
|
143
|
+
#
|
|
144
|
+
# @attr_reader [String,nil] vpc_id Instances launched in a VPC have
|
|
145
|
+
# a vpc_id. Normal EC2 instances return nil.
|
|
146
|
+
#
|
|
147
|
+
# @attr_reader [String,nil] subnet_id Instances launched in a VPC have
|
|
148
|
+
# a subnet_id. Normal EC2 instances return nil.
|
|
149
|
+
#
|
|
150
|
+
# @attr_reader [String,nil] iam_instance_profile_id
|
|
151
|
+
#
|
|
152
|
+
# @attr_reader [String,nil] iam_instance_profile_arn
|
|
153
|
+
#
|
|
154
|
+
class Instance < Resource
|
|
155
|
+
|
|
156
|
+
include TaggedItem
|
|
157
|
+
|
|
158
|
+
# Creates an object that represents the instance with the
|
|
159
|
+
# given ID. It's usually easier to get an instance of this
|
|
160
|
+
# class by calling {InstanceCollection#[]} or
|
|
161
|
+
# {InstanceCollection#each}.
|
|
162
|
+
def initialize(instance_id, opts = {})
|
|
163
|
+
super
|
|
164
|
+
@id = instance_id
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# @return [String] Returns the instance id.
|
|
168
|
+
attr_reader :id
|
|
169
|
+
alias_method :instance_id, :id
|
|
170
|
+
|
|
171
|
+
# @private
|
|
172
|
+
def self.reservation_attributes
|
|
173
|
+
@reservation_attributes ||= {}
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# @private
|
|
177
|
+
def self.reservation_attribute name, options = {}, &block
|
|
178
|
+
attr = attribute(name, options, &block)
|
|
179
|
+
reservation_attributes[attr.name] = attr
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# @private
|
|
183
|
+
def self.describe_call_attributes
|
|
184
|
+
@describe_call_attributes ||= {}
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# @private
|
|
188
|
+
def self.mutable_describe_attributes
|
|
189
|
+
@mutable_describe_attributes ||= {}
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# @private
|
|
193
|
+
def self.describe_call_attribute name, options = {}, &block
|
|
194
|
+
attr = attribute(name, options, &block)
|
|
195
|
+
describe_call_attributes[attr.name] = attr
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# @private
|
|
199
|
+
def self.mutable_describe_call_attribute name, options = {}, &block
|
|
200
|
+
attr = mutable_attribute(name, options, &block)
|
|
201
|
+
describe_call_attributes[attr.name] = attr
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# @private
|
|
205
|
+
def self.mutable_describe_attribute name, options = {}, &block
|
|
206
|
+
attr = mutable_attribute(name, options, &block)
|
|
207
|
+
mutable_describe_attributes[attr.name] = attr
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
reservation_attribute :reservation_id, :static => true
|
|
211
|
+
|
|
212
|
+
reservation_attribute :owner_id, :static => true
|
|
213
|
+
|
|
214
|
+
reservation_attribute :requester_id, :static => true
|
|
215
|
+
|
|
216
|
+
describe_call_attribute :private_dns_name
|
|
217
|
+
|
|
218
|
+
describe_call_attribute :dns_name
|
|
219
|
+
|
|
220
|
+
alias_method :public_dns_name, :dns_name
|
|
221
|
+
|
|
222
|
+
describe_call_attribute :product_codes, :static => true
|
|
223
|
+
|
|
224
|
+
describe_call_attribute :ami_launch_index, :static => true
|
|
225
|
+
|
|
226
|
+
describe_call_attribute :monitoring do
|
|
227
|
+
translates_output {|v| v.state.to_sym }
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
describe_call_attribute :private_ip_address
|
|
231
|
+
|
|
232
|
+
describe_call_attribute :ip_address
|
|
233
|
+
|
|
234
|
+
alias_method :public_ip_address, :ip_address
|
|
235
|
+
|
|
236
|
+
describe_call_attribute :architecture, :to_sym => true, :static => true
|
|
237
|
+
|
|
238
|
+
describe_call_attribute :root_device_type, :to_sym => true, :static => true
|
|
239
|
+
|
|
240
|
+
describe_call_attribute :root_device_name, :static => true
|
|
241
|
+
|
|
242
|
+
describe_call_attribute :block_device_mapping
|
|
243
|
+
|
|
244
|
+
protected :block_device_mapping
|
|
245
|
+
|
|
246
|
+
describe_call_attribute :instance_lifecycle, :to_sym => true
|
|
247
|
+
|
|
248
|
+
describe_call_attribute :virtualization_type, :to_sym => true, :static => true
|
|
249
|
+
|
|
250
|
+
describe_call_attribute :hypervisor, :to_sym => true, :static => true
|
|
251
|
+
|
|
252
|
+
describe_call_attribute :placement, :static => true
|
|
253
|
+
|
|
254
|
+
describe_call_attribute :state_transition_reason, :from => :reason
|
|
255
|
+
|
|
256
|
+
describe_call_attribute :launch_time, :static => true
|
|
257
|
+
|
|
258
|
+
describe_call_attribute :platform, :static => true
|
|
259
|
+
|
|
260
|
+
describe_call_attribute :client_token
|
|
261
|
+
|
|
262
|
+
describe_call_attribute :image_id
|
|
263
|
+
|
|
264
|
+
describe_call_attribute :key_name, :static => true
|
|
265
|
+
|
|
266
|
+
describe_call_attribute :vpc_id, :static => true
|
|
267
|
+
|
|
268
|
+
describe_call_attribute :subnet_id, :static => true
|
|
269
|
+
|
|
270
|
+
describe_call_attribute :iam_instance_profile_id,
|
|
271
|
+
:from => :iam_instance_profile,
|
|
272
|
+
:static => true do
|
|
273
|
+
translates_output{|profile| profile[:id] }
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
describe_call_attribute :iam_instance_profile_arn,
|
|
277
|
+
:from => :iam_instance_profile,
|
|
278
|
+
:static => true do
|
|
279
|
+
translates_output{|profile| profile[:arn] }
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
attribute :status do
|
|
283
|
+
translates_output{|state| state.name.tr("-","_").to_sym }
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
attribute :status, :from => [:instance_state, :name], :to_sym => true
|
|
287
|
+
|
|
288
|
+
attribute :status_code, :from => [:instance_state, :code]
|
|
289
|
+
|
|
290
|
+
mutable_describe_call_attribute :instance_type
|
|
291
|
+
|
|
292
|
+
mutable_describe_call_attribute :ebs_optimized
|
|
293
|
+
|
|
294
|
+
mutable_describe_call_attribute :kernel_id, :set_as => :kernel
|
|
295
|
+
|
|
296
|
+
mutable_describe_call_attribute :ramdisk_id, :set_as => :ramdisk
|
|
297
|
+
|
|
298
|
+
mutable_describe_attribute :source_dest_check do
|
|
299
|
+
translates_output{|bool| bool == "true" }
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
alias_method :source_dest_check?, :source_dest_check
|
|
303
|
+
|
|
304
|
+
mutable_describe_call_attribute :group_set
|
|
305
|
+
|
|
306
|
+
describe_call_attribute :network_interface_set
|
|
307
|
+
|
|
308
|
+
mutable_describe_attribute(:user_data) do
|
|
309
|
+
translates_output {|v| Base64.decode64(v) if v }
|
|
310
|
+
translates_input {|v| Base64.encode64(v).strip }
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
mutable_describe_attribute :api_termination_disabled?,
|
|
314
|
+
:from => :disable_api_termination
|
|
315
|
+
|
|
316
|
+
mutable_describe_attribute :instance_initiated_shutdown_behavior
|
|
317
|
+
|
|
318
|
+
provider(:describe_instances) do |provider|
|
|
319
|
+
provider.find {|resp| resp.reservation_index[id] }
|
|
320
|
+
provider.provides *reservation_attributes.keys
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
provider(:describe_instances) do |provider|
|
|
324
|
+
provider.find {|resp| resp.instance_index[id] }
|
|
325
|
+
provider.provides *describe_call_attributes.keys
|
|
326
|
+
provider.provides :status
|
|
327
|
+
provider.provides :status_code
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
provider(:run_instances) do |provider|
|
|
331
|
+
provider.find {|resp| resp.instances_set.find{|i| i.instance_id == id } }
|
|
332
|
+
provider.provides *describe_call_attributes.keys
|
|
333
|
+
provider.provides :status
|
|
334
|
+
provider.provides :status_code
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
provider(:run_instances) do |provider|
|
|
338
|
+
provider.find {|resp| resp if resp.instances_set.find{|i| i.instance_id == id } }
|
|
339
|
+
provider.provides *reservation_attributes.keys
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
# These are the few attributes that are only returned by
|
|
343
|
+
# :desribe_instance_attribute and are *NOT* returned by
|
|
344
|
+
# :describe_instances. To make matters worse, only one of
|
|
345
|
+
# them is returned per :describe_instance_attribute call.
|
|
346
|
+
mutable_describe_attributes.values.each do |attr|
|
|
347
|
+
|
|
348
|
+
attr_opt_name = Core::Inflection.class_name(attr.from.to_s)
|
|
349
|
+
attr_opt_name = attr_opt_name[0,1].downcase + attr_opt_name[1..-1]
|
|
350
|
+
|
|
351
|
+
provider(:describe_instance_attribute) do |provider|
|
|
352
|
+
provider.find do |resp|
|
|
353
|
+
if
|
|
354
|
+
resp.request_options[:instance_id] == id and
|
|
355
|
+
resp.request_options[:attribute] == attr_opt_name
|
|
356
|
+
then
|
|
357
|
+
return resp
|
|
358
|
+
end
|
|
359
|
+
end
|
|
360
|
+
provider.provides(attr.name, :value_wrapped => true)
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
provider(:terminate_instances, :start_instances, :stop_instances) do |provider|
|
|
366
|
+
provider.find do |resp|
|
|
367
|
+
resp.instances_set.find {|i| i.instance_id == id }
|
|
368
|
+
end
|
|
369
|
+
provider.provides :status, :from => [:current_state, :name]
|
|
370
|
+
provider.provides :status_code, :from => [:current_state, :code]
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
provider(:monitor_instances, :unmonitor_instances) do |provider|
|
|
374
|
+
provider.find do |resp|
|
|
375
|
+
resp.instances_set.find {|i| i.instance_id == id }
|
|
376
|
+
end
|
|
377
|
+
provider.provides :monitoring
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
# @return [Boolean] Returns true if this is an EC2 VPC instance.
|
|
381
|
+
def vpc?
|
|
382
|
+
!!vpc_id
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
# @return [VPC,nil] Returns the VPC this instance was launched in.
|
|
386
|
+
# If this instance was not launched inside a VPC, nil is returned.
|
|
387
|
+
def vpc
|
|
388
|
+
if vpc_id
|
|
389
|
+
VPC.new(vpc_id, :config => config)
|
|
390
|
+
end
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
# @return [Subnet,nil] Returns the VPC subnet this instance was
|
|
394
|
+
# launched in. Returns nil if this was not launched in a VPC.
|
|
395
|
+
def subnet
|
|
396
|
+
if subnet_id
|
|
397
|
+
Subnet.new(subnet_id, :vpc_id => vpc_id, :config => config)
|
|
398
|
+
end
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
# @return [Array<NetworkInterface>] Returns a list of elastic network
|
|
402
|
+
# interfaces attached to this instance (VPC only). Non-vpc
|
|
403
|
+
# instance may not have attached network interfaces.
|
|
404
|
+
def network_interfaces
|
|
405
|
+
network_interface_set.collect do |ni|
|
|
406
|
+
NetworkInterface.new_from(:describe_network_interfaces, ni,
|
|
407
|
+
ni.network_interface_id, :config => config)
|
|
408
|
+
end
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
# Attaches a network interface to this instance (VPC only).
|
|
412
|
+
#
|
|
413
|
+
# @param [NetworkInterface,String] network_interface A network interface
|
|
414
|
+
# (or network interface id string) to attach to this vpc instance.
|
|
415
|
+
#
|
|
416
|
+
# @param [Hash] options
|
|
417
|
+
#
|
|
418
|
+
# @option (see NetworkInterface#attach)
|
|
419
|
+
#
|
|
420
|
+
# @return [nil]
|
|
421
|
+
#
|
|
422
|
+
def attach_network_interface network_interface, options = {}
|
|
423
|
+
if network_interface.is_a?(NetworkInterface)
|
|
424
|
+
network_interface.attach(self, options)
|
|
425
|
+
else
|
|
426
|
+
i = NetworkInterface.new(network_interface, :config => config)
|
|
427
|
+
i.attach(self, options)
|
|
428
|
+
end
|
|
429
|
+
nil
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
# @return [Array<SecurityGroup>] Returns a list of security
|
|
433
|
+
# groups the instance belongs to.
|
|
434
|
+
def security_groups
|
|
435
|
+
(group_set || []).collect do |g|
|
|
436
|
+
SecurityGroup.new(g.group_id, :name => g.group_name, :config => config)
|
|
437
|
+
end
|
|
438
|
+
end
|
|
439
|
+
alias_method :groups, :security_groups
|
|
440
|
+
|
|
441
|
+
# @return [Hash<String,Attachment>] Returns a hash of attachments.
|
|
442
|
+
# The keys are device name strings (e.g. '/dev/sda') and the values
|
|
443
|
+
# are {Attachment} objects.
|
|
444
|
+
# @note This method will not return data for ephemeral volumes.
|
|
445
|
+
# @see {#block_devices}
|
|
446
|
+
def attachments
|
|
447
|
+
(block_device_mapping || []).inject({}) do |m, mapping|
|
|
448
|
+
if mapping[:ebs]
|
|
449
|
+
device = mapping[:device_name]
|
|
450
|
+
volume = Volume.new(mapping[:ebs][:volume_id], :config => config)
|
|
451
|
+
attachment = Attachment.new(volume, self, device, :config => config)
|
|
452
|
+
m[device] = attachment
|
|
453
|
+
end
|
|
454
|
+
m
|
|
455
|
+
end
|
|
456
|
+
end
|
|
457
|
+
alias_method :block_device_mappings, :attachments
|
|
458
|
+
|
|
459
|
+
# Returns a list of block device mappings.
|
|
460
|
+
#
|
|
461
|
+
# instance.block_devices
|
|
462
|
+
# #=>
|
|
463
|
+
# [
|
|
464
|
+
# {
|
|
465
|
+
# :device_name => "/dev/sda2",
|
|
466
|
+
# :ebs => {
|
|
467
|
+
# :volume_id => "vol-123",
|
|
468
|
+
# :status => "attaching",
|
|
469
|
+
# :attach_time => time,
|
|
470
|
+
# :delete_on_termination => true
|
|
471
|
+
# }
|
|
472
|
+
# }, {
|
|
473
|
+
# :device_name => "/dev/sdb",
|
|
474
|
+
# :virtual_name => "ephemeral0",
|
|
475
|
+
# }
|
|
476
|
+
# ]
|
|
477
|
+
#
|
|
478
|
+
# @return [Array<Hash>] Returns a list of block device mappings. This
|
|
479
|
+
# list may contain ephemeral volumes.
|
|
480
|
+
def block_devices
|
|
481
|
+
block_device_mapping.to_a
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
# Enables monitoring for this instance.
|
|
485
|
+
# @return [nil]
|
|
486
|
+
def enable_monitoring
|
|
487
|
+
client.monitor_instances(:instance_ids => [id])
|
|
488
|
+
nil
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
# Disables monitoring for this instance.
|
|
492
|
+
# @return [nil]
|
|
493
|
+
def disable_monitoring
|
|
494
|
+
client.unmonitor_instances(:instance_ids => [id])
|
|
495
|
+
nil
|
|
496
|
+
end
|
|
497
|
+
|
|
498
|
+
# Enables or disables monitoring for this instance.
|
|
499
|
+
# @param [Boolean] state A true or false value. Enables monintoring
|
|
500
|
+
# for a true value, disables it for a false value.
|
|
501
|
+
def monitoring_enabled= state
|
|
502
|
+
state ? enable_monitoring : disable_monitoring
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
# @return [Booelan] Returns +true+ if CloudWatch monitoring is
|
|
506
|
+
# enabled for this instance.
|
|
507
|
+
def monitoring_enabled?
|
|
508
|
+
monitoring == :enabled
|
|
509
|
+
end
|
|
510
|
+
|
|
511
|
+
# @return [Boolean] true if the instance is a Spot instance.
|
|
512
|
+
def spot_instance?
|
|
513
|
+
instance_lifecycle == :spot
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
# @return [String] The availability zone where the instance is
|
|
517
|
+
# running.
|
|
518
|
+
def availability_zone
|
|
519
|
+
if p = placement
|
|
520
|
+
p.availability_zone
|
|
521
|
+
end
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
# @return [Boolean] Returns true if the instance has dedicated tenancy.
|
|
525
|
+
# This will be false for all non-VPC instances. Dedicated Tenancy
|
|
526
|
+
# comes at extra cost.
|
|
527
|
+
def dedicated_tenancy?
|
|
528
|
+
if p = placement
|
|
529
|
+
p.tenancy == 'dedicated'
|
|
530
|
+
else
|
|
531
|
+
false
|
|
532
|
+
end
|
|
533
|
+
end
|
|
534
|
+
|
|
535
|
+
# @return [Image] The AMI used to launch the instance.
|
|
536
|
+
def image
|
|
537
|
+
Image.new(image_id, :config => config)
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
# @return [KeyPair] The key pair with which this instance was
|
|
541
|
+
# associated at launch.
|
|
542
|
+
def key_pair
|
|
543
|
+
KeyPair.new(key_name, :config => config) if key_name
|
|
544
|
+
end
|
|
545
|
+
|
|
546
|
+
# Creates an AMI from this instance.
|
|
547
|
+
#
|
|
548
|
+
# @param [String] name A name for the new image you're
|
|
549
|
+
# creating. Constraints: 3-128 alphanumeric characters,
|
|
550
|
+
# parenthesis (()), commas (,), slashes (/), dashes (-), or
|
|
551
|
+
# underscores(_)
|
|
552
|
+
#
|
|
553
|
+
# @param [Hash] options Additional options for creating the
|
|
554
|
+
# image.
|
|
555
|
+
#
|
|
556
|
+
# @option options [String] :description A description of the
|
|
557
|
+
# new image.
|
|
558
|
+
#
|
|
559
|
+
# @option options [Boolean] :no_reboot By default this
|
|
560
|
+
# option is set to +false+, which means Amazon EC2
|
|
561
|
+
# attempts to cleanly shut down the instance before image
|
|
562
|
+
# creation and reboots the instance afterwards. When the
|
|
563
|
+
# option is set to +true+, Amazon EC2 does not shut down
|
|
564
|
+
# the instance before creating the image. When this option
|
|
565
|
+
# is used, file system integrity on the created image cannot
|
|
566
|
+
# be guaranteed.
|
|
567
|
+
#
|
|
568
|
+
# @return [Image] The newly created image.
|
|
569
|
+
def create_image name, options = {}
|
|
570
|
+
images = ImageCollection.new(:config => config)
|
|
571
|
+
images.create(options.merge(:instance_id => id, :name => name))
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
# Retrieves the console output for the instance.
|
|
575
|
+
#
|
|
576
|
+
# @return [String] the console output.
|
|
577
|
+
def console_output
|
|
578
|
+
output = client.get_console_output(:instance_id => self.id).output
|
|
579
|
+
Base64.decode64(output) if output
|
|
580
|
+
end
|
|
581
|
+
|
|
582
|
+
# Associates the elastic IP address with this instance.
|
|
583
|
+
#
|
|
584
|
+
# @overload associate_elastic_ip(elastic_ip)
|
|
585
|
+
# @param [ElasticIp,String] elastic_ip An Elastic ip address
|
|
586
|
+
# (VPC or non-VPC) or a public ip address string (non-VPC only).
|
|
587
|
+
#
|
|
588
|
+
# @overload associate_elastic_ip(allocation_id)
|
|
589
|
+
# @param [String] allocation_id The allocation id of a
|
|
590
|
+
# VPC elastic ip address.
|
|
591
|
+
#
|
|
592
|
+
# @return [nil]
|
|
593
|
+
#
|
|
594
|
+
def associate_elastic_ip elastic_ip
|
|
595
|
+
|
|
596
|
+
client_opts = {}
|
|
597
|
+
client_opts[:instance_id] = self.id
|
|
598
|
+
|
|
599
|
+
if vpc?
|
|
600
|
+
client_opts[:allocation_id] = elastic_ip.is_a?(ElasticIp) ?
|
|
601
|
+
elastic_ip.allocation_id :
|
|
602
|
+
elastic_ip.to_s
|
|
603
|
+
else
|
|
604
|
+
client_opts[:public_ip] = elastic_ip.to_s
|
|
605
|
+
end
|
|
606
|
+
|
|
607
|
+
client.associate_address(client_opts)
|
|
608
|
+
nil
|
|
609
|
+
|
|
610
|
+
end
|
|
611
|
+
|
|
612
|
+
alias_method :ip_address=, :associate_elastic_ip
|
|
613
|
+
|
|
614
|
+
# Disassociates an attached elastic IP address from this instance.
|
|
615
|
+
# Raises an exception if there is no elastic IP address associated
|
|
616
|
+
# with this instance.
|
|
617
|
+
def disassociate_elastic_ip
|
|
618
|
+
if ip = self.elastic_ip
|
|
619
|
+
ip.disassociate
|
|
620
|
+
else
|
|
621
|
+
raise "instance #{id} does not have an associated elastic ip"
|
|
622
|
+
end
|
|
623
|
+
end
|
|
624
|
+
|
|
625
|
+
# @return [ElasticIp,nil] Returns an elastic IP address if one
|
|
626
|
+
# is associated with this instance, nil otherwise.
|
|
627
|
+
def elastic_ip
|
|
628
|
+
ips = ElasticIpCollection.new(:config => config)
|
|
629
|
+
ips.filter('instance-id', id).first
|
|
630
|
+
end
|
|
631
|
+
|
|
632
|
+
# @return [Boolean] Returns true if an elastic IP address is
|
|
633
|
+
# associated with this instance, false otherwise.
|
|
634
|
+
def has_elastic_ip?
|
|
635
|
+
!elastic_ip.nil?
|
|
636
|
+
end
|
|
637
|
+
|
|
638
|
+
# @return [Boolean] Returns true if the instance exists according to
|
|
639
|
+
# EC2.
|
|
640
|
+
def exists?
|
|
641
|
+
client.describe_instances(:filters => [
|
|
642
|
+
{ :name => "instance-id", :values => [id] }
|
|
643
|
+
]).instance_index.key?(id)
|
|
644
|
+
end
|
|
645
|
+
|
|
646
|
+
# Resets the kernel to its default value.
|
|
647
|
+
def reset_kernel_id
|
|
648
|
+
client.reset_instance_attribute(
|
|
649
|
+
:instance_id => id, :attribute => "kernel").return
|
|
650
|
+
end
|
|
651
|
+
|
|
652
|
+
# Resets the RAM disk to its default value.
|
|
653
|
+
def reset_ramdisk_id
|
|
654
|
+
client.reset_instance_attribute(
|
|
655
|
+
:instance_id => id, :attribute => "ramdisk").return
|
|
656
|
+
end
|
|
657
|
+
|
|
658
|
+
# Terminates the instance.
|
|
659
|
+
# @return [nil]
|
|
660
|
+
def terminate
|
|
661
|
+
instance_action :terminate
|
|
662
|
+
end
|
|
663
|
+
alias_method :delete, :terminate
|
|
664
|
+
|
|
665
|
+
# Reboots the instance.
|
|
666
|
+
# @return [nil]
|
|
667
|
+
def reboot
|
|
668
|
+
instance_action :reboot
|
|
669
|
+
end
|
|
670
|
+
|
|
671
|
+
# Starts the instance, assuming it is in a stopped state.
|
|
672
|
+
# @see stop
|
|
673
|
+
# @return [nil]
|
|
674
|
+
def start
|
|
675
|
+
instance_action :start
|
|
676
|
+
end
|
|
677
|
+
|
|
678
|
+
# Stops the instance, eventually putting it into a stopped state.
|
|
679
|
+
# @return [nil]
|
|
680
|
+
def stop
|
|
681
|
+
instance_action :stop
|
|
682
|
+
end
|
|
683
|
+
|
|
684
|
+
# This produces an image of an EC2 instance for use in another
|
|
685
|
+
# virtualization environment and then writes the image to a
|
|
686
|
+
# S3 bucket.
|
|
687
|
+
#
|
|
688
|
+
# == Granting EC2 write access to your bucket
|
|
689
|
+
#
|
|
690
|
+
# Before you can export an image to an S3 bucket, you must modify
|
|
691
|
+
# the bucket ACL. You only need to do this once per bucket.
|
|
692
|
+
#
|
|
693
|
+
# s3.buckets['bucket-name'].acl.change do |acl|
|
|
694
|
+
# acl.grant(:read_acp).to(:amazon_customer_email => 'vm-import-export@amazon.com')
|
|
695
|
+
# acl.grant(:write).to(:amazon_customer_email => 'vm-import-export@amazon.com')
|
|
696
|
+
# end
|
|
697
|
+
#
|
|
698
|
+
# == Performing the export
|
|
699
|
+
#
|
|
700
|
+
# Simply call #export_to_s3 on your instance. Only instances
|
|
701
|
+
# derived from your own ImportInstance tasks may be exported.
|
|
702
|
+
#
|
|
703
|
+
# task = ec2.instances['i-12345678'].export_to_s3('bucket-name')
|
|
704
|
+
#
|
|
705
|
+
# == Downloading the results
|
|
706
|
+
#
|
|
707
|
+
# Given a completed export task you can download the final image:
|
|
708
|
+
#
|
|
709
|
+
# File.open('image.ova', 'w') {|f| f.write(task.s3_object.read) }
|
|
710
|
+
#
|
|
711
|
+
# @param [S3::Bucket,String] bucket The destination bucket. May
|
|
712
|
+
# be the name of the bucket (string) or a {S3::Bucket} object. The
|
|
713
|
+
# bucket must exist and grant write permissiosn to the AWS account
|
|
714
|
+
# 'vm-import-export@amazon.com.'.
|
|
715
|
+
#
|
|
716
|
+
# @param [Hash] options
|
|
717
|
+
#
|
|
718
|
+
# @option options [String] :target_environment ('vmware') The target
|
|
719
|
+
# virtualization environment. Valid values include: 'vmware', 'citrix'
|
|
720
|
+
# and 'microsoft'.
|
|
721
|
+
#
|
|
722
|
+
# @option options [String] :disk_image_format The format for the exported
|
|
723
|
+
# image. Defaults to 'vmdk' if +:target_environemnt+ is 'vmware',
|
|
724
|
+
# otherwise, 'vhd'.
|
|
725
|
+
#
|
|
726
|
+
# @option options [String] :container_format The container format used to
|
|
727
|
+
# combine disk images with metadata (such as OVF). If absent, only
|
|
728
|
+
# the disk image will be exported. Defaults to 'ova' if
|
|
729
|
+
# +:target_environment+ is 'vmware', otherwise ommited.
|
|
730
|
+
#
|
|
731
|
+
# @option options [String] :description Description of the conversion
|
|
732
|
+
# task or the resource being exported.
|
|
733
|
+
#
|
|
734
|
+
# @option options [String] :prefix (nil) The image is written to a
|
|
735
|
+
# single object in the bucket at the key:
|
|
736
|
+
#
|
|
737
|
+
# "#{prefix}#{export_task_id}.#{disk_image_format}"
|
|
738
|
+
#
|
|
739
|
+
# @return [ExportTask]
|
|
740
|
+
#
|
|
741
|
+
def export_to_s3 bucket, options = {}
|
|
742
|
+
|
|
743
|
+
bucket_name = bucket.is_a?(S3::Bucket) ? bucket.name : bucket.to_s
|
|
744
|
+
|
|
745
|
+
opts = {}
|
|
746
|
+
opts[:instance_id] = instance_id
|
|
747
|
+
opts[:description] = options[:description] if options[:description]
|
|
748
|
+
opts[:target_environment] = options[:target_environment] || 'vmware'
|
|
749
|
+
opts[:export_to_s3] = {}
|
|
750
|
+
opts[:export_to_s3][:s3_bucket] = bucket_name
|
|
751
|
+
[:disk_image_format, :container_format, :s3_prefix].each do |opt|
|
|
752
|
+
opts[:export_to_s3][opt] = options[opt] if options.key?(opt)
|
|
753
|
+
end
|
|
754
|
+
|
|
755
|
+
resp = client.create_instance_export_task(opts)
|
|
756
|
+
|
|
757
|
+
ExportTask.new_from(
|
|
758
|
+
:create_instance_export_task,
|
|
759
|
+
resp[:export_task],
|
|
760
|
+
resp[:export_task][:export_task_id],
|
|
761
|
+
:config => config)
|
|
762
|
+
|
|
763
|
+
end
|
|
764
|
+
|
|
765
|
+
protected
|
|
766
|
+
|
|
767
|
+
def find_in_response resp
|
|
768
|
+
resp.instance_index[id]
|
|
769
|
+
end
|
|
770
|
+
|
|
771
|
+
def instance_action name
|
|
772
|
+
client.send("#{name}_instances", :instance_ids => [id])
|
|
773
|
+
nil
|
|
774
|
+
end
|
|
775
|
+
|
|
776
|
+
def get_resource attribute
|
|
777
|
+
if self.class.mutable_describe_attributes.include?(attribute.name)
|
|
778
|
+
describe_attribute_call(attribute)
|
|
779
|
+
else
|
|
780
|
+
describe_call
|
|
781
|
+
end
|
|
782
|
+
end
|
|
783
|
+
|
|
784
|
+
def attributes_from_response_object(obj)
|
|
785
|
+
if atts = super(obj)
|
|
786
|
+
if obj[:instance_state]
|
|
787
|
+
atts[:status] = obj[:instance_state].name.tr("-","_").to_sym
|
|
788
|
+
end
|
|
789
|
+
atts
|
|
790
|
+
end
|
|
791
|
+
end
|
|
792
|
+
|
|
793
|
+
end
|
|
794
|
+
|
|
795
|
+
end
|
|
796
|
+
end
|