Subscribe to Indications

ESXi 7.0 supports the following types of indications.

Table 1. Indications Supported by ESXi
Indication Description
OMC_IpmiAlertIndication Sent whenever entries are added to the IPMI System Event Log, and whenever a sensor’s HealthState property becomes less healthy than previously seen.
OMC_BatteryIpmiAlertIndication Specializes OMC_IpmiAlertIndication.
OMC_BIOSIpmiAlertIndication Specializes OMC_IpmiAlertIndication.
OMC_ChassisIpmiAlertIndication Specializes OMC_IpmiAlertIndication.
OMC_CoolingUnitIpmiAlertIndication Specializes OMC_IpmiAlertIndication.
OMC_DiskIpmiAlertIndication Specializes OMC_IpmiAlertIndication.
OMC_MemoryIpmiAlertIndication Specializes OMC_IpmiAlertIndication.
OMC_PowerIpmiAlertIndication Specializes OMC_IpmiAlertIndication.
OMC_ProcessorIpmiAlertIndication Specializes OMC_IpmiAlertIndication.
VMware_KernelIPChangedIndication This indication is sent whenever the ESXi kernel IP address for the host has changed.

To receive CIM indications, you must have a running process that accepts indication messages and logs them or otherwise acts on them, depending on your application. You can use a commercial CIM indication consumer to do this. If you choose to implement your own indication consumer, see the following documents:

The indication consumer must operate with a known URL. This URL is used when instantiating the IndicationHandler object.

Similarly, you must know which indication class to monitor. This information is used when instantiating the IndicationFilter object.

This example shows how to instantiate the objects needed to register for indications.

This pseudocode depends on the pseudocode in Make a Connection to the CIMOM.

To subscribe to indications

Procedure

  1. Connect to the server URL.

    Specify the Interop namespace for the connection.

    use wbemlib
    use sys
    use connection renamed cnx
    connection = Null
    
    params = cnx.get_params()
    if params is Null 
       exit(-1)
    interop_params = params
    interop_params['namespace'] = 'root/interop'
    connection = cnx.connect_to_host( interop_params )
    if connection is Null 
       print 'Failed to connect to: ' + params['host'] + ' as user: ' + params['user']
  2. Build the URL for the indication consumer.
    destination = 'http://' + params['consumer_host'] \
                  + ':' + params['consumerPort'] + '/indications'
  3. Create the IndicationHandler instance to represent the consumer.
    handlerBindings = { \
       'SystemCreationClassName' : 'OMC_UnitaryComputerSystem', \
       'SystemName' : clientHost, \
       'Name':  'Org:Local', \
       'CreationClassName' : 'CIM_IndicationHandlerCIMXML' \
       }
       
    handlerName = wbemlib.CIMInstanceName( \
       'CIM_IndicationHandlerCIMXML', \
       keybindings=handlerBindings, \
       namespace='root/interop' )
    
    handlerInst = wbemlib.CIMInstance( \
       'CIM_IndicationHandlerCIMXML', \
       properties = handlerBindings, \
       path = handlerName )
    handlerInst['Destination'] = destination
    
    chandlerName = connection.CreateInstance( handlerInst )

    Use a globally unique organization identifier in place of Org, and use an organizationally unique identifier in place of Local.

  4. Create the IndicationFilter instance to specify the indication class (such as CIM_AlertIndication).

    The SourceNamespace property of the filter must match the Implementation namespace of the indication provider. In this pseudocode, the namespace is root/cimv2 but a third-party indication provider might use a different namespace.

    filterBindings = { \
       'SystemCreationClassName' : 'OMC_UnitaryComputerSystem', \
       'SystemName' : clientHost, \
       'Name':  'Org:Local', \
       'CreationClassName' : 'CIM_IndicationFilter' \
       }
       
    filterName = wbemlib.CIMInstanceName( \
       'CIM_IndicationFilter', \
       keybindings=filterBindings, \
       namespace='root/interop' )
    
    filterInst = wbemlib.CIMInstance( \
       'CIM_IndicationFilter', \
       properties = filterBindings, \
       path = filterName )
       filterInst['SourceNamespace'] = 'root/cimv2'
       filterInst['Query'] = 'SELECT * FROM ' + params['className']
       filterInst['QueryLanguage'] = 'WQL'
    
       cfilterName = connection.CreateInstance( filterInst )
  5. Create the IndicationSubscription association to link the filter with the handler.
    subBindings = { 'Filter': cfilterName, \
                    'Handler' : chandlerName }
    
       subName = wbemlib.CIMInstanceName( \
          'CIM_IndicationSubscription', \
          keybindings = subBindings, \
          namespace = 'root/interop' )
    
       subInst = wbemlib.CIMInstance( 'CIM_IndicationSubscription', \
                                      path = subName )
       subInst['Filter'] = cfilterName
       subInst['Handler'] = chandlerName
    
       rsubName = connection.CreateInstance( subInst )