class AWS::EC2::InstanceCollection


# => { “i-12345678” => :running, “i-87654321” => :shutting_down }
ec2.instances.inject({}) { |m, i| m = i.status; m }
To get a map of instance IDs to instance status:
i.exists?
i = ec2.instances[“i-12345678”]

To get an instance by ID:
ec2.instances.create(:image_id => “ami-1b814f72”)
To run an instance:
{EC2#instances}.
should get an instance of this class by calling
Represents a collection of EC2 instances. Typically you
#

def [] id

Returns:
  • (Instance) - Returns an object representing the EC2 instance
def [] id
  super
end

def count_options options

def count_options options
  min = max = 1
  count = options[:count]
  case count
  when Range
    min = count.begin
    max = (count.exclude_end? ? count.end - 1 : count.end)
  when Integer
    min = max = count
  end
  { :min_count => min, :max_count => max }
end

def create options = {}

Returns:
  • (Instance or Array) - If a single instance is being created,

Options Hash: (**options)
  • :dedicated_tenancy (Boolean) -- Instances
  • :private_ip_address (String) -- If you're using VPC,
  • :subnet (Subnet, String) -- The VPC Subnet (or
  • :instance_initiated_shutdown_behavior (String) --
  • :disable_api_termination (Boolean) -- Specifies
  • :ramdisk_id (String) -- The ID of the RAM disk to
  • :kernel_id (String) -- The ID of the kernel with
  • :instance_type (String) -- The type of instance to
  • :user_data (String) -- Arbitrary user data. You
  • :security_group_ids (Array) -- Security groups
  • :security_groups (Array) -- Security groups are used
  • :key_name (String) -- The name of the key pair to
  • :image_id (String) -- ID of the AMI you want to
  • :availability_zone (String) -- Specifies the
  • :monitoring (Boolean) -- Setting this to true
  • :block_device_mappings (Hash) -- This must be a
  • :iam_instance_profile (String) -- The name or
  • :count (Integer) -- How many instances to request. By

Parameters:
  • options (Hash) -- Options for new instance. +:image_id+ is

Other tags:
    Example: Launching in an Amazon VPC subnet -
    Example: Specifying block device mappings -
    Example: Running multiple instances with the same parameters -
    Example: Running a single instance -
def create options = {}
  if profile = options.delete(:iam_instance_profile)
    profile = case profile
    when /^arn:aws:iam::/ then { :arn => profile }
    when String then { :name => profile }
    when Hash then profile
    else 
      msg = "expected a name or ARN string for :iam_instance_profile"
    end
    options[:iam_instance_profile] = profile
  end
  if image = options.delete(:image)
    options[:image_id] = image.id
  end
  if kernel = options.delete(:kernel)
    options[:kernel_id] = kernel.id
  end
  if ramdisk = options.delete(:ramdisk)
    options[:ramdisk_id] = ramdisk.id
  end
  if key_pair = options.delete(:key_pair)
    options[:key_name] = key_pair.name
  end
  options = count_options(options).merge(options)
  options.delete(:count)
  options[:user_data] = Base64.encode64(options[:user_data]).strip if
    options[:user_data]
  options[:block_device_mappings] =
    translate_block_device_mappings(options[:block_device_mappings]) if
    options[:block_device_mappings]
  options[:monitoring] = { :enabled => true } if
    options[:monitoring_enabled]
  options.delete(:monitoring_enabled)
  placement = {}
  if options[:availability_zone]
    placement[:availability_zone] = options[:availability_zone].to_s
    options.delete(:availability_zone)
  end
  if options[:dedicated_tenancy]
    placement[:tenancy] = 'dedicated' 
    options.delete(:dedicated_tenancy)
  end
  options[:placement] = placement unless placement.empty?
  if subnet_id = subnet_id_option(options)
    options[:subnet_id] = subnet_id
  end
  security_group_opts(options)
  options[:client_token] = UUIDTools::UUID.timestamp_create.to_s
  resp = client.run_instances(options)
  if options[:min_count] == options[:max_count] and
      options[:min_count] == 1
    self[resp.instances_set.first.instance_id]
  else
    resp.instances_set.map do |i|
      self[i.instance_id]
    end
  end
end

def each(&block)

Other tags:
    Yield: - Yields each instance in the collection.
def each(&block)
  response = filtered_request(:describe_instances)
  response.reservation_set.each do |reservation|
    reservation.instances_set.each do |i|
      yield(Instance.new(i.instance_id, :config => config))
    end
  end
end

def member_class

def member_class
  Instance
end

def security_group_opts options

def security_group_opts options
  ids = []
  names = []
  Array(options.delete(:security_group_ids)).each do |g|
    ids << g
  end
  # this may be security group objects or names
  Array(options.delete(:security_groups)).each do |g|
    case g
    when String        then names << g
    when SecurityGroup then ids << g.id
    else
      raise ArgumentError, ':security_groups may only contain ' +
        'security group names, ids or objects'
    end
  end
  return if ids.empty? and names.empty?
  if options[:subnet_id]
    # vpc instances only accepts security group ids, so any group
    # names must be converted to ids, which requires a service
    # request
    unless names.empty?
      ec2 = EC2.new(:config => config)
      groups = ec2.security_groups.filter('group-name', names)
      ids += groups.collect{|g| g.id }
    end
    options[:security_group_ids] = ids
  else
    # non-vpc instances accept both group names and ids, so 
    # we accept whichever
    options[:security_groups] = names unless names.empty?
    options[:security_group_ids] = ids unless ids.empty?
  end
end