aws-sdk 1.3.5 → 1.3.6
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/lib/aws/api_config/EC2-2011-12-15.yml +2791 -0
- data/lib/aws/core.rb +4 -4
- data/lib/aws/core/client.rb +1 -0
- data/lib/aws/core/client_logging.rb +9 -2
- data/lib/aws/core/lazy_error_classes.rb +1 -1
- data/lib/aws/core/response.rb +5 -0
- data/lib/aws/core/service_interface.rb +3 -2
- data/lib/aws/core/uri_escape.rb +1 -2
- data/lib/aws/ec2.rb +80 -1
- data/lib/aws/ec2/client.rb +29 -10
- data/lib/aws/ec2/client/xml.rb +51 -1
- 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/filtered_collection.rb +27 -2
- data/lib/aws/ec2/image.rb +7 -4
- data/lib/aws/ec2/instance.rb +54 -2
- data/lib/aws/ec2/instance_collection.rb +5 -3
- 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/network_acl.rb +254 -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 +65 -0
- data/lib/aws/ec2/network_interface.rb +174 -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/region.rb +11 -1
- data/lib/aws/ec2/resource.rb +6 -2
- data/lib/aws/ec2/route_table.rb +204 -0
- data/lib/aws/ec2/route_table/association.rb +119 -0
- data/lib/aws/ec2/route_table/route.rb +113 -0
- data/lib/aws/ec2/route_table_collection.rb +73 -0
- data/lib/aws/ec2/security_group.rb +15 -5
- data/lib/aws/ec2/security_group_collection.rb +15 -12
- data/lib/aws/ec2/subnet.rb +161 -0
- data/lib/aws/ec2/subnet_collection.rb +115 -0
- data/lib/aws/ec2/vpc.rb +166 -0
- data/lib/aws/ec2/vpc_collection.rb +71 -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/iam/login_profile.rb +4 -0
- data/lib/aws/iam/user.rb +6 -0
- data/lib/aws/record/hash_model.rb +3 -3
- data/lib/aws/simple_workflow.rb +6 -3
- data/lib/aws/simple_workflow/activity_task_collection.rb +7 -2
- data/lib/aws/simple_workflow/decision_task_collection.rb +11 -5
- data/lib/aws/simple_workflow/option_formatters.rb +7 -0
- data/lib/net/http/connection_pool.rb +19 -5
- metadata +33 -5
- data/lib/aws/api_config/EC2-2011-02-28.yml +0 -2314
| @@ -0,0 +1,73 @@ | |
| 1 | 
            +
            # Copyright 2011-2012 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 | 
            +
                class CustomerGatewayCollection < Collection
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  include TaggedCollection
         | 
| 20 | 
            +
                  include Core::Collection::Simple
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  # @param [Integer] bgp_asn The customer gateway's Border Gateway 
         | 
| 23 | 
            +
                  #   Protocol (BGP) Autonomous System Number (ASN).
         | 
| 24 | 
            +
                  #
         | 
| 25 | 
            +
                  # @param [String] ip_address The Internet-routable IP address for the 
         | 
| 26 | 
            +
                  #   customer gateway's outside interface. The address must be static.
         | 
| 27 | 
            +
                  #
         | 
| 28 | 
            +
                  # @param [Hash] options
         | 
| 29 | 
            +
                  # 
         | 
| 30 | 
            +
                  # @option options [String] :vpn_type ('ipsec.1') The type of VPN 
         | 
| 31 | 
            +
                  #   connection this customer gateway supports.
         | 
| 32 | 
            +
                  #
         | 
| 33 | 
            +
                  # @return [CustomerGateway]
         | 
| 34 | 
            +
                  #
         | 
| 35 | 
            +
                  def create bgp_asn, ip_address, options = {}
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    client_opts = {}
         | 
| 38 | 
            +
                    client_opts[:bgp_asn] = bgp_asn
         | 
| 39 | 
            +
                    client_opts[:public_ip] = ip_address
         | 
| 40 | 
            +
                    client_opts[:type] = options[:vpn_type] || 'ipsec.1'
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                    resp = client.create_customer_gateway(client_opts)
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                    CustomerGateway.new_from(:create_customer_gateway, 
         | 
| 45 | 
            +
                      resp.customer_gateway,
         | 
| 46 | 
            +
                      resp.customer_gateway.customer_gateway_id,
         | 
| 47 | 
            +
                      :config => config)
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  # @param [String] customer_gateway_id
         | 
| 52 | 
            +
                  # @return [CustomerGateway]
         | 
| 53 | 
            +
                  def [] customer_gateway_id
         | 
| 54 | 
            +
                    CustomerGateway.new(customer_gateway_id, :config => config)
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  protected
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  def _each_item options = {}, &block
         | 
| 60 | 
            +
                    response = filtered_request(:describe_customer_gateways, options, &block)
         | 
| 61 | 
            +
                    response.customer_gateway_set.each do |g|
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                      gateway = CustomerGateway.new_from(:describe_customer_gateways, g, 
         | 
| 64 | 
            +
                        g.customer_gateway_id, :config => config)
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                      yield(gateway)
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                    end
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
            end
         | 
| @@ -0,0 +1,106 @@ | |
| 1 | 
            +
            # Copyright 2011-2012 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 | 
            +
                class DHCPOptions < Resource
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  include TaggedItem
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  # @private
         | 
| 22 | 
            +
                  def initialize dhcp_options_id, options = {}
         | 
| 23 | 
            +
                    @dhcp_options_id = dhcp_options_id
         | 
| 24 | 
            +
                    super
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  # @return [String]
         | 
| 28 | 
            +
                  attr_reader :dhcp_options_id
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  alias_method :id, :dhcp_options_id
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  attribute :dhcp_configuration_set, :static => true
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  protected :dhcp_configuration_set
         | 
| 35 | 
            +
                
         | 
| 36 | 
            +
                  populates_from(:create_dhcp_options) do |resp|
         | 
| 37 | 
            +
                    resp.dhcp_options if resp.dhcp_options.dhcp_options_id == id
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  populates_from(:describe_dhcp_options) do |resp|
         | 
| 41 | 
            +
                    resp.dhcp_options_set.find do |dhcp_options| 
         | 
| 42 | 
            +
                      dhcp_options.dhcp_options_id == dhcp_options_id
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  # @return [Hash]
         | 
| 47 | 
            +
                  def configuration
         | 
| 48 | 
            +
                    dhcp_configuration_set.inject({}) do |config,opt|
         | 
| 49 | 
            +
                      key = opt.key.gsub(/-/, '_').to_sym
         | 
| 50 | 
            +
                      values = opt.value_set.map(&:value)
         | 
| 51 | 
            +
                      values = values.first if key == :domain_name
         | 
| 52 | 
            +
                      values = values.first.to_i if key == :netbios_node_type
         | 
| 53 | 
            +
                      config.merge(key => values)
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  # Associates this set of options to the given VPC.
         | 
| 58 | 
            +
                  # @param [VPC,String] vpc A {VPC} object or a vpc id string.
         | 
| 59 | 
            +
                  # @return [nil]
         | 
| 60 | 
            +
                  def associate vpc
         | 
| 61 | 
            +
                    client_opts = {}
         | 
| 62 | 
            +
                    client_opts[:dhcp_options_id] = dhcp_options_id
         | 
| 63 | 
            +
                    client_opts[:vpc_id] = vpc_id_option(vpc)
         | 
| 64 | 
            +
                    client.associate_dhcp_options(client_opts)
         | 
| 65 | 
            +
                    nil
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  # Deletes these DHCP options.  An error will be raised if these
         | 
| 69 | 
            +
                  # options are currently associated to a VPC.  To disassociate this
         | 
| 70 | 
            +
                  # set of options from a VPC, associate a different set of options
         | 
| 71 | 
            +
                  # with the VPC.
         | 
| 72 | 
            +
                  #
         | 
| 73 | 
            +
                  # @return [nil]
         | 
| 74 | 
            +
                  #
         | 
| 75 | 
            +
                  def delete
         | 
| 76 | 
            +
                    client_opts = {}
         | 
| 77 | 
            +
                    client_opts[:dhcp_options_id] = dhcp_options_id
         | 
| 78 | 
            +
                    client.delete_dhcp_options(client_opts)
         | 
| 79 | 
            +
                    nil
         | 
| 80 | 
            +
                  end
         | 
| 81 | 
            +
                  
         | 
| 82 | 
            +
                  # @return [VPCCollection] Returns a collection that represents
         | 
| 83 | 
            +
                  #   all VPCs currently using this dhcp options.
         | 
| 84 | 
            +
                  def vpcs
         | 
| 85 | 
            +
                    vpcs = VPCCollection.new(:config => config)
         | 
| 86 | 
            +
                    vpcs.filter('dhcp-options-id', dhcp_options_id)
         | 
| 87 | 
            +
                  end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                  # @return [Boolean] Returns true if the dhcp options exists.
         | 
| 90 | 
            +
                  def exists?
         | 
| 91 | 
            +
                    begin
         | 
| 92 | 
            +
                      get_resource
         | 
| 93 | 
            +
                      true
         | 
| 94 | 
            +
                    rescue Errors::InvalidDhcpOptionID::NotFound
         | 
| 95 | 
            +
                      false
         | 
| 96 | 
            +
                    end
         | 
| 97 | 
            +
                  end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                  protected
         | 
| 100 | 
            +
                  def vpc_id_option vpc
         | 
| 101 | 
            +
                    vpc.is_a?(VPC) ? vpc.vpc_id : vpc
         | 
| 102 | 
            +
                  end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                end
         | 
| 105 | 
            +
              end
         | 
| 106 | 
            +
            end
         | 
| @@ -0,0 +1,87 @@ | |
| 1 | 
            +
            # Copyright 2011-2012 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 | 
            +
                class DHCPOptionsCollection < Collection
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  include TaggedCollection
         | 
| 20 | 
            +
                  include Core::Collection::Simple
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  # @param [Hash] options
         | 
| 23 | 
            +
                  #
         | 
| 24 | 
            +
                  # @option options [required,String] :domain_name A domain name of your
         | 
| 25 | 
            +
                  #   choice (e.g., example.com).
         | 
| 26 | 
            +
                  #
         | 
| 27 | 
            +
                  # @option options [Array<String>] :domain_name_servers
         | 
| 28 | 
            +
                  #   The IP addresses of domain name servers. You can specify up to 
         | 
| 29 | 
            +
                  #   four addresses.
         | 
| 30 | 
            +
                  #
         | 
| 31 | 
            +
                  # @option options [Array<String>] :ntp_servers 
         | 
| 32 | 
            +
                  #   The IP addresses of Network Time Protocol (NTP) servers. You can 
         | 
| 33 | 
            +
                  #   specify up to four addresses.
         | 
| 34 | 
            +
                  #
         | 
| 35 | 
            +
                  # @option options [Array<String>] :netbios_name_servers 
         | 
| 36 | 
            +
                  #   The IP addresses of NetBIOS name servers. You can specify up to 
         | 
| 37 | 
            +
                  #   four addresses.
         | 
| 38 | 
            +
                  #
         | 
| 39 | 
            +
                  # @option options [String] :netbios_node_type Value indicating the 
         | 
| 40 | 
            +
                  #   NetBIOS node type (1, 2, 4, or 8). For more information about the 
         | 
| 41 | 
            +
                  #   values, go to RFC 2132. We recommend you only use 2 at this time 
         | 
| 42 | 
            +
                  #   (broadcast and multicast are currently not supported).
         | 
| 43 | 
            +
                  #
         | 
| 44 | 
            +
                  def create options = {}
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                    configurations = []
         | 
| 47 | 
            +
                    options.each_pair do |opt,values|
         | 
| 48 | 
            +
                      opt = opt.to_s.gsub(/_/, '-')
         | 
| 49 | 
            +
                      values = values.is_a?(Array) ? values : [values]
         | 
| 50 | 
            +
                      configurations << { :key => opt, :values => values.map(&:to_s) }
         | 
| 51 | 
            +
                    end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    client_opts = {}
         | 
| 54 | 
            +
                    client_opts[:dhcp_configurations] = configurations
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    resp = client.create_dhcp_options(client_opts)
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                    DHCPOptions.new_from(:create_dhcp_options, 
         | 
| 59 | 
            +
                      resp.dhcp_options,
         | 
| 60 | 
            +
                      resp.dhcp_options.dhcp_options_id,
         | 
| 61 | 
            +
                      :config => config)
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                  # @param [String] dhcp_options_id
         | 
| 66 | 
            +
                  # @return [DHCPOptions]
         | 
| 67 | 
            +
                  def [] dhcp_options_id
         | 
| 68 | 
            +
                    DHCPOptions.new(dhcp_options_id, :config => config)
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                  protected
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  def _each_item options = {}, &block
         | 
| 74 | 
            +
                    response = filtered_request(:describe_dhcp_options, options, &block)
         | 
| 75 | 
            +
                    response.dhcp_options_set.each do |opts|
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                      options = DHCPOptions.new_from(:describe_dhcp_options, opts, 
         | 
| 78 | 
            +
                        opts.dhcp_options_id, :config => config)
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                      yield(options)
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                    end
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                end
         | 
| 86 | 
            +
              end
         | 
| 87 | 
            +
            end
         | 
| @@ -47,11 +47,36 @@ module AWS | |
| 47 47 | 
             
                    client.send(client_method, options)
         | 
| 48 48 | 
             
                  end
         | 
| 49 49 |  | 
| 50 | 
            +
                  protected
         | 
| 51 | 
            +
                  def vpc_id_option options
         | 
| 52 | 
            +
                    vpc_id = options[:vpc]
         | 
| 53 | 
            +
                    vpc_id ||= options[:vpc_id]
         | 
| 54 | 
            +
                    vpc_id ||= filter_value_for('vpc-id')
         | 
| 55 | 
            +
                    vpc_id = vpc_id.id if vpc_id.is_a?(VPC)
         | 
| 56 | 
            +
                    vpc_id
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  protected
         | 
| 60 | 
            +
                  def subnet_id_option options
         | 
| 61 | 
            +
                    subnet_id = options.delete(:subnet)
         | 
| 62 | 
            +
                    subnet_id ||= options[:subnet_id]
         | 
| 63 | 
            +
                    subnet_id ||= filter_value_for('subnet-id')
         | 
| 64 | 
            +
                    subnet_id = subnet_id.id if subnet_id.is_a?(Subnet)
         | 
| 65 | 
            +
                    subnet_id
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  protected
         | 
| 69 | 
            +
                  def filter_value_for filter_name
         | 
| 70 | 
            +
                    @filters.each do |filter|
         | 
| 71 | 
            +
                      return filter[:values].first if filter[:name] == filter_name
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
                    nil
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
             | 
| 50 76 | 
             
                  # @private
         | 
| 51 77 | 
             
                  protected
         | 
| 52 78 | 
             
                  def preserved_options
         | 
| 53 | 
            -
                    { :config => config,
         | 
| 54 | 
            -
                      :filters => @filters }
         | 
| 79 | 
            +
                    { :config => config, :filters => @filters }
         | 
| 55 80 | 
             
                  end
         | 
| 56 81 |  | 
| 57 82 | 
             
                  # @private
         | 
    
        data/lib/aws/ec2/image.rb
    CHANGED
    
    | @@ -128,6 +128,7 @@ module AWS | |
| 128 128 | 
             
                  attribute :hypervisor, :to_sym => true, :static => true
         | 
| 129 129 |  | 
| 130 130 | 
             
                  attribute :block_device_mapping
         | 
| 131 | 
            +
             | 
| 131 132 | 
             
                  protected :block_device_mapping
         | 
| 132 133 |  | 
| 133 134 | 
             
                  attribute :product_codes, :static => true do
         | 
| @@ -231,12 +232,14 @@ module AWS | |
| 231 232 | 
             
                  #   image.add_product_codes ['ABCXYZ', 'MNOPQR']
         | 
| 232 233 | 
             
                  #
         | 
| 233 234 | 
             
                  # @param [Array<String>] product_codes 
         | 
| 235 | 
            +
                  #
         | 
| 234 236 | 
             
                  # @return [nil]
         | 
| 237 | 
            +
                  #
         | 
| 235 238 | 
             
                  def add_product_codes *product_codes
         | 
| 236 | 
            -
                     | 
| 237 | 
            -
                     | 
| 238 | 
            -
                     | 
| 239 | 
            -
                    client.modify_image_attribute( | 
| 239 | 
            +
                    client_opts = {}
         | 
| 240 | 
            +
                    client_opts[:image_id] = self.id
         | 
| 241 | 
            +
                    client_opts[:product_codes] = product_codes.flatten
         | 
| 242 | 
            +
                    client.modify_image_attribute(client_opts)
         | 
| 240 243 | 
             
                    nil
         | 
| 241 244 | 
             
                  end
         | 
| 242 245 |  | 
    
        data/lib/aws/ec2/instance.rb
    CHANGED
    
    | @@ -274,11 +274,16 @@ module AWS | |
| 274 274 |  | 
| 275 275 | 
             
                  mutable_describe_call_attribute :ramdisk_id, :set_as => :ramdisk
         | 
| 276 276 |  | 
| 277 | 
            -
                   | 
| 278 | 
            -
                     | 
| 277 | 
            +
                  mutable_describe_attribute :source_dest_check do
         | 
| 278 | 
            +
                    translates_output{|bool| bool == "true" }
         | 
| 279 | 
            +
                  end
         | 
| 280 | 
            +
             | 
| 281 | 
            +
                  alias_method :source_dest_check?, :source_dest_check
         | 
| 279 282 |  | 
| 280 283 | 
             
                  mutable_describe_call_attribute :group_set
         | 
| 281 284 |  | 
| 285 | 
            +
                  describe_call_attribute :network_interface_set
         | 
| 286 | 
            +
             | 
| 282 287 | 
             
                  mutable_describe_attribute(:user_data) do
         | 
| 283 288 | 
             
                    translates_output {|v| Base64.decode64(v) if v }
         | 
| 284 289 | 
             
                    translates_input {|v| Base64.encode64(v).strip }
         | 
| @@ -351,6 +356,53 @@ module AWS | |
| 351 356 | 
             
                    provider.provides :monitoring
         | 
| 352 357 | 
             
                  end
         | 
| 353 358 |  | 
| 359 | 
            +
                  # @return [VPC,nil] Returns the VPC this instance was launched in.
         | 
| 360 | 
            +
                  #   If this instance was not launched inside a VPC, nil is returned.
         | 
| 361 | 
            +
                  def vpc
         | 
| 362 | 
            +
                    if vpc_id
         | 
| 363 | 
            +
                      VPC.new(vpc_id, :config => config)
         | 
| 364 | 
            +
                    end
         | 
| 365 | 
            +
                  end
         | 
| 366 | 
            +
                  
         | 
| 367 | 
            +
                  # @return [Subnet,nil] Returns the VPC subnet this instance was
         | 
| 368 | 
            +
                  #   launched in.  Returns nil if this was not launched in a VPC.
         | 
| 369 | 
            +
                  def subnet
         | 
| 370 | 
            +
                    if subnet_id
         | 
| 371 | 
            +
                      Subnet.new(subnet_id, :vpc_id => vpc_id, :config => config)
         | 
| 372 | 
            +
                    end
         | 
| 373 | 
            +
                  end
         | 
| 374 | 
            +
             | 
| 375 | 
            +
                  # @return [Array<NetworkInterface>] Returns a list of elastic network
         | 
| 376 | 
            +
                  #   interfaces attached to this instance (VPC only).  Non-vpc
         | 
| 377 | 
            +
                  #   instance may not have attached network interfaces.
         | 
| 378 | 
            +
                  def network_interfaces
         | 
| 379 | 
            +
                    network_interface_set.collect do |ni|
         | 
| 380 | 
            +
                      NetworkInterface.new_from(:describe_network_interfaces, ni,
         | 
| 381 | 
            +
                        ni.network_interface_id, :config => config)
         | 
| 382 | 
            +
                    end
         | 
| 383 | 
            +
                  end
         | 
| 384 | 
            +
             | 
| 385 | 
            +
                  # Attaches a network interface to this instance (VPC only).
         | 
| 386 | 
            +
                  #
         | 
| 387 | 
            +
                  # @param [NetworkInterface,String] network_interface A network interface
         | 
| 388 | 
            +
                  #   (or network interface id string) to attach to this vpc instance.
         | 
| 389 | 
            +
                  #
         | 
| 390 | 
            +
                  # @param [Hash] options
         | 
| 391 | 
            +
                  #
         | 
| 392 | 
            +
                  # @option (see NetworkInterface#attach)
         | 
| 393 | 
            +
                  #
         | 
| 394 | 
            +
                  # @return [nil]
         | 
| 395 | 
            +
                  #
         | 
| 396 | 
            +
                  def attach_network_interface network_interface, options = {}
         | 
| 397 | 
            +
                    if network_interface.is_a?(NetworkInterface) 
         | 
| 398 | 
            +
                      network_interface.attach(self, options)
         | 
| 399 | 
            +
                    else
         | 
| 400 | 
            +
                      i = NetworkInterface.new(network_interface, :config => config)
         | 
| 401 | 
            +
                      i.attach(self, options)
         | 
| 402 | 
            +
                    end
         | 
| 403 | 
            +
                    nil
         | 
| 404 | 
            +
                  end
         | 
| 405 | 
            +
             | 
| 354 406 | 
             
                  # @return [Array<SecurityGroup>] Returns a list of security 
         | 
| 355 407 | 
             
                  #   groups the instance belongs to. 
         | 
| 356 408 | 
             
                  def security_groups
         | 
| @@ -169,8 +169,8 @@ module AWS | |
| 169 169 | 
             
                  #   Determines whether the instance stops or terminates on
         | 
| 170 170 | 
             
                  #   instance-initiated shutdown.
         | 
| 171 171 | 
             
                  #
         | 
| 172 | 
            -
                  # @option options [String] :subnet (nil) The  | 
| 173 | 
            -
                  #   subnet to launch the instance in.
         | 
| 172 | 
            +
                  # @option options [Subnet,String] :subnet (nil) The VPC Subnet (or 
         | 
| 173 | 
            +
                  #   subnet id string) to launch the instance in.
         | 
| 174 174 | 
             
                  #
         | 
| 175 175 | 
             
                  # @option options [String] :private_ip_address (nil) If you're using VPC,
         | 
| 176 176 | 
             
                  #   you can optionally use this option to assign the instance a 
         | 
| @@ -236,7 +236,9 @@ module AWS | |
| 236 236 |  | 
| 237 237 | 
             
                    options[:placement] = placement unless placement.empty?
         | 
| 238 238 |  | 
| 239 | 
            -
                     | 
| 239 | 
            +
                    if subnet_id = subnet_id_option(options)
         | 
| 240 | 
            +
                      options[:subnet_id] = subnet_id
         | 
| 241 | 
            +
                    end
         | 
| 240 242 |  | 
| 241 243 | 
             
                    security_group_opts(options)
         | 
| 242 244 |  | 
| @@ -0,0 +1,122 @@ | |
| 1 | 
            +
            # Copyright 2011-2012 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 'aws/ec2/internet_gateway/attachment'
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            module AWS
         | 
| 17 | 
            +
              class EC2
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                class InternetGateway < Resource
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  include TaggedItem
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def initialize internet_gateway_id, options = {}
         | 
| 24 | 
            +
                    @internet_gateway_id = internet_gateway_id
         | 
| 25 | 
            +
                    super
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  # @return [String]
         | 
| 29 | 
            +
                  attr_reader :internet_gateway_id
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  alias_method :id, :internet_gateway_id
         | 
| 32 | 
            +
                
         | 
| 33 | 
            +
                  attribute :vpc_id
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  attribute :attachment_set
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  protected :attachment_set
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  populates_from(:describe_internet_gateways) do |resp|
         | 
| 40 | 
            +
                    resp.internet_gateway_set.find do |gateway| 
         | 
| 41 | 
            +
                      gateway.internet_gateway_id == internet_gateway_id
         | 
| 42 | 
            +
                    end
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  # @return [Array<InternetGateway::Attachment>]
         | 
| 46 | 
            +
                  def attachments
         | 
| 47 | 
            +
                    attachment_set.map {|details| Attachment.new(self, details) }
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  # @return [VPC,nil] Returns the currently attached VPC, or nil
         | 
| 51 | 
            +
                  #   if this gateway has not been attached.
         | 
| 52 | 
            +
                  def vpc
         | 
| 53 | 
            +
                    if attachment = attachments.first  
         | 
| 54 | 
            +
                      attachment.vpc
         | 
| 55 | 
            +
                    end
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                  # Attaches this internet gateway to the given VPC.  If this
         | 
| 59 | 
            +
                  # gateway is already attached to a different VPC, it will
         | 
| 60 | 
            +
                  # be detached from that one first.  If you pass nil, then
         | 
| 61 | 
            +
                  # this internet gateway will 
         | 
| 62 | 
            +
                  #
         | 
| 63 | 
            +
                  #   internet_gateway.vpc = 'vpc-123'
         | 
| 64 | 
            +
                  # 
         | 
| 65 | 
            +
                  # @param [VPC,String] vpc A {VPC} object or a vpc id string.
         | 
| 66 | 
            +
                  #
         | 
| 67 | 
            +
                  def vpc= vpc
         | 
| 68 | 
            +
                    if attachment = attachments.first
         | 
| 69 | 
            +
                      attachment.delete
         | 
| 70 | 
            +
                    end
         | 
| 71 | 
            +
                    attach(vpc) if vpc
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                  # Attaches this internet gateway to the given VPC.
         | 
| 75 | 
            +
                  # @param [VPC,String] vpc A {VPC} object or a vpc id string.
         | 
| 76 | 
            +
                  # @return [nil]
         | 
| 77 | 
            +
                  def attach vpc
         | 
| 78 | 
            +
                    client_opts = {}
         | 
| 79 | 
            +
                    client_opts[:internet_gateway_id] = internet_gateway_id
         | 
| 80 | 
            +
                    client_opts[:vpc_id] = vpc_id_option(vpc)
         | 
| 81 | 
            +
                    client.attach_internet_gateway(client_opts)
         | 
| 82 | 
            +
                    nil
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  # Detaches this internet gateway from the given VPC.
         | 
| 86 | 
            +
                  # @param [VPC,String] vpc A {VPC} object or a vpc id string.
         | 
| 87 | 
            +
                  # @return [nil]
         | 
| 88 | 
            +
                  def detach vpc
         | 
| 89 | 
            +
                    client_opts = {}
         | 
| 90 | 
            +
                    client_opts[:internet_gateway_id] = internet_gateway_id
         | 
| 91 | 
            +
                    client_opts[:vpc_id] = vpc_id_option(vpc)
         | 
| 92 | 
            +
                    client.detach_internet_gateway(client_opts)
         | 
| 93 | 
            +
                    nil
         | 
| 94 | 
            +
                  end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                  # Deletes this internet gateway.
         | 
| 97 | 
            +
                  # @return [nil]
         | 
| 98 | 
            +
                  def delete
         | 
| 99 | 
            +
                    client_opts = {}
         | 
| 100 | 
            +
                    client_opts[:internet_gateway_id] = internet_gateway_id
         | 
| 101 | 
            +
                    client.delete_internet_gateway(client_opts)
         | 
| 102 | 
            +
                    nil
         | 
| 103 | 
            +
                  end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                  # @return [Boolean] Returns true if the gateway exists.
         | 
| 106 | 
            +
                  def exists?
         | 
| 107 | 
            +
                    begin
         | 
| 108 | 
            +
                      get_resource
         | 
| 109 | 
            +
                      true
         | 
| 110 | 
            +
                    rescue Errors::InvalidInternetGatewayID::NotFound
         | 
| 111 | 
            +
                      false
         | 
| 112 | 
            +
                    end
         | 
| 113 | 
            +
                  end
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                  protected
         | 
| 116 | 
            +
                  def vpc_id_option vpc
         | 
| 117 | 
            +
                    vpc.is_a?(VPC) ? vpc.vpc_id : vpc
         | 
| 118 | 
            +
                  end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                end
         | 
| 121 | 
            +
              end
         | 
| 122 | 
            +
            end
         |