def inventory_flat propSpecs={}
propSet = [{ :type => 'Folder', :pathSet => ['name', 'parent', 'childEntity'] }]
propSpecs.each do |k,v|
case k
when Class
fail "key must be a subclass of ManagedEntity" unless k < RbVmomi::VIM::ManagedEntity
k = k.wsdl_name
when Symbol, String
k = k.to_s
else
fail "invalid key"
end
h = { :type => k }
if v == :all
h[:all] = true
elsif v.is_a? Array
h[:pathSet] = v + %w(parent)
else
fail "value must be an array of property paths or :all"
end
propSet << h
end
filterSpec = RbVmomi::VIM.PropertyFilterSpec(
:objectSet => [
:obj => self,
:selectSet => [
RbVmomi::VIM.TraversalSpec(
:name => 'tsFolder',
:type => 'Folder',
:path => 'childEntity',
:skip => false,
:selectSet => [
RbVmomi::VIM.SelectionSpec(:name => 'tsFolder')
]
)
]
],
:propSet => propSet
)
result = _connection.propertyCollector.RetrieveProperties(:specSet => [filterSpec])
{}.tap do |h|
result.each { |r| h[r.obj] = r }
end
end