VMware {code} Community
ChristianK
Enthusiast
Enthusiast

Questions: TraversalSpec

Hello,

i have this 2 methods, the first works the second do not.

public ObjectContent[] GetAllDatacenters() { TraversalSpec visitFolders = new TraversalSpec(); visitFolders.type = "Folder"; visitFolders.path = "childEntity"; visitFolders.skip = false; visitFolders.name = "visitFolders"; visitFolders.selectSet = new SelectionSpec[] { new SelectionSpec() }; visitFolders.selectSet[0].name = "visitFolders"; ObjectSpec ospec = new ObjectSpec(); ospec.obj = _SvcConnection.Root; ospec.skip = false; ospec.selectSet = new SelectionSpec[] ; PropertySpec\[\] pspec = new PropertySpec[] { new PropertySpec() }; pspec[0].type = "Datacenter"; pspec[0].all = false; pspec\[0\].pathSet = new string[] { "name" }; PropertyFilterSpec propfilterspec = new PropertyFilterSpec(); propfilterspec.objectSet = new ObjectSpec[] ; propfilterspec.propSet = pspec; ObjectContent\[\] ocary = _SvcConnection.Service.RetrieveProperties( _SvcConnection.PropCol, new PropertyFilterSpec[] ); return ocary; } public ObjectContent[] GetAllComputeResources(ManagedObjectReference datacenter) { TraversalSpec visitFolders = new TraversalSpec(); visitFolders.type = "Folder"; visitFolders.path = "childEntity"; visitFolders.skip = false; visitFolders.name = "visitFolders"; visitFolders.selectSet = new SelectionSpec[] { new SelectionSpec() }; visitFolders.selectSet[0].name = "visitFolders"; TraversalSpec dcToHf = new TraversalSpec(); dcToHf.type = "Datacenter"; dcToHf.path = "hostFolder"; dcToHf.skip = false; dcToHf.name = "dcToHf"; dcToHf.selectSet = new SelectionSpec[] ; ObjectSpec ospec = new ObjectSpec(); ospec.obj = datacenter; ospec.skip = false; ospec.selectSet = new SelectionSpec[] ; PropertySpec\[\] pspec = new PropertySpec[] { new PropertySpec() }; pspec[0].type = "ComputeResource"; pspec[0].all = false; pspec\[0\].pathSet = new string[] { "name" }; PropertyFilterSpec propfilterspec = new PropertyFilterSpec(); propfilterspec.objectSet = new ObjectSpec[] ; propfilterspec.propSet = pspec; ObjectContent\[\] ocary = SvcConnection.Service.RetrieveProperties(SvcConnection.PropCol, new PropertyFilterSpec[] ); return ocary; }

Some Questions about TraversalSpec's,

1st : must the ospec.obj be assigned to the rootfolder in any case of retrieving informations?

2nd : if not, on what do i have to pay atention to get the second method working?

3rd : do the order of the SlectionSpecs in ospec.selectset play a decisive role?

Any answer would assist me greatly!

kind regards

Christian

kind regards Christian
0 Kudos
1 Reply
Steve_Jin
Expert
Expert

The traversalspec is hard to use. Try this:

ospec.selectSet = new SelectionSpec[] { dcToHf , visitFolders };

You can take a look at the full traversal spec in VI Java API:

I know you are using C#, but you can port the buildFullTraversal() and depending methods to C# easily. Full traversal spec is sometimes an overkill, but it works. Unless you have a performance issue, you can use the full traveral with any entity.

Steve JIN, VMware Engineering

VI Java API 2.0: 4+ faster than AXIS with 1/4 of the size. Check out @

Steve JIN Author of VMware VI and vSphere SDK; Creator of open source VI Java API (http://vijava.sf.net); Blogger at http://www.doublecloud.org
0 Kudos