Skip to content

Commit

Permalink
Merge pull request #2842 from frodenas/gce_networks
Browse files Browse the repository at this point in the history
[google|compute] Add Networks support
  • Loading branch information
icco committed Apr 14, 2014
2 parents 57c86a0 + 8ed9135 commit 7adb9de
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 4 deletions.
3 changes: 3 additions & 0 deletions lib/fog/google/compute.rb
Expand Up @@ -121,6 +121,9 @@ class Google < Fog::Service
model :firewall
collection :firewalls

model :network
collection :networks

module Shared
attr_reader :project, :api_version

Expand Down
45 changes: 45 additions & 0 deletions lib/fog/google/models/compute/network.rb
@@ -0,0 +1,45 @@
require 'fog/core/model'

module Fog
module Compute
class Google

##
# Represents a Network resource
#
# @see https://developers.google.com/compute/docs/reference/latest/networks
class Network < Fog::Model
identity :name

attribute :kind
attribute :id
attribute :ipv4_range, :aliases => 'IPv4Range'
attribute :creation_timestamp, :aliases => 'creationTimestamp'
attribute :description
attribute :gateway_ipv4, :aliases => 'gatewayIPv4'
attribute :self_link, :aliases => 'selfLink'

def save
requires :identity, :ipv4_range

data = service.insert_network(identity, self.ipv4_range, self.attributes)
operation = Fog::Compute::Google::Operations.new(:service => service).get(data.body['name'])
operation.wait_for { !pending? }
reload
end

def destroy(async=true)
requires :identity

data = service.delete_network(identity)
operation = Fog::Compute::Google::Operations.new(:service => service).get(data.body['name'])
unless async
operation.wait_for { ready? }
end
operation
end
end

end
end
end
27 changes: 27 additions & 0 deletions lib/fog/google/models/compute/networks.rb
@@ -0,0 +1,27 @@
require 'fog/core/collection'
require 'fog/google/models/compute/network'

module Fog
module Compute
class Google

class Networks < Fog::Collection
model Fog::Compute::Google::Network

def all
data = service.list_networks.body
load(data['items'] || [])
end

def get(identity)
if network = service.get_network(identity).body
new(network)
end
rescue Fog::Errors::NotFound
nil
end
end

end
end
end
10 changes: 6 additions & 4 deletions lib/fog/google/requests/compute/insert_network.rb
Expand Up @@ -4,15 +4,15 @@ class Google

class Mock

def insert_network(network_name, ip_range)
def insert_network(network_name, ip_range, options = {})
Fog::Mock.not_implemented
end

end

class Real

def insert_network(network_name, ip_range)
def insert_network(network_name, ip_range, options = {})
api_method = @compute.networks.insert
parameters = {
'project' => @project,
Expand All @@ -22,8 +22,10 @@ def insert_network(network_name, ip_range)
'IPv4Range' => ip_range
}

result = self.build_result(api_method, parameters,
body_object=body_object)
body_object['description'] = options[:description] if options[:description]
body_object['gatewayIPv4'] = options[:gateway_ipv4] if options[:gateway_ipv4]

result = self.build_result(api_method, parameters, body_object)
response = self.build_response(result)
end

Expand Down

0 comments on commit 7adb9de

Please sign in to comment.