def traverse path, type=Object, create=false
if path.is_a? String
es = path.split('/').reject(&:empty?)
elsif path.is_a? Enumerable
es = path
else
fail "unexpected path class #{path.class}"
end
return self if es.empty?
final = es.pop
p = es.inject(self) do |f,e|
f.find(e, RbVmomi::VIM::Folder) || (create && f.CreateFolder(:name => e)) || return
end
if x = p.find(final, type)
x
elsif create and type == RbVmomi::VIM::Folder
p.CreateFolder(:name => final)
elsif create and type == RbVmomi::VIM::Datacenter
p.CreateDatacenter(:name => final)
else
nil
end
end