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:
parent
1fc65e8d98
commit
f29c7b18ed
2 changed files with 55 additions and 4 deletions
|
@ -55,6 +55,27 @@ module Fog
|
|||
super
|
||||
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
|
||||
requires :image_id, :flavor_id, :price
|
||||
|
||||
|
@ -83,10 +104,6 @@ module Fog
|
|||
merge_attributes( spot_instance_request )
|
||||
end
|
||||
|
||||
def ready?
|
||||
state == 'active'
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -34,6 +34,40 @@ module Fog
|
|||
)
|
||||
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)
|
||||
if spot_request_id
|
||||
self.class.new(:connection => connection).all('spot-instance-request-id' => spot_request_id).first
|
||||
|
|
Loading…
Add table
Reference in a new issue