[vSphere] Support datacenters that are located below folders not in root folder

This commit is contained in:
Marc Grimme 2013-10-02 16:56:35 +02:00
parent a40a37110c
commit 42a71bb55b
3 changed files with 30 additions and 10 deletions

View File

@ -6,30 +6,31 @@ module Fog
identity :id
attribute :name
attribute :path
attribute :status
def clusters filters = { }
service.clusters({ :datacenter => name }.merge(filters))
service.clusters({ :datacenter => path.join("/") }.merge(filters))
end
def networks filters = { }
service.networks({ :datacenter => name }.merge(filters))
service.networks({ :datacenter => path.join("/") }.merge(filters))
end
def datastores filters = { }
service.datastores({ :datacenter => name }.merge(filters))
service.datastores({ :datacenter => path.join("/") }.merge(filters))
end
def vm_folders filters = { }
service.folders({ :datacenter => name, :type => :vm }.merge(filters))
service.folders({ :datacenter => path.join("/"), :type => :vm }.merge(filters))
end
def virtual_machines filters = {}
service.servers({ :datacenter => name }.merge(filters))
service.servers({ :datacenter => path.join("/") }.merge(filters))
end
def customfields filters = {}
service.customfields({ :datacenter => name}.merge(filters))
service.customfields({ :datacenter => path.join("/")}.merge(filters))
end
def to_s

View File

@ -5,7 +5,7 @@ module Fog
def get_datacenter name
dc = find_raw_datacenter(name)
raise(Fog::Compute::Vsphere::NotFound) unless dc
{:name => dc.name, :status => dc.overallStatus}
{:name => dc.name, :status => dc.overallStatus, :path => raw_getpathmo(dc) }
end
protected

View File

@ -8,6 +8,7 @@ module Fog
{
:id => managed_obj_id(dc),
:name => dc.name,
:path => raw_getpathmo(dc),
:status => dc.overallStatus
}
end
@ -15,9 +16,27 @@ module Fog
protected
# RbVmomi::VIM::Datacenter Array
def raw_datacenters
@raw_datacenters ||= @connection.rootFolder.childEntity.grep(RbVmomi::VIM::Datacenter)
def raw_getpathmo mo
if mo.parent == nil or mo.parent.name == @connection.rootFolder.name then
[ mo.name ]
else
[ raw_getpathmo(mo.parent), mo.name ].flatten
end
end
def raw_datacenters folder=nil
folder ||= @connection.rootFolder
@raw_datacenters ||= get_raw_datacenters_from_folder folder
end
def get_raw_datacenters_from_folder folder=nil
folder.childEntity.map do | childE |
if childE.is_a? RbVmomi::VIM::Datacenter
childE
elsif childE.is_a? RbVmomi::VIM::Folder
get_raw_datacenters_from_folder childE
end
end.flatten
end
def find_datacenters name=nil