lib/fog/vcloud_director/requests/compute/get_vdc.rb in fog-maestrodev-1.15.0.20130927082724 vs lib/fog/vcloud_director/requests/compute/get_vdc.rb in fog-maestrodev-1.18.0.20131111203459
- old
+ new
@@ -1,80 +1,100 @@
module Fog
module Compute
class VcloudDirector
class Real
- def get_vdc(vdc_id)
- request(
- :expects => 200,
- :method => 'GET',
- :parser => Fog::ToHashDocument.new,
- :path => "vdc/#{vdc_id}"
+ # Retrieve a vDC.
+ #
+ # @param [String] id Object identifier of the vDC.
+ # @return [Excon::Response]
+ # * body<~Hash>:
+ #
+ # @raise [Fog::Compute::VcloudDirector::Forbidden]
+ #
+ # @see http://pubs.vmware.com/vcd-51/topic/com.vmware.vcloud.api.reference.doc_51/doc/operations/GET-Vdc.html
+ # @since vCloud API version 0.9
+ def get_vdc(id)
+ response = request(
+ :expects => 200,
+ :idempotent => true,
+ :method => 'GET',
+ :parser => Fog::ToHashDocument.new,
+ :path => "vdc/#{id}"
)
+ ensure_list! response.body, :ResourceEntities, :ResourceEntity
+ ensure_list! response.body, :AvailableNetworks, :Network
+ ensure_list! response.body, :VdcStorageProfiles, :VdcStorageProfile
+ response
end
end
class Mock
def get_vdc(vdc_id)
- vdc = data[:vdc]
- raise Excon::Errors::NotFound unless vdc_id == vdc[:uuid]
+ response = Excon::Response.new
+ unless vdc = data[:vdcs][vdc_id]
+ raise Fog::Compute::VcloudDirector::Forbidden.new(
+ "No access to entity \"com.vmware.vcloud.entity.vdc:#{vdc_id}\"."
+ )
+ end
+
body =
{:xmlns=>xmlns,
:xmlns_xsi=>xmlns_xsi,
:status=>"1",
:name=>vdc[:name],
- :id=>"urn:vcloud:vdc:#{vdc[:uuid]}",
+ :id=>"urn:vcloud:vdc:#{vdc_id}",
:type=>"application/vnd.vmware.vcloud.vdc+xml",
- :href=>make_href("vdc/#{vdc[:uuid]}"),
+ :href=>make_href("vdc/#{vdc_id}"),
:xsi_schemaLocation=>xsi_schema_location,
:Link=>
[{:rel=>"up",
:type=>"application/vnd.vmware.vcloud.org+xml",
:href=>make_href("org/#{data[:org][:uuid]}")},
{:rel=>"down",
:type=>"application/vnd.vmware.vcloud.metadata+xml",
- :href=>make_href("vdc/#{vdc[:uuid]}/metadata")},
+ :href=>make_href("vdc/#{vdc_id}/metadata")},
{:rel=>"add",
:type=>"application/vnd.vmware.vcloud.uploadVAppTemplateParams+xml",
:href=>
- make_href("vdc/#{vdc[:uuid]}/action/uploadVAppTemplate")},
+ make_href("vdc/#{vdc_id}/action/uploadVAppTemplate")},
{:rel=>"add",
:type=>"application/vnd.vmware.vcloud.media+xml",
- :href=>make_href("vdc/#{vdc[:uuid]}/media")},
+ :href=>make_href("vdc/#{vdc_id}/media")},
{:rel=>"add",
:type=>
"application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml",
:href=>
- make_href("vdc/#{vdc[:uuid]}/action/instantiateVAppTemplate")},
+ make_href("vdc/#{vdc_id}/action/instantiateVAppTemplate")},
{:rel=>"add",
:type=>"application/vnd.vmware.vcloud.cloneVAppParams+xml",
- :href=>make_href("vdc/#{vdc[:uuid]}/action/cloneVApp")},
+ :href=>make_href("vdc/#{vdc_id}/action/cloneVApp")},
{:rel=>"add",
:type=>"application/vnd.vmware.vcloud.cloneVAppTemplateParams+xml",
:href=>
- make_href("vdc/#{vdc[:uuid]}/action/cloneVAppTemplate")},
+ make_href("vdc/#{vdc_id}/action/cloneVAppTemplate")},
{:rel=>"add",
:type=>"application/vnd.vmware.vcloud.cloneMediaParams+xml",
- :href=>make_href("vdc/#{vdc[:uuid]}/action/cloneMedia")},
+ :href=>make_href("vdc/#{vdc_id}/action/cloneMedia")},
{:rel=>"add",
:type=>"application/vnd.vmware.vcloud.captureVAppParams+xml",
- :href=>make_href("vdc/#{vdc[:uuid]}/action/captureVApp")},
+ :href=>make_href("vdc/#{vdc_id}/action/captureVApp")},
{:rel=>"add",
:type=>"application/vnd.vmware.vcloud.composeVAppParams+xml",
- :href=>make_href("vdc/#{vdc[:uuid]}/action/composeVApp")},
+ :href=>make_href("vdc/#{vdc_id}/action/composeVApp")},
{:rel=>"add",
:type=>"application/vnd.vmware.vcloud.diskCreateParams+xml",
- :href=>make_href("vdc/#{vdc[:uuid]}/disk")},
+ :href=>make_href("vdc/#{vdc_id}/disk")},
{:rel=>"edgeGateways",
:type=>"application/vnd.vmware.vcloud.query.records+xml",
- :href=>make_href("admin/vdc/#{vdc[:uuid]}/edgeGateways")},
+ :href=>make_href("admin/vdc/#{vdc_id}/edgeGateways")},
{:rel=>"add",
:type=>"application/vnd.vmware.vcloud.orgVdcNetwork+xml",
- :href=>make_href("admin/vdc/#{vdc[:uuid]}/networks")},
+ :href=>make_href("admin/vdc/#{vdc_id}/networks")},
{:rel=>"orgVdcNetworks",
:type=>"application/vnd.vmware.vcloud.query.records+xml",
- :href=>make_href("admin/vdc/#{vdc[:uuid]}/networks")}],
+ :href=>make_href("admin/vdc/#{vdc_id}/networks")}],
:Description=>vdc[:description]||'',
:AllocationModel=>"AllocationVApp",
:ComputeCapacity=>
{:Cpu=>
{:Units=>"MHz",
@@ -99,55 +119,39 @@
:NetworkQuota=>"20",
:UsedNetworkCount=>"0",
:VmQuota=>"100",
:IsEnabled=>"true"}
- # Emulating Fog::ToHashDocument:
- if data[:networks].size == 1
- body[:AvailableNetworks][:Network] =
- [{:type=>"application/vnd.vmware.vcloud.network+xml",
- :name=>data[:networks].first[:name],
- :href=>make_href("network/#{data[:networks].first[:name]}")}]
- else
- body[:AvailableNetworks][:Network] = data[:networks].map do |network|
+ body[:ResourceEntities][:ResourceEntity] =
+ data[:catalog_items].map do |id, item|
+ {:type=>"application/vnd.vmware.vcloud.#{item[:type]}+xml",
+ :name=>item[:name],
+ :href=>make_href("#{item[:type]}/#{item[:type]}-#{id}")}
+ end
+
+ body[:AvailableNetworks][:Network] =
+ data[:networks].map do |id, network|
{:type=>"application/vnd.vmware.vcloud.network+xml",
:name=>network[:name],
- :href=>make_href("network/#{network[:name]}")}
- end
+ :href=>make_href("network/#{id}")}
end
- # Emulating Fog::ToHashDocument:
- if data[:catalog_items].size == 1
- item_type = data[:catalog_items].first[:type]
- body[:ResourceEntities][:ResourceEntity] =
- {:type=>"application/vnd.vmware.vcloud.#{item_type}+xml",
- :name=>data[:catalog_items].first[:name],
- :href=>
- make_href("#{item_type}/#{item_type}-#{data[:catalog_items].first[:uuid]}")}
- else
- body[:ResourceEntities][:ResourceEntity] = data[:catalog_items].map do |catalog_item|
- item_type = catalog_item[:type]
- {:type=>"application/vnd.vmware.vcloud.#{item_type}+xml",
- :name=>catalog_item[:name],
- :href=>
- make_href("#{item_type}/#{item_type}-#{catalog_item[:uuid]}")}
- end
- end
-
if api_version.to_f >= 5.1
- # TODO
- #body[:VdcStorageProfiles] =
- # {:VdcStorageProfile=>
- # [{:type=>"application/vnd.vmware.vcloud.vdcStorageProfile+xml",
- # :name=>profile[:name],
- # :href=>make_href("vdcStorageProfile/#{profile[:uuid]}")}]}
+ body[:VdcStorageProfiles] = {}
+ body[:VdcStorageProfiles][:VdcStorageProfile] =
+ data[:vdc_storage_classes].select do |id, storage_class|
+ storage_class[:vdc] == vdc_id
+ end.map do |id, storage_class|
+ {:type => 'application/vnd.vmware.vcloud.vdcStorageProfile+xml',
+ :name => storage_class[:name],
+ :href => make_href("vdcStorageProfile/#{id}")}
+ end
end
- Excon::Response.new(
- :body => body,
- :headers => {'Content-Type' => "#{body[:type]};version=#{api_version}"},
- :status => 200
- )
+ response.status = 200
+ response.headers = {'Content-Type' => "#{body[:type]};version=#{api_version}"}
+ response.body = body
+ response
end
end
end
end
end