1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/aws/models/compute/servers.rb
2010-09-15 17:31:45 -07:00

70 lines
2 KiB
Ruby

require 'fog/collection'
require 'fog/aws/models/compute/server'
module Fog
module AWS
class Compute
class Servers < Fog::Collection
attribute :server_id
model Fog::AWS::Compute::Server
def initialize(attributes)
@server_id ||= []
super
end
def all(server_id = @server_id)
@server_id = server_id
data = connection.describe_instances(server_id).body
load(
data['reservationSet'].map do |reservation|
reservation['instancesSet'].map do |instance|
instance.merge(:groups => reservation['groupSet'])
end
end.flatten
)
end
def bootstrap(new_attributes = {})
begin
tmp_key_pair = connection.key_pairs.create(:name => "tmp_#{Time.now.to_f.to_s.gsub('.','')}")
server = create(new_attributes.merge(:key_pair => tmp_key_pair))
# make sure port 22 is open in the first security group
security_group = connection.security_groups.get(server.groups.first)
ip_permission = 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 ip_permission
security_group.authorize_port_range(22..22)
end
server.wait_for { ready? }
server.setup(:key_data => [tmp_key_pair.material])
ensure
if tmp_key_pair
tmp_key_pair.destroy
end
end
server
end
def get(server_id)
if server_id
all(server_id).first
end
rescue Fog::Errors::NotFound
nil
end
end
end
end
end