diff --git a/lib/fog/google/compute.rb b/lib/fog/google/compute.rb index 2e4adb619..7c916a613 100644 --- a/lib/fog/google/compute.rb +++ b/lib/fog/google/compute.rb @@ -36,6 +36,7 @@ module Fog request :get_machine_type request :get_network request :get_zone + request :get_region request :get_snapshot request :get_global_operation request :get_region_operation @@ -110,6 +111,9 @@ module Fog model :zone collection :zones + model :region + collection :regions + model :http_health_check collection :http_health_checks diff --git a/lib/fog/google/models/compute/region.rb b/lib/fog/google/models/compute/region.rb new file mode 100755 index 000000000..b4e4c6f92 --- /dev/null +++ b/lib/fog/google/models/compute/region.rb @@ -0,0 +1,34 @@ +require 'fog/core/model' + +module Fog + module Compute + class Google + + ## + # Represents a Region resource + # + # @see https://developers.google.com/compute/docs/reference/latest/regions + class Region < Fog::Model + identity :name + + attribute :kind + attribute :id + attribute :creation_timestamp, :aliases => 'creationTimestamp' + attribute :deprecated + attribute :description + attribute :quotas + attribute :self_link, :aliases => 'selfLink' + attribute :status + attribute :zones + + DOWN_STATE = 'DOWN' + UP_STATE = 'UP' + + def up? + self.status == UP_STATE + end + end + + end + end +end diff --git a/lib/fog/google/models/compute/regions.rb b/lib/fog/google/models/compute/regions.rb new file mode 100755 index 000000000..9684cbfcf --- /dev/null +++ b/lib/fog/google/models/compute/regions.rb @@ -0,0 +1,27 @@ +require 'fog/core/collection' +require 'fog/google/models/compute/region' + +module Fog + module Compute + class Google + + class Regions < Fog::Collection + model Fog::Compute::Google::Region + + def all + data = service.list_regions.body + load(data['items'] || []) + end + + def get(identity) + if region = service.get_region(identity).body + new(region) + end + rescue Fog::Errors::NotFound + nil + end + end + + end + end +end diff --git a/lib/fog/google/requests/compute/get_region.rb b/lib/fog/google/requests/compute/get_region.rb new file mode 100755 index 000000000..9a222c529 --- /dev/null +++ b/lib/fog/google/requests/compute/get_region.rb @@ -0,0 +1,26 @@ +module Fog + module Compute + class Google + + class Mock + def get_region(identity) + Fog::Mock.not_implemented + end + end + + class Real + def get_region(identity) + api_method = @compute.regions.get + parameters = { + 'project' => @project, + 'region' => identity.split('/')[-1], + } + + result = self.build_result(api_method, parameters) + response = self.build_response(result) + end + end + + end + end +end