diff --git a/lib/fog/ecloud/models/compute/compute_pool.rb b/lib/fog/ecloud/models/compute/compute_pool.rb new file mode 100644 index 000000000..fdb35f080 --- /dev/null +++ b/lib/fog/ecloud/models/compute/compute_pool.rb @@ -0,0 +1,19 @@ +module Fog + module Compute + class Ecloud + class ComputePool < Fog::Ecloud::Model + + identity :href, :aliases => :Href + + ignore_attributes :xmlns, :xmlns_i + + attribute :name, :aliases => :Name + attribute :id, :aliases => :Id + attribute :href, :aliases => :Href + attribute :state, :aliases => :State + attribute :is_default, :aliases => :IsDefault + + end + end + end +end diff --git a/lib/fog/ecloud/models/compute/compute_pools.rb b/lib/fog/ecloud/models/compute/compute_pools.rb new file mode 100644 index 000000000..75bd41cd6 --- /dev/null +++ b/lib/fog/ecloud/models/compute/compute_pools.rb @@ -0,0 +1,36 @@ +require 'fog/ecloud/models/compute/compute_pool' + +module Fog + module Compute + class Ecloud + class ComputePools < Fog::Ecloud::Collection + + undef_method :create + + attribute :href, :aliases => :Href + + model Fog::Compute::Ecloud::ComputePool + + #get_request :get_compute_pool + #vcloud_type "application/vnd.tmrk.ecloud.publicIp+xml" + #all_request lambda { |compute_pools| public_ips.connection.get_public_ips(public_ips.href) } + + def all + check_href!(:message => "the Compute Pool href of the Vdc you want to enumerate") + if data = connection.get_compute_pools(href).body[:ComputePool] + load(data) + end + end + + def get(uri) + if data = connection.get_compute_pool(uri) + new(data.body) + end + rescue Fog::Errors::NotFound + nil + end + + end + end + end +end diff --git a/lib/fog/ecloud/models/compute/vdc.rb b/lib/fog/ecloud/models/compute/vdc.rb index 00cd5077e..26c566ff3 100644 --- a/lib/fog/ecloud/models/compute/vdc.rb +++ b/lib/fog/ecloud/models/compute/vdc.rb @@ -56,6 +56,12 @@ module Fog @firewall_acls ||= collection_based_on_type("application/vnd.tmrk.ecloud.firewallAclsList+xml") end + def compute_pools + @compute_pools ||= Fog::Compute::Ecloud::ComputePools. + new( :connection => connection, + :href => href + "/computePools" ) + end + private def collection_based_on_type(type, klass = nil) diff --git a/lib/fog/ecloud/requests/compute/get_compute_pool.rb b/lib/fog/ecloud/requests/compute/get_compute_pool.rb new file mode 100644 index 000000000..8e403b3ad --- /dev/null +++ b/lib/fog/ecloud/requests/compute/get_compute_pool.rb @@ -0,0 +1,36 @@ +module Fog + module Compute + class Ecloud + + class Real + basic_request :get_compute_pool + end + + class Mock + # + #Based off of: + #http://support.theenterprisecloud.com/kb/default.asp?id=567&Lang=1&SID= + # + + def get_compute_pool(compute_pool_uri) + compute_pool_uri = ensure_unparsed(compute_pool_uri) + + if compute_pool = mock_data.compute_pool_from_href(compute_pool_uri) + xml = Builder::XmlMarkup.new + mock_it 200, + xml.ComputePool(:xmlns => "urn:tmrk:eCloudExtensions-2.0", :"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance") { + xml.Id compute_pool.object_id + xml.Href compute_pool.href + xml.Name compute_pool.name + xml.State compute_pool.state + xml.IsDefault compute_pool.is_default + }, { 'Content-Type' => 'application/vnd.tmrk.ecloud.computePoolsList+xml' } + else + mock_error 200, "401 Unauthorized" + end + end + + end + end + end +end diff --git a/lib/fog/ecloud/requests/compute/get_compute_pools.rb b/lib/fog/ecloud/requests/compute/get_compute_pools.rb new file mode 100644 index 000000000..72586b575 --- /dev/null +++ b/lib/fog/ecloud/requests/compute/get_compute_pools.rb @@ -0,0 +1,40 @@ +module Fog + module Compute + class Ecloud + + class Real + basic_request :get_compute_pools + end + + class Mock + # + # Based off of: + # http://support.theenterprisecloud.com/kb/default.asp?id=577&Lang=1&SID= + # + + def get_compute_pools(compute_pools_uri) + compute_pools_uri = ensure_unparsed(compute_pools_uri) + + if compute_pool_collection = mock_data.compute_pool_collection_from_href(compute_pools_uri) + xml = Builder::XmlMarkup.new + mock_it 200, + xml.ComputePools { + compute_pool_collection.items.each do |cp| + xml.ComputePool { + xml.Id cp.object_id + xml.Href cp.href + xml.Name cp.name + xml.State cp.state + xml.IsDefault cp.is_default + } + end + }, { 'Content-Type' => 'application/vnd.tmrk.ecloud.computePoolsList+xml'} + else + mock_error 200, "401 Unauthorized" + end + end + + end + end + end +end