# File lib/AWS/EC2/spot_instance_requests.rb, line 32
32:       def request_spot_instances( options = {} )
33:         options = { :instance_count => 1,
34:                     :instance_type => 'm1.small',
35:                     :base64_encoded => false }.merge(options)
36: 
37:         raise ArgumentError, ":addressing_type has been deprecated." if options[:addressing_type]
38:         raise ArgumentError, ":spot_price must be provided" if options[:spot_price].nil? || options[:spot_price].empty?
39:         raise ArgumentError, ":base64_encoded must be 'true' or 'false'" unless [true, false].include?(options[:base64_encoded])
40:         raise ArgumentError, ":instance_type must specify a valid instance type" unless options[:instance_type].nil? || ["t1.micro", "m1.small", "m1.large", "m1.xlarge", "m2.xlarge", "c1.medium", "c1.xlarge", "m2.2xlarge", "m2.4xlarge", "cc1.4xlarge"].include?(options[:instance_type])
41: 
42:         user_data = extract_user_data(options)
43: 
44:         params = {}
45: 
46:         if options[:security_group]
47:           params.merge!(pathlist("LaunchSpecification.SecurityGroup", options[:security_group]))
48:         end
49: 
50:         if options[:block_device_mapping]
51:           params.merge!(pathhashlist('LaunchSpecification.BlockDeviceMapping', options[:block_device_mapping].flatten, {:device_name => 'DeviceName', :virtual_name => 'VirtualName', :ebs_snapshot_id => 'Ebs.SnapshotId', :ebs_volume_size => 'Ebs.VolumeSize', :ebs_delete_on_termination => 'Ebs.DeleteOnTermination' }))
52:         end
53: 
54:         params["SpotPrice"]                                             = options[:spot_price]
55:         params["InstanceCount"]                                         = options[:instance_count].to_s
56:         params["Type"]                                                  = options[:type] unless options[:type].nil?
57:         params["ValidFrom"]                                             = options[:valid_from].to_s unless options[:valid_from].nil?
58:         params["ValidUntil"]                                            = options[:valid_until].to_s unless options[:valid_until].nil?
59:         params["LaunchGroup"]                                           = options[:launch_group] unless options[:launch_group].nil?
60:         params["AvailabilityZoneGroup"]                                 = options[:availability_zone_group] unless options[:availability_zone_group].nil?
61:         params["LaunchSpecification.ImageId"]                           = options[:image_id] unless options[:image_id].nil?
62:         params["LaunchSpecification.KeyName"]                           = options[:key_name] unless options[:key_name].nil?
63:         params["LaunchSpecification.UserData"]                          = user_data unless user_data.nil?
64:         params["LaunchSpecification.InstanceType"]                      = options[:instance_type] unless options[:instance_type].nil?
65:         params["LaunchSpecification.KernelId"]                          = options[:kernel_id] unless options[:kernel_id].nil?
66:         params["LaunchSpecification.RamdiskId"]                         = options[:ramdisk_id] unless options[:ramdisk_id].nil?
67:         params["LaunchSpecification.SubnetId"]                          = options[:subnet_id] unless options[:subnet_id].nil?
68:         params["LaunchSpecification.Placement.AvailabilityZone"]        = options[:availability_zone] unless options[:availability_zone].nil?
69:         params["LaunchSpecification.Monitoring.Enabled"]                = options[:monitoring_enabled].to_s unless options[:monitoring_enabled].nil?
70: 
71:         return response_generator(:action => "RequestSpotInstances", :params => params)
72:       end