diff --git a/lib/fog/google/compute.rb b/lib/fog/google/compute.rb index bcd5c4229..cb550c0ca 100644 --- a/lib/fog/google/compute.rb +++ b/lib/fog/google/compute.rb @@ -136,7 +136,7 @@ module Fog end - RUNNING_STATE = 'RUNNING' + RUNNING = 'RUNNING' end end diff --git a/lib/fog/google/models/compute/server.rb b/lib/fog/google/models/compute/server.rb index e73bbbe31..8408fd4d5 100644 --- a/lib/fog/google/models/compute/server.rb +++ b/lib/fog/google/models/compute/server.rb @@ -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 diff --git a/lib/fog/google/models/compute/servers.rb b/lib/fog/google/models/compute/servers.rb index eb0261ecc..d3983d8ad 100644 --- a/lib/fog/google/models/compute/servers.rb +++ b/lib/fog/google/models/compute/servers.rb @@ -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 diff --git a/lib/fog/google/requests/compute/insert_server.rb b/lib/fog/google/requests/compute/insert_server.rb index a9ace5e65..a646a86ee 100644 --- a/lib/fog/google/requests/compute/insert_server.rb +++ b/lib/fog/google/requests/compute/insert_server.rb @@ -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', + }] }] }