def create options = {}
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)
options[:placement] = {
:availability_zone => options[:availability_zone].to_s
} if options[:availability_zone]
options.delete(:availability_zone)
options[:security_groups] = group_opts(options[:security_groups]) if
options[:security_groups]
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