Repository URL to install this package:
|
Version:
5.1.2 ▾
|
"""
Property Collector helper module.
"""
import pyVmomi
# Shamelessly borrowed from:
# https://github.com/dnaeon/py-vconnector/blob/master/src/vconnector/core.py
def collect_properties(si, view_ref, obj_type, path_set=None,
include_mors=False):
"""
Collect properties for managed objects from a view ref
Check the vSphere API documentation for example on retrieving
object properties:
- http://goo.gl/erbFDz
Args:
si (ServiceInstance): ServiceInstance connection
view_ref (pyVmomi.vim.view.*): Starting point of inventory navigation
obj_type (pyVmomi.vim.*): Type of managed object
path_set (list): List of properties to retrieve
include_mors (bool): If True include the managed objects
refs in the result
Returns:
A list of properties for the managed objects
"""
collector = si.content.propertyCollector
# Create object specification to define the starting point of
# inventory navigation
obj_spec = pyVmomi.vmodl.query.PropertyCollector.ObjectSpec()
obj_spec.obj = view_ref
obj_spec.skip = True
# Create a traversal specification to identify the path for collection
traversal_spec = pyVmomi.vmodl.query.PropertyCollector.TraversalSpec()
traversal_spec.name = 'traverseEntities'
traversal_spec.path = 'view'
traversal_spec.skip = False
traversal_spec.type = view_ref.__class__
obj_spec.selectSet = [traversal_spec]
# Identify the properties to the retrieved
property_spec = pyVmomi.vmodl.query.PropertyCollector.PropertySpec()
property_spec.type = obj_type
if not path_set:
property_spec.all = True
property_spec.pathSet = path_set
# Add the object and property specification to the
# property filter specification
filter_spec = pyVmomi.vmodl.query.PropertyCollector.FilterSpec()
filter_spec.objectSet = [obj_spec]
filter_spec.propSet = [property_spec]
# Retrieve properties
props = collector.RetrieveContents([filter_spec])
data = []
for obj in props:
properties = {}
for prop in obj.propSet:
properties[prop.name] = prop.val
if include_mors:
properties['obj'] = obj.obj
data.append(properties)
return data
def get_container_view(si, obj_type, container=None):
"""
Get a vSphere Container View reference to all objects of type 'obj_type'
It is up to the caller to take care of destroying the View when no longer
needed.
Args:
obj_type (list): A list of managed object types
Returns:
A container view ref to the discovered managed objects
"""
if not container:
container = si.content.rootFolder
view_ref = si.content.viewManager.CreateContainerView(
container=container,
type=obj_type,
recursive=True
)
return view_ref
def search_for_obj(content, vim_type, name, folder=None, recurse=True):
"""
Search the managed object for the name and type specified
Sample Usage:
get_obj(content, [vim.Datastore], "Datastore Name")
"""
if folder is None:
folder = content.rootFolder
obj = None
container = content.viewManager.CreateContainerView(folder, vim_type, recurse)
for managed_object_ref in container.view:
if managed_object_ref.name == name:
obj = managed_object_ref
break
container.Destroy()
return obj
def get_all_obj(content, vim_type, folder=None, recurse=True):
"""
Search the managed object for the name and type specified
Sample Usage:
get_obj(content, [vim.Datastore], "Datastore Name")
"""
if not folder:
folder = content.rootFolder
obj = {}
container = content.viewManager.CreateContainerView(folder, vim_type, recurse)
for managed_object_ref in container.view:
obj[managed_object_ref] = managed_object_ref.name
container.Destroy()
return obj
def get_obj(content, vim_type, name, folder=None, recurse=True):
"""
Retrieves the managed object for the name and type specified
Throws an exception if of not found.
Sample Usage:
get_obj(content, [vim.Datastore], "Datastore Name")
"""
obj = search_for_obj(content, vim_type, name, folder, recurse)
if not obj:
raise RuntimeError("Managed Object " + name + " not found.")
return obj