def bootstrap(new_attributes = {})
spot_request = connection.spot_requests.new(new_attributes)
unless new_attributes[:key_name]
name = Fog.respond_to?(:credential) && Fog.credential || :default
unless spot_request.key_pair = connection.key_pairs.get("fog_#{name}")
spot_request.key_pair = connection.key_pairs.create(
:name => "fog_#{name}",
:public_key => spot_request.public_key
)
end
end
security_group = connection.security_groups.get(spot_request.groups.first)
authorized = security_group.ip_permissions.detect do |ip_permission|
ip_permission['ipRanges'].first && ip_permission['ipRanges'].first['cidrIp'] == '0.0.0.0/0' &&
ip_permission['fromPort'] == 22 &&
ip_permission['ipProtocol'] == 'tcp' &&
ip_permission['toPort'] == 22
end
unless authorized
security_group.authorize_port_range(22..22)
end
spot_request.save
Fog.wait_for { spot_request.reload.ready? rescue nil }
server = connection.servers.get(spot_request.instance_id)
if spot_request.tags
for key, value in spot_request.tags
connection.tags.create(
:key => key,
:resource_id => spot_request.instance_id,
:value => value
)
end
end
server.wait_for { ready? }
server.setup(:key_data => [spot_request.private_key])
server
end