diff --git a/lib/fog/google/examples/network.rb b/lib/fog/google/examples/network.rb new file mode 100644 index 000000000..b7ad0c379 --- /dev/null +++ b/lib/fog/google/examples/network.rb @@ -0,0 +1,18 @@ +def test + connection = Fog::Compute.new({ :provider => "Google" }) + + # we create a new private network + connection.insert_network('my-private-network','10.240.0.0/16') + + server = connection.servers.bootstrap(defaults = { + :name => "fog-smoke-test-#{Time.now.to_i}", + :image_name => "debian-7-wheezy-v20130522", + :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"), + :network => 'my-private-network', + :external_ip => false, + :user => ENV['USER'], + }) +end diff --git a/lib/fog/google/models/compute/server.rb b/lib/fog/google/models/compute/server.rb index 7d5206662..1b15dd4ce 100644 --- a/lib/fog/google/models/compute/server.rb +++ b/lib/fog/google/models/compute/server.rb @@ -10,6 +10,8 @@ module Fog identity :name attribute :image_name, :aliases => 'image' attribute :network_interfaces, :aliases => 'networkInterfaces' + attribute :network, :aliases => 'network' + attribute :external_ip, :aliases => 'externalIP' attribute :state, :aliases => 'status' attribute :zone_name, :aliases => 'zone' attribute :machine_type, :aliases => 'machineType' @@ -28,11 +30,13 @@ module Fog def public_ip_address ip = nil - if self.network_interfaces + if self.network_interfaces.respond_to? :each self.network_interfaces.each do |netif| - netif["accessConfigs"].each do |access_config| - if access_config["name"] == "External NAT" - ip = access_config['natIP'] + if netif["accessConfigs"].respond_to? :each + netif["accessConfigs"].each do |access_config| + if access_config["name"] == "External NAT" + ip = access_config['natIP'] + end end end end @@ -41,6 +45,14 @@ module Fog ip end + def private_ip_address + ip = nil + if self.network_interfaces.respond_to? :first + ip = self.network_interfaces.first['networkIP'] + end + ip + end + def ready? self.state == RUNNING end @@ -77,6 +89,8 @@ module Fog 'image' => image_name, 'machineType' => machine_type, 'networkInterfaces' => network_interfaces, + 'network' => network, + 'externalIp' => external_ip, 'disks' => disks, 'kernel' => kernel, 'metadata' => metadata diff --git a/lib/fog/google/requests/compute/insert_server.rb b/lib/fog/google/requests/compute/insert_server.rb index f65c98269..2266dafb4 100644 --- a/lib/fog/google/requests/compute/insert_server.rb +++ b/lib/fog/google/requests/compute/insert_server.rb @@ -35,16 +35,29 @@ module Fog body_object['image'] = @image_url end body_object['machineType'] = @api_url + @project + "/zones/#{zone_name}/machineTypes/#{options.delete 'machineType'}" - networkInterfaces = [] - if @default_network - networkInterfaces << { - 'network' => @api_url + @project + "/global/networks/#{@default_network}", - 'accessConfigs' => [ - {'type' => 'ONE_TO_ONE_NAT', - 'name' => 'External NAT'} - ] - } + network = nil + if options.has_key? 'network' + network = options.delete 'network' + elsif @default_network + network = @default_network end + + # ExternalIP is default value for server creation + if options.has_key? 'externalIp' + external_ip = options.delete 'externalIp' + else + external_ip = true + end + + networkInterfaces = [] + if ! network.nil? + networkInterface = { 'network' => @api_url + @project + "/global/networks/#{network}" } + if external_ip + networkInterface['accessConfigs'] = [{'type' => 'ONE_TO_ONE_NAT', 'name' => 'External NAT'}] + end + networkInterfaces << networkInterface + end + # TODO: add other networks body_object['networkInterfaces'] = networkInterfaces