# 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: 
41:         user_data = extract_user_data(options)
42: 
43:         params = {}
44: 
45:         if options[:security_group]
46:           params.merge!(pathlist("LaunchSpecification.SecurityGroup", options[:security_group]))
47:         end
48: 
49:         if options[:block_device_mapping]
50:           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' }))
51:         end
52: 
53:         params["SpotPrice"]                                             = options[:spot_price]
54:         params["InstanceCount"]                                         = options[:instance_count].to_s
55:         params["Type"]                                                  = options[:type] unless options[:type].nil?
56:         params["ValidFrom"]                                             = options[:valid_from].to_s unless options[:valid_from].nil?
57:         params["ValidUntil"]                                            = options[:valid_until].to_s unless options[:valid_until].nil?
58:         params["LaunchGroup"]                                           = options[:launch_group] unless options[:launch_group].nil?
59:         params["AvailabilityZoneGroup"]                                 = options[:availability_zone_group] unless options[:availability_zone_group].nil?
60:         params["LaunchSpecification.ImageId"]                           = options[:image_id] unless options[:image_id].nil?
61:         params["LaunchSpecification.KeyName"]                           = options[:key_name] unless options[:key_name].nil?
62:         params["LaunchSpecification.UserData"]                          = user_data unless user_data.nil?
63:         params["LaunchSpecification.InstanceType"]                      = options[:instance_type] unless options[:instance_type].nil?
64:         params["LaunchSpecification.KernelId"]                          = options[:kernel_id] unless options[:kernel_id].nil?
65:         params["LaunchSpecification.RamdiskId"]                         = options[:ramdisk_id] unless options[:ramdisk_id].nil?
66:         params["LaunchSpecification.SubnetId"]                          = options[:subnet_id] unless options[:subnet_id].nil?
67:         params["LaunchSpecification.Placement.AvailabilityZone"]        = options[:availability_zone] unless options[:availability_zone].nil?
68:         params["LaunchSpecification.Monitoring.Enabled"]                = options[:monitoring_enabled].to_s unless options[:monitoring_enabled].nil?
69: 
70:         return response_generator(:action => "RequestSpotInstances", :params => params)
71:       end