def run_instance_options
raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
requires :image_id
options = {
'BlockDeviceMapping' => block_device_mapping,
'NetworkInterfaces' => network_interfaces,
'ClientToken' => client_token,
'DisableApiTermination' => disable_api_termination,
'EbsOptimized' => ebs_optimized,
'IamInstanceProfile.Arn' => @iam_instance_profile_arn,
'IamInstanceProfile.Name' => @iam_instance_profile_name,
'InstanceInitiatedShutdownBehavior' => instance_initiated_shutdown_behavior,
'InstanceType' => flavor_id,
'KernelId' => kernel_id,
'KeyName' => key_name,
'Monitoring.Enabled' => monitoring,
'Placement.AvailabilityZone' => availability_zone,
'Placement.GroupName' => placement_group,
'Placement.Tenancy' => tenancy,
'PrivateIpAddress' => private_ip_address,
'RamdiskId' => ramdisk_id,
'SecurityGroup' => groups,
'SecurityGroupId' => security_group_ids,
'SubnetId' => subnet_id,
'UserData' => user_data,
}
options.delete_if {|key, value| value.nil?}
if subnet_id
options.delete('SecurityGroup')
if associate_public_ip
options['NetworkInterface.0.DeviceIndex'] = 0
options['NetworkInterface.0.AssociatePublicIpAddress'] = associate_public_ip
options['NetworkInterface.0.SubnetId'] = options['SubnetId']
options.delete('SubnetId')
if options['SecurityGroupId'].kind_of?(Array)
options['SecurityGroupId'].each {|id|
options["NetworkInterface.0.SecurityGroupId.#{options['SecurityGroupId'].index(id)}"] = id
}
else
options["NetworkInterface.0.SecurityGroupId.0"] = options['SecurityGroupId']
end
options.delete('SecurityGroupId')
if private_ip_address
options.delete('PrivateIpAddress')
options['NetworkInterface.0.PrivateIpAddress'] = private_ip_address
end
end
else
options.delete('SubnetId')
end
options
end