vROps Object Relationships and Inventory Trees
Relating objects to each other is an important function of vROps. In the case of vSphere, many of those relationships come out of the box, the main one being: Datacenter > Cluster > ESXi Host > VM > Datastore.
Blue Medora management packs include relationships as well, not only internal to the platform they were developed for, but externally to vSphere objects as well. For example, the NetApp OCUM management pack establishes the following relationships:
In addition to Object Relationships, Inventory Trees are a valuable vROps construct as well. So, what's the difference?
Object Relationships: these are the parent/child relationships established as a foundation to vROps. Users can create them manually via the vROps UI.
Inventory Trees (Traversal Specs): these are the routes taken between objects with defined relationships. They are found in the Environment tab and can be used by constructs like Views and Widgets.
Our lead professional services engineer, Rick Pocklington, explains it like this: "I think of relationships as the physical space in which we live. And traversal specs as an air travel map, where things like Grand Rapids to Miami by way of Dallas makes sense. The air travel map doesn’t change the underlying relationships, but it reveals new information useful for certain contexts."
A client recently asked if he could use our NetApp OCUM management pack to see which VMs were consuming the most space. Using the Object Relationships our management pack establishes, we can get him from the Aggregate to the VM, but there are several hops between, and not are all 1-1. In this case, the path looks like this: Aggregate > Volume > Datastore > VM. So, how can we do this?
There are a couple ways:
1. Create the relationships manually via the UI:
- Administration - Configuration - Object Relationships
- select the Object or Object Types you want to relate
- select the Object you want to relate
- select the Object you want to relate it to, drag them from the third or fourth column into the source object in the second column
- the VMs you selected are now children of the Aggregate you selected and will show as such in your dashboards
There are some drawbacks here though. First, it's manual and static, so you'll have to keep your relationships current. Second, you'll have to know which VMs to relate, which can be problematic and even impossible in certain environments. There is a second option:
2. Create a traversal spec defining the inventory tree from Aggregate to VM, using the existing relationships. In this case we want a mapping from Aggregate to Volume to Datastore to VM. We can do this by adding to the describeExt.xml provided by the Blue Medora TVS Manager (TVSM) management pack.
Originally designed as a licensing and log collection tool, TVSM includes a describeExt.xml which can be used to define new inventory trees, which will be persistent. That is, they won't be over-written upon management pack upgrade.
To define the Aggregate to VM tree, I added the following to my describeExt.xml:
The traversal spec starts with the aggregate, skips the volume, skips the datastore, and makes VMs child objects
Once done, a redescribe is required to capture the new traversal spec. Do this via Administration - Support - Redescribe.
You can now use this new Inventory Tree in the Advanced Object Relationship widget (among others) to show the VMs as children of a selected Aggregate.
Using this Inventory Tree in an Advanced Object Relationship widget will look something like this in a dashboard:
Object relationships are ubiquitous to vROps. Traversal specs and their respective Inventory Trees are powerful constructs that can be used for many different use cases, this is just one of them.