def launch_instances(image_id, lparams={})
@logger.info("Launching instance of image #{image_id} for #{@aws_access_key_id}, " +
"key: #{lparams[:key_name]}, groups: #{(lparams[:group_ids]).to_a.join(',')}")
params = hash_params('SecurityGroup', lparams[:group_ids].to_a)
params.update( {'ImageId' => image_id,
'MinCount' => (lparams[:min_count] || 1).to_s,
'MaxCount' => (lparams[:max_count] || 1).to_s,
'AddressingType' => lparams[:addressing_type] || DEFAULT_ADDRESSING_TYPE,
'InstanceType' => lparams[:instance_type] || DEFAULT_INSTANCE_TYPE })
params['KeyName'] = lparams[:key_name] unless lparams[:key_name].blank?
params['KernelId'] = lparams[:kernel_id] unless lparams[:kernel_id].blank?
params['RamdiskId'] = lparams[:ramdisk_id] unless lparams[:ramdisk_id].blank?
params['Placement.AvailabilityZone'] = lparams[:availability_zone] unless lparams[:availability_zone].blank?
params['BlockDeviceMappings'] = lparams[:block_device_mappings] unless lparams[:block_device_mappings].blank?
unless lparams[:user_data].blank?
lparams[:user_data].strip!
params['UserData'] = Base64.encode64(lparams[:user_data]).delete("\n").strip unless lparams[:user_data].blank?
end
link = generate_request("RunInstances", params)
instances = request_info(link, QEc2DescribeInstancesParser.new(:logger => @logger))
get_desc_instances(instances)
rescue Exception
on_exception
end