The VMware implementation of the DMTF Software Update profile allows system administrators to use CIM client applications to update ESXi software. See Installing VIBs. The update can take several minutes to complete. For a CIM client, this is an asynchronous operation because the CIM server returns before the update is complete.

Note: The Software Update profile is not supported in the base installation. It requires a separate VIB installation.

You can monitor the status of the update operation in one of two ways:

  • You can poll for status of the operation by using the CIM_ConcreteJob class.
  • You can subscribe to any of the supported indications that report changes in the status of the update operation. The supported indications are shown in Table 3-1.
Condition CQL Expression
Any job creation SELECT * from CIM_InstCreation WHERE SourceInstance ISA CIM_ConcreteJob
Any job change SELECT * from CIM_InstModification WHERE SourceInstance ISA CIM_ConcreteJob
Any job deletion SELECT * from CIM_InstDeletion WHERE SourceInstance ISA CIM_ConcreteJob

This example shows how to monitor the update and report completion status by polling an instance of CIM_ConcreteJob.

Monitoring an Update of ESXi Software shows the relationships of the CIM objects involved.

Figure 1. Monitoring an Update of ESXi Software
Diagram shows path from VMware_SoftwareInstallationService to VMware_MethodResult.

Monitoring an Update of ESXi Software shows some classes, such as CIM_Error, that you can use to provide detail on status of the software update operation, but their use is not shown here. This example pseudocode relies only on the properties available in the CIM_ConcreteJob instance that represents the status of an operation in progress. The CIM_ConcreteJob instance remains in existence for a few minutes after the job completes.

This pseudocode depends on the pseudocode in Make a Connection to the CIMOM and Identifying the Base Server Scoping Instance.

To monitor VIB installation

Procedure

  1. After invoking the InstallFromURI() method, save the object reference returned in the Job output parameter.

    The output parameter is a reference to an instance of CIM_ConcreteJob that you can use to monitor progress of the software update operation.

    ( error_return, output ) = connection.InvokeMethod( 'InstallFromURI', \
                                                        service, \
                                                        **method_params )
    ...
    job_ref = output[ ’Job’ ]
    ...
  2. Retrieve the referenced instance of CIM_ConcreteJob and test the value of the PercentComplete property.

    Repeat this step until the PercentComplete property has the value 100.

    function check_job_done( job_ref )
       job = connection.GetInstance( job_ref )
       print ’ percent complete %3d’ % job[ ’PercentComplete’ ]
       print ’ job status: %s’ % job[ ’JobStatus’ ]
       if job[ ’PercentComplete’ ] == 100
          return 1
       else
          return 0
    
    use time
    ticks = 0
    while not check_job_done( job_ref )
       print ’Job time elapsed: %d seconds’ % ticks
       print
       time.sleep( 10 )
       ticks = ticks + 10
    print ’      error code: %s’ % job[ ’ErrorCode’ ]
    print ’     description: %s’ % job[ ’ErrorDescription’ ]
    print ’Time elapsed: %d seconds’ % ticks

    While the software update operation is in progress, the property has an arbitrary value less than 100. After the operation completes, the PercentComplete property takes the value 100 and the CIM server no longer updates the CIM_ConcreteJob instance.

    A sample of the output looks like the following:

    Software installation in progress...
       percent complete 10
       job status: Scanning URI for installable packages
    Time elapsed: 0 seconds
    
       percent complete 10
       job status: Scanning URI for installable packages
    Time elapsed: 10 seconds
    
       percent complete 10
       job status: Scanning URI for installable packages
    Time elapsed: 20 seconds
    
       percent complete 30
       job status: Scan of URI Complete and installable packages found. Starting Update.
    Time elapsed: 30 seconds
    
       percent complete 30
       job status: Scan of URI Complete and installable packages found. Starting Update.
    Time elapsed: 40 seconds
    
    ...
    
       percent complete 100
       job status: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
              error code: None
             description: None
    Time elapsed: 1000 seconds