# File lib/AWS/EC2/instances.rb, line 27
27:       def run_instances( options = {} )
28:         options = { :image_id => "",
29:                     :min_count => 1,
30:                     :max_count => 1,
31:                     :base64_encoded => false }.merge(options)
32: 
33:         raise ArgumentError, ":addressing_type has been deprecated." if options[:addressing_type]
34:         raise ArgumentError, ":group_id has been deprecated." if options[:group_id]
35: 
36:         raise ArgumentError, ":image_id must be provided" if options[:image_id].nil? || options[:image_id].empty?
37:         raise ArgumentError, ":min_count is not valid" unless options[:min_count].to_i > 0
38:         raise ArgumentError, ":max_count is not valid or must be >= :min_count" unless options[:max_count].to_i > 0 && options[:max_count].to_i >= options[:min_count].to_i
39:         raise ArgumentError, ":instance_type must specify a valid instance type" unless options[:instance_type].nil? || ["m1.small", "m1.large", "m1.xlarge", "m2.xlarge", "c1.medium", "c1.xlarge", "m2.2xlarge", "m2.4xlarge"].include?(options[:instance_type])
40:         raise ArgumentError, ":monitoring_enabled must be 'true' or 'false'" unless options[:monitoring_enabled].nil? || [true, false].include?(options[:monitoring_enabled])
41:         raise ArgumentError, ":disable_api_termination must be 'true' or 'false'" unless options[:disable_api_termination].nil? || [true, false].include?(options[:disable_api_termination])
42:         raise ArgumentError, ":instance_initiated_shutdown_behavior must be 'stop' or 'terminate'" unless options[:instance_initiated_shutdown_behavior].nil? || ["stop", "terminate"].include?(options[:instance_initiated_shutdown_behavior])
43:         raise ArgumentError, ":base64_encoded must be 'true' or 'false'" unless [true, false].include?(options[:base64_encoded])
44: 
45:         user_data = extract_user_data(options)
46: 
47:         params = {}
48: 
49:         if options[:security_group]
50:           params.merge!(pathlist("SecurityGroup", options[:security_group]))
51:         end
52: 
53:         if options[:block_device_mapping]
54:           params.merge!(pathhashlist('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' }))
55:         end
56: 
57:         params["ImageId"]                           = options[:image_id]
58:         params["MinCount"]                          = options[:min_count].to_s
59:         params["MaxCount"]                          = options[:max_count].to_s
60:         params["KeyName"]                           = options[:key_name] unless options[:key_name].nil?
61:         params["AdditionalInfo"]                    = options[:additional_info] unless options[:additional_info].nil?
62:         params["UserData"]                          = user_data unless user_data.nil?
63:         params["InstanceType"]                      = options[:instance_type] unless options[:instance_type].nil?
64:         params["Placement.AvailabilityZone"]        = options[:availability_zone] unless options[:availability_zone].nil?
65:         params["KernelId"]                          = options[:kernel_id] unless options[:kernel_id].nil?
66:         params["RamdiskId"]                         = options[:ramdisk_id] unless options[:ramdisk_id].nil?
67:         params["Monitoring.Enabled"]                = options[:monitoring_enabled].to_s unless options[:monitoring_enabled].nil?
68:         params["SubnetId"]                          = options[:subnet_id] unless options[:subnet_id].nil?
69:         params["DisableApiTermination"]             = options[:disable_api_termination].to_s unless options[:disable_api_termination].nil?
70:         params["InstanceInitiatedShutdownBehavior"] = options[:instance_initiated_shutdown_behavior] unless options[:instance_initiated_shutdown_behavior].nil?
71: 
72:         return response_generator(:action => "RunInstances", :params => params)
73:       end