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

Patch from a fellow googler

This commit is contained in:
Nat Welch 2013-06-26 17:53:53 -07:00
parent 3fa46a9e6b
commit 7814ae55e8
4 changed files with 23 additions and 34 deletions

View file

@ -136,7 +136,7 @@ module Fog
end
RUNNING_STATE = 'RUNNING'
RUNNING = 'RUNNING'
end
end

View file

@ -25,11 +25,15 @@ module Fog
end
def public_ip_address
if self.network_interfaces and self.network_interfaces.count
self.network_interfaces[0]["networkIP"]
else
nil
ip = nil
self.network_interfaces.each do |netif|
netif["accessConfigs"].each do |access_config|
if access_config["name"] == "External NAT"
ip = access_config['natIP']
end
end
end
ip
end
def metadata
@ -37,17 +41,12 @@ module Fog
service.set_metadata(self.name, self.zone, {k => v})
return self.metadata
end
data = service.get_server(self.name, self.zone).body
data['metadata'] || {}
end
def ready?
data = service.get_server(self.name, self.zone).body
data['zone_name'] = self.zone
self.merge_attributes(data)
self.state == RUNNING_STATE
def running?
self.state == RUNNING
end
def zone
@ -60,6 +59,11 @@ module Fog
end
end
def reload
data = service.get_server(self.name, self.zone).body
self.merge_attributes(data)
end
def save
requires :name
requires :image_name
@ -71,9 +75,6 @@ module Fog
image_name,
zone_name,
machine_type)
data = service.get_server(self.name, self.zone_name).body
service.servers.merge_attributes(data)
end
def setup(credentials = {})
@ -84,18 +85,6 @@ module Fog
retry
end
def sshable?(options={})
# Then check if we have ssh keys set up.
if ready? and not metadata['sshKeys']
setup
end
# Now make sure everything is ok.
ready? && !public_ip_address.nil? && public_key && metadata['sshKeys'] && !!Timeout::timeout(8) { ssh('pwd', options) }
rescue SystemCallError, Net::SSH::AuthenticationFailed, Timeout::Error, ArgumentError
false
end
end
end
end

View file

@ -44,18 +44,14 @@ module Fog
def bootstrap(new_attributes = {})
defaults = {
:name => "fog-#{Time.now.to_i}",
:image_name => "debian-7-wheezy-v20130522",
:image_name => "debian-7-wheezy-v20130617",
:machine_type => "n1-standard-1",
:zone_name => "us-central1-a",
:private_key_path => File.expand_path("~/.ssh/id_rsa"),
:public_key_path => File.expand_path("~/.ssh/id_rsa.pub"),
}
server = create(defaults.merge(new_attributes))
# Waits for 600 seconds.
server.wait_for { sshable? }
server.wait_for { running? }
server
end
end

View file

@ -35,7 +35,11 @@ module Fog
'image' => @image_url,
'machineType' => @api_url + @project + "/zones/#{zone_name}/machineTypes/#{machine_name}",
'networkInterfaces' => [{
'network' => @api_url + @project + "/global/networks/#{network_name}"
'network' => @api_url + @project + "/global/networks/#{network_name}",
'accessConfigs' => [{
'type' => 'ONE_TO_ONE_NAT',
'name' => 'External NAT',
}]
}]
}