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