1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

[aws|compute] spot request fixes

adds destroy to spot request model
adds bootstrap to spot requests collection
This commit is contained in:
geemus 2011-11-01 11:17:25 -05:00
parent 1fc65e8d98
commit f29c7b18ed
2 changed files with 55 additions and 4 deletions

View file

@ -55,6 +55,27 @@ module Fog
super super
end end
def destroy
requires :id
connection.cancel_spot_instance_requests(id)
true
end
def key_pair
requires :key_name
connection.key_pairs.all(key_name).first
end
def key_pair=(new_keypair)
self.key_name = new_keypair && new_keypair.name
end
def ready?
state == 'active'
end
def save def save
requires :image_id, :flavor_id, :price requires :image_id, :flavor_id, :price
@ -83,10 +104,6 @@ module Fog
merge_attributes( spot_instance_request ) merge_attributes( spot_instance_request )
end end
def ready?
state == 'active'
end
end end
end end
end end

View file

@ -34,6 +34,40 @@ module Fog
) )
end end
def bootstrap(new_attributes = {})
spot_request = connection.spot_requests.new(new_attributes)
unless new_attributes[:key_name]
# first or create fog_#{credential} keypair
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 => server.public_key
)
end
end
# make sure port 22 is open in the first security group
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
spot_request.wait_for { ready? }
server = connection.servers.get(spot_request.instance_id)
server.wait_for { ready? }
server.setup(:key_data => [server.private_key])
spot_request
end
def get(spot_request_id) def get(spot_request_id)
if spot_request_id if spot_request_id
self.class.new(:connection => connection).all('spot-instance-request-id' => spot_request_id).first self.class.new(:connection => connection).all('spot-instance-request-id' => spot_request_id).first