lib/fog/compute/terremark/requests/get_vdc.rb
module Fog
module Compute
class Terremark
class Real
# Get details of a vdc
#
# ==== Parameters
# * vdc_id<~Integer> - Id of vdc to lookup
#
# ==== Returns
# * response<~Excon::Response>:
# * body<~Hash>:
# FIXME
# * "CatalogItems"<~Array>
# * "href"<~String> - linke to item
# * "name"<~String> - name of item
# * "type"<~String> - type of item
# * "description"<~String> - Description of catalog
# * "name"<~String> - Name of catalog
def get_vdc(vdc_id)
request(
:expects => 200,
:method => "GET",
:parser => Fog::Parsers::Terremark::GetVdc.new,
:path => "vdc/#{vdc_id}"
)
end
end
class Mock
def get_vdc(vdc_id)
vdc_id = vdc_id.to_i
response = Excon::Response.new
vdc = self.data[:organizations].map { |org| org[:vdcs] }.flatten.find { |vdc| vdc[:id] == vdc_id }
if vdc
body = {
"name" => vdc[:name],
"href" => "#{@base_url}/vdc/#{vdc[:id]}",
"StorageCapacity" => {},
"ComputeCapacity" => {
"InstantiatedVmsQuota" => {},
"DeployedVmsQuota" => {},
"Cpu" => {},
"Memory" => {}
},
"ResourceEntities" => [],
"AvailableNetworks" => [],
"links" => []
}
case self
when Fog::Terremark::Ecloud::Mock
body["StorageCapacity"] = { "Units" => "bytes * 10^9" }
vdc[:storage].each { |k,v| body["StorageCapacity"][k.to_s.capitalize] = v.to_s }
body["ComputeCapacity"] = {
"InstantiatedVmsQuota" => {
"Limit" => "-1",
"Used" => "-1"
},
"DeployedVmsQuota" => {
"Limit" => "-1",
"Used" => "-1"
},
"Cpu" => {
"Units" => "hz * 10^6"
},
"Memory" => {
"Units" => "bytes * 2^20"
}
}
[:cpu, :memory].each do |key|
vdc[key].each { |k,v| body["ComputeCapacity"][key.to_s.capitalize][k.to_s.capitalize] = v.to_s }
end
body["links"] << {
"name" => "Public IPs",
"href" => "#{@base_url}/extensions/vdc/#{vdc[:id]}/publicIps",
"rel" => "down",
"type" => "application/vnd.tmrk.ecloud.publicIpsList+xml"
}
body["links"] << {
"name" => "Internet Services",
"href" => "#{@base_url}/extensions/vdc/#{vdc[:id]}/internetServices",
"rel" => "down",
"type" => "application/vnd.tmrk.ecloud.internetServicesList+xml"
}
body["links"] << {
"name" => "Firewall Access List",
"href" => "#{@base_url}/extensions/vdc/#{vdc[:id]}/firewallAcls",
"rel" => "down",
"type" => "application/vnd.tmrk.ecloud.firewallAclsList+xml"
}
when Fog::Terremark::Vcloud::Mock
body["links"] << {
"name" => "Public IPs",
"href" => "#{@base_url}/vdc/#{vdc[:id]}/publicIps",
"rel" => "down",
"type" => "application/xml"
}
body["links"] << {
"name" => "Internet Services",
"href" => "#{@base_url}/vdc/#{vdc[:id]}/internetServices",
"rel" => "down",
"type" => "application/xml"
}
end
vdc[:vms].each do |vm|
body["ResourceEntities"] << {
"name" => vm[:name],
"href" => "#{@base_url}/vapp/#{vm[:id]}",
"type" => "application/vnd.vmware.vcloud.vApp+xml"
}
end
vdc[:networks].each do |network|
body["AvailableNetworks"] << {
"name" => network[:name],
"href" => "#{@base_url}/network/#{network[:id]}",
"type" => "application/vnd.vmware.vcloud.network+xml"
}
end
body["links"] << {
"name" => vdc[:name],
"href" => "#{@base_url}/vdc/#{vdc[:id]}/catalog",
"rel" => "down",
"type" => "application/vnd.vmware.vcloud.catalog+xml"
}
response.status = 200
response.body = body
response.headers = Fog::Compute::Terremark::Mock.headers(response.body, "application/vnd.vmware.vcloud.org+xml")
else
response.status = Fog::Compute::Terremark::Mock.unathorized_status
response.headers = Fog::Compute::Terremark::Mock.error_headers
end
response
end
end
end
end
end