def create_instance(credentials, image_id, opts={})
ec2 = new_client(credentials)
instance_options = {}
if opts[:user_data]
instance_options[:user_data] = Base64::decode64(opts[:user_data])
end
instance_options[:key_name] = opts[:keyname] if opts[:keyname]
instance_options[:availability_zone] = opts[:realm_id] if opts[:realm_id]
instance_options[:instance_type] = opts[:hwp_id] if opts[:hwp_id] && opts[:hwp_id].length > 0
firewalls = opts.inject([]){|res, (k,v)| res << v if k =~ /firewalls\d+$/; res}
instance_options[:group_ids] = firewalls unless firewalls.empty?
if opts[:instance_count] and opts[:instance_count].length != 0
instance_options[:min_count] = opts[:instance_count]
instance_options[:max_count] = opts[:instance_count]
end
if opts[:snapshot_id] and opts[:device_name]
instance_options[:block_device_mappings] = [{
:snapshot_id => opts[:snapshot_id],
:device_name => opts[:device_name]
}]
end
safely do
new_instance = convert_instance(ec2.launch_instances(image_id, instance_options).first)
new_instance
end
end