VSDK Prog Guide
VSDK Prog Guide
Programming Guide
vSphere Web Services SDK 5.0
EN-000493-00
vSphere Web Services SDK Programming Guide
You can find the most up-to-date technical documentation on the VMware Web site at:
http://www.vmware.com/support/
The VMware Web site also provides the latest product updates.
If you have comments about this documentation, submit your feedback to:
[email protected]
Copyright © 2011 VMware, Inc. All rights reserved. This product is protected by U.S. and international copyright and
intellectual property laws. VMware products are covered by one or more patents listed at
http://www.vmware.com/go/patents.
VMware is a registered trademark or trademark of VMware, Inc. in the United States and/or other jurisdictions. All other marks
and names mentioned herein may be trademarks of their respective companies.
VMware, Inc.
3401 Hillview Ave.
Palo Alto, CA 94304
www.vmware.com
2 VMware, Inc.
Contents
About This Book 11
1 VMware vSphere and vSphere Management APIs 13
Virtualization and VMware vSphere Components 13
vSphere Development Tools 14
vSphere Web Services SDK 14
CIM APIs 14
vSphere SDK for Perl 14
vSphere PowerCLI 14
VIX API 14
SDK Developer Setup 15
SDK Samples 15
UML Diagrams Used in This Guide 15
2 vSphere API Programming Model 17
vSphere Client‐Server Architecture 17
vSphere API as a Web Service 18
WSDL Files and the Client‐Side Proxy Interface 18
Network Access to the vSphere Web Service 19
Language‐Specific Classes and Methods 19
Mapping XML Data Types to Java and C# Data Types 20
Access to Managed Objects 21
Access to vSphere Server Data 21
Obtaining Information from a Server 22
Working with Data Structures 22
Accessing Property Values 22
Unset Optional Properties 25
Escape Character in Name and Path Properties 25
3 Client Applications 27
Basic Client Application Capability 27
Overview of a Java Sample Application 27
Web Server Session Token 31
Accessing the HTTP Endpoint with JAX‐WS 31
Accessing the vSphere Server 33
Closing the Connection 33
Using the Java Samples as Reference 33
Using Axis Bindings 34
Multiple Versions of the vSphere API 35
Identifying the API Version Supported by the Server 36
Java and C# Sample Applications 36
Java Samples 36
C# Samples 36
4 Datacenter Inventory 39
Inventory Overview 39
Inventory Hierarchies and ServiceInstance 40
VMware, Inc. 3
vSphere Web Services SDK Programming Guide
Folders in the Hierarchy 40
ESX/ESXi Inventory Hierarchy 41
Accessing Inventory Objects 41
Creating Inventory Objects 42
Privileges Required for Inventory Management 42
Privileges 43
Permissions 43
Managed and Standalone ESX/ESXi Hosts 44
5 Property Collector 47
Introduction to the PropertyCollector 47
Data Retrieval 48
Inventory Traversal and Object Selection 48
vSphere Data Objects for Property Collection 48
vSphere Methods for Property Collection 48
PropertyCollector Example (RetrievePropertiesEx) 49
Inventory Traversal 56
TraversalSpec Traversal 56
SelectionSpec Traversal 62
Client Data Synchronization (WaitForUpdatesEx) 67
Property Filters 67
WaitForUpdatesEx 67
Server Data Transmission 69
PropertyCollector Performance 69
SearchIndex 69
6 Authentication and Authorization 71
Objects for Authentication and Authorization Management 71
Authentication and Authorization for ESX/ESXi and vCenter Server 72
ESX/ESXi User Model 72
vCenter Server User Model 73
vSphere Security Model 73
Setting Up Users, Groups, and Permissions 74
Obtaining User and Group Information from UserDirectory 75
Managing ESX/ESXi Users and Groups with HostLocalAccountManager 76
Managing Roles and Permissions with AuthorizationManager 77
Using Roles to Consolidate Sets of Privileges 78
Modifying Sample Roles to Create New Roles 79
Granting Privileges Through Permissions 79
Authenticating Users Through SessionManager 81
Using the Credential Store for Automated Login 81
Credential Store Methods 82
Credential Store Backing File 82
Credential Store Samples 83
Specifying Roles and Users with the Credential Store 83
Managing Licenses with LicenseManager 84
7 Hosts 85
Host Management Objects 85
Retrieving Host Information 85
Configuring and Reconfiguring Hosts 86
Managing the Host Lifecycle 87
Reboot and Shutdown 87
Using Standby Mode 87
4 VMware, Inc.
Contents
Disconnecting and Reconnecting Hosts 87
Querying and Changing the Host Time 88
Querying Virtual Machine Memory Overhead 88
8 Storage 89
Storage Management Objects 89
Introduction to Storage 90
How Virtual Machines Access Storage 90
Datastores 91
Choosing the Storage API to Use 92
Configuring Disk Partitions 93
Multipath Management 94
Configuring iSCSI Storage 94
Creating and Managing Datastores 96
Accessing Datastores 97
Creating and Modifying a VMFS Datastore 97
Removing and Updating Datastores 99
Managing VMFS Datastores with HostStorageSystem 99
Managing VMFS Volume Copies (Resignaturing) 99
Managing Diagnostic Partitions 100
Retrieving Diagnostic Partition Information 101
Creating a Diagnostic Partition 101
Sample Code Reference 101
9 Networking 103
Network Management Objects and Methods 103
Introduction to Networking 104
vNetwork Standard Switch Environment 104
Virtual Switches 105
Port Group 105
Virtual Machine Network Interface 105
VMkernel Network Interfaces 105
Physical Network Adapter (pnic) 106
Setting Up Networking with vSS 106
Retrieving Information About the Network Configuration 106
Adding a Virtual Switch 106
Adding a Virtual Port Group 107
Adding a VMkernel Network Interface 107
Defining the Host Network Policies 108
NIC Teaming 108
Setting Up IPv6 Networking 109
Adding Networking Services 110
Adding an NTP Service 110
Setting Up the IP Route Configuration 110
Setting Up SNMP 110
Sample Code Reference 111
10 Virtual Machine Configuration 113
VirtualMachine Management Objects and Methods 113
Creating Virtual Machines and Virtual Machine Templates 114
Creating a Virtual Machine Using VirtualMachineConfigSpec 114
Creating Virtual Machine Templates 115
Cloning a Virtual Machine 115
Converting a Template to a Virtual Machine 116
VMware, Inc. 5
vSphere Web Services SDK Programming Guide
Accessing Information About a Virtual Machine 116
Configuring a Virtual Machine 117
Name and Location 117
Hardware Version 117
Boot Options 118
Operating System 118
CPU and Memory Information 119
Networks 120
Fibre Channel NPIV Settings 120
File Locations 121
Adding Devices to Virtual Machines 121
Performing Virtual Machine Power Operations 122
Registering and Unregistering Virtual Machines 123
Customizing the Guest Operating System 124
Installing VMware Tools 124
Upgrading a Virtual Machine 125
11 Virtual Machine Management 127
Virtual Machine Migration 127
Cold Migration 128
Migration with VMotion 128
Using Storage VMotion 128
Snapshots 128
Creating a Snapshot 129
Reverting to a Snapshot 129
Deleting a Snapshot 130
Linked Virtual Machines 130
Linked Virtual Machines and Disk Backings 130
Creating a Linked Virtual Machine 130
Removing Snapshots and Deleting Linked Virtual Machines 132
Relocating a Virtual Machine in a Linked Virtual Machine Group 132
Promoting a Virtual Machineʹs Disk 133
Performing Advanced Manipulation of Delta Disks 133
12 Virtual Applications 135
About Virtual Applications 135
Management Overview 135
Direct and Linked Children 136
OVF Packages 136
Creating a VirtualApp 137
Managing VirtualApp Children 137
Exporting a Virtual Application 138
Acquiring the Export Lease 138
Downloading the Disks 138
Generating the OVF Descriptor 138
Completing the Lease 139
Importing an OVF Package 139
Virtual Application Life Cycle 139
Powering a Virtual Application On or Off 139
Unregistering a Virtual Application 140
Suspending a Virtual Application 140
Destroying a Virtual Application 140
6 VMware, Inc.
Contents
13 Resource Management 141
Resource Management Objects 141
Introduction to Resource Management 142
Resource Allocation 142
Resource Pool Hierarchies 142
Resource Pool Management Guidelines 143
Cluster Overview 143
Creating and Configuring Resource Pools 144
Understanding Expandable Reservation 144
Deleting Child Resource Pools 145
Moving Resource Pools or Virtual Machines Into a Resource Pool 146
Introduction to VMware DRS and VMware HA Clusters 146
VMware DRS 146
VMware HA 146
Creating and Configuring Clusters 147
Creating a Cluster 147
Adding a Host to a Cluster 148
Reconfiguring a Cluster 148
Managing DRS Clusters 148
Managing HA Clusters 149
Using VMware HA and DRS Together 150
14 Tasks and Scheduled Tasks 151
Creating Tasks 151
Session Persistence 151
Cancelling a Task 152
Using TaskInfo to Determine Task Status 152
Monitoring TaskInfo Properties 153
Accessing and Manipulating Multiple Tasks 154
Gathering Data with a ViewManager Object 154
Gathering Data with a TaskManager Interface 161
Understanding the ScheduledTaskManager Interface 163
Scheduling Tasks 164
Cancelling a Scheduled Task 166
Using a TaskHistoryCollector 167
Creating a TaskHistoryCollector Filter 167
Managing the HistoryCollector 167
Sample Code Reference 168
15 Events and Alarms 169
Event and Alarm Management Objects 169
Understanding Events 169
Managing Events with EventManager 170
Event Data Objects 171
Formatting Event Message Content 171
Creating Custom Events 172
Using an EventHistoryCollector 172
Creating an EventHistoryCollector Filter 172
Managing the HistoryCollector 173
Using Alarms 173
Obtaining a List of Alarms 173
Creating an Alarm 173
Defining Alarms Using the AlarmSpec Data Object 174
Specifying Alarm Trigger Conditions with AlarmExpression 175
VMware, Inc. 7
vSphere Web Services SDK Programming Guide
Specifying Alarm Actions 176
Deleting or Disabling an Alarm 177
Sample Code Reference 177
16 vSphere Performance 179
vSphere Performance Data Collection 179
PerformanceManager Objects and Methods 181
Retrieving vSphere Performance Data 182
Performance Counter Example (QueryPerf) 183
Large‐Scale Performance Data Retrieval 190
Using the QueryPerf Method as a Raw Data Feed 190
Comparison of Query Methods 191
Retrieving Summary Performance Data 191
Performance Counter Metadata 192
Performance Intervals 192
vSphere Performance and Data Storage 194
Modifying Historical Intervals 194
Modifying Performance Counter Collection Levels 194
Sample Code Reference 195
A Diagnostics and Troubleshooting 197
Troubleshooting Best Practices 197
Overview of Configuration Files and Log Files 198
ESX/ESXi Log File 198
Virtual Machine Log Files 199
vCenter Server Log Files 200
Modifying the Log Level to Obtain Detailed Information 200
Setting the Log Level on ESX/ESXi Systems 200
Generating Logs 201
Setting the Log Level on vCenter Server Systems 201
Using DiagnosticManager 201
Using the MOB to Explore the DiagnosticManager 203
Generating Diagnostic Bundles 204
B Managed Object Browser 205
Using the MOB to Explore the Object Model 205
Accessing the MOB 205
Using the MOB to Navigate the VMware Infrastructure Object Model 206
Using the MOB to Invoke Methods 206
Passing Primitive Datatypes to Method 206
Passing Arrays of Primitives to Methods 207
Passing Complex Structures to Methods 207
C HTTP Access to vSphere Server Files 211
Introduction to HTTP Access 211
URL Syntax for HTTP Access 212
Datastore Access (/folder) 212
Host File Access (/host) 213
Update Package Access (/tmp) 214
Privilege Requirements for HTTP Access 214
D Privileges Reference 215
Privileges Required to Invoke Operations 215
Privileges Required to Read Properties 223
8 VMware, Inc.
Contents
Privileges Defined for the Administrator Role 224
E Sample Program Overview 229
Java Sample Programs 229
JAX‐WS 229
C# Sample Programs 232
Axis 4.1 235
Index 239
VMware, Inc. 9
vSphere Web Services SDK Programming Guide
10 VMware, Inc.
About This Book
The vSphere Web Services SDK Programming Guide explains client application development using the VMware®
vSphere Web Services SDK 5.0.
VMware provides different APIs and SDKs for different applications and goals. The vSphere Web Services
SDK targets developers who create client applications for managing VMware® vSphere components available
on VMware ESX/ESXi and VMware vCenter Server systems.
To view the current version of this book as well as all VMware API and SDK documentation, go to
http://www.vmware.com/support/pubs/sdk_pubs.html.
Revision History
This guide is revised with each release of the product or when necessary. A revised version can contain minor
or major changes. Table 1 summarizes the significant changes in each version of this guide.
Revision Description
24AUG2011 vSphere 5.0 ‐ Revised performance manager chapter. Added information about: unset properties, using
vCenter to access host data, and using the QueryConfigOption to add devices; emphasized ListView
instead of TaskManager; clarified limits and limitations of Linked Virtual Machines; updated samples in
chapters 3,5,14, and 16; replaced information about Axis bindings with JAX‐WS; and updated paths to
samples supplied with SDK.
13JUL2010 Restructured manual and added chapters about host, storage, and networking. Revised property
collector chapter and added appendix about HTTP access.
07MAY2009 First version of the vSphere Web Services SDK 4.0 Programming Guide.
Intended Audience
This book is intended for anyone who needs to develop applications using the vSphere Web Services SDK.
Developers typically create client applications using Java or C# (in the Microsoft .NET environment) targeting
VMware vSphere. An understanding of Web Services technology and some programming background in one
of the stub languages (C# or Java) is required.
Document Feedback
VMware welcomes your suggestions for improving our documentation. Send your feedback to
[email protected].
VMware, Inc. 11
vSphere Web Services SDK Programming Guide
Support Offerings
To find out how VMware support offerings can help meet your business needs, go to
http://www.vmware.com/support/services.
12 VMware, Inc.
1
The chapter includes the following topics:
“Virtualization and VMware vSphere Components” on page 13
“vSphere Development Tools” on page 14
“SDK Developer Setup” on page 15
“SDK Samples” on page 15
“UML Diagrams Used in This Guide” on page 15
VMware vSphere includes ESX/ESXi, vCenter Server, and several additional server products. The base
products support running and managing virtual machines. With additional licenses, you can take advantage
of the vSphere distributed resource management (DRS), disaster recovery, and high availability (HA) features.
The ESX/ESXi hypervisor is capable of supporting multiple virtual machines and other virtual
components, such as storage and networks.
vCenter Server is a database‐backed Windows service that provides central management for multiple
ESX/ESXi systems.
vSphere Client is a GUI to manage vSphere. vSphere Client runs on Windows systems and uses the same
interface as the vSphere Web Services SDK to communicate with vSphere servers. You can perform any
task the vSphere Client supports using the Web Services SDK. In fact, the SDK supports some tasks you
cannot perform with the vSphere Client.
For more information about ESX/ESXi and vCenter Server, see the VMware vSphere documentation page on
the VMware Web site. If you are new to VMware vSphere or new to the vSphere Web Services SDK, see one of
these vSphere administrator documents for background information about vSphere:
Introduction to VMware vSphere
Virtual Machine Management Guide
Server Management Guide
ESX Configuration Guide and ESXi Configuration Guide
vSphere Resource Management Guide
VMware, Inc. 13
vSphere Web Services SDK Programming Guide
CIM APIs
The VMware CIM APIs provide a CIM (Common Information Model) interface for developers building
management applications. With the VMware CIM APIs, developers can use standards‐based CIM‐compliant
applications to manage ESX/ESXi hosts.
The CIM APIs include:
CIM SMASH/Server Management API – profiles compatible with the DMTF System Management
Architecture for Server Hardware (SMASH) initiative. SMASH profiles allow CIM clients to monitor
system health of a managed server.
CIM Storage Management API – profiles compatible with the Storage Management Initiative
Specification (SMI‐S) of the Storage Network Industry Association. SMI‐S profiles allow CIM clients to
explore the virtual machines on an ESX/ESXi host, and associated storage resources.
The vSphere SDK for Perl also includes the Web Services for Management component for writing scripts that
retrieve CIM data from the ESX/ESXi host using CIMOM, a service that provides standard CIM management
functions. The vSphere SDK for Perl also includes subroutines for managing the VMware Credential Store and
an example application that illustrates credential store use.
vSphere SDK for Perl is bundled with the vSphere Command‐Line Interface (vSphere CLI). The vSphere CLI
command set allows you to run common system administration commands against ESX/ESXi systems from
an administration server of your choice.
vSphere PowerCLI
VMware vSphere PowerCLI provides a Windows PowerShell interface to the vSphere API. vSphere PowerCLI
includes PowerShell Cmdlets for administering vSphere components. In addition, the vSphere PowerCLI
package includes the vSphere SDK for .NET for developers who want to create their own applications.
VIX API
The VIX API is a library for writing scripts and programs to manipulate virtual machines. It is high‐level, easy
to use, and practical for both script developers and application programmers. This API is well suited for
dedicated IT personnel in an organization building their own in‐house tools. It might also be used by software
vendors using VIX to integrate VMware products with their own products or to build management products
for virtual machines.
Figure 1‐1 gives an overview of the different vSphere APIs and CLIs and illustrates how they fit into the virtual
infrastructure.
14 VMware, Inc.
Chapter 1 VMware vSphere and vSphere Management APIs
SDK Samples
The SDK includes a set of samples that illustrate much of the SDK features. Two sample sets are available:
Java samples use the generated Java stubs that are shipped with the SDK.
C# samples use the generated C# stubs that are shipped with the SDK.
Both sample sets include a set of utility applications that are used by the sample code.
The code fragments in this guide are in part based on the Java sample applications, but present code that does
not require utility applications to run.
VMware, Inc. 15
vSphere Web Services SDK Programming Guide
16 VMware, Inc.
2
This chapter includes the following topics:
“vSphere Client‐Server Architecture” on page 17
“vSphere API as a Web Service” on page 18
“Access to Managed Objects” on page 21
“Access to vSphere Server Data” on page 21
Managed objects exist on a vSphere server (ESX/ESXi or vCenter Server system). They represent vSphere
services and components. Services include PropertyCollector, SearchIndex, PerformanceManager,
and ViewManager. Components include inventory objects such as VirtualMachine, Datastore, and
Folder.
Managed object references are client application references to server‐side managed objects. Your client
application uses ManagedObjectReference objects when it invokes operations on a server. A
ManagedObjectReference is guaranteed to be unique and persistent during an objectʹs lifetime. The
reference persists after an object has moved within the inventory, across sessions, and across server
restarts. If you remove an object, for example, a virtual machine, from the inventory, and then put it back,
the reference changes.
Data objects contain information about managed objects. Your client application sends data objects to and
receives data objects from a vSphere server. Examples are the different specification and capability objects
such as VirtualMachineConfigSpec and HostCapability.
Figure 2‐1 shows a vSphere server and client application. The client has a managed object reference to a virtual
machine on the server, and a copy of the GuestInfo data object for the virtual machine. A client must maintain
its copy of a data object because, depending on the type of client request, a vSphere server might send property
data for a data object as a set of name‐value pairs associated with a managed object reference. See the
description of the ObjectContent data object in the vSphere API Reference.
VMware, Inc. 17
vSphere Web Services SDK Programming Guide
vSphere server
vSphere client application
managed object
data objects reference to a
VirtualMachine
managed object VirtualMachine
network
connection
GuestInfo GuestInfo
data object data object
The VMware vSphere application model uses an asynchronous client‐server communication model in most
cases. Methods are nonblocking and return a reference to a Task managed object. See Chapter 14, “Tasks and
Scheduled Tasks,” on page 151.
XML Schema 1.0
SOAP 1.1
WSDL 1.1
For information about the WS‐I Basic Profile 1.0, go to the Web Services Interoperability Organization (WS‐I)
Web site at http://www.ws‐i.org.
Web services technology supports operations, which are the same as methods in other programming
languages. The vSphere API Web service provides access to all operations necessary for monitoring and
managing vSphere components, such as compute resources, virtual machines, networks, storage, and so on.
The client proxy provides a language‐specific vSphere API, for example, using Java or C#. The proxy facilitates
remote method invocation, organization of object data, and other aspects of distributed, object‐oriented,
applications programming. Your client application calls proxy interface methods. The client proxy uses SOAP
(Simple Object Access Protocol) to exchange WSDL messages with a vSphere server.
Figure 2‐2 is a representation of a client application that uses the client proxy interface to call a method. The
client proxy interface is based on the WSDL definitions.
18 VMware, Inc.
Chapter 2 vSphere API Programming Model
WSDL WSDL2Java,
files wsdl.exe, or
other tool
client application
client vSphere Server
proxy
interface
SOAP-encoded WSDL
method (Java, C#, method
invocation or other) network execution
connection
To use the VMware client proxy interface, you must import the vSphere API client libraries in to your client
application using the following Java and C# statements.
C# using VimApi;
Java import com.vmware.vim25.*;
IMPORTANT The vSphere Web Services SDK includes Java client‐side proxy code that was generated using
the JAX‐WS toolkit. If the versions of Java and JAX‐WS on your development platform are the same as those
used to generate the proxy interface shipped in the SDK, you do not have to generate client‐side proxy code
from the WSDL. See the Developer’s Setup Guide for information about configuring a development environment
for the vSphere Web Services SDK.
Generated objects. The additional objects provide access to the vSphere Web Service to establish the
client‐server connection (VimServiceLocator, AppUtil) and declare the methods defined for the
vSphere API (VimPortType, VimService).
Generated methods. The additional methods are accessor (getter) and mutator (setter) methods for
properties. For Java, the method names are constructed by adding get and set prefixes to a property
name, and changing the first character of the property name to upper case.
VMware, Inc. 19
vSphere Web Services SDK Programming Guide
Table 2‐1 identifies client proxy definitions for the vSphere Web Services SDK WSDL.
vSphere API data Data objects in the vSphere API (see the vSphere API Reference) defined as objects in the proxy
objects interface
The following code fragments show getter and setter method declarations for the
AfterStartupTaskScheduler.minute property.
Java
public int getMinute() {
return minute; }
public void setMinute(int minute) {
this.minute = minute; }
C#
public int minute {
set; get; }
You can extrapolate the getter and setter methods that are available in the client proxy interface from the
vSphere API Reference. For example, the ScsiLun data object has a displayName property. For the Java API,
you can use a setDisplayName method to assign a string value to the property, and obtain the string value by
using the getDisplayName method. The vSphere Web Services SDK includes Java and C# sample code that
illustrates using the proxy interfaces. See Chapter 3, “Client Applications,” on page 27.
Table 2‐2 lists some of the more common XML primitive data type mappings.
Table 2-2. Standard XML Schema Primitives to Java and .NET Data Type Mappings
XML Schema Java .NET Data Type
20 VMware, Inc.
Chapter 2 vSphere API Programming Model
The ServiceInstance managed object is the root object of the inventory on both ESX/ESXi and vCenter
Server systems. The server creates the ServiceInstance, and creates the manager entities that provide
services in the virtual environment. Examples of manager entities are LicenseManager,
PerformanceManager, and ViewManager.
The ServiceInstance is the primary point of access to the server inventory. Your client application starts by
connecting to a server and creating a reference to the ServiceInstance. After you have connected to the
server, you can call the ServiceInstance.RetrieveServiceContent method to a ServiceContent data
object. ServiceContent provides access to the vSphere managed object services. See “Overview of a Java
Sample Application” on page 27 for an example of connecting to a server and using the ServiceInstance
reference to retrieve the ServiceContent object.
Figure 2‐3 shows the object model for the ServiceInstance and ServiceContent objects. The figure shows
some of the ServiceContent managed object references and the target objects of the references. Each
managed object reference identifies a specific managed object on the server with its type and a value. (The
value property is an opaque string.)
VMware, Inc. 21
vSphere Web Services SDK Programming Guide
Use an accessor (getter) method. The client proxy interface provides accessor methods for each data object
property. You can use these accessor methods to obtain the values of the object. See “Language‐Specific
Classes and Methods” on page 19 for information about client proxy interface accessor methods.
Use a PropertyCollector to navigate to a selected point on the server and obtain values from specific
properties. See Chapter 5 for more information about PropertyCollector.
Use the SearchIndex managed object to obtain a managed object reference to the managed entity of
interest. The SearchIndex can return managed object references to specific managed
entities—ComputeResource, Datacenter, Folder, HostSystem, ResourcePool,
VirtualMachine—given an inventory path, IP address, or DNS name.
IMPORTANT You can use API methods to operate on managed objects in the vSphere inventory. A method
that updates properties in one managed object may also update properties in other managed objects. The
Server performs asynchronous updates to the inventory. There is no guarantee that the inventory will be
completely updated when the method returns to the caller. Use the PropertyCollector method
WaitForUpdatesEx to obtain property changes.
Simple data types, such as a string, boolean, or integer (or other numeric) audiotape. For example, the
ManagedEntity managed object has a name property that takes a string value.
Arrays of simple data types or data objects. For example, a HostSystem managed object contains an array
of managed object references (a type of data object) to virtual machines hosted by that physical machine.
As another example, the SessionManager managed object has a sessionList property that is an array
of UserSession data objects.
Enumerated types (enumeration, enum) of predefined values. The values can be a collection of simple
data types or data objects. For example, a virtual machineʹs power state can be one of three possible string
values—poweredOn, poweredOff, or suspended.
The type of a property is often a string, but the property actually expects one of the values an enumeration
encapsulates. For example, when you set VirtualMachineConfigSpec.guestid you can specify one of
the elements of the VirtualMachineGuestOSIdentifier as a string.
Complex (or composite) data types. For example, the HostProfileConfigInfo object contains data
objects, an array of data objects, and an array of strings.
Use dot notation to access nested properties in composite data structures.
Cast unconstrained property values (xsd:anyType) to array types.
Use keys or index values as appropriate to access array values.
22 VMware, Inc.
Chapter 2 vSphere API Programming Model
For example, the following figure shows a UML class diagram of the VirtualMachine managed object, which
has a runtime property that is defined as an xsd:dateTime data type. VirtualMachine also has a summary
property that is a VirtualMachineSummary data object. The VirtualMachineSummary data object contains a
config property that is a VirtualMachineConfigSummary data object.
To refer to a nested property, use dot notation to separate the object names in the sequence that defines the
path to the property. Your code must handle the type referenced at the end of the sequence.
For example, you can compare the property referenced by the path summary.config.guestId (a string value)
to the property referenced in the path summary.config (the complete VirtualMachineSummary data object).
Table 2‐3 shows examples of property references and the corresponding data types for some of the properties
of the VirtualMachine managed object shown in Figure 2‐4.
summary VirtualMachineSummary data object
summary.config VirtualMachineConfigSummary data object
summary.config.guestID string
xsd:anyType Arrays
The vSphere API uses xsd:anyType unconstrained type declarations. A vSphere client must map values of
xsd:anyType to explicit data types. An xsd:anyType value can represent a single data value or it can
represent an array. The WSDL for the vSphere API defines array types for all of the data values that a vSphere
client can send or receive as arrays. The array types use the prefix ʺArrayOfʺ. An example of an array type is
ArrayOfString for string values.
When a client sends data to a vSphere Server, the client must use explicit datatypes. For example, a client can
define a MethodAction for a ScheduledTask. The vSphere API defines arguments to the action (the
MethodActionArgument.value property) as type xsd:anyType. If the action takes an array argument, the
client must set the corresponding MethodAction.argument[].value to the appropriate ArrayOf... type.
When a client receives xsd:anyType data from a vSphere Server, it must cast the data to an explicit type. For
example, the PropertyCollector method RetrievePropertiesEx returns a set of ObjectContent data
objects. The ObjectContent.propSet property is a list of DynamicProperty objects that contains the
requested property values. Each DynamicProperty object contains a name‐value pair. The value property
(DynamicProperty.val) is of type xsd:anyType. It can represent a single object or an array of objects.
When the returned value is a single object such as an Event, ManagedObjectReference, or String, you can
cast it directly to a variable of the appropriate type. However, when the value is an array of objects you cannot
cast the anyType value directly to an array variable.
VMware, Inc. 23
vSphere Web Services SDK Programming Guide
When the PropertyCollector returns array data, it sends it as an xsd:anyType value. The language‐specific
bindings contain definitions for array objects such as ArrayOfEvent, ArrayOfManagedObjectReference,
and ArrayOfString, and corresponding ʺgetʺ methods. To extract the actual array from a property of type
xsd:anyType, cast DynamicProperty.val to the appropriate array type and use the matching get method –
for example, getEvent(), getManagedObjectReference(), or getString().The following sections provide
examples of how to cast returned values for a few of the array types. The code uses the JAX‐WS‐generated Java
bindings for the VMware vSphere Web Services SDK WSDL. Each of the code fragments uses this logic:
Use the DynamicProperty.getVal() method to retrieve the anyType property value.
Specify the appropriate array type to cast the anyType value.
Use the corresponding get method to assign the result of the cast operation to a list variable.
Indexed arrays are accessed by using an index integer. Indexed arrays are used for arrays of data types
whose positions in the array do not change. For example, the roleList property of the
AuthorizationManager managed object is an array of authorization roles. Adding a new role to the
array does not change the position of existing elements in the array.
Key‐based arrays are used for information whose position is subject to change. A key‐based array (same
basic concept as a Perl hash or a Python dictionary) uses a unique, unchanging value as a key to access an
element’s value. Typically, the key is a string, but integers can also be used. For example, Event arrays use
integers as keys. Nested properties can also refer to entries in a key‐based array. For example,
a.b.c["xyz"] refers to the property c that has the key value of xyz.
The vSphere management object model uses key‐based arrays to track managed object references. The
contents of a key‐based array property are accessed by the value of either the key property or, in the case
of a managed object reference, its value property. The value of these fields is unique across all the
components of an array.
24 VMware, Inc.
Chapter 2 vSphere API Programming Model
For example, if you are programming in Java or C#, the value you will receive for an unset property is “null”.
Figure 2‐5 shows part of the Properties table for the HostFirewallInfo Data Object in the vSphere Web Services
SDK API Reference. When you look at properties in the vSphere Web Services SDK API Reference, you can see that
optional properties are marked with a red asterisk.
In this example, that the defaultPolicy property is always returned, but the ruleset property will be returned as
a null value if it has not been set.
Since Data Objects are part of many different constructs, there is no standard scenario for when an optional
property should be set, what will happen if an optional property is left unset, or what you should do if a null
value is returned.
% Percent sign %25
/ Slash %2F, %2f
\ Backslash %5C, %5c
‐ Dash %2D, %2d
. Dot %2E, %2e
“ Double quotation mark %2B, %2b
VMware, Inc. 25
vSphere Web Services SDK Programming Guide
26 VMware, Inc.
3
Client Applications 3
Any client application that you create using the vSphere Web Services SDK must connect to the server and pass
user account credentials to authenticate to the server. After the connection has been established, the client
application can use vSphere services to access the virtual environment.
This chapter includes the following topics:
“Basic Client Application Capability” on page 27
“Overview of a Java Sample Application” on page 27
“Web Server Session Token” on page 31
“Multiple Versions of the vSphere API” on page 35
“Identifying the API Version Supported by the Server” on page 36
“Helper Classes for C# Sample Applications” on page 36
1 Create a connection to the vSphere server Web service.
2 Instantiate a local proxy object for reference to ServiceInstance. Use this local proxy object to retrieve
the ServiceContent object from the server. ServiceContent contains a reference to the root folder for
the inventory and references to the managed objects that provide the vSphere services.
3 Instantiate a local proxy object for access to vSphere API methods.
4 Log in to the server using appropriate credentials (user account, password, and optionally the locale).
5 Access server‐side objects to retrieve data and perform management operations.
6 Close the connection.
Most of the vSphere Web Services SDK samples do not handle exceptions, and they accept all security
certificates. Use the samples as examples for extracting the types of data you want to view, but do not use these
trust store or exception techniques in your production applications.
VMware, Inc. 27
vSphere Web Services SDK Programming Guide
Example 3‐1 is a stand‐alone application that accepts command‐line arguments for the vSphere server name
(DNS name or IP address), user name, and password.
1 Import the vSphere Web Services API libraries:
import com.vmware.vim25.*;
2 Import the necessary Java (and JAX‐WS connection, bindings, and SOAP) libraries:
import java.util.*;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.soap.SOAPFaultException;
3 Create the TestClient class:
public class TestClient {
4 Include the class variable declarations/definitions. Use a TrustManager class to accept all certificates, as
shown in “Accessing the HTTP Endpoint with JAX‐WS” on page 31. This is not appropriate for a
production environment. Production code should implement certificate support.
5 Use the vSphere Web Services APIs to create the connection, as shown in Appendix 3, “Accessing the
vSphere Server,” on page 33.
6 Retrieve data from the vSphere or vCenter server. In this example, we are just going to print out the
product name, server type, and product version to prove that the client is connected and working
correctly.
System.out.println(serviceContent.getAbout().getFullName());
System.out.println("Server type is " + serviceContent.getAbout().getApiType());
System.out.println("API version is " + serviceContent.getAbout().getVersion());
7 Use the VimPort object to close the connection, as shown in “Closing the Connection” on page 33. Always
close your server connections to maintain security.
28 VMware, Inc.
Chapter 3 Client Applications
// Initialize the contexts; the session context takes the trust manager.
sslsc.setSessionTimeout(0);
sc.init(null, trustAllCerts, null);
// Use the default socket factory to create the socket for the secure connection
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
VMware, Inc. 29
vSphere Web Services SDK Programming Guide
// Store the Server URL in the request context and specify true
// to maintain the connection between the client and server.
// The client API will include the Server's HTTP cookie in its
// requests to maintain the session. If you do not set this to true,
// the Server will start a new session with each request.
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
ctxt.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
// print out the product name, server type, and product version
System.out.println(serviceContent.getAbout().getFullName());
System.out.println("Server type is " + serviceContent.getAbout().getApiType());
System.out.println("API version is " + serviceContent.getAbout().getVersion());
Use the following command to execute the compiled class (binary) file:
c:>java -classpath path-to-vim25.jar TestClient web-service-url user-name user-password
30 VMware, Inc.
Chapter 3 Client Applications
Each of the stand‐alone samples in the SDK\vsphere-ws\java\JAX-WS\samples\com\vmware\ uses the
JAX‐WS TrustAllTrustCertificates class, as discussed in Example 3‐2 to ignore certificates, obtain a session
token, and then connect to the server.
CAUTION We DO NOT recommend that you trust all certificates in a production environment. Instead, you
can look at the sample code to see how the JAX‐WS libraries are used when making the connection, but set up
an SSL policy that only allows connection to trusted certificates.
The logic for getting a cookie and putting it in the header looks like this:
//cookie logic
List cookies = (List) headers.get("Set-cookie");
cookieValue = (String) cookies.get(0);
StringTokenizer tokenizer = new StringTokenizer(cookieValue, ";");
cookieValue = tokenizer.nextToken();
String path = "$" + tokenizer.nextToken();
String cookie = "$Version=\"1\"; " + cookieValue + "; " + path;
((BindingProvider) vimPort).getRequestContext().put(
MessageContext.HTTP_REQUEST_HEADERS, map);
1 In this example we use a TrustManager class to accept all certificates. This is not appropriate for a
production environment. Production code should implement certificate support.
private static class TrustAllTrustManager implements javax.net.ssl.TrustManager,
javax.net.ssl.X509TrustManager {
VMware, Inc. 31
vSphere Web Services SDK Programming Guide
2 Include the Server URL and credentials as arguments in the main method:
public static void main(String[] args) {
try {
String serverName = args[0];
String userName = args[1];
String password = args[2];
String url = "https://"+serverName+"/sdk/vimService";
3 Declare variables of the following types for access to vSphere server objects:
ManagedObjectReference for the ServiceInstance.
VimService object for access to the Web service.
VimPortType object for access to all of the methods defined in the vSphere API.
ServiceContent for access to the managed object services on the server.
The following Java code fragment shows these variable declarations:
ManagedObjectReference SVC_INST_REF
VimService vimService;
VimPortType vimPort;
ServiceContent serviceContent;
4 Declare a host name verifier that will automatically enable the connection. The host name verifier is
invoked during the SSL handshake.
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
5 Instantiate the trust manager object.
// Create the trust manager.
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
javax.net.ssl.TrustManager tm = new TrustAllTrustManager();
trustAllCerts[0] = tm;
6 Create the SSL context
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
7 Create the session context
javax.net.ssl.SSLSessionContext sslsc = sc.getServerSessionContext();
8 Initialize the contexts; the session context takes the trust manager.
sslsc.setSessionTimeout(0);
sc.init(null, trustAllCerts, null);
9 Use the default socket factory to create the socket for the secure connection
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
10 Set the default host name verifier to enable the connection.
HttpsURLConnection.setDefaultHostnameVerifier(hv);
32 VMware, Inc.
Chapter 3 Client Applications
1 Create a managed object reference for the ServiceInstance object on the server.
ManagedObjectReference SVC_INST_REF = new ManagedObjectReference();
SVC_INST_REF.setType("ServiceInstance");
SVC_INST_REF.setValue("ServiceInstance");
2 Create a VimService object to obtain a VimPort binding provider. The BindingProvider object provides
access to the protocol fields in request/response messages. Retrieve the request context which will be used
for processing message requests.
The VimServiceLocator and VimPortType objects provide access to vSphere servers. The getVimPort
method returns a VimPortType object that provides access to the vSphere API methods.
vimService = new VimService();
vimPort = vimService.getVimPort();
Map<String, Object> ctxt = ((BindingProvider) vimPort).getRequestContext();
3 Store the Server URL in the request context and specify true to maintain the connection between the client
and server. The client API will include the Serverʹs HTTP cookie in its requests to maintain the session. If
you do not set this to true, the Server will start a new session with each request.
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
ctxt.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
4 Retrieve the ServiceInstance content (the ServiceContent data object) and log in to the server.
serviceContent = vimPort.retrieveServiceContent(SVC_INST_REF);
vimPort.login(serviceContent.getSessionManager(),
userName,
password,
null);
isConnected = true;
VMware, Inc. 33
vSphere Web Services SDK Programming Guide
SVC_INST_REF.setType(SVC_INST_NAME);
SVC_INST_REF.setValue(SVC_INST_NAME);
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
ctxt.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
serviceContent = vimPort.retrieveServiceContent(SVC_INST_REF);
headers =
(Map) ((BindingProvider) vimPort).getResponseContext().get(
MessageContext.HTTP_RESPONSE_HEADERS);
vimPort.login(serviceContent.getSessionManager(),
userName,
password, null);
isConnected = true;
propCollectorRef = serviceContent.getPropertyCollector();
rootRef = serviceContent.getRootFolder();
}
...
If the connection is closed, the session becomes invalid.
Example 3‐3 shows an example that uses Java with the Axis client libraries to obtain the session token from the
current SOAP message context. The example casts the token to a String. With the session token in String
form, you can save it locally to a file on the client for subsequent reuse. In your connection setup code, you can
check for an existing session file and use that session file as needed.
34 VMware, Inc.
Chapter 3 Client Applications
Example 3-3. Obtaining a Session Token from the Web Services Context with Axis
org.apache.axis.client.Stub clientStub = (org.apache.axis.client.Stub)_service;
org.apache.axis.client.Call callObj = clientStub._getCall();
org.apache.axis.MessageContext msgContext = callObj.getMessageContext();
String sessionString = (String)msgContext.getProperty(
org.apache.axis.transport.http.HTTPConstants.HEADER_COOKIE);
Session tokens returned from connections to VirtualCenter Server 2.5 and ESX/ESXi 3.5, for example, might
look like the following:
vCenter Server vmware_soap_session="63869259-F0FF-4DB5-9B3B-6493212AB9CD"
ESX/ESXi vmware_soap_session="52b1910a-31ad-df35-95d1-210f86c55efb"
With every connection, the identifier is passed from the client to the server in the HTTP header. Session tokens
can be passed across multiple connections to the Web service. By default, sessions expire after 30 minutes of
inactivity.
...
_locator = new VimServiceLocator();
_locator.setMaintainSession(true);
_service = _locator.getVimPort(new URL(url));
...
Client applications convey information about the API version used in the SOAP messages that they send to a
vSphere server. These SOAP messages include a versionID in the soapAction attribute. The details are
handled transparently by the SOAP toolkit and the client proxy code. The server adjusts its behavior based on
the client’s version information, exposing the API version that the client supports to the client.
Starting with vSphere 4.0, information about the supported API versions is contained in an XML file,
vimServiceVersions.xml, located on the server (Example 3‐4).
If you are developing a client application that must support multiple server versions at the same time
(ESX/ESXi 5.0 and ESX/ESXi 3.x, for example), you must obtain information about the API versions that are
supported on the server and provide logic in your code to use or not use features, based upon the version
information.
VMware, Inc. 35
vSphere Web Services SDK Programming Guide
Example 3‐5 is an excerpt from the VersionUtil.java sample that demonstrates this general approach.
See the getTargetNameSpaceAndVersion method of VersionUtil.java located in the vSphere Web
Services SDK package for more information.
Example 3-5. Determining the URL from Which to Obtain the API Version Information
try {
String wsdlUrlString = "";
String vimServiceXmlUrlString = "";
Java Samples
The Java samples in your vSphere Web Services SDK include .java files that you can compile and then run
using any Java editor or IDE. The samples accept command‐line arguments for the vSphere server name (DNS
name or IP address), user name, and password.
C# Samples
The C# samples in your vSphere Web Services SDK include a .cs file and three project files in each directory
(.proj, 2008.proj, and 2010.proj) so you can run them using Microsoft’s Visual Studio.
Like the Java samples, the C# samples also accept command‐line arguments for the vSphere server name (DNS
name or IP address), user name, and password, and they accept all certificates to establish the SSL handshake.
Unlike the Java samples, the C# samples use the helper classes discussed in “Helper Classes for C# Sample
Applications” on page 36.
36 VMware, Inc.
Chapter 3 Client Applications
The helper classes (listed in Table 3‐1) handle command‐line input such as common parameters, server name,
and other details. These helper classes are located in the unpacked C# version of the SDK download, in this
location:
Table 3‐1 lists the helper classes available for C#.
AppUtil.cs Convenient methods you can use to handle user input from command line.
Catches errors (faults). Logs output to console.
ArgumentHandlingException.cs Convenient methods you can use to handle exceptions.
(NEW)
ClientUtil.cs Convenient methods you can use to handle user input from command line.
Catches errors (faults). Logs output to console.
ServiceUtil.cs Wrapper methods for the vimService methods (the local proxy code methods) for
API 2.0 and prior releases.
ServiceUtilV25.cs Wrapper methods for the vimService methods (the local proxy code methods) for
API 4.0, API 3.5U2, API 3.5 U1, API 3.5, and other recent releases.
TrustAllCertificatePolicy.cs Creates an instance of local proxy for connecting to the server, and obtains
managed object references to several needed managed objects—
ServiceInstance, ServiceContent, rootFolder.
VersionUtil.cs Helper class for identifying API version.
VMUtils.cs (NEW) Convenient methods you can use to handle
VMware, Inc. 37
vSphere Web Services SDK Programming Guide
38 VMware, Inc.
4
Datacenter Inventory 4
The vSphere inventory is a representation of the vSphere datacenter and the objects in the datacenter. Knowing
how the objects in the datacenter relate to each other helps you traverse the inventory hierarchy and access the
objects you want to manipulate.
The chapter includes the following topics:
“Inventory Overview” on page 39
“Inventory Hierarchies and ServiceInstance” on page 40
“Accessing Inventory Objects” on page 41
“Creating Inventory Objects” on page 42
“Privileges Required for Inventory Management” on page 42
“Managed and Standalone ESX/ESXi Hosts” on page 44
Inventory Overview
The vSphere inventory contains the following types of objects:
Systems in the datacenter: Host, VirtualMachine, and VirtualApp.
Support components: ComputeResource, Datastore, Network, and virtual devices.
Organizational components: Folder and Datacenter
When you manage the virtual infrastructure, you access objects and their properties and methods based on
their location in the inventory. Understanding the inventory structure is therefore critical for any
programming task. You always start with the ServiceInstance associated with a session, which is the root
object of the inventory, and traverse the inventory hierarchy from there. See Chapter 5, “Property Collector,”
on page 47. How you access objects depends on whether your client application is connected to a vCenter
Server or an ESX/ESXi system.
VMware, Inc. 39
vSphere Web Services SDK Programming Guide
When you access a vCenter Server System, the hierarchy shown in Figure 4‐1 allows you to traverse the
inventory.
CAUTION If your ESX/ESXi hosts are managed by a vCenter Server, you must always access your hosts
through the vCenter server. The vCenter server keeps track of all synchronous and asynchronous operations,
and will have the latest status and inventory information about each ESX/ESXi host. Therefore, connecting
directly to a host that is managed by a vCenter Server may give you incorrect or incomplete data.
When you have ESX/ESXi hosts that are not managed by a vCenter Server, your application can connect to each
host directly.
A folder for VirtualMachine, template, and VirtualApp objects.
A folder for a ComputeResource hierarchy.
A folder for Network, DistributedVirtualSwitch, and DistributedVirtualPortgroup objects.
A folder for Datastore objects.
In a large deployment, the nested structure allows you to organize the objects in the datacenter into an easily
manageable structure by using multiple folders and datacenters.
For a standalone ESX/ESXi system, only a single datacenter is supported, and the Folder managed entity does
not support creating additional Folder objects or Datacenter objects.
40 VMware, Inc.
Chapter 4 Datacenter Inventory
Every managed entity has a parent property that identifies its relative position in the inventory hierarchy.
The Folder managed object has a childEntity property that identifies objects in a folder instance.
Figure 4‐3 shows the childEntity and folder properties that define the default objects in the inventory of a
standalone ESX/ESXi system. The inventory begins with the ServiceContent.rootFolder property. The
rootFolder has a childEntity that consists of a managed object reference to a Datacenter managed object.
VMware, Inc. 41
vSphere Web Services SDK Programming Guide
Datacenter
DistributedVirtualSwitch
VirtualMachine
Cluster
Folder
When you create these objects, they are automatically created in the folder you invoked the creation method
from.
While some managed entities are created through a method on the Folder managed entity, other managed
entities are instantiated directly. For example, the HostDatastoreSystem has methods for creating datastores
such as CreateNasDatastore and CreateVmfsDatastore.
IMPORTANT When you create an inventory object, you must stay within the bounds of the host’s capabilities,
accessible through the HostSystem.capability property, which is a HostCapability data object. For
example, a HostCapability object might have the maxSupportedVMs property specified.
42 VMware, Inc.
Chapter 4 Datacenter Inventory
For example, creating a virtual machine requires that the principal associated with the session have the
following privileges:
The VirtualMachine.Inventory.Create privilege on the folder in which to create the virtual machine.
The Resource.AssignVMToPool privilege on the resource pool from which the virtual machine obtains
its allocation of CPU and memory resources.
Reading the perfCounter property of the PerformanceManager managed object requires the System.View
privilege on the root folder.
IMPORTANT Some privileges are specific to objects on vCenter Server or specific to ESX/ESXi. For example,
the Alarm.Create privilege associated with AlarmManager is available only through vCenter Server systems.
Privileges
A privilege is a system‐defined requirement associated with a VMware vSphere managed object. Privileges
are static and do not change for a version of a product. Privileges for vSphere components are defined as
follows:
<group>[.<group>].privilege
For example:
Datacenter.Create
Host.Config.Connection
Host.Config.Snmp
Permissions
Permissions are the associations of roles with privileges on a specified managed entity. You use permissions
to specify which users can access which managed entity.
A child entity inherits the permissions of its parent if the parent’s propagate property is set to true. A
permission that is set directly on a child overrides the permission in the parent. To grant permission to all child
entities of a Datacenter object, assign permissions to the Datacenter object and set the Permission object’s
propagate property to true.
Figure 4‐4 shows that users root and vpxuser both have permissions on the rootFolder of the inventory.
The vpxuser is the account created on a host by the vCenter Server system when that host is added to the
vCenter Server system. The vCenter Server needs access to the inventory objects of the host systems that it
manages, so the vpxuser account is granted privileges to the rootFolder of each host.
VMware, Inc. 43
vSphere Web Services SDK Programming Guide
Standalone ESX/ESXi hosts are standalone hosts with limited capabilities. The inventory of a standalone
host can support multiple virtual machines and multiple resource pools, but it contains a single default
datacenter and a single root folder. The default datacenter and root folder are not visible in the vSphere
Client, but they exist in the inventory of a standalone host and they are visible in the MOB.
Managed ESX/ESXi hosts have been added to the vCenter Server inventory. Available features depend on
the licenses available for that host. For example, you can configure two or more hosts for VMware DRS
resource management or VMware HA failover protection.
44 VMware, Inc.
Chapter 4 Datacenter Inventory
Table 4‐1 summarizes the differences between the number of objects that an inventory can contain. See also
Figure 4‐2, “ESX/ESXi Inventory Hierarchy,” on page 41 and Figure 4‐1, “vCenter Server Inventory
Hierarchy,” on page 40.
VMware, Inc. 45
vSphere Web Services SDK Programming Guide
46 VMware, Inc.
5
Property Collector 5
vSphere servers provide the PropertyCollector service for accessing data and monitoring changes. Use the
PropertyCollector to obtain references to managed objects, to obtain values of managed object properties,
and to monitor and retrieve modified property values.
This chapter includes the following topics:
“Introduction to the PropertyCollector” on page 47
“vSphere Data Objects for Property Collection” on page 48
“vSphere Methods for Property Collection” on page 48
“PropertyCollector Example (RetrievePropertiesEx)” on page 49
“Inventory Traversal” on page 56
“Client Data Synchronization (WaitForUpdatesEx)” on page 67
“Server Data Transmission” on page 69
“PropertyCollector Performance” on page 69
“SearchIndex” on page 69
The PropertyCollector uses one or more filters to determine the scope of collection and it has methods to
retrieve data. A filter uses a set of data objects that specify the following information:
Starting point for inventory traversal during the collection operation.
Inventory traversal path.
Objects and properties from which data will be collected.
A vSphere server creates a default PropertyCollector for every session, and allows you to create multiple,
additional PropertyCollector objects. Create additional PropertyCollector objects, using one per thread,
to perform mutually independent collection operations.
VMware, Inc. 47
vSphere Web Services SDK Programming Guide
Data Retrieval
There are two ways to retrieve data:
Property retrieval as a single operation uses the RetrievePropertiesEx and
ContinueRetrievePropertiesEx methods. These methods perform a single collection operation.
Incremental property retrieval, also referred to as property monitoring, uses the WaitForUpdatesEx
method. The initial call to this method retrieves a baseline set of managed object property values.
Subsequent calls retrieve changes in property values since the last retrieval. Use WaitForUpdatesEx to
monitor changes to the inventory or any managed object properties.
You can use vSphere view objects (for example, ContainerView) in filters to simplify traversal specification.
A view maintains a subset of inventory objects, so if there is a change in the inventory hierarchy, you do not
have to recreate the view. Use a view to specify a set of objects that the PropertyCollector can use for data
collection.
ObjectSpec Identifies the starting object for property collection. An ObjectSpec also identifies
additional objects for collection.
TraversalSpec Identifies the type of object for property collection. It also provides one or more paths
for inventory traversal.
SelectionSpec Acts as a placeholder reference to a TraversalSpec.
PropertySpec Identifies properties for collection.
View objects Identify a subset of the vSphere inventory objects.
If your client application does not keep a synchronized representation of server state, use the
RetrievePropertiesEx method. RetrievePropertiesEx instantiates a filter, collects the specified
objects and properties, and returns the data to your client application as an ObjectContent data object.
The server does not add the filter to the PropertyCollector.filter array. The server destroys the filter
after returning the results to your client.
If your application maintains a synchronized representation of server state, use the CreateFilter and
WaitForUpdatesEx methods. WaitForUpdatesEx returns descriptions of property changes, organized
by the filter that identified the properties.
In either case, you create a PropertyFilterSpec data object to specify the objects and properties you want to
retrieve from the server.
48 VMware, Inc.
Chapter 5 Property Collector
Table 5‐2 shows the PropertyCollector methods organized by the context in which you use them. For more
information about these methods, see the vSphere API Reference.
DestroyPropertyCollector Destroys an instance of a PropertyCollector that was
created by a call to CreatePropertyCollector from
your client application.
CancelRetrievePropertiesEx Cancels a RetrievePropertiesEx or
ContinueRetrievePropertiesEx operation.
CancelWaitForUpdatesEx Cancels a WaitForUpdatesEx operation.
Accepts command line arguments for the vSphere server name (DNS name or IP address), user name, and
password.
Connects to a vSphere server.
Uses a ContainerView to create a subset of the inventory; the subset contains only virtual machines.
Uses the RetrievePropertiesEx method for a single retrieval operation.
Collects the names of all of the virtual machines in the inventory and prints the names using the standard
output stream.
The following procedure uses code fragments from Example 5‐1. The complete example includes server
connection code; this procedure only describes the task of using the PropertyCollector. For a description of
server connection, see “To build a simple vSphere client application” on page 28.
VMware, Inc. 49
vSphere Web Services SDK Programming Guide
1 Get references to the ViewManager and the PropertyCollector.
In the example, sContent is the variable for the ServiceContent data object. sContent provides the
methods to retrieve the managed object references to the vSphere services.
ManagedObjectReference viewMgrRef = sContent.getViewManager();
ManagedObjectReference propColl = sContent.getPropertyCollector();
2 Create a container view for virtual machines.
methods is the variable for the VimPortType object. VimPortType defines the Java methods that
correspond to the vSphere API methods. The createContainerView parameters container (the
inventory root folder, returned by the method sContent.getRootFolder) and type (“Virtual Machine”)
direct the ViewManager to select virtual machines, starting at the root folder. The value true for the
recursive parameter extends the selection beyond the root folder so that the ViewManager will follow
child folder paths to add virtual machines to the view. The container view provides references to all
virtual machines in the inventory.
List<String> vmList = new ArrayList<String>();
vmList.add("VirtualMachine");
3 Create an object specification to define the starting point for inventory navigation.
The ObjectSpec.obj property identifies the starting object (the container view). This example collects
only virtual machine data, so the skip property is set to true to ignore the container view itself during
collection.
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(cViewRef);
oSpec.setSkip(true);
4 Create a traversal specification to identify the path for collection.
The TraversalSpec properties type and path determine path traversal. TraversalSpec.type
identifies an object type. TraversalSpec.path identifies a property in the type object. The
PropertyCollector uses the path object to select additional objects.
This example uses a single TraversalSpec to walk the list of virtual machines that are available through
the container view. The following code fragment specifies the ContainerView object for the
TraversalSpec.type property and the view property in the ContainerView for the
TraversalSpec.path property. The skip property is set to false, so the PropertyCollector will
collect data from the path objects (the virtual machines in the container view).
TraversalSpec tSpec = new TraversalSpec();
tSpec.setName("traverseEntities");
tSpec.setPath("view");
tSpec.setSkip(false);
tSpec.setType("ContainerView");
5 Add the TraversalSpec to the ObjectSpec.selectSet array.
oSpec.getSelectSet().add(tSpec);
6 Identify the properties to be retrieved.
The example program creates a PropertySpec data object to specify the properties to be collected. The
type property is set to VirtualMachine to match the object selections in the container view. The pathSet
property identifies one or more properties in the type object.
50 VMware, Inc.
Chapter 5 Property Collector
This example specifies the VirtualMachine.name property.
PropertySpec pSpec = new PropertySpec();
pSpec.setType("VirtualMachine");
pSpec.getPathSet().add("name");
7 Add the object and property specifications to the property filter specification.
A PropertyFilterSpec must have at least one ObjectSpec and one PropertySpec.
PropertyFilterSpec fSpec = new PropertyFilterSpec();
fSpec.getObjectSet().add(oSpec);
fSpec.getPropSet().add(pSpec);
8 Create a list for the filters and add the spec to it.
List<PropertyFilterSpec> fSpecList = new ArrayList<PropertyFilterSpec>();
fSpecList.add(fSpec);
9 Retrieve the data.
To invoke a single property collection operation, call the RetrievePropertiesEx method. The example
application passes the populated PropertyFilterSpec and an empty options structure to the method.
The default for the RetrieveOptions.maxObjects specifies that no maximum for the number of objects
that can be returned is set. The PropertyCollector can impose a maximum. If the number of collected
objects is greater than the maximum, the PropertyCollector returns a token value in the
RetrieveResult data object and this token is used to retrieve the remaining properties using the
ContinueRetrievePropertiesEx API method. For more information, see “Server Data Transmission”
on page 69.
RetrieveOptions ro = new RetrieveOptions();
RetrieveResult props = methods.retrievePropertiesEx(propColl,fSpecList,ro);
10 Print the virtual machine names.
The following code fragment walks the list of ObjectContent objects returned in the RetrieveResult
object. For each object (ObjectContent), the inner loop prints the name‐value pairs.
if (props != null) {
for (ObjectContent oc : props.getObjects()) {
String vmName = null;
String path = null;
List<DynamicProperty> dps = oc.getPropSet();
if (dps != null) {
for (DynamicProperty dp : dps) {
vmName = (String) dp.getVal();
path = dp.getName();
System.out.println(path + " = " + vmName);
}
}
}
}
}//end collectProperties()
VMware, Inc. 51
vSphere Web Services SDK Programming Guide
obj Virtual
ContainerView
Machine
selectSet TraversalSpec Folder
container
[...]
Virtual Virtual
type=“ContainerView” type =“VirtualMachine” Machine
Machine
Folder
path=”view” view [ ]
name
[...] [...]
propSet PropertySpec
Virtual
[...] Machine
type=”VirtualMachine”
pathSet=”name” name
[...]
import java.util.*;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.soap.SOAPFaultException;
// PropertyCollector example
// command line input: server name, user name, password
52 VMware, Inc.
Chapter 5 Property Collector
VMware, Inc. 53
vSphere Web Services SDK Programming Guide
// arglist variables
String serverName = args[0];
String userName = args[1];
String password = args[2];
String url = "https://"+serverName+"/sdk/vimService";
54 VMware, Inc.
Chapter 5 Property Collector
// Initialize the contexts; the session context takes the trust manager.
sslsc.setSessionTimeout(0);
sc.init(null, trustAllCerts, null);
// Use the default socket factory to create the socket for the secure connection
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// Store the Server URL in the request context and specify true
// to maintain the connection between the client and server.
// The client API will include the Server's HTTP cookie in its
// requests to maintain the session. If you do not set this to true,
// the Server will start a new session with each request.
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
ctxt.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
// retrieve data
collectProperties( vimPort, serviceContent );
}
}
VMware, Inc. 55
vSphere Web Services SDK Programming Guide
Inventory Traversal
Example 5‐1 uses a ContainerView to specify the objects that start the collection process. This is the simplest
way to set up a filter, using a single reference to a view to provide the PropertyCollector with access to a
set of objects. To select objects from the inventory, a filter includes TraversalSpec and possibly
SelectionSpec objects. Use these objects to make object selections based on the references in a view, and to
extend inventory traversal beyond those objects (or beyond the object specified in ObjectSpec.obj).
TraversalSpec Traversal
Use a TraversalSpec object to identify a managed object type and a traversal property in that type.
TraversalSpec contains the following properties:
type – identifies an inventory object type.
path – specifies a managed object reference property in the type object. This property provides the
traversal path extending from this object.
selectSet – specifies an optional list of selection objects for additonal object traversal paths. The
PropertyCollector applies the TraversalSpec objects in the selectSet array to the result of the
traversal (the target of TraversalSpec.path). The selectSet array can also contain SelectionSpec
objects; a SelectionSpec is a reference to a TraversalSpec. See “SelectionSpec Traversal” on page 62.
skip – indicates whether to collect properties for the path object.
During inventory traversal, the PropertyCollector applies the PropertySpec object or objects
(PropertyFilterSpec.propSet) to objects. Inventory traversal begins with the object identified by
ObjectSpec.obj and continues by following TraversalSpec paths. If PropertySpec.type matches the
current object type, and the skip property is false, the PropertyCollector sends the
PropertySpec.pathSet properties to your client.
Figure 5‐2 is a representation of a PropertyFilterSpec that defines traversal of VirtualMachine objects.
The filter uses a ContainerView as a starting point. The TraversalSpec for the ContainerView specifies the
view property for access to the view’s virtual machines. The figure shows TraversalSpec objects that extend
navigation from a VirtualMachine object to the associated Network and ResourcePool objects. The
PropertyCollector applies these TraversalSpec objects to each of the VirtualMachine objects in the view
list. The figure also shows the PropertySpec objects for collecting data from VirtualMachine, Network, and
ResourcePool objects.
56 VMware, Inc.
Chapter 5 Property Collector
PropertyFilterSpec
objectSet[ ] ObjectSpec
selectSet[ ] TraversalSpec
propSet[ ]
[...] [...]
type=“ContainerView”
path=”view”
selectSet[ ]
[...]
Server Inventory
[VirtualMachine folder]
TraversalSpec
type=”VirtualMachine” VirtualMachine
path=”resourcePool” resourcePool
[...] network
[...]
TraversalSpec
name
type=”VirtualMachine”
path=”network”
[...]
PropertySpec
obj=”VirtualMachine”
pathSet[ ]=”name”
[...]
[Network folder]
PropertySpec
obj=”Network” Network
obj=”ResourcePool” ResourcePool
pathSet[ ]=“runtime.cpu.maxUsage”
“runtime.memory.maxUsage” runtime
[...] [...]
1 Create a ContainerView for virtual machines.
2 Create an ObjectSpec that uses the container view as the collection starting point.
3 Create a TraversalSpec be applied to the ContainerView to select VirtualMachine objects.
VMware, Inc. 57
vSphere Web Services SDK Programming Guide
4 Create additional TraversalSpec objects to select additional objects.
The SelectSet list for the container view TraversalSpec has two TraversalSpec objects. Both specify
a VirtualMachine object context. One object uses the network property to extend traversal to the
Network managed object. The other uses the resourcePool property to extend traversal to the
ResourcePool managed object.
5 Create PropertySpec objects to retrieve VirtualMachine, Network, and ResourcePool properties.
To retrieve properties that are embedded in data objects, the PropertySpec.PathSet property uses dot
notation to specify the property paths.
import java.util.*;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.soap.SOAPFaultException;
// PropertyCollector example
// command line input: server name, user name, password
ManagedObjectReference cViewRef =
methods.createContainerView(viewMgrRef,
sContent.getRootFolder(),
vmList,
true);
58 VMware, Inc.
Chapter 5 Property Collector
VMware, Inc. 59
vSphere Web Services SDK Programming Guide
60 VMware, Inc.
Chapter 5 Property Collector
// arglist variables
String serverName = args[0];
String userName = args[1];
String password = args[2];
String url = "https://"+serverName+"/sdk/vimService";
// Initialize the contexts; the session context takes the trust manager.
sslsc.setSessionTimeout(0);
sc.init(null, trustAllCerts, null);
// Use the default socket factory to create the socket for the secure connection
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// Store the Server URL in the request context and specify true
// to maintain the connection between the client and server.
// The client API will include the Server's HTTP cookie in its
// requests to maintain the session. If you do not set this to true,
// the Server will start a new session with each request.
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
ctxt.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
VMware, Inc. 61
vSphere Web Services SDK Programming Guide
// retrieve data
collectProperties( vimPort, serviceContent );
}
}
SelectionSpec Traversal
The selectSet array in ObjectSpec and TraversalSpec objects can include TraversalSpec objects and
SelectionSpec objects. SelectionSpec is the base class for TraversalSpec objects. SelectionSpec defines
the name property. You can use a SelectionSpec object in a selectSet array as a reference to a named
TraversalSpec object. By using SelectionSpec references, you can reuse a TraversalSpec and you can
define recursive traversal.
PropertyFilterSpec
objectSet[ ] ObjectSpec
[...]
selectSet[ ] TraversalSpec
[...]
type=“Network”
path=”vm” SelectionSpec
selectSet[ ] name=”vmTraversal”
ObjectSpec
selectSet[ ] TraversalSpec
[...]
type=“DataStore”
path=”vm” SelectionSpec
selectSet[ ] name=”vmTraversal”
ObjectSpec
selectSet[ ] TraversalSpec
[...]
type=“VirtualMachine”
path=”resourcePool”
name=”vmTraversal”
62 VMware, Inc.
Chapter 5 Property Collector
If the ObjectSpec.selectSet array contains a SelectionSpec, the referenced TraversalSpec must
identify the same object type. TraversalSpec.type must match the type of the object specified in
ObjectSpec.obj. The PropertyCollector applies the TraversalSpec to the object and use the
TraversalSpec.path property to extend its traversal.
Recursive Traversal
Use a SelectionSpec to apply a TraversalSpec to the results of its own traversal. To use a recursive filter
construction, create a SelectionSpec that specifies the name of a TraversalSpec and add it to the named
TraversalSpec selection set. The recursive construction extends inventory traversal beyond the paths
directly represented by TraversalSpec objects.
You can use recursive traversal on any inventory objects that can be nested. See “Inventory Hierarchies and
ServiceInstance” on page 40 for a general representation of the structure of an inventory. For example, on a
vCenter Server, folders can nest to arbitrary depths. To describe a traversal path through a succession of
folders, you can add a SelectionSpec to the Folder TraversalSpec. The SelectionSpec must reference
the TraversalSpec. Figure 5‐4 shows a representation of a TraversalSpec and its associated
SelectionSpec for nested folder traversal.
TraversalSpec
type=“Folder”
path=”childEntity”
selectSet SelectionSpec
name=”folderTraversal” name=”folderTraversal”
1 Use the SearchIndex managed object to retrieve the managed object reference for the top‐level virtual
machine folder.
This folder is used as the beginning of the inventory traversal. For more information see “SearchIndex”
on page 69.
2 Create an ObjectSpec object that references the top‐level virtual machine folder.
3 Create a SelectionSpec object that references the Folder TraversalSpec by name.
4 Create a named TraversalSpec for Folder objects.
The TraversalSpec.path property identifies the Folder.childEntity property for traversal to any
child objects.
5 Add the SelectionSpec to the TraversalSpec to create the recursive filter.
6 Add the TraversalSpec to the ObjectSpec.
7 Create a PropertySpec for the Folder name.
8 Add the object and property specifications to the PropertyFilterSpec.
9 Call the RetrievePropertiesEx method.
VMware, Inc. 63
vSphere Web Services SDK Programming Guide
import java.util.*;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.soap.SOAPFaultException;
// PropertyCollector example
// command line input: server name, user name, password
64 VMware, Inc.
Chapter 5 Property Collector
// arglist variables
String serverName = args[0];
String userName = args[1];
String password = args[2];
String url = "https://"+serverName+"/sdk/vimService";
VMware, Inc. 65
vSphere Web Services SDK Programming Guide
// Initialize the contexts; the session context takes the trust manager.
sslsc.setSessionTimeout(0);
sc.init(null, trustAllCerts, null);
// Use the default socket factory to create the socket for the secure connection
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// Store the Server URL in the request context and specify true
// to maintain the connection between the client and server.
// The client API will include the Server's HTTP cookie in its
// requests to maintain the session. If you do not set this to true,
// the Server will start a new session with each request.
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
ctxt.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
66 VMware, Inc.
Chapter 5 Property Collector
// retrieve data
collectProperties( vimPort, serviceContent );
}
}
IMPORTANT The filters you use for incremental retrieval persist for the duration of the session or until you
destroy them.
Property Filters
A PropertyCollector can have one or more associated PropertyFilter objects. A PropertyFilter has
one or more associated PropertyFilterSpec objects. A PropertyFilterSpec that is used with the
RetrievePropertiesEx method has a limited lifespan; the server destroys the filter after returning results to
your client. For a sequence of incremental property collection operations, the WaitForUpdatesEx method
relies on PropertyFilterSpec objects that are available for multiple calls to the method.
To create persistent property filter specifications, use the CreateFilter method. When you call
CreateFilter, you pass a PropertyFilterSpec object to the method. The method adds the new filter to the
PropertyCollector associated with the method invocation and returns a reference to the new filter. After
you have created the filter, you can add additional PropertyFilterSpec objects. You cannot share a filter
with a PropertyCollector in another session.
WaitForUpdatesEx
The WaitForUpdatesEx method supports a polling mechanism for property collection that is based on a
specified wait time.
Specify the following parameters when you call WaitForUpdatesEx:
Managed object reference to a PropertyCollector instance.
version value that identifies a sequence value. The first time you call WaitForUpdatesEx, specify an
empty string (““) to retrieve a complete set of results for the specified properties. Your subsequent calls
should use the version value returned in the previous call. If you don’t include the version value, the
server returns everything. For more information about data versions, see “Server Data Transmission” on
page 69.
options specifying the amount of data to transmit in a single response (the
WaitOptions.maxObjectUpdates property) and the number of seconds the PropertyCollector
should wait for updates (the WaitOptions.maxWaitSeconds property).
The value of the WaitOptions.maxWaitSeconds property determines whether the PropertyCollector uses
an instant retrieval or a polling model. When you call WaitForUpdatesEx with a wait time of 0, it checks for
updates and returns immediately. When you call WaitForUpdatesEx with a wait time greater than 0, the
method waits until the specified time or until a change. WaitForUpdatesEx blocks your process until updates
occur or until it times out. The time‐out is affected by the maxWaitSeconds value, the amount of time it takes
to collect updated property values, and PropertyCollector policy.
VMware, Inc. 67
vSphere Web Services SDK Programming Guide
If the property collection operation times out, and there are no updates to the requested properties, the
PropertyCollector returns null for the WaitForUpdatesEx response.
maxWaitSeconds is an optional property. If you do not specify a value, the PropertyCollector waits as
long as possible for updates. Therefore, if maxWaitSeconds is unset, the waitForUpdatesEx method will
block the thread after all of the data has been retrieved, waiting for the TCP connection with the vSphere
server to timeout. Your code can handle this in one of the following ways: call waitForUpdatesEx from
a separate thread; look for specific updates and then stop calling the method; or change the TCP
connection timeout [BindingProviderProperties.CONNECT_TIMEOUT].)
maxWaitSeconds set to zero specifies an immediate call and response. The PropertyCollector checks
for updates for all properties specified by the union of all filters associated with that instance of the
PropertyCollector. The PropertyCollector returns any results or null if there have been no updates.
maxWaitSeconds greater than zero specifies a wait followed by polling. The PropertyCollector returns
null if no updates are available within maxWaitSeconds.
Table 5‐3 lists some of the advantages and disadvantages of these two operations.
The WaitForUpdatesEx method returns an UpdateSet data object, the composite data structure shown in
Figure 5‐5.
68 VMware, Inc.
Chapter 5 Property Collector
The WaitForUpdatesEx method returns an UpdateSet data object. The UpdateSet.truncated
property indicates whether you must call WaitForUpdatesEx again to retrieve additional data. If
truncated is true, the WaitForUpdatesEx method returns a version string to identify chunked data.
When your client application receives an indication that additional data are available, it must send the
returned UpdateSet.version string in the subsequent call to WaitForUpdatesEx to retrieve the next
chunk of data.
The RetrievePropertiesEx method returns a RetrieveResult data object. The
RetrieveResult.token property indicates whether you must call the
ContinueRetrievePropertiesEx method to retrieve additional data. If the token property has a value,
it identifies chunked data. When your client application receives an indication that additional data are
available, it must send the returned token in the subsequent call to ContinueRetrievePropertiexEx to
retrieve the next chunk of data.
Version strings and tokens are sequenced. Your client application must keep track of the sequence of values.
If an error interrupts the collection operation, resume the operation by using the version string or token that
was submitted before the interruption.
PropertyCollector Performance
These factors can affect the performance of a PropertyCollector for any given session:
Number of objects
Number of properties
Density of property data (composite, nested data objects)
Frequency of changes to the objects and properties on the server
Depth of traversal (number of properties traversed)
In addition, a vSphere server is affected by the number of PropertyCollector instances and the number of
filters each instance is supporting across all sessions on the server.
For VirtualCenter Server 2.5, for an inventory of 2,000 virtual machines supporting about 25 client applications
simultaneously, performance is acceptable up to about 12 moderately complex filters monitoring updates on
all 2,000 virtual machines. If the filters include complex traversal objects, performance might degrade
appreciably unless you reduce the number of filters across the system.
To minimize PropertyCollector overhead and the amount of network traffic for your client application, use
View objects with the PropertyCollector. Example 5‐1 illustrates using views with the
PropertyCollector.
SearchIndex
The SearchIndex managed object provides a set of methods to retrieve references to managed objects in the
vSphere inventory. You can search by managed objects inventory path, IP address, datastore path, DNS name,
and various other identifying attributes. For example, if you know the IP address of a virtual machine, you can
obtain its managed object reference by using the SearchIndex.FindByIp method. You can use SearchIndex
to obtain the reference to a server object, and then use that reference as the starting object for property
collection. See the sample applications SearchIndex.java and SearchIndex.cs for more information about
using SearchIndex. See the vSphere API Reference for more information about SearchIndex methods.
VMware, Inc. 69
vSphere Web Services SDK Programming Guide
70 VMware, Inc.
6
The chapter includes the following topics:
“Objects for Authentication and Authorization Management” on page 71
“Authentication and Authorization for ESX/ESXi and vCenter Server” on page 72
“Setting Up Users, Groups, and Permissions” on page 74
“Obtaining User and Group Information from UserDirectory” on page 75
“Managing ESX/ESXi Users and Groups with HostLocalAccountManager” on page 76
“Managing Roles and Permissions with AuthorizationManager” on page 77
“Authenticating Users Through SessionManager” on page 81
“Using the Credential Store for Automated Login” on page 81
“Managing Licenses with LicenseManager” on page 84
See the vSphere Datacenter Administration Guide for a list of required privileges for common tasks and best
practices for roles and permissions. See Appendix D, “Privileges Reference,” on page 215 for lists of privileges
required to invoke operations and to read properties, and privileges defined for the administrator role.
HostLocalAccountManager is used to create and manage user accounts and groups on ESX/ESXi
systems. Authenticated users can view objects or invoke operations on the server depending on the
permissions associated with their account. See “Managing ESX/ESXi Users and Groups with
HostLocalAccountManager” on page 76.
AuthorizationManager protects vSphere components from unauthorized access. Access to components
is role‐based: Users and groups are assigned roles that encompass the privileges needed to view and
perform operations on vSphere objects. AuthorizationManager has operations for creating new roles,
modifying roles, setting permissions on entities, and handling the relationship between managed objects
and permissions.
UserDirectory provides a look‐up mechanism that returns user‐account information to
AuthorizationManager or to another requestor, such as a client application. See “Obtaining User and
Group Information from UserDirectory” on page 75.
VMware, Inc. 71
vSphere Web Services SDK Programming Guide
SessionManager provides an interface to the authentication infrastructure on the target server system
(see “Authenticating Users Through SessionManager” on page 81).
For vCenter Server systems, SessionManager supports integration with Microsoft SSPI (Security
Service Provider Interface), which enables single sign‐on using Microsoft Windows local accounts or
Active Directory.
For ESX/ESXi systems, SessionManager supports authenticating user accounts as defined on the
host system, such as accounts created using vSphere Client or accounts created programmatically
through the HostLocalAccountManager API.
Even if a user is authorized to perform operations on a vSphere object, the operation fails if the licenses
for the host or the feature have not been assigned. You use LicenseManager and
LicenseAssignmentManager to manage the licenses. See “Managing Licenses with
LicenseManager” on page 84.
These services work together to ensure that only authenticated users can connect to ESX/ESXi or vCenter
Server systems, and that they can access only those objects—folders, virtual machines, datacenters, virtual
services, and so on—for which they have the required privileges and which they are authorized to use or to
view.
In addition, the vSphere Web Services SDK supports automated login through a credential store. See “Using
the Credential Store for Automated Login” on page 81.
72 VMware, Inc.
Chapter 6 Authentication and Authorization
ESX/ESXi leverages standard Linux infrastructure, including the Linux pluggable authentication module (PAM)
mechanism for user account creation and management. The VMware authentication daemon (vmware-authd)
is implemented as a PAM module. You can create and manage user accounts on an ESX/ESXi system by using
HostLocalAccountManager.
Other vCenter Server users who connect to the Web service must also have a Windows account on the local
Administrator group.
IMPORTANT Even if a user with the same name exists on an ESX/ESXi host and a vCenter Server system, the
two users have different accounts.
For details, see the Datacenter Administration Guide in the VMware vSphere documentation set.
Organizations that are using Microsoft Active Directory can use the user identities contained in a Windows
2003 Server domain controller or Active Directory service across their virtual infrastructure. Microsoft Active
Directory identities are supported for all clients that run vSphere Web Services SDK applications from
Windows‐based systems.
VMware vSphere Web Services SDK client applications can use SSPI to authenticate to the local machine and
establish a remote connection. See the vSphere API Reference for more information.
Privileges
A privilege is a system‐defined requirement associated with a VMware vSphere object. Privileges are defined
by VMware. Privileges are static, and do not change for a single version of a product. Each managed object has
one or more privileges that a principal (user, group member) must have to invoke an operation or to view a
property. For example, managed entities such as Folder and VirtualMachine require the principal to have
the System.Read privilege on the entity to view the values of its properties.
The vSphere API Reference includes information about privileges required to invoke operations and to view
properties on the Required Privileges labels on the documentation page for each managed object. Privileges
for vSphere components are defined as follows:
<group>[.<group>].privilege
For example:
Datacenter.Create
Host.Config.Connection
Host.Config.Snmp
A privilege might be specific to vCenter Server or to ESX/ESXi systems. For example, the Alarm.Create
privilege is defined on vCenter Server. Setting alarms is done through the AlarmManager service interface,
which requires a running vCenter Server system.
Privilege requirements apply to system objects regardless of how a given client application attempts to access
server content (vSphere Client, CLI, or SDK). For example, you can use the following URL to access virtual
machine datastore files:
https://<hostname>/folder[/<path>]/?dcPath=<datacenter_path>[&dsName=<datastore_name>]
VMware, Inc. 73
vSphere Web Services SDK Programming Guide
The URL accesses a Datastore object in the inventory. You must have privileges to access each object in the
hierarchy, corresponding to the elements of the URL.
Table 6-1. Privileges Required for Datastore Objects Apply Regardless of Access Mechanism
Object Associated with File URL Element Required Privileges
Datastore.FileManagement
/tmp/ Host.Config.SystemManagement
Roles
A role is a predefined set of privileges. Users are granted privileges to objects through roles (see “Using Roles
to Consolidate Sets of Privileges” on page 78). When you assign a user or group permissions, you pair the user
or group with a role and associate that pairing with an inventory object. A single user might have different
roles for different objects in the inventory.
For example, if you have two resource pools in your inventory, Pool A and Pool B, you might assign a
particular user the role Virtual Machine User on Pool A and the role ReadOnly on Pool B. These assignments
allow that user to turn on virtual machines in Pool A. In Pool B, the user can view the status of virtual
machines, but cannot turn on virtual machines.
Permissions
In vSphere, a permission consists of a user or group and an assigned role for an inventory object, such as a
virtual machine or ESX/ESXi host. Permissions grant users the right to perform the activities specified by the
role on the object to which the role is assigned.
For example, to configure memory for an ESX/ESXi host, a user must be granted a role that includes the
Host.Configuration.Memory privilege. By assigning different roles to users or groups for different objects,
you can control the tasks that users can perform in your vSphere environment.
Many tasks require permissions on more than one object.
1 Get information about privilege requirements and privileges associated with system and sample roles.
Find out which operations on vSphere objects require which privileges. See the API Reference.
Find out which operations the system roles and sample roles can perform. See Table 6‐2, “System and
Sample Roles,” on page 78.
2 If necessary, create additional roles (sets of privileges). See “Modifying Sample Roles to Create New
Roles” on page 79.
74 VMware, Inc.
Chapter 6 Authentication and Authorization
3 Retrieve information about existing users and groups (see “Obtaining User and Group Information from
UserDirectory” on page 75) and create additional groups if needed (see “Managing ESX/ESXi Users and
Groups with HostLocalAccountManager” on page 76).
4 Associate users or groups with roles using permissions. See “Managing Roles and Permissions with
AuthorizationManager” on page 77.
At runtime, use SessionManager to log in to the server. The SessionManager.Login method requires a user
ID and password and determines what that session can access on the server.
vCenter Server system. Domain controller, Active Directory, or local Windows account repository.
ESX/ESXi host. Linux password file in /etc/passwd on the host.
For example, vCenter Server user accounts can be managed in a Windows Active Directory server or domain
controller from which the domainList property of UserDirectory is derived. For ESX/ESXi systems, the
domainList property is empty.
UserDirectory allows you to obtain information about users and groups using the RetrieveUserGroups
method. The method can obtain a list of all user accounts from the host, and can search for specific users or
groups based on specific criteria to filter the results. You can search by user name, by group name, for an exact
match, or for a partial string (substring).
For ESX/ESXi systems, search returns all users and groups from the passwd file. If this file contains Network
Information System (NIS) or NIS+ users and groups, RetrieveUserGroups returns these accounts as well.
For vCenter Server, search is limited to the specified Windows domain. If the domain is omitted, the search is
performed on local users and groups.
IMPORTANT Do not configure an ESX or ESXi system to use NIS or NIS+, unless it is acceptable to have NIS
(or NIS+) user and group information available through the UserDirectory.RetrieveUserGroups API.
VMware, Inc. 75
vSphere Web Services SDK Programming Guide
IMPORTANT vCenter Server systems use the Microsoft Windows user management facilities. See “vCenter
Server User Model” on page 73.
HostLocalAccountManager allows you manage uses and groups by using the following methods:
User Management. CreateUser, RemoveUser, UnassignUserFromGroup, AssignUserToGroup,
UpdateUser
Group Management. CreateGroup, RemoveGroup
For those methods, you must define the HostAccountSpec data object following the requirements on the
target system. Requirements include password length requirements, restrict use of dictionary words, and so
on.
1 Obtain a managed object reference to the HostLocalAccountManager of the target system.
2 Create a HostAccountSpec data object that defines the properties of the user account, including
description and password.
Define account names and passwords according to the configuration required by your ESX/ESXi system
for user account naming conventions and password requirements, such as minimum length, character set,
and other requirements.
3 Call the HostLocalAccountManager.CreateUserAccount method, passing in the managed object
reference (from step 1) and the HostAccountSpec data object (step 2).
1 Create a HostAccountSpec data object that defines the properties of the group (description, id). No
password is needed for the group.
2 Call the HostLocalAccountManager.CreateGroup method, passing in the HostAccountSpec data
object.
Now that the user and group both exist, you can add the user to the group.
3 Call the HostLocalAccountManager.AssignUserToGroup method, passing the managed object
reference to the HostLocalAccountManager, the userid, and the groupid in the invocation.
After creating user accounts and groups on the ESX/ESXi system, you can grant these users access to virtual
components by using AuthorizationManager methods. See “Managing Roles and Permissions with
AuthorizationManager” on page 77.
76 VMware, Inc.
Chapter 6 Authentication and Authorization
The AuthorizationManager also allows access and prevents access to specific server objects based on the
permissions associated with the object.
AuthorizationManager includes methods for managing roles and for managing permissions:
Roles Management. AddAuthorizationRole, RemoveAuthorizationRole, and
UpdateAuthorizationRole. See “Using Roles to Consolidate Sets of Privileges” on page 78 and
“Modifying Sample Roles to Create New Roles” on page 79.
Permissions Management. MergePermissions, RemoveEntityPermission,
ResetEntityPermissions, RetrieveAllPermissions, RetrieveEntityPermissions,
RetrieveRolePermissions, and SetEntityPermissions. See “Granting Privileges Through
Permissions” on page 79.
Figure 6‐4 shows these methods in a UML diagram for AuthorizationManager and some of its associated
data objects.
VMware, Inc. 77
vSphere Web Services SDK Programming Guide
AuthorizationManager properties allow access to information. For example:
The privilegeList property returns a list of all privileges defined on the system, as an array of
AuthorizationPrivilege data objects. Privileges are defined by VMware, on the objects and properties
contained in the system. These privileges are fixed and cannot be changed by client applications. See
Appendix D, “Privileges Reference,” on page 215 for lists of privileges.
The roleList property returns a list of all currently defined roles, including the system‐defined roles, as
an array of AuthorizationRole data objects.
System roles. Cannot be modified or deleted.
User roles. Apply to different user communities or restrict access for add‐on tools. Several predefined
user roles are included with vCenter Server and with ESX/ESXi systems. You can create new roles using
these predefined user roles as a starting point.
Table 6‐2 describes these two types of roles in more detail and lists currently available roles as examples.
Anonymous ‐4 Cannot be granted. Default access role associated with any user account
that has logged in.
No Access ‐5 No access. Explicitly denies access to the user or group with this role.
Assigning this role to a user account prevents the user from seeing any
objects. Use the No Access role to mask subobjects under a higher‐level
object that has propagated permissions defined.
Read‐Only ‐2 Read‐only access. Encompasses the set of all nonmutable privileges.
(System.Anonymous, System.Read, and System.View). Equivalent to
a user role with no permissions. Users with this role can read data or
properties and call query methods, but cannot make changes to the
system.
View ‐3 Visibility access consisting of System.Anonymous and System.View
privileges. Cannot be granted.
Virtual Machine 3 Set of privileges necessary to provision resources.
Provider
Virtual Machine 4 Set of privileges for a virtual machine user that can also make
Power User configuration changes and create new virtual machines.
Virtual Machine User 5 Set of privileges necessary to use virtual machines only. Cannot
reconfigure virtual machines.
ResourcePool 6 Available on vCenter Server systems only.
Administrator
VMware Consolidated 7 Available on vCenter Server systems only. Set of privileges necessary to
Backup Utility run the Consolidated Backup Utility.
78 VMware, Inc.
Chapter 6 Authentication and Authorization
1 Starting with the ServiceContent object in ServiceInstance.content, obtain a managed object
reference to the AuthorizationManager for the server.
2 Invoke the AddAuthorizationRole method. Parameters are a reference to AuthorizationManager, a
name for the role (as a string), and an array of privileges (array of strings) that should be assigned to the
role.
AddAuthorizationRole returns an integer (xsd:int) value for the roleId that the system assigns to the
newly defined role.
3 In subsequent code, use the roleID to assign the role to specific users or groups.
The user or group (principal) to which the permission applies.
The role containing the privileges that should be granted to the user or group.
The managed object reference to the entity to which the permission applies.
Every managed entity has at least one Permission object associated with it. A managed entity can have more
than one Permission assigned to it, effectively granting different privileges to different users or groups.
Permissions are defined for managed entities either explicitly or through inheritance.
For an array of Permission objects, call the AuthorizationManager.RetrieveAllPermissions
method.
For specific inventory objects, such as managed entities, folders, datacenters, or virtual services, call the
AuthorizationManager.RetrieveEntityPermissions method.
For a role defined in the system, call the AuthorizationManager.RetrieveRolePermissions method.
See the vSphere API Reference.
1 Obtain a reference to the AuthorizationManager for the server from the ServiceContent object
associated with the ServiceInstance. For example:
ManagedObjectReference hostAuthorizationManager = service.getAuthorizationManager();
2 Create a Permission data object that identifies the user (or group) name, the role, the entity to which the
permission should apply, and whether the permission should be applied to the entity’s children.
VMware, Inc. 79
vSphere Web Services SDK Programming Guide
For example, the following code fragment creates a permission on the root folder of the inventory granting a
user Administrator role to the root folder and all its children.
Permission per = new Permission();
per.setGroup(false);
per.setPrincipal(“new_user_name”);
per.setRoleId(-1);
per.setPropagate(true);
per.setEntity(rootFolder);
Permissions cannot be set directly on children in a complex entity. For complex entities, set permissions on the
parent entity and set the propagate flag to true to apply permissions to the child entities.
To replace existing permissions with a new set of permissions, use the
AuthorizationManager.ResetEntityPermissions method.
Permissions are applied to inventory objects from the containing object to each of its child entities.
If a user has no explicit user‐level permissions, group‐level permissions apply as if granted to the user
directly.
Membership in multiple groups with permissions on the same object results in a union of permissions.
User‐level permissions always take precedence over group‐level permissions.
// Create a user
HostAccountSpec hostAccountSpec = new HostAccountSpec();
hostAccountSpec.setId(userName);
hostAccountSpec.setPassword(password);
hostAccountSpec.setDescription("my delegated admin auto-agent software");
appUtil.getConnection().getService().createUser(hostLocalAccountManager, hostAccountSpec);
ManagedObjectReference rootFolder = appUtil.getConnection().getServiceContent().getRootFolder();
Permission permission = new Permission();
permission.setGroup(false);
permission.setPrincipal(userName);
80 VMware, Inc.
Chapter 6 Authentication and Authorization
IMPORTANT Each user session uses system resources and creates locks on the server side. Too many
concurrent sessions can slow down the server. By default, vCenter Server terminates a session after 30 minutes.
Upon successful authentication of a user account, SessionManager returns a UserSession data object to the
client application. The session is associated with that user account for the duration of the session. The client
application can save the session locally, to a secure file, and reuse the session later to reconnect to the server.
You can also configure an ESX/ESXi or vCenter Server system to support local sessions, which enable users
with credentials on the host to log in based on those privileges.
The SessionManager provides these capabilities:
Log in and log out. Basic operations to log in to ESX/ESXi or vCenter Server system, obtain a session, and
log out. When a session terminates, all session‐specific objects are destroyed.
Impersonation. One user session adopts the authorization level of another user session. Impersonation is
common in Web based scenarios in which a middle‐tier application functions as a central account that
interacts with other back‐end servers or processes. Windows services impersonate a client when accessing
resources on behalf of the client. SesssionManager supports impersonation through its
ImpersonateUser method.
Delegation. A client application that is running on behalf of a local user can call the
SessionManager.AcquireLocalTicket method to obtain a one‐time user name and password for
logging in. Delegation is useful for host‐based utilities that run in the local console.
If the user account associated with the session does not have the permissions required to perform an action,
the AuthorizationManager returns a NoPermission fault to the client application.
IMPORTANT These libraries are built on top of the vSphere Web Services SDK.
The credential store has the following components:
A persistence file (credential store backing file) that stores authentication credentials. Currently, only
passwords are supported. The persistence file maps a remote user account from an ESX/ESXi host to the
password for that user on the server.
C#, Java, and Perl libraries for managing the credential store programmatically. See Table 6‐4 for available
methods.
Java and Microsoft PowerShell‐based command‐line utilities for managing the credential store.
In addition to the libraries listed in Table 6‐3, the vSphere Web Services SDK includes the
CredentialStoreAdmin tool for creating, examining, and managing the credential store. You can use the tool
to examine the contents of the credential store, for example, the generated user accounts and passwords.
VMware, Inc. 81
vSphere Web Services SDK Programming Guide
If you use the credential store client libraries, shown in Table 6‐3 in an application, you must set up the
credential store on all client machines that run your application.
CredentialStore.java CredentialStoreFactory.cs
CredentialStoreFactory.java CredentialStore.cs
Several of the helper classes provided with the sample applications use the credential store mechanism.
Linux. $HOME/.vmware/credstore/vicredentials.xml
Windows Vista. C:\Users\[user_name]\AppData\Roaming\VMware\credstore\vicredentials.xml
Windows XP and Windows 2000.
C:\Documents and Settings\[user_name]\Application Data\VMware\credstore\vicredentials.xml
The credential store persists locally on a per‐user basis—each user has his or her own credential store backing
file.
CAUTION The credential store backing files use filesystem‐level permissions to ensure that passwords remain
confidential. Protect the credential store backing file with appropriate file permissions.
82 VMware, Inc.
Chapter 6 Authentication and Authorization
Example 6‐2 shows the XML elements that are read and written to the file.
The CreateUser sample creates a user account and password for the server based on
random‐number‐generation scheme. The sample populates the local credential store backing file with this
information. If the backing file does not exist, it is created in the default location.
When you run CreateUser, specify the name of an ESX/ESXi system, and an administrator user name and
password. A user account name and password are created on the server. Specify --ignorecert unless
your system has a secure connection to the target. Do not use --ignorecert in a production
environment.
java com.vmware.samples.simpleagent.CreateUser --server <servername> --url
https://<servername>/sdk --username <adminuser> --password <pwd> --ignorecert ignorecert
CAUTION The CreateUser sample application is for demonstration purposes only and should not be
used as a model for production code. The sample breaks the principle of least privilege by granting the
user account the Administrator role (‐1). Never do this in a production environment.
The SimpleAgent sample application demonstrates how to use credential store libraries to extract the
user account and password at runtime to authenticate a user noninteractively.
java com.vmware.samples.simpleagent.SimpleAgent <servername>
Specify roles and users as follows:
1 For each SDK‐based application, use one specific role, newly created or predefined, that has appropriate
privileges.
For example, if you are developing an agent‐like application to automatically start the VMware
Consolidated Backup utility, you might use the “VMware Consolidated Backup Utility” role (roleID 7).
If no predefined user role that meets the needs of your application exists, create a role with only those
privileges needed for the application. See Table 6‐2, “System and Sample Roles,” on page 78 for more
information about roles.
2 Create a user account for use with the agent or application.
VMware, Inc. 83
vSphere Web Services SDK Programming Guide
3 Apply the role created in Step 1 to the user account created in Step 2.
4 Store the user account and password in the credential store, using the
CredentialStoreAdministration tool.
Never grant administrator privileges to a user account associated with an automated script or software agent,
especially one that uses the credential store.
The vSphere Datacenter Administration Guide explains how to manage ESX/ESXi and vCenter Server licenses
using the vSphere Client, and gives background information about license keys, license inventory, and related
topics.
You can also manage licenses using the LicenseManager and LicenseAssignmentManager managed objects.
You use LicenseManager to explicitly manage the pool of available licenses on ESX/ESXi systems released
before vSphere 4.0. You use LicenseAssignmentManager, available through the
LicenseManager.licenseAssignmentManager property, to manage assignment of licenses to entities in the
vCenter Server inventory. You can retrieve information, add licenses, and remove licenses.
Retrieve Information
Retrieve the LicenseManager.evaluation and LicenseManager.licenses properties to obtain
information on evaluation licenses and full licenses.
Call LicenseManager.DecodeLicense to decode license information. The call returns a
LicenseManagerLicenseInfo data object, which encapsulates information about the license.
Call LicenseAssignmentManager.QueryAssignedLicenses for information about assigned licenses.
Add Licenses
Call LicenseManager.AddLicense, passing in a license key, to add a license to the inventory of available
licenses.
Call LicenseAssignmentManager.UpdateAssignedLicense, passing in a license key, to update the
licenses for an entity, for example, a host system.
Remove Licenses
Call LicenseAssignmentManager.RemoveAssignedLicense to remove all licenses from an entity,
passing in an entity to remove licenses from. You can then assign those licenses to other entities.
Call LicenseManager.RemoveLicense, passing in a license key, to remove a license from the inventory
of available licenses.
84 VMware, Inc.
7
Hosts 7
Many of the operations in your vSphere environment involve setting up the ESX/ESXi hosts on which the
virtualization layer runs. You can set up storage (see Chapter 8, “Storage,” on page 89) and networking (see
Chapter 9, “Networking,” on page 103), and those settings directly affect the virtual machine. You must also
manage other aspects of the host, as discussed in this chapter.
The chapter includes the following topics:
“Host Management Objects” on page 85
“Retrieving Host Information” on page 85
“Configuring and Reconfiguring Hosts” on page 86
“Managing the Host Lifecycle” on page 87
“Querying and Changing the Host Time” on page 88
“Querying Virtual Machine Memory Overhead” on page 88
IMPORTANT See the ESX Configuration Guide and the ESXi Configuration Guide for important information on
security considerations, not included here.
The central object is HostSystem. Each property of HostSystem is a data object that encapsulates some
information about the host. For example, the capability property is a HostCapability object, the runtime
property is a HostRuntimeInfo object. See the API Reference for a list of the properties and the corresponding
data objects.
HostSystem methods allow you to perform certain tasks on ESX/ESXi hosts. However, many tasks are not
performed through HostSystem methods, but through methods in managed objects related to HostSystem.
For example, you manage the host time using the HostDateTimeSystem and you manage kernel modules
using HostKernelModuleSystem.
HostSystem.capability is a HostCapability object. The HostCapability properties indicate the
features that are supported by the host, for example, maintenanceModeSupported or
recursiveResourcePoolsSupported.
HostSystem.runtimeInfo is a HostRuntimeInfo object that contains several data objects with detailed
information about the current state of the host. You can, for example, extract the health status as a
HealthSystemRuntime object or the power state as a HostPowerState object.
VMware, Inc. 85
vSphere Web Services SDK Programming Guide
HostSystem.hardware is a HostHardwareInfo object that allows you to retrieve the host’s hardware
configuration including CPU and NUMA information and memory size.
HostSystem.config is a HostConfigInfo object. This data object type encapsulates a typical set of host
configuration information that is useful for displaying and configuring a host. You can access the
HostConfigInfo object only on managed hosts, and only if the host is connected.
HostSystem has several additional properties that allow you to directly access the virtual machines,
datastores, and networks associated with that system.
The QueryHostConnectionInfo, QueryMemoryOverhead, and QueryMemoryOverheadEx methods are
available for information retrieval.
Some methods are defined locally in HostSystem. See the vSphere API Reference for details on each method.
CIM Management – AcquireCimServicesTicket. For additional information on using vSphere with
CIM, see the VMware CIM APIs documentation.
Host Lifecycle – RebootHost_Task, ShutdownHost_Task, PowerDownHostToStandBy_Task,
PowerUpHostFromStandBy_Task, DisconnectHost_Task, ReconnectHost_Task. See “Managing the
Host Lifecycle” on page 87.
Maintenance Mode – EnterMaintenanceMode_Task, ExitMaintenanceMode_Task.
Updates – UpdateFlags, UpdateIpmi, UpdateSystemResources.
86 VMware, Inc.
Chapter 7 Hosts
You can call both methods with a force parameter, which specifies whether to reboot hosts even when virtual
machines are running or other operations are in progress on the host. If you set the parameter to false, hosts
are rebooted only when they are in maintenance mode.
ShutdownHost_Task – Shuts down a host. If connected directly to the host, the client never receives an
indicator of success in the returned task, but temporarily loses connection to the host. If the method does
not succeed, an error is returned.
RebootHost_Task – Reboots a host. If the command is successful, then the host has been rebooted. Clients
connected directly to the host do not receive an indication of success in the returned task, but temporarily
lose connection to the host. If the method does not succeed, an error is returned.
The following methods support standby mode. Both methods are cancelable.
PowerDownHostToStandBy_Task – Puts the host in standby mode, a mode in which the host is in a
standby state from which it can be powered up remotely. The command is only supported on hosts on
which the host capability standbySupported is true.
While this task is running, no virtual machines can be powered on and no provisioning operations can be
performed on the host.
Calling this method does not directly initiate any operations to evacuate or power down powered‐on
virtual machines. However, if VMware DRS is enabled, the vCenter Server migrates powered‐off virtual
machines or recommends migration to a different host, depending on the automation level. If the host is
part of a cluster and the task is issued with a vCenter Server target with the method’s
evacuatePoweredOffVms parameter set to true, the task does not succeed unless all the powered‐off
virtual machines are reregistered to other hosts.
PowerUpHostFromStandBy_Task – Takes the host out of standby mode. If the command is successful, the
host wakes up and starts sending heartbeats. This method might be called automatically by VMware DRS
to add capacity to a cluster, if the host is not in maintenance mode.
You can use the following methods, which are only supported if you access the host through a vCenter Server
system.
QueryHostConnectionInfo – Returns a HostConnectInfo object, which is the same object that the
Datacenter.QueryConnectionInfo returns. The information in this object can be used by a connection
wizard, like the wizard used in the vSphere Client.
DisconnectHost_Task – Disconnects from a host and instructs the vCenter Server system to stop
sending heartbeats to the host.
VMware, Inc. 87
vSphere Web Services SDK Programming Guide
ReconnectHost_Task – Reconnects a host to the vCenter Server system. This process reinstalls agents
and reconfigures the host, if it has gotten out of sync with the server. The reconnection process checks for
the correct set of licenses and for the number of CPUs on the host, ensures the correct set of agents is
installed, and ensures that networks and datastores are discovered and registered with the vCenter Server
system.
Client applications can change the IP address and port of the host when doing a reconnect operation. This
can be useful if the client wants to preserve existing metadata, such as statistics, alarms, and privileges,
even though the host is changing its IP address.
The HostDateTimeSystem.dateTimeInfo property allows you to retrieve and set date and time information.
The HostDateTimeInfo data object’s properties contain two data object for date time management:
HostNTPConfig contains a list of NTP servers for use by the host.
HostDateTimeSystemTimeZone specifies the time zone including the GMT offset, identifier for the time
zone, and name.
You can also query the host’s time information by calling one of the HostDateTimeSystem methods.
QueryAvailableTimeZones – Retrieves the list of available timezones on the host. The method uses the
public domain tz timezone database. The method returns an array of HostDateTimeSystemTimeZone
objects.
QueryDateTime – Returns the current date and time on the host.
You can modify the host’s date time information by calling one of the following HostDateTimeSystem
methods:
RefreshDateTimeSystem – Refreshes the date and time related settings to pick up any changes that
might have occurred.
UpdateDateTime – Updates the date and time on the host using the date and time passed into the method.
Use with caution. Network delays or execution delays can result in time skews.
UpdateDateTimeConfig – Updates the date and time configuration of the host. You call this method with
a HostDateTimeConfig parameter, which allows you to specify both the NTP configuration and the time
zone.
The methods returns the amount of memory required, in bytes.
88 VMware, Inc.
8
Storage 8
A virtual machine uses a virtual disk to store its operating system, program files, and other data. A virtual disk
is a large physical file, or a set of files, that can be copied, moved, archived, and backed up like other files. To
store and manipulate virtual disk files, a host requires dedicated storage space. ESX/ESXi supports storage in
multiple ways. Hosts that are managed by a vCenter Server system can share storage.
The chapter includes the following topics:
“Storage Management Objects” on page 89
“Introduction to Storage” on page 90
“Choosing the Storage API to Use” on page 92
“Configuring Disk Partitions” on page 93
“Creating and Managing Datastores” on page 96
“Managing VMFS Volume Copies (Resignaturing)” on page 99
“Managing Diagnostic Partitions” on page 100
“Sample Code Reference” on page 101
Any type of network‐attached storage requires complete configuration of networking in the VMkernel to
support network‐based access to the storage media. The VMkernel requires its own IP address. See Chapter 9,
“Networking,” on page 103.
HostStorageSystem – The HostSystem.storageSystem property is a managed object reference to the
HostStorageSystem of the ESX/ESXi system. HostStorageSystem is a low‐level interface that is used
mainly for configuring the physical storage. See “Configuring Disk Partitions” on page 93.
HostDatastoreSystem – The HostSystem.datastoreSystem property is a managed object reference to
a HostDatastoreSystem managed object. HostDatastoreSystem methods allow you to create,
configure, extend, and remove datastores. While HostStorageSystem supports access and configuration
of physical storage, HostDatastoreSystem supports access and configuration of logical storage through
the volumes (Datastore managed objects) the host can use for virtual machines. See “Creating and
Managing Datastores” on page 96.
HostDatastoreBrowser – Provides access to the contents of one or more datastores. The items in a
datastore are files that contain configuration, virtual disk, and other data associated with a virtual
machine.
VMware, Inc. 89
vSphere Web Services SDK Programming Guide
Datastore – The Datastore managed entity provides methods for mounting datastores, browsing
datastores, and obtaining information about the datastores associated with a virtual machine. See
“Creating and Managing Datastores” on page 96.
HostDiagnosticPartition – Supports creating and querying diagnostic partitions for your ESX/ESXi
host. See “Managing Diagnostic Partitions” on page 100.
Introduction to Storage
The VMware vSphere storage architecture consists of layers of abstraction that hide and manage the
complexity and differences of physical storage subsystems, shown in Figure 8‐1.
When a virtual machine communicates with its virtual disk stored on a datastore, it issues SCSI commands.
Because datastores can exist on different types of physical storage, these commands are encapsulated into
other forms, depending on the protocol that the ESX/ESXi host uses to connect to the physical storage device.
To the applications and guest operating systems running on each virtual machine, the storage subsystem
appears as a virtual SCSI controller connected to one or more virtual SCSI disks as shown in the top half of
Figure 8‐1. These controllers are the only types of SCSI controllers that a virtual machine can see and access,
and include the objects that extend VirtualSCSIController:
ParaVirtualSCSIController
VirtualBusLogicController
VirtualLsiLogicController
VirtualLsiLogicSASController
90 VMware, Inc.
Chapter 8 Storage
How precisely a virtual machine accesses storage depends on the setup of the host. Figure 8‐2 gives an
overview of the different possibilities.
vSCSI vSCSI
disklib disklib
VMFS NFS
PSA
SCSI FC iSCSI
HBA NIC
HBA HBA
SAN
TCP/IP LAN/WAN
local FC iSCSI
iSCSI LUN LUN NFS
storage server
Datastores
A datastore is a manageable storage entity, usually used as a repository for virtual machine files including log
files, scripts, configuration files, virtual disks, and so on. vSphere supports two types of datastores, VMFS and
NAS.
If you want to use a NAS volume, mount it using CreateNasDatastore and unmount it using
RemoveDatastore. The two commands are host specific, you must invoke the create and remove methods
on each host on which you want to mount or unmount the datastore.
To create a VMFS datastore, call CreateVmfsDatastore, passing in any existing disk. As a result of the
call, the disk is formatted with VMFS and the datastore is automounted on all ESX/ESXi hosts on which
the disk is visible the next time you perform a rescan. When you call RemoveDatastore on a VMFS
datastore, the datastore is destroyed. After a rescan, the datastore is no longer available to any ESX/ESXi
systems. In contrast to NAS datastores, you do not have to invoke a methods for creation and removal of
the datastore on each host.
An ESX/ESXi host automatically discovers the VMFS volume on attached Logical Unit Numbers (LUNs) on
startup and after re‐scanning the host bus adapter. When you create a VMFS datastore, the datastore label is
based on the VMFS volume label. If there is a conflict with an existing datastore, the label is made unique by
appending a suffix. The VMFS volume label remains unchanged.
Destroying a VMFS datastore removes the partitions that compose the VMFS volume.
VMware, Inc. 91
vSphere Web Services SDK Programming Guide
Datastores can span multiple physical storage devices. A single VMFS volume can contain one or more LUNs
from a local SCSI disk array on a physical host, a Fibre Channel SAN disk farm, or iSCSI SAN disk farm. The
ESX/ESXi system detects new LUNS that are added to any of the physical storage subsystems. When the user
queries for a list of available devices, the newly discovered devices are included. You can extend storage
capacity on an existing VMFS volume without powering down physical hosts or storage subsystems.
If any of the LUNs within a VMFS volume fails or becomes unavailable, only virtual machines with data on
that LUN are affected. An exception is the LUN that has the first extent of the spanned volume (multi‐extent
volume). All other virtual machines with virtual disks residing on other LUNs continue to function normally.
The HostDatastoreSystem APIs are primarily used for managing VMFS volume. They don’t require an
in‐depth knowledge of storage systems, and do enforce best practices.
VMFS Resignaturing
HostDiagnosticSystem API QueryUnresolvedVmfsVolumes()
ResignatureUnresolvedVmfsVolume()
Operations
get/set ActivePartition()
CreateDiagnosticPartition() Provisioning
SelectActivePartition()
Options Operations
QueryVmfsDatastoreCreateOptions() CreateVmfsDatastore()
Options QueryVmfsDatastoreExtendOptions() ExtendVmfsDatastore()
QueryVmfsDatastoreExpandOptions() ExpandVmfsDatastore()
QueryAvailablePartition()
QueryAvailableDisksForVmfs() RemoveDatastore()
QueryPartitionCreateDescription()
QueryPartitionCreateOptions()
HostStorageSystem API
File System
get/set FileSystemVolumeInfo()
Management
VMFS RescanVmfs()
Partition Management
UpdateDiskPartitions() Mount Operations
RetrieveDiskPartitionInfo() QueryUnresolvedVmfsVolume()
ComputeDiskPartitionInfo ResolveMultipleUnresolvedVmfsVolumes()
ComputeDiskPartitionInfoForResize() UnmountForceMountedVmfsVolumes()
Provisioning Upgrade
FormatVmfs() UpgradeVmfs()
AttachVmfsExtent() UpgradeVmfsLayout()
ExpandVmfsExtent()
92 VMware, Inc.
Chapter 8 Storage
ComputeDiskPartitionInfo – Computes the disk partition information based on the specified disk
layout. The server computes a new HostDiskPartitionInfo object for a specific disk using the layout
that is specified by the HostDiskPartitionLayout object. Inside the HostDiskPartitionLayout
object, you specify the list of block ranges for that partition, and optionally the total number and size of
the blocks. You can then use that information inside the HostDiskPartitionSpec when updating a disk
partition.
ComputeDiskPartitionInfoForResize – Computes the disk partition information to support resizing
a given partition. Returns the resized disk partition information as a HostDiskPartitionInfo object.
You can then use that information inside the HostDiskPartitionSpec when resizing the disk partition.
RetrieveDiskPartitionInfo – Allows you to specify an array of device path names that identify disks
and returns an array of HostPartitionInfo objects for each of those disks.
UpdateDiskPartitions – Changes the partitions on a disk by supplying a partition specification
(HostDiskPartitionSpec) and device name.
After you have updated the disk partitions for the host, you must perform a rescan by using one of the
following methods. Complete rescans might take a long time.
RefreshStorageSystem – Refreshes the storage information and settings to pick up changes, but does
not explicitly issue commands to discover new devices.
RescanAllHba – Rescans all host bus adapters for new storage devices. This method might take a long
time.
RescanHba – Rescans a specific host bus adapter for new devices.
HostStorageSystem methods are also used for setting up iSCSI storage. See “Configuring iSCSI
Storage” on page 94.
VMware, Inc. 93
vSphere Web Services SDK Programming Guide
Multipath Management
The ESXi Configuration Guide and ESX Configuration Guide include an extensive discussion of using
multipathing for failover and load balancing. You can manage multipathing using the vSphere Client, the
esxcli command, or using the following commands. Use the HostStorageSystem.multipathStateInfo
property to access the HostMultipathStateInfo data object that describes runtime information about the
state of a multipathing on a given host.
EnableMultipathPath – Enables a disabled path for a device. Use the pathname from
HostMultipathStateInfoPath or HostMultipathInfoPath.
QueryPathSelectionPolicyOptions – Obtains the set of path‐selection‐policy options. These options
determine the path that can be used by a device that is managed by native multipathing. A
HostMultipathInfo data object identifies the devices that are managed through native multipathing.
QueryStorageArrayTypePolicyOptions – Obtains the set of storage‐array‐type policy options. These
options determine the storage‐array‐type policies that a device that is managed by native multipathing
might use. A HostMultipathInfo data object identifies the devices that are managed through native
multipathing.
SetMultipathLunPolicy – Updates the path selection policy for a LUN. Specify the LUN using the LUN
UUID from the HostMultipathInfoLogicalUnit object.
DisableMultipathPath – Disables an enabled path for a device. Use the pathname from
HostMultipathStateInfoPath or HostMultipathInfoPath.
The following HostStorageSystem methods are available for iSCSI storage management.
Add a dynamic or static target.
AddInternetScsiSendTarget – Adds send target entries to the host bus adapter discovery list if the
DiscoveryProperties.sendTargetsDiscoveryEnabled flag is set to true.
AddInternetScsiStaticTargets – Adds static target entries to the host bus adapter discovery list.
The DiscoveryProperty.staticTargetDiscoveryEnabled flag must be set to true.
Configure targets.
UpdateInternetScsiAdvancedOptions – Updates the advanced options that the iSCSI host bus
adapter or the discovery addresses and targets associated with it.
UpdateInternetScsiAlias – Updates the alias of an iSCSI host bus adapter.
UpdateInternetScsiAuthenticationProperties – Updates the authentication properties for one
or more targets or discovery addresses associated with an iSCSI host bus adapter.
UpdateInternetScsiDigestProperties – Updates the digest properties for the iSCSI host bus
adapter or the discovery addresses and targets associated with it.
UpdateInternetScsiDiscoveryProperties – Updates the discovery properties for an iSCSI host
bus adapter.
UpdateInternetScsiIPProperties – Updates the IP properties for an iSCSI host bus adapter.
UpdateInternetScsiName – Updates the name of an iSCSI host bus adapter.
UpdateSoftwareInternetScsiEnabled – Enables and disables software iSCSI in the VMkernel.
94 VMware, Inc.
Chapter 8 Storage
Remove a dynamic or static target.
RemoveInternetScsiSendTargets – Removes send target entries from the host bus adapter
discovery list. The DiscoveryProperty.sendTargetsDiscoveryEnabled must be set to true. If
any of the targets provided as parameters are not found in the existing list, the other targets are
removed and an exception is thrown.
RemoveInternetScsiStaticTargets – Remove static target entries from the host bus adapter
discovery list. The DiscoveryProperty.staticTargetDiscoveryEnabled must be set to true. If
any of the targets provided as parameters are not found in the existing list, the other targets are
removed and an exception is thrown.
iSCSI initiators and targets have unique, permanent iSCSI names and addresses. An iSCSI name correctly
identifies a specific iSCSI initiator or target, regardless of physical location. Names must be in EUI or IQN
format, as specified by the storage vendor’s hardware.
Before you can set up iSCSI on a system, you must create a dedicated VMkernel network interface. See
“Adding a VMkernel Network Interface” on page 107. You can then enable the VMkernel to support iSCSI and
configure the initiator.
1 Obtain a managed object reference to the host system’s HostStorageSystem.
2 Invoke the UpdateSoftwareInternetScsiEnabled method, passing the reference to the
HostStorageSystem and the value true.
1 Access the list of available HBAs on the host system.
You can do this by creating a property collector with HostSystem as the starting point. See Chapter 5,
“Property Collector,” on page 47. From the HostSystem.config property, you can obtain the list (array)
of host bus adapters by specifying this property path:
config.storageDevice.hostBusAdapter
The property path returns an array of host bus adapters. For example:
hostBusAdapter["key-vim.host.BlockHba-vmhba32"]
hostBusAdapter["key-vim.host.BlockHba-vmhba33"]
hostBusAdapter["key-vim.host.BlockHba-vmhba34"]
hostBusAdapter["key-vim.host.BlockHba-vmhba35"]
hostBusAdapter["key-vim.host.BlockHba-vmhba1"]
...
2 From the array, select the host bus adapter (instance of HostHostBusAdapter) that you want to configure
and obtain its key property, which is the device name of the host bus adapter as a string.
3 Determine the capabilities of the adapter by retrieving the properties of the HostHostBusAdapter object.
4 Configure the initiator.
For an independent hardware initiator, configure the IP address.
For a software initiator, enable the software initiator in the VMkernel.
5 Configure the iSCSI name by calling HostStorageSystem.UpdateInternetScisiName and the alias by
running HostStorageSystem.UpdateInternetScisiAlias.
6 Configure target discovery by calling
HostStorageSystem.UpdateInternetScisiHbaDiscoveryProperties.
The method takes a HostInternetScisiHbaDiscoveryProperties data object that you can configure.
VMware, Inc. 95
vSphere Web Services SDK Programming Guide
7 (Optional) Set the authentication information by calling
HostStorageSystem.UpdateInternetScisiAuthenticationProperties.
The HostInternetScsiHbaAuthenticationProperties object you pass into that method includes
properties for configuring CHAP and Mutual CHAP. See the ESXi Configuration Guide for information
about securing your iSCSI storage array.
8 Configure access to the targets.
9 Rescan the HBAs.
Rescan enables the HBAs to discover the new storage devices. You can either rescan a single HBA with
HostStorageSystem.RescanHba, specifying the HBA ID as a parameter, or rescan all HBAs using
HostStorageSystem.RescanAllHba.
HostDatastoreSystem allows you to create and expand, query, and remove or update datastores.
HostDatastoreSystem also allows you to configure a datastore principal for a host by calling
ConfigureDatastorePrincipal. All virtual machine‐related file I/O is performed under this user.
VMFS provisioning tasks are often performed as follows:
1 Call QueryAvailableDisksForVmfs to get the subset of disks that are well suited for holding VMFS
datastores.
QueryAvailableDisksForVmfs obtains a list of disks that can be used to contain VMFS datastore
extents. You can provide a datastore name to obtain the list of disks that can contain extents for the
specified VMFS datastore. The operation does not return disks currently used by the VMFS datastore, nor
does it return management LUNs and disks that are referenced by RDMs. RDM disks are not usable for
VMFS datastores.
2 Get information about provisioning options by calling one of the following methods, passing in the
selected disk:
QueryVmfsDatastoreCreateOptions – Obtains information about options for creating a new
VMFS datastore on a disk. The method returns an array of VmfsDatastoreOption data objects.
QueryVmfsDatastoreExpandOptions – Obtains information about options for expanding the
extents of an existing VMFS datastore.
QueryVmfsDatastoreExtendOptions – Obtains information about options for extending an
existing VMFS datastore for a disk.
3 If required, change the layout by calling HostStorageSystem.ComputeDiskPartitionInfo and then
HostStorageSystem.UpdateDiskPartition to resize the partition.
4 Call CreateVmfsDatastore, ExtendVmfsDatastore, or ExpandVmfsDatastore to complete the VMFS
provisioning operation.
96 VMware, Inc.
Chapter 8 Storage
Accessing Datastores
Figure 8‐4 illustrates how you can access or specify datastores. See Chapter 4, “Datacenter Inventory,” on
page 39 for more information about the hierarchy of managed objects.
Each Datacenter managed object has datastore property that contains an array of datastores.
Each Datacenter managed object has a datastoreFolder property that is a reference to the folder (or
folder hierarchy) that contains the datastores for this datacenter.
Each Datacenter managed object has a hostFolder property that is a reference to the folder (or folder
hierarchy) that contains the compute resources, including hosts and clusters, for this datacenter. Each
HostSystem or ComputeResource has a datastore property that is an array of Datastore managed
objects.
VMFS is a proprietary file system VMware designed for virtual machines. VMFS is well suited for storing a
small number of large data files like virtual disks. These files are mostly used by a single host. VMFS differs
from other filesystem formats like FAT16/FAT32 and so on in that it can be accessed by multiple hosts
connected to the same SAN LUN.
You can set up a VMFS datastore on any SCSI‐based storage device that the host can access. VMFS volume
creation, extension, and expansion requires first partitioning operations and the VMFS volume operations.
VMware, Inc. 97
vSphere Web Services SDK Programming Guide
1 Call HostStorageSystem.RetrieveDiskPartitionInfo to retrieve information about existing
partitions.
2 Call HostStorageSystem.ComputeDiskPartition, passing in the desired disk layout. The server
computes a new partition information object for a specific disk representing the desired layout and
returns a HostDiskPartitionInfo object that you can use in the HostDiskPartitionSpec you pass
into UpdateDiskPartitions.
3 Call HostStorageSystem.UpdateDiskPartitions to update partitions by passing in a
HostDiskPartitionSpec.
1 Configure and install any third‐party adapter your storage requires and rescan the adapters by calling
HostStorageSystem.RescanAllHba.
2 Call HostDatastoreSystem.QueryAvailableDisksForVmfs for information about disks that can be
used to contain VMFS datastore.
This method filters out disks that are currently in use by an existing VMFS unless the VMFS using the disk
is one being extended. It will also filter out management LUNs and disks that are referenced by RDMs.
These disk LUNs are also unsuited for use by a VMFS. The method returns an array of HostScisiDisk
objects.
3 Call HostDatastoreSystem.QueryVmfsDatastoreCreateOptions for information about options for
for creating a new VMFS datastore. The call returns an array of VmfsDatastoreCreateOption data
objects that allow you to access the UUIDs of suitable data stores.
4 (Optional) If no suitable partitions for your VMFS volume exist, you might have to create them. Use the
ComputeDiskPartitionInfo and UpdateDiskPartitions methods in HostStorageSystem.
5 Create the datastore.
Call HostDatastoreSystem.CreateVmfsDatastore to create a VMFS datastore. The method takes
a VmfsDatastoreCreateSpec data object that consists of a a partition, a HostVmfsSpec, and an
optional extent. The HostVmfsSpec allows you to specify the block size, extent, major version, and
volume name for the VMFS.
Call HostDatastoreSystem.CreateNasDatastore to create a network‐attached storage based
datastore.
You can later expand and extend the VMFS datastore by calling one of the following methods.
Call first QueryVmfsDatastoreExpandOptions and then ExpandVmfsDatastore to expand an existing
VMFS datastore using the specification provided in the VmfsDatastoreExpandSpec data object (which
contains the name of the extent and partition information). ExpandVmfsDatastore increases the size of
the datastore up to the full size provisioned for the datastore, if necessary.
Call first QueryVmfsDatastoreExtendOptions and then ExtendVmfsDatastore to extend an existing
VMFS datastore using the specification provided in the VmfsDatastoreExtendSpec data object.
98 VMware, Inc.
Chapter 8 Storage
UpdateLocalSwapDatastore – Choose the localSwapDatastore for this host. Any change to this
setting affects virtual machines that subsequently power on or resume from a suspended state at this host,
or that migrate to this host while powered on. Virtual machines that are currently powered on at this host
are not affected.
See the vSphere API Reference for more information about the HostDatastoreSystem operations, including
constraints and limitations.
AttachVmfsExtent – Extends a VMFS by attaching a disk partition as an extent.
ExpandVmfsExtent – Expands a VMFS extent as specified by the disk partition specification.
FormatVmfs – Formats a new VMFS on a disk partition based on the HostVmfsSpec that you pass in.
Returns a HostVmfsVolume that represents the new VMFS file system. The HostVmfsVolume includes the
block size, list of partition names of the disk’s VMFS extents, and other information including the UUID.
This command is a low‐level API you can use to partition disks explicitly. In most cases, the Datastore
VMFS commands are more suitable.
RescanVmfs – Rescans for new VMFS instances.
UpgradeVmfs – Upgrades the VMFS to the current VMFS version.
HostStorageSystem.UpgradeVmLayout – Iterates over all registered virtual machines. For each virtual
machine, upgrades the layout and logs an event. After the method has been called, the information in the
VirtualMachineFileLayout data object data object is correct.
When a LUN is replicated or a copy is made, the resulting LUN copy is identical, byte‐for‐byte, with the
original LUN. As a result, if the original LUN contains a VMFS datastore with UUID X, the LUN copy appears
to contain an identical VMFS datastore, or a VMFS datastore copy, with exactly the same UUID X. ESX/ESXi
can determine whether a LUN contains the VMFS datastore copy, and considers the copy unresolved and does
not mount it automatically.
To make the data on the LUN copy available, you can either force mount the copy if you are sure the original
is not in use, or you can resignature the copy. When you perform datastore resignaturing, consider the
following points:
Datastore resignaturing is irreversible because it overwrites the original VMFS UUID.
The LUN copy that contains the VMFS datastore that you resignature is no longer treated as a LUN copy,
but instead appears as an independent datastore with no relation to the source of the copy.
A spanned datastore can be resignatured only if all its extents are online.
VMware, Inc. 99
vSphere Web Services SDK Programming Guide
The resignaturing process is crash and fault tolerant. If the process is interrupted, you can resume it later.
You can mount the new VMFS datastore without a risk of its UUID colliding with UUIDs of any other
datastore, such as an ancestor or child in a hierarchy of LUN snapshots.
See the ESXi Configuration Guide for additional information.
The easiest way to resignature unresolved volumes is by using the
HostDatastoreSystem.ResignatureUnresolvedVmfsVolume_Task method. The method assigns a new
DiskUuid to a VMFS volume, but keep its contents intact. The method supports safe volume sharing across
hosts and is appropriate in most cases.
You can instead use the low‐level HostStorageSystem methods to find, force mount, or unmount unresolved
volumes:
HostStorageSystem.QueryUnresolvedVmfsVolume – Obtains the list of unbound VMFS volumes. For
sharing a volume across hosts, a VMFS volume is bound to its underlying block device storage. When a
low‐level block copy is performed to copy or move the VMFS volume, the copied volume is unbound.
HostStorageSystem.ResolveMultipleUnresolvedVmfsVolumes – Resignatures or force mounts
unbound VMFS volumes. This method takes a HostUnresolvedVmfsResolutionSpec data object as
input. The HostUnresolvedVmfsResolutionSpec.resolutionSpec property is an array of
HostUnresolvedVmfsResolutionSpec data objects that contain a
HostUnresolvedVmfsResolutionSpecVmfsUuidResolution enumeration. The enumeration is either
forceMount or resignature.
UnmountForceMountedVmfsVolume – Unmounts a force mounted VMFS volume. When a low‐level
block copy is performed to copy or move the VMFS volume, the copied volume is unresolved. For the
VMFS volume to be usable, a resolution operation is applied. As part of resolution operation, you might
decide to keep the original VMFS UUID. Once the resolution is applied, the VMFS volume is mounted on
the host for its use. This method allows you to unmount the VMFS volume if it is not used by any
registered virtual machines.
A 100MB diagnostic partition for each host is recommended. If more than one ESX/ESXi host uses the same
LUN as the diagnostic partition, that LUN must be zoned so that all the ESX/ESXi host can access it. Each host
needs 100MB of space, so the size of the LUN determines how many servers can share it. Each ESX/ESXi host
is mapped to a diagnostic slot. VMware recommends at least 16 slots (1600MB) of disk space if servers share a
diagnostic partition. You can set up a SAN LUN with FibreChannel or hardware iSCSI. SAN LUNs accessed
through a software iSCSI initiator are not supported.
CAUTION If two hosts that share a diagnostic partition fail and save core dumps to the same slot, the core
dumps might be lost. To collect core dump data, reboot a host and extract log files immediately after the host
fails. If another host fails before you collect the diagnostic data of the first host, the second host does not save
the core dump.
Retrieve the HostDiagnosticPartition object from the HostDiagnosticSystem.activePartition
property to examine the properties of the active partition.
Call the HostDiagnosticPartition.QueryAvailablePartition method to retrieve a list of available
diagnostic partitions, in order of suitability.
Call the HostDiagnosticPartition.QueryPartitionCreateOptions method to retrieve a list of disks
with sufficient space to contain a diagnostic partition of the specified type. The choices are returned in
order of suitability.
1 Find a suitable partition by calling HostDiagnosticPartition.QueryAvailablePartition or
HostDiagnosticPartition.QueryPartitionCreateOptions.
2 Call HostDiagnosticPartition.CreateDiagnosticPartition, passing in a
HostDiagnosticPartitionCreateSpec, which includes information about the diagnostic type, id,
storage type, and so on.
On success, this method creates the partition and makes the partition the active partition if specified in the
active parameter. On failure, the diagnostic partition might exist, but will not be active even if the partition
was supposed to be made active.
Table 8-2. Sample Applications that Demonstrate Storage and Datastore Operations
Java C#
(SDK\vsphere-ws\java\JAXWS\samples\com\vmware\) (SDK\vsphere-ws\dotnet\cs\samples\)
scsilun\SCSILunName.java SCSILunName\SCSILunName.cs
‐‐ SCSILunName\SCSILunName.csproj
‐‐ SCSILunName\SCSILunName2008.csproj
‐‐ SCSILunName\SCSILunName2010.csproj
httpfileaccess\GetVMFiles.java GetVirtualDiskFiles\GetVirtualDiskFiles.cs
Networking 9
Before you add storage and virtual machines to an ESX/ESXi system, you should have completed networking
setup. This chapter gives some background information, and then explains networking setup with vNetwork
Standard Switch (vSS).
The chapter includes the following topics:
“Network Management Objects and Methods” on page 103
“Introduction to Networking” on page 104
“vNetwork Standard Switch Environment” on page 104
“Setting Up Networking with vSS” on page 106
“Defining the Host Network Policies” on page 108
“NIC Teaming” on page 108
“Setting Up IPv6 Networking” on page 109
“Adding Networking Services” on page 110
“Sample Code Reference” on page 111
HostNetworkSystem properties allow you to acess HostNetCapabilities and HostNetworkInfo data
objects, and access and modify the HostNetworkConfig data object.
HostNetworkSystem includes methods for retrieving and changing the network configuration. See the
API Reference for a complete list of methods and the permissions required to run them.
HostNetworkConfig – Allows you to specify the network configuration for the host. You can apply the
configuration by running the HostNetworkSystem.UpdateNetworkConfig method.
Network – Represents a network accessible by either hosts or virtual machines. This can be a physical
network or a logical network, such as a VLAN.
When you add a host to a vCenter Server system, or when you add a virtual machine to an ESX/ESXi host,
a Network is added automatically.
HostSystem.QueryHostConnectionInfo and Datacenter.QueryConnectionInfo both return a
HostConnectInfo data object, which describes the current network configuration.
HostSNMPSystem – Supports SNMP setup. See “Setting Up SNMP” on page 110.
Introduction to Networking
Network setup for your ESX/ESXi host can consist of several parts:
Setting up one or more virtual switches. Virtual switches provide the connectivity between virtual
machines on the same host or on different hosts. Virtual switches also support VMkernel network access
for VMotion, iSCSI, and NFS. On ESX, virtual switches support service console networking. You set up
virtual switches independently on each host. See “Adding a Virtual Switch” on page 106.
Starting with vSphere 4.0, you can use a vNetwork Standard Switch (vSS) or a vNetwork Distributed
Switch (vDS). This document discusses primarily vSS.
Adding virtual machine port groups. A virtual machine always accesses the network through a port
group. See “Adding a Virtual Port Group” on page 107.
Specifying the adapter for the virtual machine. This adapter is specified as a virtual device, configured as
part of virtual machine setup, and discussed in “Configuring a Virtual Machine” on page 117.
Adding VMkernel network interfaces, for example, to support iSCSI storage or VMotion. See “Adding a
VMkernel Network Interface” on page 107.
Configuring a physical adapter (pnic), the actual connection from the host to the network. You can
configure the pnic through the HostNetworkSystem.pnic property, which is a PhysicalNic data object.
You can specify the set of pnics associated with a virtual switch through the VirtualSwitch.pnic
property, which takes an array of physical network adapters.
Network configuration for the host (IP routing, DNS, SNMP). See “Adding Networking Services” on
page 110.
virtual machine
VMkernel port VMkernel port port group
uplink uplink
(PNIC) (PNIC)
Virtual Switches
At the center of networking with vSS is the virtual switch itself. The vSS can send network traffic between
virtual machines on the same host (private network) or network traffic to an external network (public
network). The public network uses the Ethernet adapter associated with the physical host (uplink adapter).
The default number of logical ports for a vSwitch is 120 but it can have more ports. See the Configuration
Maximums document available from the vSphere main documentation page. Each port can connect to a
network adapter of a virtual machine, or an uplink adapter on the physical machine.
When two or more virtual machines are connected to the same vSS, network traffic between them is routed
locally. If an uplink adapter is attached to the vSS, each virtual machine can access the external network that
the adapter is connected to.
Port Group
Port groups aggregate multiple ports under a common configuration. The Configuration Maximums document,
available on the vSphere Documentation page, discusses the maximum number of ports.
Each port group is identified by a network label, which is unique to the current host. Network labels make
virtual machine configuration portable across hosts. All port groups in a datacenter that are physically
connected to the same network (in the sense that each can receive broadcasts from the others) are given the
same label. Conversely, if two port groups cannot receive broadcasts from each other, they have distinct labels.
You can use a VLAN ID to restrict port group traffic to a logical Ethernet segment within the physical network.
For a port group to reach port groups located on other VLANs, the VLAN ID must be set to 4095. If you use
VLAN IDs, you must change the port group labels and VLAN IDs together so that the labels properly
represent connectivity.
The VMware VMkernel TCP/IP networking stack handles iSCSI, NFS, and VMotion in the following ways.
iSCSI as a virtual machine datastore
iSCSI for the direct mounting of .ISO files, which are presented as CD‐ROMs to virtual machines
NFS as a virtual machine datastore
NFS for the direct mounting of .ISO files, which are presented as CD‐ROMs to virtual machines
Migration with VMotion
If you have two or more physical NICs for iSCSI, you can create multiple paths for the software iSCSI by using
port binding. For more information on port binding, see the iSCSI SAN Configuration Guide.
A freshly installed ESX/ESXi system does not include VMkernel network interfaces. When you wish to migrate
a virtual machine with VMotion, your VMkernel networking stack must be set up properly. When you want
to use storage types that use TCP/IP network communications, such as iSCSI, you must provide a separate
VMkernel network interface for that storage device. You must create any VMkernel ports you might need (see
“Adding a VMkernel Network Interface” on page 107).
In a vDS environment, you use a DVS uplink instead of an uplink adapter.
The properties of the HostNetworkConfig object, which you access through
HostNetworkSystem.networkConfig, allow you to retrieve configuration information. This
information is comprehensive and includes the physical adapters, virtual switches, virtual network
interfaces, and so on.
You can also use HostNetworkConfig to make changes to the configuration.
The properties of the HostNetworkInfo object, which you access through
HostNetworkSystem.networkInfo, allow you to retrieve runtime information.
Inside HostVirtualSwitchSpec you can specify the MTU, number of ports, network policy, and bridge
specification. The bridge specifies how the virtual switch connects to the physical adapter. The currently
supported bond bridge provides network adapter (NIC) teaming capabilities through the use of a list of
physical devices and, optionally, a beacon probe to test connectivity with physical adapters.
After you have created the virtual switch, you can connect it to a pnic for connection to the outside, and to a
VMkernel port or a port group.
1 Obtain information about the current networking configuration.
You can use a property collector to retrieve the HostNetworkSystem managed object and several of its
properties, such as networkInfo.
2 Define a HostVirtualSwitchSpec that specifies the attributes of the virtual switch. You can specify the
number of ports (56 to 4088 on ESXi systems) and the HostNetworkPolicy. See “Defining the Host
Network Policies” on page 108.
3 Call HostNetworkSystem.AddVirtualSwitch to add a virtual switch. Specify a unique name and a
HostVirtualSwitchSpec that defines the switch attributes.
The following fragment from AddVirtualSwitch.java illustrates this.
When you create a port group, you can specify a VLAN ID for it. VLANs are an important part of ESX/ESXi
networking because they allow you to group traffic. For example, you could create separate network segments
for VMotion, for management and for development. Using VLANS, you only need to have a separate uplink
adapter for each network segment and a single virtual switch connecting to that adapter. That setup can
greatly reduce the number of switches you need.
1 Define a HostPortgroupSpec. For each port group, you can specify the network policy, the VLAN ID,
and the virtual switch to which the port group belongs.
2 Call HostNetworkSystem.AddPortGroup, passing in the PortGroupSpec.
1 Create a HostVirtualNicSpec data object. Inside the object, you can specify the IP configuration in a
HostIpConfig data object. For vSS, specify the portgroup property. For vDS, specify the
distributedVirtualPort property.
2 Call HostNetworkSystem.AddVirtualNic, passing in the HostVirtualNicSpec.
3 You can then use the VMkernel network interface for software iSCSI or NAS, or call the
HostVmotionSystem.SelectVnic method to use this VMkernel NIC for VMotion.
Example 9‐2, a code fragment from the AddVirtualNic example, illustrates this. The sample retrieves the IP
address from the command line using the cb.get_option call.
....
The policies are defined by the following data objects available as properties of HostNetworkPolicy.
HostNicTeamingPolicy – Defines the connection to the physical network. This includes failure criteria,
active and standby NICs, and failover and load balancing information. See “NIC Teaming” on page 108.
HostNetworkSecurityPolicy – Defines the security policies for the network. See the ESXi Configuration
Guide.
HostNetworkTrafficShapingPolicy – Establishes parameters for three traffic characteristics: average
bandwidth, peak bandwidth, and maximum burst size.
You can also specify the VLAN policy by assigning an integer to the HostPortgroupSpec.vlanid property.
The VMkernel takes care of tagging and untagging the packets as they pass through the virtual switch. See the
HostPortgroupSpec and HostNetworkPolicy data objects in the API Reference.
NIC Teaming
Virtual machines connect to the public network through a virtual switch, which, in turn, connects to the
physical network interface (pnic). When the physical adapter or the adapter’s network connection fails,
connectivity for the associated virtual switch and all port groups and virtual machines is lost.
To resolve this issue, you can set up your environment so each virtual switch connects to two uplink adapters.
Each uplink adapter connects to two different physical switches. The teams can then either share the load of
traffic between physical and virtual networks among some or all of its members, or provide passive failover
in the event of a hardware failure or a network outage.
You set up NIC teaming by setting the HostNetworkPolicy. The path to the HostNicTeamingPolicy is:
HostConfigSpec.network.vswitch[].spec.policy.nicTeaming
If you specify NIC teaming for a virtual switch, the HostVirtualSwitchSpec.bridge property must be set
to HostVirtualSwitchBondBridge.
virtual machine
VMkernel port VMkernel port port group
uplink uplink
(PNIC) (PNIC)
physical physical
switch switch
An IPv6‐specific configuration in vSphere involves providing IPv6 addresses, either by entering static
addresses or by using DHCP for all relevant vSphere networking interfaces. IPv6 addresses can also be
configured using stateless autoconfiguration sent by router advertisement.
You can set up IPv6 networking for a host by changing the HostIpConfig.ipV6Config property, which is a
HostIpConfigIpV6AddressConfiguration data object. HostIpConfigIpV6AddressConfiguration
allows you to specify whether auto‐configuration is enabled, whether DHCP for ipV6 addresses is enabled,
and an array of IPv6 addresses (HostIpConfigIpV6Address data objects).
HostIpConfigIpV6Address allows you to specify all aspects of the IPv6 address including the state of the
address, the address (unless DHCP is enabled), life time, operation, origin, and prefix length. See the API
Reference. The following code fragment illustrates setting the VMkernel NIC to get an automatic IPv6 address
from router advertisements and through DHCP. The user provides the IP address on the command line when
calling the program from which the fragment is taken. The sample retrieves the address using the
cb.get_option utility applications call.
//setting the vnic to get an automatic ipv6 address from router advertisements
// and through dhcp
Query and update the date and time information by using one of the methods defined in
HostDateTimeSystem.
Modify the HostDateTimeSystem.dateTimeInfo property, which contains a HostDateTimeInfo object,
to set up NTP. The NTP information is stored in the HostDateTimeInfo.ntpConfig property, which is a
HostNtpConfig object. The HostNtpConfig objects’s server property contains a list of time servers,
specified by IP address or fully qualified domain name.
IMPORTANT You can start and stop the NTP daemon and retrieve information about it by using the
HostServiceSystem object.
Setting Up SNMP
Simple Network Management Protocol (SNMP) allows management programs to monitor and control
networked devices. vCenter Server and ESX/ESXi systems include different SNMP agents:
The SNMP agent included with vCenter Server can send traps when the vCenter Server system is started
or when an alarm is triggered on vCenter Server. The vCenter Server SNMP agent functions only as a trap
emitter and does not support other SNMP operations such as GET.
ESX/ESXi 4.0 and later includes an SNMP agent embedded in the ESX/ESXi host daemon (hostd) that can
send traps and receive polling requests such as GET requests.
Versions of ESX released before ESX/ESXi 4.0 included a Net‐SNMP‐based agent. You can continue to use this
Net‐SNMP‐based agent in ESX 4.x with MIBs supplied by your hardware vendor and other third‐party
management applications. However, to use the VMware MIB files, you must use the embedded SNMP agent.
To use the NET‐SNMP based agent and embedded SNMP agent at the same time, make one of the agents listen
on a nondefault port. By default, both agents use the same port.
The SDK supports SNMP agent configuration through the HostSnmpSystem managed object. This object
includes two methods, ReconfigureSnmpAgent and SendTestNotification.
HostSnmpSystem.ReconfigureSnmpAgent allows you to specify agent properties through a
HostSnmpConfigSpec. That data object allows you to specify the SNMP port, read only communities, and
the trap targets in an HostSnmpDestination object. The HostSnmpDestination object allows you to
specify the community, and a host and port listening for notification.
HostSnmpSystem.SendTestNotification allows you to test your configuration.
A HostSnmpSystemAgentLimits data object in the HostSnmpSystem.limits property specifies limits of the
agent.
Java
(SDK\vsphere-ws\java\JAXWS\samples\com\ C#
vmware\host) (SDK\vsphere-ws\dotnet\cs\samples\)
AddVirtualNic.java AddVirtualNic\AddVirtualNic.cs
AddVirtualNic\AddVirtualNic.csproj
AddVirtualNic\AddVirtualNic2008.csproj
AddVirtualNic\AddVirtualNic2010.csproj
AddVirtualSwitch.java AddVirtualSwitch\AddVirtualSwitch.cs
AddVirtualSwitch\AddVirtualSwitch.csproj
AddVirtualSwitch\AddVirtualSwitch2008.csproj
AddVirtualSwitch\AddVirtualSwitch2010.csproj
AddVirtualSwitchPortGroup.java AddVirtualSwitchPortGroup\AddVirtualSwitchPortGroup.cs
AddVirtualSwitchPortGroup\AddVirtualSwitchPortGroup.csproj
AddVirtualSwitchPortGroup\AddVirtualSwitchPortGroup2008.csproj
AddVirtualSwitchPortGroup\AddVirtualSwitchPortGroup2010.csproj
RemoveVirtualNic.java RemoveVirtualNic\RemoveVirtualNic.cs
RemoveVirtualNic\RemoveVirtualNic.csproj
RemoveVirtualNic\RemoveVirtualNic2008.csproj
RemoveVirtualNic\RemoveVirtualNic2010.csproj
RemoveVirtualSwitch.java RemoveVirtualSwitch\RemoveVirtualSwitch.cs
RemoveVirtualSwitch\RemoveVirtualSwitch.csproj
RemoveVirtualSwitch\RemoveVirtualSwitch2008.csproj
RemoveVirtualSwitch\RemoveVirtualSwitch2010.csproj
RemoveVirtualSwitchPortGroup.java RemoveVirtualSwitchPortGroup\RemoveVirtualSwitchPortGroup.cs
RemoveVirtualSwitchPortGroup\RemoveVirtualSwitchPortGroup.cspr
oj
RemoveVirtualSwitchPortGroup\RemoveVirtualSwitchPortGroup2008.
csproj
RemoveVirtualSwitchPortGroup\RemoveVirtualSwitchPortGroup2010.
csproj
The chapter includes the following topics:
“VirtualMachine Management Objects and Methods” on page 113
“Creating Virtual Machines and Virtual Machine Templates” on page 114
“Configuring a Virtual Machine” on page 117
“Adding Devices to Virtual Machines” on page 121
“Performing Virtual Machine Power Operations” on page 122
“Registering and Unregistering Virtual Machines” on page 123
“Customizing the Guest Operating System” on page 124
“Installing VMware Tools” on page 124
“Upgrading a Virtual Machine” on page 125
Client applications commonly access and manipulate the following virtual machine related objects:
VirtualMachine – Managed object used for most virtual machine manipulation. Includes methods that
create templates, clones, or snapshots of a virtual machine, perform power operations and guest OS
management, and install VMware Tools.
VirtualMachineConfigInfo – Data object which allows you to retrieve configuration‐specific
information from a virtual machine.
VirtualMachineCloneSpec – Data object which allows you to specify virtual machine properties for a
clone operation. Argument to VirtualMachine.CloneVM_Task.
Figure 10-1. VirtualMachine Managed Object with Some Properties and Methods
If you need several identical virtual machines, you can convert an existing virtual machine to a template and
create multiple copies (clones) from the template. You can also create multiple virtual machines by cloning an
existing virtual machine directly.
_this —Folder where you want to place the virtual machine.
config— VirtualMachineConfigSpec data object that specifies CPU, memory, networking, and so on.
See “Specifying Virtual Machine Attributes with VirtualMachineConfigSpec” on page 115)
pool— Resource pool for the virtual machine to draw resources from.
host— HostSystem managed object that represents the target host on which to run the virtual machine.
If you invoke this method on a standalone host, omit this parameter. If the target host is part of a VMware
DRS cluster, this parameter is optional; if no host is specified, the system selects one.
IMPORTANT All objects must be located in the same datacenter.
The following example fragment from the VMCreate sample program illustrates how to define a
VirtualMachineConfigSpec.
The VMware SDK SDK/samples/Axis/java/com/vmware/apputils/vim/VMUtils.java sample defines a
more comprehensive virtual machine that also includes a Floppy, CD‐ROM, disk, and virtual NIC. See
“Configuring a Virtual Machine” on page 117 for a discussion of commonly set properties.
When you create a virtual machine, the virtual machine files are added at the virtual machine’s storage
location. See Table 10‐1, “Virtual Machine Files,” on page 116.
You can convert any powered off virtual machine to a template by calling VirtualMachine.MarkAsTemplate.
After the conversion, the original virtual machine no longer exists. You can use the template to create multiple
clones of the same configuration.
You can create a clone in one of the following ways:
If you no longer need a specific instance of a virtual machine, but you want to use the virtual machine’s
configuration as a template, use the VirtualMachine.MarkAsTemplate method. This method sets the
config.template property to true, and disables the virtual machine.
If you want to use an existing virtual machine as a template, but keep the virtual machine, call the
VirtualMachine.CloneVM_Task method to create a duplicate of the virtual machine.
If you use the VirtualMachine.CloneVM_Task method, you can customize certain attributes of the clone by
specifying them in the VirtualMachineCloneSpec data object you pass in when you call the method.
The following code fragment from VMClone.java illustrates how you can customize a clone and specify a new
location for it.
ManagedObjectReference cloneTask
= service.cloneVM_Task(vmRef, vmFolderRef, clonedName, cloneSpec);
The VirtualMachine.CloneVM_Task method takes the source virtual machine, target folder, name, and
VirtualMachineCloneSpec as arguments.
The VirtualMachineCloneSpec data object includes the location, power state, and whether the clone should
be a template. The location, in turn, is a VirtualMachineRelocateSpec data object that specifies the target
location (datastore, disk, and host or resource pool) and any transformation to be performed on the disk.
To convert the template to a virtual machine, call the MarkAsVirtualMachine method on the template.
You must specify a resource pool and, optionally, a host for the virtual machine. Host and resource pool
must be under the same ComputeResource. When the operation completes, the template no longer exists.
To keep the template, clone the template by calling the CloneVM_Task method on the template. In the
VirtualMachineCloneSpec (the spec parameter), set the template property to false.
If you are using snapshots, the following additional files might be available. See “Snapshots” on page 128.
**.vmdk Metadata about a snapshot.
-Snapshot#.vmsn Snapshot of virtual machine memory. Snapshot size is equal to the size of you
virtual machine’s maximum memory.
However, you can add the following optional devices to the default set: VirtualSerialPort,
VirtualParallelPort, VirtualFloppy, VirtualCdrom, VirtualUSB, VirtualEthernetCard,
VirtualDisk, and VirtualSCSIPassthrough. See the VirtualDevice Data Object in the API Reference for
more information about each of these optional devices.
CAUTION Do not try to change default device properties using the
VirtualMachineConfigSpec.deviceChange method discussed in “Adding Devices to Virtual Machines” on
page 121, because the deviceChange method is not applicable to default device properties.
The API reference lists all properties and includes information about required permissions for these
configuration methods. The following sections describe some commonly specified attributes.
Use the annotation field to provide a description of the virtual machine. To remove an existing description,
specify the empty string as the value of annotation.
The location of the virtual machine is determined implicitly during creation because you call a
Folder.CreateVM_Task method and specify resource pool and optional target host the virtual machine
should belong to. See Chapter 13, “Resource Management Objects,” on page 141 for a discussion of resource
pools and virtual machine location.
Hardware Version
The hardware version of a virtual machine indicates the lower‐level virtual hardware features a virtual
machine supports, such as BIOS, number of virtual slots, maximum number of CPUs, maximum memory
configuration, and other hardware characteristics.
For a newly created virtual machine, the default hardware version is the most recent version available on the
host where the virtual machine is created. To increase compatibility, you might want to create a virtual
machine with a hardware version older than the highest supported version. You can do so by specifying the
VirtualMachineConfigSpec.version property during virtual machine creation. For existing virtual
machines, call the VirtualMachine.UpgradeVM_Task method.
The hardware version of a virtual machine can be lower than the highest version supported by the ESX/ESXi
host it is running on under the following conditions:
You migrate a virtual machine created on an ESX/ESXi 3.x or earlier host to an ESX/ESXi 4.x host.
You create a virtual machine on an ESX 4.x host using an existing virtual disk that was created on an
ESX/ESXi 3.x or earlier host.
You add a virtual disk created on an ESX/ESXi 3.x or earlier host to a virtual machine created on an
ESX/ESXi 4.x host.
Virtual machines with hardware versions lower than 4 can run on ESX/ESXi 4.x hosts but have reduced
performance and capabilities. In particular, you cannot add or remove virtual devices on virtual machines
with hardware versions lower than 4 when they reside on an ESX/ESXi 4.x host. To make full use of these
virtual machines, upgrade the virtual hardware.
Boot Options
You can control a virtual machine’s boot behavior by setting the VirtualMachineConfigSpec.bootOptions
property. The VirtualMachineBootOptions data object in that property allows you to specify the following
properties:
bootDelay – Delay before starting the boot sequence, in milliseconds.
bootRetryDelay – Delay before a boot retry, in milliseconds. This property is only considered if the
bootRetryEnabled property is set to true.
bootRetryEnabled – If set to true, a virtual machine that fails to boot tries again after the
bootRetryDelay time period has elapsed.
enterBIOSSetup – If set to true, the virtual machine enters BIOS setup the next time it boots. The virtual
machine resets this flag to false so subsequent boots proceed normally.
Operating System
The guest operating system that you specify affects the supported devices and available number of virtual
CPUs. You specify the guest operating system in the following two properties:
guestosid – Specify one of the constants in the VirtualMachineGuestOsIdentifier as a string.
alternateGuestName – Full name for the guest operating system. Use this property if guestosid is one
of the values of VirtualMachineGuestOsIdentifier starting with other*.
reservation – Amount of resources that is guaranteed to be available to the virtual machine. If resource
utilization is less than the reservation, other running virtual machines can use the resources.
limit – Upper limit for CPU or memory resources assigned to this virtual machine. The virtual machine
does not exceed this limit, even if resources are available. This property is typically used to ensure
consistent performance. If end users are used to work on a virtual machine that uses extra resources, and
additional virtual machines are added to the host or resource pool, the virtual machine might slow down
noticably. If set to ‐1, no fixed upper limit on resource usage has been set.
shares – Metric for allocating memory or processing capacity among multiple virtual machines. The
SharesInfo data object has two properties, level and shares.
level – Choose high, low, or normal to map to a predetermined set of numeric values for shares. See
the API Reference Guide for the numbers for CPU, memory, and disk shares. Set this property to
custom to specify an explicit number of shares instead.
shares – Allows you to specify the number of shares you want to allocate to the resource pool. The
allocation is divided evenly between resource pools with the same level.
“Resource Allocation” on page 142 discusses resource allocation in the context of resource pool hierarchies.
The Resource Management Guide includes a detailed discussion of resource allocation in the vSphere
environment.
Number of CPUs
You can set the number of virtual processors for the virtual machine with the
VirtualMachineConfigSpec.numCPUs property. Legal values for this property change depending on the
guestosid value you specify.
CPU Features
You can use the VirtualMachineConfigSpec.cpuFeatureMask[].info property to represent the CPU
features requirements for a virtual machine or guest operating system. See the HostCpuIdInfo data object
discussion in the API Reference for a detailed discussion.
Networks
You configure network settings so that a virtual machine can communicate with the host and with other virtual
machines.
The number of virtual network interfaces depends on the hardware version you specify for a virtual machine.
Hardware version 7 virtual machines support up to ten virtual NICs. Hardware version 4 virtual machines
support up to four virtual NICs.
All MAC addresses that have been assigned to virtual network interfaces of running and suspended virtual
machines on a given physical machine are tracked. The MAC address of a powered off virtual machine is not
checked against those of running or suspended virtual machines. It is possible that a virtual machine acquires
a different MAC address after a move.
The ESXi Configuration Guide discusses virtual machine MAC addresses in detail.
Each virtual port is identified by a pair of world wide names (WWNs): a world wide port name (WWPN) and
a world wide node name (WWNN). These WWNs are assigned by vCenter Server. For detailed information
on how to configure NPIV for a virtual machine, see the Fibre Channel SAN Configuration Guide.
NPIV support is subject to the following limitations:
NPIV must be enabled on the SAN switch. Contact switch vendors for information about enabling NPIV
on their devices.
NPIV is supported only for virtual machines with RDM disks. Virtual machines with regular virtual disks
continue to use the WWNs of the host’s physical HBAs.
Virtual machines on a host have access to a LUN using their NPIV WWNs if the physical HBAs on the
ESX/ESXi host have access to a LUN using its WWNs. Ensure that access is provided to both the host and
the virtual machines
You can set up NPIV with the VirtualMachineConfigSpec properties that start with npiv.
File Locations
File locations for a virtual machine are specified in the following properties:
VirtualMachineConfigSpec.files is a VirtualMachineFileInfo data object that allows you to
specify the log directory, snapshot directory, suspend directory, and configuration file location. Most
locations have a default that you can change as needed.
VirtualMachineConfigSpec.locationID is a 128‐bit hash based on the virtual machine’s configuration
file location and the UUID of the host the virtual machine is assigned to. This property is not usually set
by developers; however, clearing this property by setting it to an empty string is recommended if you
move the virtual machine.
If a virtual machine’s VirtualMachineCapability.swapPlacementSupported property is true for a virtual
machine, you can specify a value for the VirtualMachineConfigSpec.swapPlacement property. The value
must be one of the values of the VirtualMachineConfigInfoSwapPlacementType enumeration, as a string.
Backing option objects – You can find out which devices the host supports by extracting the relevant
backing option object.
Backing information object – The backing information object allows you to supply data for virtual device
configuration. You access a VirtualDeviceBackinInfo object as follows:
VirtualMachineConfigSpec.deviceChange[].device.backing
To add a device to a virtual machine, you must first find out which devices are supported on the corresponding
ESX/ESXi host, and then specify a VirtualDevice object. Perform these tasks to add a device to a virtual
machine:
1 Find out which devices your ESX/ESXi system supports by calling the QueryConfigOption method,
which you can access through the VirtualMachine.environmentBrowser property. The method
returns a VirtualMachineConfigOption data object that specifies what the ESX/ESXi supports. For
example, VirtualMachineConfigOption.hardwareOptions includes information about supported
CPU and memory and an array of VirtualDeviceOption data objects.
NOTE You cannot use the QueryConfigOption method to create another instance of a default device. If
you attempt to add a default device, such as an IDE controller, the server ignores the operation.
2 Specify the backing information object for the device. The actual process for defining the object differs for
different objects. For example, for a CD‐ROM passthrough device, you use a
VirtualCdromPassthroughBackingInfo device. The VirtualDevice.backing property is a
VirtualDeviceBackingInfo object which is extended by devices.
The following code fragment adds a CD‐ROM passthrough device:
VirtualCdromPassthroughBackingInfo vcpbi = new VirtualCdromPassthroughBackingInfo();
// Does the virtual device have exclusive access to the CD-ROM device?
vcpbi.setExclusive(false);
// Specifies the device name.
vcpbi.setDeviceName('cdrom0');
3 Specify connection information for the device.
The VirtualDevice.connectable property is a VirtualDeviceConnectInfo data object. This object
provides information about restrictions on removing the device while a virtual machine is running. This
property is null if the device is not removable.
VirtualDeviceConnectInfo vdci = new VirtualDeviceConnectInfo();
4 Define the controller key, the virtual device key, and the unit number.
You define these items with the integer properties: controllerKey, key, and unitNumber. See the
VirtualDevice data object in the API Reference.
5 Specify device Information.
The deviceInfo property is a Description data object that has a name property and a summary property.
You can supply a string value for each, describing the device.
Description vddesc = new Description();
vddesc.setLabel('CD-ROM Device cdrom0');
vddesc.setSummary('The CD-ROM device for this virtual machine.');
6 Specify the virtual device as the device property of a VirtualDeviceConfigSpec.
7 Specify the VirtualDeviceConfigSpec as the deviceChange property to the
VirtualMachineConfigSpec that you pass in to a Folder.CreateVM_Task or
VirtualMachine.ReconfigVM_Task method.
Here’s the complete code fragment for a CD‐ROM passthrough device:
VirtualDevice vd = new VirtualDevice();
vd.setBacking(vcpbi);
vd.setConnectable(vdci);
vd.setControllerKey(257);
vd.setDeviceInfo(vddesc);
vd.setKey(2);
vd.setUnitNumber(25);
Powered on – The virtual machine is running. If no OS has been installed, you can perform OS installation
as you would for a physical machine.
Powered off – The virtual machine is not running. You can still update the software on the virtual
machine’s physical disk, which is impossible for physical machines.
Suspended – The virtual machine is paused and can be resumed; like a physical machine in standby or
hibernate state.
IMPORTANT Before you power on a virtual machine, you must make sure that the host has sufficient
resources. You must have enough memory for the virtual machine, and some memory overhead. See
“Querying Virtual Machine Memory Overhead” on page 88.
VirtualMachine power operations allow you to change the power state. Each operation is sensitive to the
current power state, for example, powering on a powered off virtual machine has the desired result while
powering on a powered on virtual machine results in an error. You must check the current state before you run
one of these tasks.
PowerOnVM_Task – Powers on a virtual machine. If the virtual machine is suspended, this method
resumes execution from the suspend point.
PowerOffVM_Task – Powers off a virtual machine.
ResetVM_Task – Resets power on this virtual machine. If the current state is poweredOn, ResetVM_Task
first performs a powerOff operation. If the power state is poweredOff, ResetVM_Task performs a
powerOn operation.
SuspendVM_Task – Suspends the virtual machine. You can later power on the suspended virtual machine
to the same state.
Virtual machines are often configured to start up the guest operating system when they are started, and try to
shut down the guest operating system when being shut down. However, starting and stopping a virtual
machine differs from starting and stopping the guest operating system (see “Customizing the Guest Operating
System” on page 124).
IMPORTANT Power operations might affect other virtual machines that are participating in a DRS cluster or
VMware HA. See Chapter 13, “Resource Management Objects,” on page 141 for information about DRS
clusters and VMware HA.
You can use the Datacenter.PowerOnMultiVM_Task to power on multiple virtual machines in a datacenter.
Pass an array of VirtualMachine managed object references and an array of option values to the method. If
any of the virtual machines in the list is manually managed by VMware DRS, the system generates a DRS
recommendation that the user needs to apply manually. Standalone or DRS disabled virtual machines are
powered on for the current host. Virtual machines managed by DRS, to be placed by DRS, are powered on for
the recommended host.
To restore the virtual machine to the inventory, and make it usable again, you can use the RegisterVM_Task
method, defined in the Folder managed object. You can register the virtual machine to a host or to a resource
pool. You can register the virtual machine as a template if you want to use it to clone other virtual machines
from.
The ColdMigration.java sample illustrates both registering and reconfiguring a virtual machine. At the
heart of the sample is the following call, which registers the virtual machine. Arguments include the virtual
machine’s current folder, datastore path, and name, whether to register as a template, and the resource pool
or host to register the machine in.
ManagedObjectReference taskmor = cb.getConnection().getService().registerVM_Task(
vmFolderMor,vmxPath,getVmName(),false,resourcePool,host);
After registration, the virtual machine takes its resources (CPU, memory, and so on) from the resource pool or
host to which it is registered.
The RemoveManagedObject.java sample illustrates unregistering a virtual machine.
VirtualMachine includes the following methods for managing the guest operating system:
ShutdownGuest and RebootGuest shut down and reboot the guest OS, and StandbyGuest puts the
guest in hybernate mode. In each case, you perform the action on the guest OS. For example, you might
shut down Windows but leave the virtual machine running.
ResetGuestInformation clears cached guest information. Guest information can be cleared only if the
virtual machine is powered off. Use this method if stale information is cached, preventing reuse of an IP
address or MAC address.
SetScreenResolution sets the console screen size of the guest operating system. When you call this
method, the change is reflected immediately the virtual machine console you can access in the vSphere
Client.
You can customize the identity and network settings of the guest OS with the CustomizationSpec data object
that is a parameter to VirtualMachine.CustomizeVM_Task. The CustomizationSpec is also a property of
the VirtualMachineCloneSpec you pass in when cloning a virtual machine.
The settings you customize with this method are primarily virtual machine settings, but because the virtual
machine and the guest OS share the information, you are also customizing the guest OS with this method.
The CustomizationSpec allows you to set the following properties:
encryptionKey – Array of bytes that can be used as the public key for encrypting passwords of
administrators.
globalIPSettings – Contains a CustomizationGlobalIPSettings data object which specifies a list of
DNS servers and a list of name resolution suffixes for the virtual network adapter.
identity – Allows you to specify the network identity and settings, similar to the Microsoft Sysprep tool.
nicSettingMap – Custom IP settings that are specific to a particular virtual network adapter.
options – Optional operations (either LinuxOptions or WinOptions).
IMPORTANT You must install the guest operating system before you install VMware Tools.
With VMware Tools installed on the guest OS, the virtual machine obtains its DNS (domain name server) name
and an IP address and is therefore reachable over the network.
VirtualMachine includes three methods for automating installation and upgrade of VMware Tools.
MountToolsInstaller – Mounts the VMware Tools CD installer as a CD‐ROM for the guest operating
system. To monitor the status of the tools installallation, check GuestInfo.toolsStatus. Check
GuestInfo.toolsVersionStatus and GuestInfo.toolsRunningStatus for related information.
UnmountToolsInstaller – Unmounts the VMware Tools installer CD.
UpgradeToolsTask – Performs an upgrade of VMware Tools. This method assumes VMware Tools has
been installed and is running. The method takes one argument, InstallerOptions, which allows you to
specify command‐line options passed to the installer to modify the installation procedure for tools.
Use theToolsConfigInfo data object in VirtualMachineConfigSpec.toolsInfo property to specify the
settings for the VMware Tools software running on the guest operating system.
The chapter includes the following topics:
“Virtual Machine Migration” on page 127
“Snapshots” on page 128
“Linked Virtual Machines” on page 130
Cold migration Moves a powered‐off virtual machine to a new host. Optionally, you can relocate configuration
and disk files to new storage locations. Cold migration can be used to migrate virtual machines
from one datacenter to another.
Migration of a Moves a suspended virtual machine to a new host. Optionally, you can relocate configuration
suspended virtual and disk files to new storage location. You can migrate suspended virtual machines from one
machine datacenter to another.
Migration with Moves a powered‐on virtual machine to a new host. Migration with VMotion allows you to
VMotion move a virtual machine to a new host without interruption in the availability of the virtual
machine. Migration with VMotion cannot be used to move virtual machines from one
datacenter to another.
Migration with Moves the virtual disks or configuration file of a powered‐on virtual machine to a new
Storage VMotion datastore. Migration with Storage VMotion allows you to move a virtual machine’s storage
without interruption in the availability of the virtual machine.
Migration of a suspended virtual machine and migration with VMotion are both sometimes called hot
migration, because they allow migration of a virtual machine without powering it off.
You can move virtual machines manually or set up a scheduled task to perform the cold migration.
Cold Migration
If a virtual machine is shut down, you can move it to a different cluster, resource pool, or host by copying all
virtual machine files to a different directory. The ColdMigration example illustrates this.
When you call the VirtualMachine object’s MigrateVM_Task method, you can specify either a host or
resource pool to migrate to. You can optionally specify the task priority and the power state of the virtual
machine. The VMotion example performs the following tasks:
Uses QueryVMotionCompatibility_Task to check two hosts are compatible.
Uses CheckMigrate_Task to check whether migration is feasible. For example, if two hosts are not
compatible, virtual machines cannot be migrated from one to the other.
Uses CheckRelocation_Task to check whether relocation is possible.
The sample performs the migration if the hosts are compatible.
You can place the virtual machine and all its disks in a single location, or select separate locations for the virtual
machine configuration file and each virtual disk. The virtual machine remains on the same host during Storage
VMotion.
To perform storage VMotion, you use the VirtualMachine.RelocateVM_Task method. The
RelocateVMSpec passed in to the method allows you to specify the target datastore and target host or resource
pool.
Snapshots
A snapshot is reproduction of the virtual machine just as it was when you took the snapshot. The snapshot
includes the state of the data on all virtual machine disks and the virtual machine power state (on, off, or
suspended). You can take a snapshot when a virtual machine is powered on, powered off, or suspended.
When you create a snapshot, the system creates a delta disk file for that snapshot in the datastore and writes
any changes to that delta disk. You can later revert to the previous state of the virtual machine.
The VirtualMachine object has methods for creating snapshots, reverting to any snapshot in the tree, and
removing snapshots.
When you revert a virtual machine, the virtual machine returns to the parent snapshot
of the virtual machine (that is, the parent of the current You are here state).
Snapshot hierarchies can become fairly complex. For example, assume that, in the example in Figure 11‐1, you
revert to snapshot_a. You might then work with and make changes to the snapshot_a virtual machine, and
create a new snapshot, creating, in effect, a branching tree.
Creating a Snapshot
The VirtualMachine.CreateSnapshot_Task method creates a new snapshot of a virtual machine. As a side
effect, the current snapshot becomes the parent of the new snapshot.
The method allows you to specify a name for the snapshot and also requires you set the memory and quiesce
properties:
memory – If true, a dump of the internal state of the virtual machine (basically a memory dump) is
included in the snapshot. Memory snapshots consume time and resources, and take a while to create.
When set to false, the power state of the snapshot is set to powered off.
quiesce – If true and the virtual machine is powered on when the snapshot is taken, VMware Tools is
used to quiesce the file system in the virtual machine. This ensures that a disk snapshot represents a
consistent state of the guest file systems. If the virtual machine is powered off or VMware Tools is not
available, the quiesce flag is ignored.
The VMSnapshot.java example calls this method as follows:
ManagedObjectReference taskMor = service.createSnapshot_Task(
vmMor, snapshotName, desc, false, false);
The method returns MOR to a Task object with which to monitor the operation. The info.result property
in the Task contains the newly created VirtualMachineSnapshot upon success.
Reverting to a Snapshot
When you revert to a snapshot, you restore a virtual machine to the state it was in when the snapshot was
taken. The VirtualMachine.RevertToSnapshot_Task allows you to specify a target host and whether the
virtual machine should be powered on.
If the virtual machine was running when the snapshot was taken, and you restore it, you must either specify
the host to restore the snapshot to, or set the SupressPowerOn flag to true.
Deleting a Snapshot
You can delete all snapshots by calling VirtualMachine.RemoveAllSnapshots or by calling the
VirtualMachineSnapshot.RemoveSnapshot_Task method. The VirtualMachineSnapshot object was
previously returned in the task returned by the CreateSnapshot_Task method.
Linked virtual machines can be created from a snapshot or from the current running point. After you create a
set of linked virtual machines, they share the base disk backing and each virtual machine has its own delta disk
backing, as shown in Figure 11‐2.
Figure 11-2. Linked Virtual Machines with Shared Base Disk Backing and Separate Delta Disk Backing
VM VM
delta delta
disk disk
OS
base disk
CAUTION We recommend a limit of up to eight host virtual machines accessing the same base disk in a linked
virtual machine group. However, you can have an unlimited number of linked virtual machines within each
host virtual machine in the group.
Clone the virtual machine from a snapshot.
Clone the virtual machine from the current virtual machine state. This state might differ from the
snapshot point.
1 To create the snapshot, call the CreateSnapshot_Task method for the virtual machine. The virtual
machine can be in any power state. The following pseudo code creates a snapshot named snap1. The code
does not include a memory dump. VMware Tools is used to quiesce the file system in the virtual machine
if the virtual machine is powered on.
myVm.CreateSnapshot("snap1", "snapshot for creating linked virtual machines", False, True)
2 To create the linked virtual machine, specify the snapshot you created and use a
VirtualMachineRelocateDiskMoveOptions.diskMoveType of createNewDeltaDiskBacking, as
illustrated in Example 11‐1. Creating linked virtual machines from a snapshot works with virtual
machines in any power state.
The result is a virtual machine with the same base disk as the original, but a new delta disk backing.
OS
base disk
Example 11-2. Creating a Linked Virtual Machine from the Current Running Point
relSpec = new VirtualMachineRelocateSpec()
relSpec.diskMoveType = VirtualMachineRelocateDiskMoveOptions.moveChildMostDiskBacking
Figure 11-4. Creating a Linked Virtual Machine from the Current Running Point
current
VM running
point
x x x = disk content
OS
base disk
Snapshot removal – During snapshot removal, the snapshot metadata is also removed, and the virtual
machine from which the snapshot was taken is no longer shown as having snapshots. If you remove a
snapshot while connected to the ESX/ESXi host directly, shared disks are not consolidated and
unnecessary levels of delta disks might result. If you remove a snapshot while connected to a vCenter
Server system, shared disks are not consolidated, but unshared disks are consolidated.
Virtual machine deletion – When you delete a virtual machine by directly connecting to the ESX/ESXi
host, shared disks are not deleted. When you delete a virtual machine by connecting to a vCenter Server
system, shared disks are not deleted, but unshared disks are deleted.
CAUTION Delete all linked virtual machines before deleting the master from which they were created, so
that you don’t have orphaned or corrupt disk files on your file system.
myVm.Relocate(relSpec)
You can relocate multiple linked virtual machines to a new datastore, but keep all shared storage during the
relocation. To achieve the relocation, relocate the desired virtual machines one by one, giving the option to
allow reattaching to an existing disk, as shown in Example 11‐4.
myVm.Relocate(relSpec)
IMPORTANT You can use the PromoteDisks API only when connected to a vCenter Server system.
You can use PromoteDisks to copy disk backings or to consolidate disk backings.
Copy – If the unlink parameter is true, any disk backing that is shared by multiple virtual machines is
copied so that this virtual machine has its own unshared version. Files are copied into the home directory
of the virtual machine. This setting results in improved read performance, but higher space requirements.
The following call copies and shares disks, and then collapses all unnecessary disks.
myVm.PromoteDisks(True, [])
Consolidate – If the unlink parameter is false, any disk backing that is not shared between multiple
virtual machines and not associated with a snapshot is consolidated with its child backing. The net effect
is improved read performance at the cost of inhibiting future sharing. The following call eliminates any
unnecessary disks:
myVm.PromoteDisks(False, [])
Promoting a virtual machine’s disk might also be useful if you end up with disk backings that are not needed
for snapshots or for sharing with other virtual machines.
Both uses of PromoteDisks take an optional second argument, which allows you to apply the method to only
a subset of disks. For example, you can unshare and consolidate only the virtual disk with key 2001 as follows:
for any of my VMs in dev
if (dev.key == 2001)
disk2001 = dev
myVm.PromoteDisks(True, [disk2001])
CAUTION Do not use the VirtualMachine.ReconfigVM_Task call to create or add a delta disk.
One use case is adding a delta disk on top of an existing virtual disk in a virtual machine without creating a
snapshot. Example 11‐5 illustrates how to add the delta disk for the first virtual disk in the virtual machine.
Virtual Applications 12
A virtual application consists of one or more virtual machines, which are deployed, managed, and maintained
as a single unit. This chapter explains how to use the vSphere Web Services SDK for building and managing a
virtual application.
This chapter includes the following topics:
“About Virtual Applications” on page 135
“Creating a VirtualApp” on page 137
“Managing VirtualApp Children” on page 137
“Exporting a Virtual Application” on page 138
“Importing an OVF Package” on page 139
“Virtual Application Life Cycle” on page 139
In the vSphere Web Services SDK, the VirtualApp managed object represents a virtual application. A
VirtualApp object extends ResourcePool with the following capabilities:
Store product information such as product name, vendor, properties, and licenses in vAppConfigInfo.
Specify power‐on and power‐off sequence specification.
Import and export of VirtualApp objects as OVF packages.
Perform application‐level customization using the OVF environment.
Management Overview
You can use the Web Services SDK to create and manage virtual applications by following these steps:
1 Call the CreateVApp method to create a virtual application without children. See “Creating a VirtualApp”
on page 137.
2 Add child objects. See “Managing VirtualApp Children” on page 137.
3 Export the VirtualApp to OVF (ExportVApp method) See “Exporting a Virtual Application” on page 138.
You can then import the OVF to create and customize the virtual application.
Each child has exactly one parent VirtualApp.
Each child can participate in power‐on and power‐off sequences.
The lifetime of each child is determined by the parent VirtualApp object.
VirtualApp children are either direct or linked, based on where a child derives its resources.
Direct Children. A direct child of a virtual application is a virtual machine or virtual application object
that you add explicitly. See “Managing VirtualApp Children” on page 137 for a list of methods. Direct
children share resources with the parent VirtualApp object. Both virtual machines and virtual
application can be direct children.
Linked Children. A linked child of a virtual application is a virtual machine or virtual application that
you add by calling the UpdateLinkedChildren method. Linked children increase the flexibility of the
VirtualApp by allowing child entities to use different resources from the parent VirtualApp object.
Linked children can be part of a different clusters, but a virtual application and its children must be in the
same Datacenter. Both virtual machines and virtual applications can be linked children.
Linked children gives better flexibility. In particular, you can create virtual applications that span clusters. The
vSphere Client does not support adding or removing links, though it does show links.
When you add a linked child to a virtual application, the following rules apply:
An InvalidArgument fault is thrown if the UpdateLinkedChildren method is called on a link target that
is a direct child of another virtual application.
When you add a virtual machine or virtual application that is already a linked child of another virtual
application, the existing link is removed and replaced with the new link.
The life‐time of a linked child is determined by the destroyWithParent property on the
VAppEntityConfigInfo data object. If set to true, the child is destroyed when the parent VirtualApp
is destroyed. Otherwise, the link is removed when the VirtualApp is destroyed.
If you add a virtual application that consists of multiple entities, for example multiple virtual machines, the
entities are moved sequentially and committed one at a time, as specified in the list. If a failure is detected, the
method terminates with an exception.
OVF Packages
Open Virtualization Format (OVF) is a distribution format for virtual applications. vSphere uses the OVF
package as a unit of distribution and storage for virtual applications. Because these entities are uploaded,
downloaded, and stored in OVF package format, vSphere supports access to and deployment of a wide variety
of virtual applications.
A virtual application typically consists of one or more virtual disk files and a configuration file.
The virtual disk files contain the operating systems and applications that run on the virtual machines in
the virtual application.
The configuration file contains metadata that describes how the virtual application is configured and
deployed.
An OVF package might also include certificate and manifest files.
The OVF package contains metadata that describes the capabilities and infrastructure requirements of the
virtual application, and contains references to the virtual disks and other files that store the virtual machine
state. Most of this information is stored in an XML document called the OVF envelope. When an OVF package
is instantiated into either a VirtualApp or a VirtualMachine object (which depends on metadata in the
envelope), then the configuration stored in the OVF envelope is applied to the VirtualVApp and the
VirtualMachine objects.
Some of the information in the OVF file is used unaltered, with entire ovf:Section_Type elements included
in the VirtualApp object body. Other sections are transformed or extended by instantiation. You do not need
detailed knowledge of all OVF package elements, but a basic understanding of key parts of the package and
how they relate to virtual applications is useful.
See the OVF specification at the DMTF Web site for additional information.
Creating a VirtualApp
You always create a VirtualApp without children. The CreateVApp method includes the following
parameters:
resSpec – Properties you would specify for a ResourcePool.
configSpec – VAppConfigSpec data object for specifying virtual‐application specific information.
vmFolder – Depends on the VirtualApp structure:
When creating top‐level virtual applications, that is, virtual applications with no ancestor virtual
applications, you must specify a folder.
If the VirtualApp has another virtual application in the ancestry chain, the folder parameter must
be NULL when you create the VirtualApp.
Direct children. Use one of the following methods:
CreateChildVMTask adds a new virtual machine.
CreateVApp adds a new virtual application.
MoveIntoResourcePool adds or removes an existing virtual machine or virtual application
Linked children. Use UpdateLinkedChildren to add or remove virtual machines or virtual
applications.
You can call the UpdateVappConfig method to specify how each virtual machine fits into the virtual
application.
destroyWithParent True if the entity should be removed when the VirtualApp is removed.
key Key for the virtual machine or virtual application, a managed object reference to the child.
startAction One of the strings in the VAppAutoStartAction enumeration.
startDelay Delay, in seconds, before continuing with the next entity.
startOrder Specifies the start order for this entity. Entities are started from lower numbers to
higher‐numbers and reverse on shutdown. Multiple entities with the same start order are
started in parallel and the order is unspecified. This value must be 0 or higher.
stopAction Defines the stop action for the entity. Can be set to none, powerOff, guestShutdown, or
suspend. If set to none, then the entity does not participate in auto‐stop.
stopDelay Delay, in seconds, before continuing with the next entity.
tag Tag for the entity.
waitingForGuest Determines if the virtual machine should start after receiving a heartbeat, from the guest.
To export a virtual application, you follow steps in the following order:
1 “Acquiring the Export Lease” on page 138
2 “Downloading the Disks” on page 138
3 “Generating the OVF Descriptor” on page 138
4 “Completing the Lease” on page 139
The method returns a HttpNfcLease managed object reference. You can retrieve information about the state
and, later, the content of the lease from this managed object reference.
NOTE Acquiring a lease requires time to complete. Check the acquisition state periodically
(HttpNfcLeaseState type) to determine when you can continue with the process and download the disks.
While the lease is held, the virtual machines in the VirtualApp object are locked. Locked virtual machines
cannot be powered on, deleted, or undergo any other state change that would disrupt the export process.
While downloading each disk, you can create a filename for the resulting disk file. You should choose a name
based on the corresponding key of the device URL of the lease (HttpNfcLease.info.deviceURL.key). OVF
Descriptor generation requires the key.
The client must periodically call the HttpNfcLeaseProgress method on the export lease to prevent the lease
from expiring.
You can call the HttpNfcLeaseAbort method to terminate the lease. Calling the method releases the lock on
the virtual application.
By creating the descriptor, you provide information about the disk files downloaded by the client, both the
filenames chosen and the sizes observed, to the server. The server does have that information due to
compression during download.
1 Parse the OVF descriptor by calling OvfManager.parseDescriptor.
2 Validate the target ESX/ESXi host by calling OvfManager.validateHost.
3 Create the VirtualAppImportSpec by calling OvfManager.createImportSpec.
This structure contains all the information needed to create the entities on the vCenter Server, including
children. Clients do not have to read or modify VirtualAppImportSpec to perform basic OVF
operations.
4 Create the vCenter Server entities by calling ResourcePool.importVApp.
The method uses a parsed OVF descriptor to create VirtualApp and VirtualMachine objects in the
vSphere environment.
The import process itself consists of two steps:
The server creates the virtual machines and virtual applications.
You must wait for the server to create all inventory objects. During object creation, the server monitors the
state property on the HttpNfcLease object returned from the ImportVApp call. When the server
completes object creation, the server changes the lease to ready state and you can begin uploading virtual
disk contents. If an error occurs while the server is creating inventory objects, the lease changes to the error
state, and the import process is aborted.
The client application uploads virtual disk contents do an HTTP POST request with the content of the disk
to the provided URLs. The disk is in the stream‐optimized VMDK format
(http://www.vmware.com/technical‐resources/interfaces/vmdk.html). As an alternative, you can use the
OVF tool, available at http://communities.vmware.com/community/developer/forums/ovf at VMware
Communities.
When all inventory objects have been created and the HttpNfcLease has changed to ready state, you can
upload disk contents by using the URLs provided in the info property of the HttpNfcLease object. You
must call the HttpNfcLeaseProgress method on the lease periodically to keep the lease alive and report
progress to the server. Failure to do so causes the lease to time out, aborting the import process.
When you are done uploading disks, complete the lease by calling the HttpNfcLeaseComplete method. You
can terminate the import process by calling the HttpNfcLeaseAbort method.
If the import process fails, is terminated, or times out, all created inventory objects are removed, including all
virtual disks.
While a virtual application is starting, all power operations performed on subentities are disabled.
If a virtual machine in a virtual application fails to start, an exception is returned and the power‐on sequence
terminates. In case of a failure, virtual machines that are already started remain powered on.
You can use the PowerOffVApp_Task method to power off a virtual application. This method stops the virtual
machines or child virtual applications in the order specified in the VirtualApp object configuration if force
is false. If force is set to true, this method stops all virtual machines (in no specific order and possibly in
parallel) regardless of the VirtualApp object auto‐start configuration.
While a virtual application is stopping, all power operations performed on subentities are disabled.
While a virtual application is being suspended, all power operations performed on subentities are disabled. If
you attempt to perform a power operation, a TaskInProgress error results.
The VirtualAppVAppState type defines the set of states a VirtualApp object can be in. The transitory state
between started and stopped is modeled explicitly, since the starting or stopping of a virtual application might
take minutes to complete.
The life‐time of a linked child is determined by the destroyWithParent property on the
VAppEntityConfigInfo data object. If set to true, the child is destroyed when the parent virtual application
is destroyed. Otherwise, only the link is removed when the virtual application is destroyed.
Resource Management 13
Underlying all virtual components are the actual physical resources of the host system, such as CPU, RAM,
storage, network infrastructure, and so on. vSphere supports sharing of resources on an individual host or
across hosts using resource pools. vSphere also supports clusters for failover or load balancing.
The chapter includes the following topics:
“Resource Management Objects” on page 141
“Introduction to Resource Management” on page 142
“Resource Allocation” on page 142
“Creating and Configuring Resource Pools” on page 144
“Introduction to VMware DRS and VMware HA Clusters” on page 146
“Creating and Configuring Clusters” on page 147
“Managing DRS Clusters” on page 148
“Managing HA Clusters” on page 149
The ComputeResource managed object represents the set of resources for a set of virtual machines. A
ComputeResource is always associated with a root ResourcePool object.
The ResourcePool managed object represents a set of physical resources of a single host, a subset of a
hostʹs resources, or resources spanning multiple hosts. Resource pools can be subdivided by creating
child resource pools. Only virtual machines associated with a resource pool can be powered on.
The ClusterComputeResource data object aggregates the compute resources of multiple associated
HostSystem objects into a single compute resource for use by virtual machines. If you plan on using
VMware cluster services such as HA (High Availability), DRS (Distributed Resource Scheduling), or on
using EVC (Enhanced vMotion Compatibility), use ClusterComputeResource.
IMPORTANT HA, DRS, and EVC require licenses. If any clustering functionality does not work properly, check
whether you have licenses for it.
Total available resources for the ESX/ESXi host, resource pool, or cluster to which the virtual machine
belongs.
Number of virtual machines powered on and resource usage by those virtual machines.
Overhead required to manage the virtualization.
Limits defined by the user.
Resource management allows you to dynamically allocate resources to virtual machines so that you can more
efficiently use available capacity. You can change resource allocation in the following ways.
Specify resource allocation for individual virtual machines. See “CPU and Memory Resource Allocation”
on page 119.
Create a hierarchy of resource pools and add the virtual machine to a resource pool with characteristics
appropriate for its use. See “Resource Pool Hierarchies” on page 142.
Add hosts and virtual machines to a cluster so you can take advantage of VMware DRS for
recommendations or automatic resource redistribution. See “Creating and Configuring Clusters” on
page 147.
Resource Allocation
When you create a virtual machine, you always specify the resource pool that the virtual machine can draw
resources from and optionally a host on which the virtual machine should run. You can access the resource
pool as follows:
Standalone host – When you call Folder.AddStandaloneHost_Task, the call returns a Task object that
contains the ComputeResource. The ComputeResource.resourcePool property is the root resource
pool associated with the compute resource (and with the host).
Cluster – When you call Folder.CreateClusterEx, the method returns a managed object reference to a
ClusterComputeResource instance. Because ClusterComputeResource inherits all properties of
ComputeResource, you can access the root folder through the
ClusterComputeResource.resourcePool property.
A root resource pool must always have at least as many resources as all its immediate children.
Do not overcommit resource pool resources. The sum of all child pools should always be less than (not
equal to or more than) the parent. For example, if four child resource pool reservations total 40 gigabytes
and the parent resource pool has a reservation of 60 gigabytes, you have some room to create another
resource pool. However, if the four child resource pool reservations total 60 gigabytes, you do not. For
virtual machine, some overcommitment of resources is supported. See the technical white papers on the
VMware web site.
Before creating new child resource pools, check available resources in the parent pool. The
ResourcePool.runtimeInfo property is a ResourcePoolRuntimeInfo data object.
ResourcePoolRuntimeInfo.cpu and ResourcePoolRuntimeInfo.memory properties are
ResourcePoolResourceUsage objects with resource usage information, including an
unreservedForPool property. If the parent resource pool does not have enough available resources,
reconfigure the reservation values of child pools before adding the new pool.
Reconfigure child resource pools first, to ensure that the reservation properties of each child do not absorb
all the resources of the parent.
Cluster Overview
vSphere supports grouping ESX/ESXi hosts that are managed by the same vCenter Server system into clusters.
Clusters take advantage of features such as VMware DRS and VMware HA.
VMware HA (VMware High Availability) migrates virtual machine from one host in a cluster to another
host, in the event of host failure.
VMware DRS (VMware Distributed Resource Scheduler, provides dynamic redistribution of resources.
DRS also includes support for Distributed Power Management (DTM), which makes recommendations
or decisions to power off hosts and power them on again as needed, to save energy.
You can set up VMware DRS to automatically migrate virtual machines, or to display recommendations
if resources are not used efficiently across the datacenter.
You can create a hierarchy of resource pools by calling the ResourcePool.CreateResourcePool method
passing in a ResourceConfig method as an argument. The ResourceConfig.cpuAllocation and
ResourceConfig.memoryAllocation properties point to a ResourceAllocationInfo object that allows
you to specify the information.
reservation – Amount of CPU or memory that is guaranteed available to the resource pool. Reserved
resources are not wasted if they are not used. If the utilization is less than the reservation, the resources
can be utilized by other resource pools or running virtual machines.
explandableReservation – In a resource pool with an expandable reservation, the reservation on a
resource pool can expand beyond the specified value, if the parent resource pool has unreserved
resources. A non‐expandable reservation is called a fixed reservation. See “Understanding Expandable
Reservation” on page 144. This property is ignored for virtual machines.
limit – Upper limit for CPU or memory resources assigned to this resource pool. The virtual machine or
resource pool does not exceed this limit, even if resources are available. This property is typically used to
ensure consistent performance. Set this property to ‐1 to indicate no fixed upper limit on resource usage.
shares – Relative metric for allocating memory or processing capacity among multiple resource pools.
The SharesInfo data object has two properties, level and shares, that allow you to specify resource
allocation.
level – Choose high, low, or normal to map to a predetermined set of numeric values for shares. See
the API Reference Guide for the numbers for CPU, memory, and disk shares. Set this property to
custom to specify an explicit number of shares instead.
shares – Allows you to specify the number of shares you want to allocate to the resource pool. The
allocation is divided evenly between resource pools with the same level.
Calling the ResourcePool.UpdateConfig or ResourcePool.UpdateChildResourceConfiguration
method allows you to change the configuration.
The administrator knows that users want to power on virtual machines with reservations, but does not know
how much each user will reserve. Making the reservations for S1 and S2 expandable allows the administrator
to more flexibly share and inherit the common reservation for pool P.
Without expandable reservations, the administrator needs to explicitly allocate S1 and S2 a specific amount.
Such specific allocations can be inflexible, especially in deep resource pool hierarchies and can complicate
setting reservations in the resource pool hierarchy.
Expandable reservations cause a loss of strict isolation; that is, S1 can start using all of Pʹs reservation, so that
no memory or CPU is directly available to S2.
Parent pool RP‐MOM has a reservation of 6GHz and one running virtual machine VM‐M1 that reserves
1GHz.
You create a child resource pool RP‐KID with a reservation of 2GHz and with Expandable Reservation
selected.
You add two virtual machines, VM‐K1 and VM‐K2, with reservations of 2GHz each to the child resource
pool and try to power them on.
VM‐K1 can reserve the resources directly from RP‐KID (which has 2GHz).
No local resources are available for VM‐K2, so it borrows resources from the parent resource pool,
RP‐MOM. RP‐MOM has 6GHz minus 1GHz (reserved by the virtual machine) minus 2GHz (reserved by
RP‐KID), which leaves 3GHz unreserved. With 3GHz available, you can power on the 2GHz virtual
machine.
6GHz RP-MOM
VM-M1, 1GHz
2GHz RP-KID
Now, consider another scenario with VM‐M1 and VM‐M2, shown in Figure 13‐3.
Power on two virtual machines in RP‐MOM with a total reservation of 3GHz.
You can still power on VM‐K1 in RP‐KID because 2GHz are available locally.
When you try to power on VM‐K2, RP‐KID has no unreserved CPU capacity so it checks its parent.
RP‐MOM has only 1GHz of unreserved capacity available (5GHz of RP‐MOM are already in use—3GHz
reserved by the local virtual machines and 2GHz reserved by RP‐KID). As a result, you cannot power on
VM‐K2, which requires a 2GHz reservation.
6GHz RP-MOM
2GHz RP-KID
The ResourcePool.MoveIntoResourcePool method lets you move virtual machines, virtual applications, or
resource pool hierarchies into a new resource pool. You call the method with an array of ResourcePool or
VirtualMachine managed object references that you want to move. The whole resource pool hierarchy,
including child resource pools and virtual machines, is moved when you move a resource pool.
Minimum available resources of the immediate children must always be less than or equal to the resources of
the immediate parent. The root resource pool cannot be moved.
VMware DRS. vSphere Resource Management Guide
VMware HA. vSphere Availability Guide
VMware DRS
A VMware DRS cluster is a collection of ESX/ESXi hosts and associated virtual machines with shared resources
and a shared management interface. Before you can obtain the benefits of cluster‐level resource management
you must create a DRS cluster.
When you add a host to a DRS cluster, the host’s resources become part of the cluster’s resources. In addition
to this aggregation of resources, a DRS cluster supports cluster‐wide resource pools and enforces cluster‐level
resource allocation policies. The following cluster‐level resource management capabilities are available.
Load Balancing. The vCenter Server system monitors distribution and usage of CPU and memory
resources for all hosts and virtual machines in the cluster. DRS compares these metrics to an ideal resource
utilization given the attributes of the cluster’s resource pools and virtual machines, the current demand,
and the imbalance target. DRS then performs (or recommends) virtual machine migrations. When you
first power on a virtual machine in the cluster, DRS attempts to maintain proper load balancing either by
placing the virtual machine on an appropriate host or by making a recommendation.
Power Management. When the VMware DTM (Distributed Power Management) feature is enabled, DRS
compares cluster‐ and host‐level capacity to the demands of the cluster’s virtual machines, including
recent historical demand. DTM places (or recommends placing) hosts in standby power mode if sufficient
excess capacity is found. DTM powers on (or recommends powering on) hosts if capacity is needed.
Depending on the resulting host power state recommendations, virtual machines might need to be
migrated to and from the hosts.
Virtual Machine Placement. You can control the placement of virtual machines on hosts within a cluster,
by assigning DRS affinity or antiaffinity rules.
See “Managing DRS Clusters” on page 148.
VMware HA
VMware HA supports high availability for virtual machines by pooling them and the hosts they reside on into
a cluster. VMware HA monitors the hosts. In the event of host failure, VMware HA migrates virtual machines
to hosts with capacity. When you add new virtual machines to a VMware HA cluster, VMware HA checks
whether enough capacity to power on that virtual machine on a different host in case of host failure is
available.
See “Managing HA Clusters” on page 149.
Creating a Cluster
If your environment includes a vCenter Server system and multiple ESX/ESXi hosts, you can create a cluster
by calling the Folder.CreateCluster method. You pass in a name for the new cluster and a
ClusterConfigSpec data object. In the data object, you can specify the following properties:
VMware HA
dasConfig – ClusterDasConfigInfo data object that specifies the HA service on the cluster.
Properties on this object determine whether strict admission control is enabled, what the default
virtual machine settings in this cluster are, whether VMware HA restarts virtual machines after host
failure, and so on. See the API Reference.
dasVMConfigSpec – ClusterDasVMConfigSpec object. ClusterDasVMConfigSpec.info is a
ClusterDasVmConfigInfo data object that specifies the HA configuration for a single virtual
machine. You can apply different settings to different virtual machines, or use the default specified
in the dasConfig property.
VMware DRS
drsConfig – ClusterDrsConfigInfo data object that contains configuration information for the
VMware DRS service. Properties in this object specify the cluster‐wide (default) behavior for virtual
machine and the threshold for generating cluster recommendations. You can enable and disable
VMware DRS with the ClusterDrsConfigInfo.enabled property.
drsVmConfigSpec – ClusterDrsVMConfigSpec data object that points to a
ClusterDrsVmConfigInfo data object which specifies the DRS configuration for a single virtual
machine. ClusterDrsVmConfigInfo overrides the default DRS configuration for an individual
virtual machine and allows you to specify the DRS behavior and whether DRS can perform migration
or recommend initial placement for a virtual machine.
When you update a DRS configuration, you call ComputeResource.ReconfigurComputeResource_Task
and pass in a ClusterConfigSpecEx object. In the ClusterConfigSpecEx.drsVmConfigSpec
property, you can specify an array of ClusterDrsVMConfigSpec objects that define the configuration
for individual virtual machines.
rulesSpec – ClusterDrsRuleSpec data object that points a ClusterRuleInfo data object which
specifies the affinity and antiaffinity rules DRS should use. See the API Reference entry for
ClusterRuleInfo.
ClusterComputeResource.AddHost_Task – Adds a host to a cluster. The host name must be either an
IP address, such as 192.168.0.1, or a DNS resolvable name. If the cluster supports nested resource pools
and you specify the optional resourcePool argument, the hostʹs root resource pool becomes the specified
resource pool, and that resource pool and the associated hierarchy is added to the cluster.
If a cluster does not support nested resource pools and you add a host to the cluster, the standalone host
resource pool hierarchy is discarded and all virtual machines on the host are added to the clusterʹs root
resource pool.
ClusterComputeResource.moveHostInto_Task moves a host that is in the same datacenter as the
cluster into the cluster. If the host is already part of a different cluster, the host must be in maintenance
mode.
ClusterComputeResource.moveInto_Task works like moveHostInto_Task, but supports an array of
hosts at a time. When using this method, you cannot preserve the original resource pool hierarchy of the
hosts.
Reconfiguring a Cluster
You can reconfigure a cluster by calling the ClusterComputeResource.ReconfigureCluster_Task
method. The method allows you to enable or disable VMware DRS or VMware HA and to define attributes.
See “Creating a Cluster” on page 147.
To remove hosts from a cluster, you can use one of the following methods:
ClusterComputeResource.MoveHostInto_Task or MoveInto_Task—Removes a host from a cluster
and moves the host into another cluster. See “Adding a Host to a Cluster” on page 148.
Folder.MoveIntoFolder_Task—Removes a host from a cluster and make it a standalone host.
Host.Destroy_Task—Removes a host from inventory.
Initial placement of virtual machines
Virtual machine migration for load balancing. Each migration recommendation has a rating, which you
can find in the ClusterRecommendation.rating property. Client applications can choose to consider
only high‐priority migrations are considered or migrations with multiple priority levels.
Checks whether DRS clusters are valid — enough resources are available to start additional virtual
machines — or not valid.
DRS recommentations are stored in the ClusterComputeResource.recommendation property, which is an
array of ClusterRecommendation data objects. Each ClusterRecommendation includes information about
the action to perform and information you can use to display information to end users or for logging.
Client applications can call ClusterComputeResource.ApplyRecommendation to apply one or more
recommendations.
For more fine‐grained control, client applications can perform individual actions only. The
ClusterRecommendation.action property is an array of ClusterAction objects. Each ClusterAction
includes a target for the action and the type, which is a string that is one of the values of the ActionType
enum (HostPowerV1, MigrationV1, VmPowerV1). Client applications can use the ActionType
information to act on DRS recommendations by powering on hosts, migrating virtual machines, or
powering on virtual machines by calling Datacenter.PowerOnMultiVM_Task.
Managing HA Clusters
You can add a host to an HA cluster by calling one of the methods for moving hosts into a cluster. See “Adding
a Host to a Cluster” on page 148. You might have to call HostSystem.ReconfigureHostForDAS_Task to
reconfigure the host for HA if the automatic HA configuration fails.
When you add a host to a VMware HA cluster, an agent is uploaded to the host and configured to
communicate with other agents in the cluster. The first five hosts added to the cluster are designated as
primary hosts, and all subsequent hosts are designated as secondary hosts. The primary hosts maintain and
replicate all cluster state and are used to initiate failover actions. If a primary host is removed from the cluster,
VMware HA promotes another host to primary status.
Any host that joins the cluster must communicate with an existing primary host to complete its configuration
(except when you are adding the first host to the cluster). At least one primary host must be functional for
VMware HA to operate correctly. If all primary hosts are unavailable (not responding), no hosts can be
successfully configured for VMware HA.
One of the primary hosts is also designated as the active primary host and its responsibilities include:
Deciding where to restart virtual machines.
Keeping track of failed restart attempts.
Determining when it is appropriate to keep trying to restart a virtual machine.
Host network isolation occurs when a host is still running, but it can no longer communicate with other hosts
in the cluster. With default settings, if a host stops receiving heartbeats from all other hosts in the cluster for
more than 12 seconds, it attempts to ping its isolation addresses. If this also fails, the host declares itself
isolated from the network.
When the isolated hostʹs network connection is not restored for 15 seconds or longer, the other hosts in the
cluster treat that host as failed and try to fail over its virtual machines. However, when an isolated host retains
access to the shared storage it also retains the disk lock on virtual machine files. To avoid potential data
corruption, VMFS disk locking prevents simultaneous write operations to the virtual machine disk files and
attempts to fail over the isolated hostʹs virtual machines fail. By default, the isolated host leaves its virtual
machines powered on, but you can change the host isolation response.
When VMware HA performs failover and restarts virtual machines on different hosts, its first priority is the
immediate availability of all virtual machines. After the virtual machines have been restarted, those hosts on
which they were powered on might be heavily loaded, while other hosts are comparatively lightly loaded.
VMware HA uses the CPU and memory reservation to determine failover, while the actual usage might be
higher.
In a cluster using DRS and VMware HA with admission control turned on, virtual machines might not be
evacuated from hosts entering maintenance mode because of resources reserved to maintain the failover level.
You must manually migrate the virtual machines off of the hosts using VMotion.
When VMware HA admission control is disabled, failover resource constraints are not passed on to DRS and
VMware Distributed Power Management (DPM). The constraints are not enforced.
DRS evacuates virtual machines from hosts and place the hosts in maintenance mode or standby mode
regardless of the effect this might have on failover requirements.
VMware DPM powers off hosts (place them in standby mode) even if doing so violates failover
requirements.
If you are using a vCenter Server system, the ScheduledTaskManager allows you to schedule your own tasks
for a one‐time run or for repeated runs.
The chapter includes the following topics:
“Creating Tasks” on page 151
“Using TaskInfo to Determine Task Status” on page 152
“Monitoring TaskInfo Properties” on page 153
“Accessing and Manipulating Multiple Tasks” on page 154
“Understanding the ScheduledTaskManager Interface” on page 163
“Using a TaskHistoryCollector” on page 167
“Sample Code Reference” on page 168
Creating Tasks
Each time a vSphere server runs a method, it creates a Task and a corresponding TaskInfo data object. Some
methods run synchronously and return data as the Task completes. But methods that end with _Task run
asynchronously, and return a reference to a Task that will be created and completed as a processor becomes
available. They are created to perform the functions in a non‐blocking manner. Therefore, you must use the
reference to the Task to monitor the status and results of the Task. vSphere operations that include the suffix
_Task in their names are asynchronous and return Task references.
The Task object provides information about the status of the invoked operation through its TaskInfo data
object. An instance of TaskInfo populates the info property of the Task managed object at runtime. By
monitoring properties of the TaskInfo object, a client application can take appropriate action when the Task
completes, or can handle errors if the Task does not complete successfully.
Session Persistence
A Task and its associated objects are session specific, so they will not persist after the session is closed. When
your client opens a session, you can only obtain information about the Task objects that your client is
authorized to view.
Cancelling a Task
To cancel a Task that is still running, call the Task.CancelTask method, passing in the managed object
reference to the Task you want to cancel, as shown in this example:
my_conn.cancelTask(taskMoRef);
You can only cancel a Task that has its cancelable property set to true and its state property set to
running. The operation that initiates the Task sets the value of cancelable when it creates the Task.
For example, a CreateVM_Task cannot be cancelled. Before attempting to cancel a running Task, you can
check the values of the cancelable property and the state property of the TaskInfo data object associated
with the Task.
The Task.info property contains a TaskInfo data object that contains information about the Task the server
returns to your client application.
When a Task is instantiated by the server, the TaskInfo.result property is initialized to Unset. Upon
successful completion of an operation, the result property is populated with the return type specific to the
operation. The result might be a data object, a reference to a managed object, or any other data structure as
defined by the operation.
For example:
1 The ClusterComputeResource.AddHost_Task method returns a Task object whose info property
contains a TaskInfo data object.
2 At the start of the operation, the result property is Unset.
3 Upon successful completion of the operation, the result property of TaskInfo contains the managed
object reference of the newly added HostSystem.
Table 14‐1 lists some of the values obtained from a TaskInfo data object at the beginning and the end of
the Task instantiated by the CreateVM_Task method.
...
....
Your code must handle the datatype returned when the Task completes (managed object reference, data
object, and so on). In addition to success, queued, and running, an operation can enter an error state, which
your code must handle.
A Task object has a lifecycle that is independent of the TaskManager that creates it and independent of the
entity with which it is associated. It exists to convey status about an operation. You can discard the reference
to it when your application no longer needs the information.
Example 14‐1 shows a code fragment that obtains values for the info property from each Task object in the
array.
Example 14‐2 shows output from a run of the program. See the source code listing for TaskList.java or for
TaskList.cs in the vSphere Web Services SDK package for details.
Started
Task
Operation AcquireCimServicesTicket
Name srv
Type HostSystem
State -Success
Error
======================
Ended TaskList
You can specify a smaller and more efficient data set using one of the ViewManager views with the Property
Collector. Each view represents objects you have selected on the server. Views are more efficient because you
only need a single instance of a PropertyCollector object, instead of multiple instances with multiple filter
specifications.
The ViewManager has the following property:
viewList – An array of view references. Each array entry is a managed object reference to a view created by
this View Manager.
See “PropertyCollector Example (RetrievePropertiesEx)” on page 49 for an example that uses the
ContainerView method to access Inventory data.
The following example uses the ViewManager service interface with a ListView method to access and
manipulate Task objects. This example uses the property collector to monitor tasks that are created in the
process of virtual machine cloning. This program creates two clones of the specified virtual machine and then
monitors the tasks and prints out status and reference values when the tasks have completed.
The following steps describe the procedure for creating a program that uses the ListView managed object.
You can run the example below as a stand‐alone program against your own server by copying the code
sections into .java file, compiling it, and then using the following command line syntax:
1 Import the vSphere Web Services API libraries:
import com.vmware.vim25.*;
2 Import the necessary Java (and JAX‐WS connection, bindings, and SOAP) libraries:
import java.util.*;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.soap.SOAPFaultException;
3 Create the cloneVMTask class to create cloned virtual machine Tasks on a host, so we can demonstrate
how to monitor these Tasks.
public class cloneVMTask {
4 Declare variables for the service instance objects and methods:
// Services and methods
static ManagedObjectReference pCollector;
static ManagedObjectReference viewMgr;
static ServiceContent serviceContent;
static VimPortType methods;
/**
* getVmRef() retrieves a reference to the specified virtual machine.
*
* vmName - name of the virtual machine specified on the command line
*
* This function retrieves references to all of the virtual machines
* in the datacenter and looks for a match to the specified name.
*/
5 Create a function that retrieves references to all of the virtual machines in the datacenter and looks for a
match to the specified name. The function in this example uses getVMRef(String, vmName), which
retrieves a reference to the virtual machine that you specify on the command line (vmName) when you run
this sample. The function also initializes the vmRef variable to null.
private static ManagedObjectReference getVmRef( String vmName )
throws Exception
{
ManagedObjectReference vmRef = null;
6 Use a container view to collect references to all virtual machines in the datacenter.
List<String> vmList = new ArrayList<String>();
vmList.add("VirtualMachine");
ManagedObjectReference cViewRef = methods.createContainerView(viewMgr,
serviceContent.getRootFolder(),
vmList,
true);
7 Create an ObjectSpec to define the beginning of the traversal. Use the setObj method to specify that the
container view is the root object for this traversal. Set the setSkip method to true to indicate that you
donʹt want to include the container in the results.
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(cViewRef);
oSpec.setSkip(true);
8 Create a traversal spec to select all objects in the view.
TraversalSpec tSpec = new TraversalSpec();
tSpec.setName("traverseEntities");
tSpec.setPath("view");
tSpec.setSkip(false);
tSpec.setType("ContainerView");
9 Add the traversal spec to the object spec.
oSpec.getSelectSet().add(tSpec);
10 Specify the property for retrieval (virtual machine name).
PropertySpec pSpec = new PropertySpec();
pSpec.setType("VirtualMachine");
pSpec.getPathSet().add("name");
11 Create a PropertyFilterSpec and add the object and property specs to it.
PropertyFilterSpec fSpec = new PropertyFilterSpec();
fSpec.getObjectSet().add(oSpec);
fSpec.getPropSet().add(pSpec);
12 Create a list for the filters and add the spec to it.
List<PropertyFilterSpec> fSpecList = new ArrayList<PropertyFilterSpec>();
fSpecList.add(fSpec);
13 Get the data from the server.
RetrieveOptions ro = new RetrieveOptions();
RetrieveResult props = methods.retrievePropertiesEx(pCollector,fSpecList,ro);
14 Go through the returned list and look for a match to the specified vmName.
if (props != null) {
for (ObjectContent oc : props.getObjects()) {
String vmname = null;
List<DynamicProperty> dps = oc.getPropSet();
if (dps != null) {
for (DynamicProperty dp : dps) {
vmname = (String) dp.getVal();
// If the name of this virtual machine matches
// the specified name, save the managed object reference.
if (vmname.equals(vmName)) {
vmRef = oc.getObj();
break;
}
}
if (vmRef != null) { break; }
}
}
}
if (vmRef == null) {
System.out.println("Specified Virtual Machine not found.");
throw new Exception();
}
return vmRef;
15 Get the folder that contains the specified virtual machine (VirtualMachine.parent)
private static ManagedObjectReference getVMParent(ManagedObjectReference vmRef)
throws Exception {
16 Create an Object Spec to define the property collection. Use the setObj method to specify that the
vmRef is the root object for this traversal. Set the setSkip method to true to indicate that you donʹt want
to include the virtual machine in the results.
// don't include the virtual machine in the results
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(vmRef);
oSpec.setSkip(false);
17 Specify the property for retrieval (virtual machine parent).
PropertySpec pSpec = new PropertySpec();
pSpec.setType("VirtualMachine");
pSpec.getPathSet().add("parent");
18 Create a PropertyFilterSpec and add the object and property specs to it.
PropertyFilterSpec fSpec = new PropertyFilterSpec();
fSpec.getObjectSet().add(oSpec);
fSpec.getPropSet().add(pSpec);
19 Create a list for the filters and add the property filter spec to it.
List<PropertyFilterSpec> fSpecList = new ArrayList<PropertyFilterSpec>();
fSpecList.add(fSpec);
20 Get the data from the server.
RetrieveOptions ro = new RetrieveOptions();
RetrieveResult props = methods.retrievePropertiesEx(pCollector,fSpecList,ro);
21 Get the parent folder reference.
ManagedObjectReference folderRef = null;
if (props != null) {
for (ObjectContent oc : props.getObjects()) {
List<DynamicProperty> dps = oc.getPropSet();
if (dps != null) {
for (DynamicProperty dp : dps) {
folderRef = (ManagedObjectReference) dp.getVal();
}
}
}
}
if (folderRef == null) {
System.out.println("Folder not found.");
throw new Exception();
}
return folderRef;
}
Now that we have the reference information for the virtual machine that you specified on the command
line (vmRef) and a reference for the parent directory (folderRef), we are ready to create the clone virtual
machines.
22 To create clones, use the cloneVM method and pass in the vmRef that we retrieved previously.
private static void cloneVM(ManagedObjectReference vmRef) throws Exception {
23 After you have created the clone managed object, create a clone specification. Use default values
whenever possible.
VirtualMachineCloneSpec cloneSpec = new VirtualMachineCloneSpec();
VirtualMachineRelocateSpec vmrs = new VirtualMachineRelocateSpec();
cloneSpec.setLocation(vmrs);
cloneSpec.setPowerOn(true);
cloneSpec.setTemplate(false);
24 Get the destination folder for the clone virtual machines (VirtualMachine.parent). The clones will be
created in the same folder that contains the specified virtual machine (vmName).
ManagedObjectReference folder = getVMParent( vmRef );
25 Create two clone virtual machines.
ManagedObjectReference cloneTask = methods.cloneVMTask( vmRef, folder, "clone__1",
cloneSpec);
ManagedObjectReference cloneTask2 = methods.cloneVMTask( vmRef, folder, "clone__2",
cloneSpec);
26 Create a list view for the clone tasks.
List<ManagedObjectReference> taskList = new ArrayList<ManagedObjectReference>();
taskList.add(cloneTask);
taskList.add(cloneTask2);
ManagedObjectReference cloneTaskList = methods.createListView(viewMgr, taskList);
Next we will set up a property filter for WaitForUpdatesEx. This includes creating an object spec, a
traversal spec, a property spec, a filter spec, and finally a property filter. The next six steps will describe
these procedures.
27 Create an object spec to start the traversal.
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(cloneTaskList);
oSpec.setSkip(true);
28 Create a traversal spec to select the list of tasks in the view.
TraversalSpec tSpec = new TraversalSpec();
tSpec.setName("traverseTasks");
tSpec.setPath("view");
tSpec.setSkip(false);
tSpec.setType("ListView");
29 Add the traversal spec to the object spec.
oSpec.getSelectSet().add(tSpec);
30 Create property spec for Task.info.state and Task.info.result.
PropertySpec pSpec = new PropertySpec();
pSpec.setType("Task");
pSpec.setAll(false);
pSpec.getPathSet().add("info.state");
pSpec.getPathSet().add("info.result");
31 Create a filter spec.
PropertyFilterSpec fSpec = new PropertyFilterSpec();
fSpec.getObjectSet().add(oSpec);
fSpec.getPropSet().add(pSpec);
32 Create the filter.
ManagedObjectReference pFilter = methods.createFilter(pCollector, fSpec, true);
In the next section, we use the waitForUpdatesEx method to look for a change in
cloneTask.info.state and cloneTask.info.result. When the state is ʺsuccessʺ,
cloneTask.info.result is the managed object reference of the clone. Note that the order of property
retrieval is not guaranteed, and it may take more than one call to waitForUpdatesEx to retrieve both
properties for a task.
This code does not set a time‐out (WaitOptions.maxWaitSeconds is unset), so after it has retrieved all of
the property values, waitForUpdatesEx will block the thread, waiting for the TCP connection with the
vSphere Server to time‐out.
How a client application handles the session depends on the particular context. (The client can call
WaitForUpdatesEx from its own thread, look for specific updates and then stop calling the method.)
For more information about WaitOptions and the waitForUpdatesEx method, see “Client Data
Synchronization (WaitForUpdatesEx)” on page 67.
33 Initialize wait loop (?)
String version = "";
Boolean wait = true;
WaitOptions waitOptions = new WaitOptions();
while ( wait ) {
34 Call WaitForUpdatesEx.
UpdateSet uSet = methods.waitForUpdatesEx(pCollector, version, waitOptions);
if (uSet == null) {
wait = false;
}
else {
35 Get the version for subsequent calls to WaitForUpdatesEx.
version = uSet.getVersion();
36 Get the list of property updates.
List<PropertyFilterUpdate> pfUpdates = uSet.getFilterSet();
for (PropertyFilterUpdate pfu : pfUpdates) {
37 Get the list of object updates produced by the filter.
List<ObjectUpdate> oUpdates = pfu.getObjectSet();
for (ObjectUpdate ou : oUpdates) {
38 Look for ObjectUpdate.kind=MODIFY (property modified).
if (ou.getKind() == ObjectUpdateKind.MODIFY) {
39 Get the changed data.
List<PropertyChange> pChanges = ou.getChangeSet();
40 Retrieve the name of the property
for (PropertyChange pc : pChanges) {
name = pc.getName();
Authentication is handled using a TrustManager and supplying a host name verifier method. (The host
name verifier is declared in the main function.)
For the purposes of this example, this TrustManager implementation will accept all certificates. This is
only appropriate for a development environment. Production code should implement certificate support.
private static class TrustAllTrustManager implements javax.net.ssl.TrustManager,
javax.net.ssl.X509TrustManager {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
Now we are set to retrieve the task information, so we implement the main method.
// cloneVMTask( server, user, password, virtual-machine )
public static void main(String [] args) throws Exception {
41 We create variables to hold the values passed in from the command line.
String serverName = args[0];
String userName = args[1];
String password = args[2];
String vmName = args[3];
String url = "https://"+serverName+"/sdk/vimService";
42 Add variables for access to the API methods and services.
// -- ManagedObjectReference for the ServiceInstance on the Server
// -- VimService for access to the vSphere Web service
// -- VimPortType for access to methods
// -- ServiceContent for access to managed object services
ManagedObjectReference SVC_INST_REF = new ManagedObjectReference();
VimService vimService;
43 Declare a host name verifier that will automatically enable the connection. The host name verifier is
invoked during the SSL handshake.
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
44 Create the trust manager.
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
javax.net.ssl.TrustManager tm = new TrustAllTrustManager();
trustAllCerts[0] = tm;
// Create the SSL context
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
// Create the session context
javax.net.ssl.SSLSessionContext sslsc = sc.getServerSessionContext();
// Initialize the contexts; the session context takes the trust manager.
sslsc.setSessionTimeout(0);
sc.init(null, trustAllCerts, null);
// Use the default socket factory to create the socket for the secure connection
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
45 Set the default host name verifier to enable the connection.
HttpsURLConnection.setDefaultHostnameVerifier(hv);
46 Set up the manufactured managed object reference for the ServiceInstance
SVC_INST_REF.setType("ServiceInstance");
SVC_INST_REF.setValue("ServiceInstance");
47 Create a VimService object to obtain a VimPort binding provider. The BindingProvider provides access to
the protocol fields in request/response messages. Retrieve the request context which will be used for
processing message requests.
vimService = new VimService();
methods = vimService.getVimPort();
Map<String, Object> ctxt = ((BindingProvider) methods).getRequestContext();
48 Store the Server URL in the request context and specify true to maintain the connection between the client
and server. The client API will include the Serverʹs HTTP cookie in its requests to maintain the session. If
you do not set this to true, the Server will start a new session with each request.
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
ctxt.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
49 Retrieve the ServiceContent object and login.
serviceContent = methods.retrieveServiceContent(SVC_INST_REF);
methods.login(serviceContent.getSessionManager(),
userName,
password,
null);
50 Get references to the property collector and the view manager.
pCollector = serviceContent.getPropertyCollector();
viewMgr = serviceContent.getViewManager();
51 Get a reference to the specified virtual machine.
ManagedObjectReference vmRef = getVmRef( vmName );
52 Clone the virtual machine and wait for the result.
cloneVM( vmRef );
53 Close the connection.
methods.logout(serviceContent.getSessionManager());
}
}
NOTE For general task monitoring, it is a best practice to use a ViewManager to monitor specific tasks. See the
API Reference for more information about using views.
You can use the following TaskManager properties in your client application.
description – TaskDescription object that includes a methodInfo property. methodInfo contains a
key‐based array that TaskManager uses to populate the value of a TaskInfo data object’s descriptionId
property with the name of the operation. Examples of two elements from this key‐based array are
methodInfo["Folder.createVm"] and methodInfo["Folder.createClusterEx"].
recentTask – Array of Task managed object references that are queued to run, running, or completed
within the past 10 minutes. On ESX/ESXi hosts that are managed by a vCenter Server, a completed task
must also be one of the 200 most recent tasks to be included in the array. A vSphere Client connected to a
vSphere Server displays queued, running, and completed tasks in the Recent Tasks pane.
In addition to these properties, TaskManager has the following methods:
CreateTask – Used by other methods to create a custom Task object. Developers creating extensions can
use this method to create custom Task objects.
CreateCollectorForTasks – Creates an object that contains all tasks from the vCenter Server database
that meet specific criteria. You cannot run this method against an ESX/ESXi system. See “Using a
TaskHistoryCollector” on page 167.
Figure 14‐1 shows a UML class diagram for TaskManager and associated objects.
For ESX/ESXi systems managed by a vCenter Server system, use a TaskHistoryCollector. See “Using a
TaskHistoryCollector” on page 167.
You can define actions to occur on vCenter Server at different times:
When a vCenter Server system starts up operations, such as after a reboot
At a specific time and day
At hourly, daily, weekly, or monthly intervals
You can schedule scripts to be run or methods to be invoked on the server. You apply the action to an entity in
the inventory, such as a virtual machine or a host.
You can perform the following actions with ScheduledTaskManager.
Retrieve scheduled tasks for a specific managed entity by calling the
ScheduledTaskManager.RetrieveEntityScheduledTask method.
Create a scheduled task by calling the ScheduledTaskManager.CreateScheduledTask method. See
“Scheduling Tasks” on page 164.
Figure 14‐2 shows the ScheduledTaskManager service interface and associated data objects.
The ScheduledTaskManager.scheduledTask property contains an array of the ScheduledTask objects
configured for the server. If you have no actions scheduled, this property is empty. For any ScheduledTask
objects in this array, you can use the info property of the ScheduledTask object to obtain information about
the status of the scheduled action. Information includes the task’s progress, state, previous and next
runtimes, and other details contained in the ScheduledTaskInfo data object.
If the action specified for a ScheduledTask creates its own Task (such as with any of the asynchronous
operations), the managed object reference to the Task populates the activeTask property of
ScheduledTaskInfo.
Scheduling Tasks
You create a ScheduledTask by invoking the ScheduledTaskManager.CreateScheduledTask method.
When you invoke the method, you include a ScheduledTaskSpec object that defines the schedule and
specifies the action to take at the specified time. A scheduled action applies to an object based on these rules:
If you specify a container object as the entity for the scheduled action, the schedule applies to all entities
that are direct descendents of the container. You can set a ScheduledTask at the Folder, Datacenter, or
VirtualApp level and have the scheduled action apply to all entities associated with the Folder,
Datacenter, or VirtualApp.
If you specify a node object in the inventory, such as a virtual machine, the action applies only to the
virtual machine.
action – Action to take when the ScheduledTask runs. Specify an Action data object, which is an
abstract type that is extended by several specific action types. The Action data objects are also used by
the Alarm infrastructure. See “Specifying Alarm Actions” on page 176.
notification – Specifies the email address for sending notification messages about the ScheduledTask.
To use notifications, the vCenter Server system must have an SMTP email gateway configured. By default,
notification is set to an empty string.
scheduler – Specifies the time, frequency, and other details of the schedule. The TaskScheduler data
object is the base type for several specific schedule objects. See “Scheduling Recurring Operations” on
page 164.
The TaskScheduler base type has two properties:
activeTime is the time at which the action should occur. If you leave this property unset, it defaults to
the time when that specification for the scheduled task was submitted to the server.
expireTime is the time after which the scheduled action should not occur. By default, this property is
unset, so the scheduled task does not expire.
Table 14‐2 provides some usage information about the TaskScheduler subtypes. The examples in the table
are Java code fragments.
AfterStartupTaskScheduler Schedule a task to start as soon as the vCenter Server system is started, or at a defined time
after startup. The value must be zero (task triggered at startup) or higher.
Example: Schedule a task to run 10 minutes after vCenter Server startup.
OnceTaskScheduler Schedule an action to run once only at the specified date and time.
. Example: Schedule a task to run 30 minutes after the schedule is submitted to the server.
HourlyTaskScheduler Schedule a task to run once every hour (or every specified number of hours) at a specified
time. Set the interval property to run the task after a specified number of hours.
Example: Schedule a task to run every 4 hours at half‐past the hour.
WeeklyTaskScheduler Schedule a task to run every week (or every specified number of weeks) on a specified day
(or days) at a specific time. The hours and minutes are set as UTC values. At least one of
the boolean values must be set to true. You can also set the interval property to run the task
after a specified number of weeks.
Example: Schedule a task to run every Tuesday and Sunday at 30 minutes past midnight.
MonthlyByDayTaskScheduler Schedule a task to run every month (or every specified number of months) on a specified
day at a specified time (hour and minutes). You can also set the interval property to run the
task after a specified number of months.
Example: Schedule a task to run every 3 months (on the last day of the month) at 12:30 p.m.
The hour and minute properties of all objects that extend the RecurrentTaskSchedule data object are
specified in Coordinated Universal Time (UTC) values rather than the local time of the server. When you
define the schedule, convert your local time to a UTC value.
The code fragment in Example 14‐4 defines a ScheduledTask that powers on virtual machines daily at 4:15
a.m., if the server local time is in the Pacific Standard Time (PST) time zone. For a server in the Eastern
European Summer Time (EEST) zone, the setting is read by the system as 3:15 pm.
To cancel the current run of a scheduled task, call ScheduledTask.RemoveScheduledTask. This method
does not cancel subsequent runs of the ScheduledTask.
To cancel an upcoming run of a ScheduledTask, call ScheduledTask.ReconfigureScheduledTask
with a new ScheduledTaskSpec data object containing the new specifications for the schedule.
To cancel a ScheduledTask that spawns a second task, create a PropertyCollector to obtain the
reference to the Tasks and call its CancelTask method. The task must be cancellable.
Using a TaskHistoryCollector
A TaskHistoryCollector lets you gather information about tasks. You create a TaskHistoryCollector
using the TaskManager.CreateCollectorForTasks method.
To create a TaskHistoryCollector
1 Identify the type of Task objects that you want to collect, and create an instance of a TaskFilterSpec data
object that specifies your filter criteria.
The TaskFilterSpec includes an taskTypeId property, which you use to limit the set of collected task
objects to specific types. You can also provide a time range in the TaskFilterSpec by defining an
TaskFilterSpecByTime data object for its time property. See the vSphere API Reference.
2 Obtain the managed object reference to the TaskManager on your server instance.
3 Submit the filter and the reference to the server in the CreateTaskHistoryCollector method.
The server returns a reference to a TaskHistoryCollector object.
After a HistoryCollector has been created, the server appends new objects that meet the filter criteria to the
collection as they occur. The system appends the new object to the collection by placing it in the first position
of the latestPage and removes the oldest object from the collection. The latestPage property of the
TaskHistoryCollector object has a property that consists of the 1000 most recent objects in the collection.
Use a PropertyCollector to obtain the items from the latestPage property.
A HistoryCollector exists only for the duration of the session that instantiated it. Call the
HistoryCollector.DestroyCollector method to delete the collector before the session ends.
The TaskFilterSpec object allows you to specify the collection criteria. Most of the properties are optional
and can be submitted as null values. The TaskFilterSpec lets you collect tasks based on user name, entity
type, time, and state of the Task.
DestroyCollector – A HistoryCollector exists only for the current session. Invoke the
DestroyCollector operation to explicitly destroy the collector before the session ends.
ResetCollector – Adjusts the starting position for the subset of objects from the collector to the object
immediately preceding the current latestPage.
RewindCollector – Positions the latestPage to the oldest item in the array. When a
HistoryCollector is created, this is the default location.
SetCollectorPageSize – Accepts an integer parameter to set the size of the latestPage property of a
HistoryCollector. The default size of a HistoryCollector is an array with a maximum of 1000 objects
of the appropriate type (Task, Event). The array is sorted by creation date and time of the objects.
Java C#
vsphere-ws\java\JAXWS\samples\com\vmware\general\ vsphere-ws\dotnet\cs\samples\TaskList\
TaskList.java TaskList.cs
vsphere-ws\dotnet\cs\samples\TaskList\
TaskList.csproj
vsphere-ws\dotnet\cs\samples\TaskList\
TaskList2008.csproj
vsphere-ws\dotnet\cs\samples\TaskList\
TaskList2010.csproj
vsphere-ws\java\JAXWS\samples\com\vmware\scheduling\ vsphere-ws\dotnet\cs\samples\DeleteOneTimeSchedu
DeleteOneTimeScheduledTask.java ledTask\DeleteOneTimeScheduledTask.cs
vsphere-ws\dotnet\cs\samples\DeleteOneTimeSchedu
ledTask\DeleteOneTimeScheduledTask.csproj
vsphere-ws\dotnet\cs\samples\DeleteOneTimeSchedu
ledTask\DeleteOneTimeScheduledTask2008.csproj
vsphere-ws\dotnet\cs\samples\DeleteOneTimeSchedu
ledTask\DeleteOneTimeScheduledTask2010.csproj
vsphere-ws\java\JAXWS\samples\com\vmware\scheduling\ vsphere-ws\dotnet\cs\samples\OneTimeScheduledTas
OneTimeScheduledTask.java k\OneTimeScheduledTask.cs
vsphere-ws\dotnet\cs\samples\OneTimeScheduledTas
k\OneTimeScheduledTask.csproj
vsphere-ws\dotnet\cs\samples\OneTimeScheduledTas
k\OneTimeScheduledTask2008.csproj
vsphere-ws\dotnet\cs\samples\OneTimeScheduledTas
k\OneTimeScheduledTask2010.csproj
vsphere-ws\java\JAXWS\samples\com\vmware\scheduling\ vsphere-ws\dotnet\cs\samples\WeeklyRecurrenceSch
WeeklyRecurrenceScheduledTask.java eduledTask\WeeklyRecurrenceScheduledTask.cs
vsphere-ws\dotnet\cs\samples\WeeklyRecurrenceSch
eduledTask\WeeklyRecurrenceScheduledTask.csproj
vsphere-ws\dotnet\cs\samples\WeeklyRecurrenceSch
eduledTask\WeeklyRecurrenceScheduledTask2008.csp
roj
vsphere-ws\dotnet\cs\samples\WeeklyRecurrenceSch
eduledTask\WeeklyRecurrenceScheduledTask2010.csp
roj
Alarms are sent by vSphere to alert users to problems. You can also create your own alarm to monitor the
system and set up follow‐up actions. Alarm setup includes specifying the trigger condition and defining the
action that should result.
The chapter includes the following topics:
“Event and Alarm Management Objects” on page 169
“Understanding Events” on page 169
“Using an EventHistoryCollector” on page 172
“Using Alarms” on page 173
“Defining Alarms Using the AlarmSpec Data Object” on page 174
“Sample Code Reference” on page 177
Event subtypes define the events that the system generates. See “Event Data Objects” on page 171 and
“Creating Custom Events” on page 172.
EventHistoryCollector allows you to monitor events. You can create a filter to limit the number of events
your code retrieves. You can monitor both system events and your own events. See “Using an
EventHistoryCollector” on page 172.
The AlarmManager is the service interface for creating, setting, and managing alarms. You create an alarm,
specifying trigger conditions and the action to take. When the conditions defined for the Alarm occur on the
system, the Action specified for the alarm starts. The alarm also generates an Event that you can retrieve with
an EventHistoryCollector.
Understanding Events
An Event is a data object type that contains information about state changes of managed entities and other
objects on the server. Events include user actions and system actions that occur on datacenters, datastores,
clusters, hosts, resource pools, virtual machines, networks, and distributed virtual switches. For example,
these common system activities generate one or more Event data objects:
Powering a virtual machine on or off
Creating a virtual machine
Installing VMware Tools on the guest OS of a virtual machine
Reconfiguring a compute resource
Adding a newly configured ESX/ESXi system to a vCenter Server system
In the vSphere Client, information from Event objects generated on a standalone ESX/ESXi system displays in
the Events tab. For managed hosts, information from Event objects displays in the Tasks & Events tab.
Persistence of Event objects depends on the system setup.
Standalone ESX/ESXi systems – Event objects are not persistent. Events are retained only for as long as
the host system’s local memory can contain them. Rebooting a standalone ESX/ESXi host or powering off
a virtual machine removes Event objects from local memory.
A standalone ESX/ESXi system might keep about 15 minutes worth of Event data, but this can vary
depending on the processing load of the host, the number of virtual machines, and other factors.
Managed ESX/ESXi systems. Event objects are persistent. Managed ESX/ESXi systems send Event data
to the vCenter Server system that manages them, and the vCenter Server system stores the information
its database.
You can use the event sample applications included in the SDK package with either managed or standalone
ESX/ESXi systems and with vCenter Server systems.
Using an EventHistoryCollector, you can obtain information about these objects as they are being collected
on a specific ESX/ESXi system, or from a specific historical period from the database. See “Using an
EventHistoryCollector” on page 172.
A description property, defined as an instance of an EventDescription data object, which contains an
event category and other information.
A latestEvent property that contains the most recent Event data object in memory.
A maxCollector property that specifies the number of EventHistoryCollector objects per client
session that can be created. This value is set by the vCenter Server system.
The following event objects are commonly generated by a console‐style client application:
com.vmware.vim.VmPoweredOnEvent
com.vmware.vim.VmStartingEvent
com.vmware.vim.VmReconfiguredEvent
com.vmware.vim.VmCreatedEvent
com.vmware.vim.VmBeingCreatedEvent
You can also format an Event message based on contextual information. At runtime, the Event data object is
populated with values that contain information associated with the source of an event, for example, the Event
data object’s computeResource, datacenter, ds, dvs, host, net, and vm properties.
You can use the properties of an Event object with the information in the EventDescriptionEventDetail in
EventManager.description.eventInfo to format event messages.
1 Obtain the managed object reference to the EventManager.
..
ManagedObjectReference _svcRef = new ManagedObjectReference();
ServiceContent _sic = my_conn.retrieveServiceContent(_svcRef);
ManagedObjectReference eMgrRef = _sic.getEventManager();
...
2 Obtain the managed object reference to the entity with which you are associating the Event.
3 Call the LogUserEvent method, passing in the EventManager and the Event reference and a string
consisting of the Event message for the msg parameter of the operation.
User‐defined Event objects display in the vSphere Client among the other events on the system, with the
prefix User logged event: followed by the text submitted in your msg parameter. In other client
applications, such as in the console‐based Event sample applications, custom events display as
com.vmware.vim.GeneralUserEvent objects.
Using an EventHistoryCollector
An EventHistoryCollector lets you gather information about events that the server has generated. You
create an EventHistoryCollector using the EventManager.CreateCollectorForEvents method.
To create an EventHistoryCollector
1 Identify the type of Event objects that you want to collect, and create an instance of an EventFilterSpec
data object that specifies your filter criteria. See “Creating an EventHistoryCollector Filter” on page 172.
The EventFilterSpec includes an eventTypeId property, which you use to limit the set of collected
event objects to specific types. You can also provide a time range in the EventFilterSpec, by defining
an EventFilterSpecByTime data object for its time property. See the vSphere API Reference for details.
2 Obtain the managed object reference to the EventManager on your server instance.
3 Submit the filter and the reference to the server in the CreateEventHistoryCollector operation.
The server returns a reference to an EventHistoryCollector object.
After you have created the HistoryCollector, the server appends new objects that meet the filter criteria to
the collection as they occur. The system appends the new object to the collection by placing it in the first
position of the latestPage and it removes the oldest object from the collection. The latestPage property of
the EventHistoryCollector object has a property that consists of the 1000 most recent objects in the
collection. Use a PropertyCollector to obtain the items from the latestPage property.
A HistoryCollector exists only for the duration of the session that instantiated it. You invoke the
DestroyCollector operation to explicitly eliminate the collector before the session ends.
The EventFilterSpec object allows you to specify the collection criteria. Most of the properties are optional
and can be submitted as null values. The EventFilterSpec lets you collect events based on user name, entity
type, time, and state of the Event.
DestroyCollector – A HistoryCollector exists only for the current session. Invoke the
DestroyCollector operation to explicitly destroy the collector before the session ends.
ResetCollector – Adjusts the starting position for the subset of objects from the collector to the object
immediately preceding the current latestPage.
RewindCollector – Positions the latestPage to the oldest item in the array. When a
HistoryCollector is created, this is the default location.
SetCollectorPageSize – Accepts an integer parameter to set the size of the latestPage property of a
HistoryCollector. The default size of a HistoryCollector is an array that consists of at most 1000
objects of the appropriate type (Task, Event). The array is sorted by creation date and time of the objects.
Using Alarms
The vSphere alarm infrastructure supports automating actions and sending different types of notification in
response to certain server conditions. Many Alarms exist by default on vCenter Server systems. You can also
create alarms yourself. For example, an Alarm can send an alert email message when CPU usage on a specific
virtual machine exceeds 99% for more than 30 minutes.
The alarm infrastructure integrates with other server components, such as events and performance counters.
The AlarmManager is the service interface for creating, setting, and managing alarms. You create an alarm,
specifying trigger conditions and the action to take. When the conditions defined for the Alarm occur on the
system, the Action specified for the alarm starts. The alarm also generates an Event that is posted to the Event
history database. In addition, the action initiated by the Alarm might also post a second Event to the database,
depending on the Action type.
The Alarm.info property is an AlarmInfo data object. You can obtain information about active Alarms by
collecting the properties of the AlarmInfo data object.
Creating an Alarm
You create an alarm with the AlarmManager.CreateAlarm method. In the simplest case, you specify the
trigger condition in the AlarmSpec.expression property and the action to perform in the
AlarmSpec.action property. When the expression evaluates to true, the alarm performs the action.
Figure 15‐4 shows the CreateAlarm method.
To create an alarm
1 Obtain a managed object reference to the AlarmManager associated with the vCenter Server.
2 Obtain a managed object reference of the entity on which you want to set the Alarm.
3 Create an AlarmSpec data object and specify the alarm details in its properties. See “Defining Alarms
Using the AlarmSpec Data Object” on page 174.
4 Call AlarmManager.CreateAlarm, passing in the references and the AlarmSpec data object. The system
returns a managed object reference to the Alarm (see Figure 15‐4).
The state of an alarm is contained in an AlarmState data object.
action – Action to initiate when the Alarm becomes active. Specify one of the Action subtypes. See
“Specifying Alarm Actions” on page 176.
actionFrequency – Number of seconds that the Alarm remains in the state required to initiate the
specified action.
expression – One or more AlarmExpression data objects combined in a way that evaluates to a
true‐false expression. See “Specifying Alarm Trigger Conditions with AlarmExpression” on page 175.
setting – Tolerance and frequency limits for the Alarm defined in the AlarmSetting data object.
AlarmSetting contains two integer properties:
reportingFrequency, which specifies the number of seconds between activation of an alarm. Use 0
to specify that the alarm can activate as frequently as required.
toleranceRange, which specifies the acceptable range (measured in hundredth percentage) above
and below the specified value defined in a MetricAlarmExpression.
AlarmExpression Types
By using the appropriate type of AlarmExpression, you can set alarms for different conditions, states, or
events.
EventAlarmComparison Specifies the property of the Event that
should trigger the alarm and the operator
to use as the basis for comparison.
AndAlarmExpression Combines one or more instances of the
OrAlarmExpression AndAlarmExpression and the
OrAlarmExpression data objects into an
expression that evaluates to true or
false.
Using MetricAlarmExpression
The MetricAlarmExpression data object lets you set an alarm to monitor performance metrics. The vSphere
Client uses the data object to indicate when hosts or clusters do not have sufficient resources in a DAS or DRS
cluster environment. See the Resource Management Guide.
You set the metric property to the PerfMetricId of a performance metric that you want to monitor on the
system. Set the red or yellow properties to identify the level at which the metric value moves from green, to
yellow, to red. You must define red, yellow, or both properties. Use each of these properties with the isAbove
or isBelow MetricAlarmOperator enumerations to complete the definition of the threshold.
In conjunction with red and yellow properties, you can use the redInterval or yellowInterval properties.
These properties enable you to set the number of seconds that the performance metric must be in red or
yellow state before the expression becomes true and triggers the defined action.
The AlarmAction data object is an abstract type that has two descendent objects.
The AlarmTriggeringAction data object has an action property and a transitionSpecs property.
AlarmTriggeringActionTransitionSpec allows you to define a starting state and a final state for the
Alarm. You can limit the number of Alarm objects actually triggered to a single Alarm by specifying false
for the repeats property of the AlarmTriggeringActionTransitionSpec.
The GroupAlarmAction data object is an array version of the AlarmAction base type. You can create a
single AlarmAction instance or an array of AlarmAction instances to take effect when the conditions
specified for your alarm are met on the system.
The system can respond to an alarm in several ways:
Invoking an operation. To invoke an operation, create a MethodAction data object.
Running a Script. To run a script, create an instance of the RunScriptAction data object that specifies
the fully qualified path to the shell script on the vCenter Server.
Send an email message. To send an email message to a system administrator, use the SendEmailAction
data object.
For example, you can use the MethodAction data object type to invoke an operation on the server.
The MethodAction data object contains the following properties:
name—Name of the operation that you want to invoke at the scheduled time.
argument—Specifies required parameters, if any, as an array of MethodArgumentAction data objects.
Depending on the entity associated with the alarm, the MethodAction.argument property might not be
needed.
To disable the Alarm, obtain managed object references to the AlarmManager and to the entity on which the
Alarm is set. Call AlarmManager.EnableAlarmActions operation, passing the value false for the enabled
parameter.
\samples\alarms\MPowerStateAlarm.java VMPowerStateAlarm
\samples\events\EventFormat.java EventFormat
\samples\events\EventHistoryCollectorMonitor.java EventHistoryCollectorMonitor
\samples\events\VMEventHistoryCollectorMonitor.java VMEventHistoryCollectorMonitor
vSphere Performance 16
VMware vSphere servers use performance counters to track resource use. At runtime, vSphere components
generate performance data which the vSphere servers store in performance counters. You can use the
PerformanceManager interface to retrieve the data.
This chapter includes the following topics:
“vSphere Performance Data Collection” on page 179
“PerformanceManager Objects and Methods” on page 181
“Retrieving vSphere Performance Data” on page 182
“Performance Counter Metadata” on page 192
“Performance Intervals” on page 192
“vSphere Performance and Data Storage” on page 194
“Sample Code Reference” on page 195
Real‐time data collection – An ESXi Server collects data for each performance counter every 20 seconds
and maintains that data for one hour.
Historical data rollup – A vCenter Server collects data from all of the hosts that the vCenter Server
manages. The PerformanceManager defines performance intervals that specify time periods for
performance data rollup, a methodology for combining data values. The server stores the rolled up
performance counter data in the vCenter database.
The following figure represents vSphere performance data collection and retrieval.
CPU core 1
vCenter Server
CPU core 2
Database
CPU core 3
1 ESXi Servers sample performance counter instances every 20 seconds and maintain the real‐time instance
data for one hour. For example, the figure shows collection of CPU statistics for four CPU cores.
2 The vCenter Server retrieves and stores data from the servers that it manages. The Server produces rollup
data according to the settings of the historical intervals.
3 vSphere client applications can retrieve real‐time instance data, aggregated instance data, historical rollup
data, and summary data.
The following table defines terms that are used to describe vSphere performance management.
Table 16-1. Performance Management Terminology
Term Definition
performance providers Performance providers include managed entities, such as hosts, virtual machines,
compute resources, resource pools, datastores, and networks.
performance counter Unit of statistical data collected on a vSphere server. For example, a vCenter server
collects the average CPU utilization for hosts, virtual machines and clusters (the counter
cpu.usage.average).
counter ID System‐generated identifier for a performance counter.
instance An identifier derived from device configuration names. Examples of counter instances
are the name of a virtual Ethernet adapter such as “vmnic0:”, or a number that identifies
a CPU core, such as 0, 1, 2, or 3. Performance data is retrieved as specific instances of
performance counters.
instance data Performance data collected at 20‐second intervals.
metric ID Combination of a counter ID and an instance. You use metric IDs – PerfMetricId
objects – when you construct a performance query specification to identify the data to
be collected.
There are two system‐defined instances that you can use to specify aggregate retrieval.
See the description of aggregate performance data below.
“*” – An asterisk directs the vSphere Server to return all instances plus rollup data.
This is not supported for some disk‐related counters.
““ – A string of length zero directs the vSphere Server to return only aggregated
instance data or rollup type data.
The vSphere Server returns metric IDs embedded in the data objects that it returns as a
response to performance queries.
performance interval Data object (PerfInterval) which defines the time interval between collection events,
the collection level, and the time period that the data will be stored on the Server.
ESXi Servers define a built‐in performance interval that specifies data collection
every 20 seconds for each performance counter. ESXi Servers also define a single
historical interval (PerformanceManager.historicalInterval) that defines
aggregate performance data. This system‐defined performance interval specifies
aggregate data collection every 300 seconds for each counter. You cannot modify the
performance intervals on an ESXi Server.
vCenter Servers define four performance intervals that determine how collected
instance data is aggregated and stored. You can modify the system‐defined intervals
on a vCenter Server to a limited extent.
collection level Number between one and four that is assigned to a performance interval
(PerformanceManager.historicalInterval[].level). The interval collection level
corresponds to the level specified for individual performance counters
(PerfCounterInfo.level). A vCenter Server uses a performance interval to perform
performance data aggregation, using data for the counters with levels that match the
performance interval collection level.
rollup type Methodology for producing a single value from a set of statistical values
(PerformanceManager.perfCounter[].rollupType). Examples of rollup types are
average, latest, and summation.
aggregate performance data A single value that represents a set of instance data values collected for a performance
counter. The single value is derived using one of the rollup types.
historicalInterval Array of system‐defined performance intervals (PerfInterval data objects). Each object
defines the interval between rollup events, the collection level, and the time period that the data
is stored on the system.
For an ESXi system, the array contains a single performance interval. You cannot modify the
ESXi performance interval.
For vCenter Server systems, the PerfInterval objects control how ESXi performance data
are rolled up and stored in the database. You can modify some of the PerfInterval
properties on a vCenter Server.
perfCounter Array of PerfCounterInfo data objects. The array identifies all of the performance counters
known to the vCenter Server at the time a client accesses the array. The set of counters may
change as ESXi hosts are added or removed from vCenter management. Each PerfCounterInfo
object contains metadata associated with a performance counter.
The PerformanceManager methods allow you to retrieve performance statistics and to retrieve metadata that
defines the statistics. The following table classifies the methods and describes their purposes.
Table 16-3. PerformanceManager Methods
Method Type Method Purpose
QueryPerfComposite Returns statistics for a host and its virtual
machines. This method accepts the refreshRate
for current statistics or the intervalId of one of
the historical intervals as a parameter. Supported
for the HostSystem managed entity only.
QueryPerfCounterByLevel Returns PerfCounterInfo data objects for the
specified collection level.
UpdateCounterLevelMapping Changes the collection level for a set of
performance counters.
UpdatePerfInterval Modifies the system‐defined performance
intervals.
Performance provider – managed entity for which the Server will return performance data
(PerfQuerySpec.entity).
Performance counters – PerfMetricId objects that identify performance counter instances
(PerfQuerySpec.metricId).
Performance interval – the sampling period that defines the data rollup (PerfQuerySpec.intervalId).
Amount of data to be returned – start and end times (PerfQuerySpec.startTime,
PerfQuerySpec.endTime) and maximum number of values (PerfQuerySpec.maxSample) to limit the
amount of data to be returned.
Output data format (PerfQuerySpec.format) – one of two kinds:
Normal output returned as values contained in data objects.
Formatted output returned as strings containing comma‐separated values.
The combination of the entity and metricID properties determine the set of counters for which the server
will return performance data. The combination of the interval, startTime, endTime properties produce
instance, aggregated instance, rollup, or summarized data. The following table summarizes the different
classifications of performance data that you can retrieve from a vCenter Server.
Table 16-4. Classification of Performance Data By Performance Interval
Performance Data Description
Instance ESXi Servers sample performance data every 20 seconds. 20‐second interval data is called instance
data or real‐time data. To retrieve instance data, specify a value of 20 seconds for the
PerfQuerySpec.intervalId property.
Aggregated A vSphere client can retrieve aggregated instance data. To obtain aggregated instance data, specify
Instance the following PerfQuerySpec properties.
intervalId – Specify 20 seconds to indicate instance data.
metricId[].instance – specify a zero‐length string (““) for aggregated instance data.
Rollup The vCenter Server uses the historical intervals to rollup performance data from the servers that it
manages. To retrieve historical performance data, specify the following PerfQuerySpec
properties.
intervalId – Specify a value that corresponds to one of the historical intervals
(PerformanceManager.historicalInterval[].samplingPeriod) .
startTime/endTime – If specified, use time values that are not within the last 30 minutes of
the current time. If you do not specify a starting time, the Server will return values starting
with the earliest data. If you do not specify an end time, the Server will return values that
include the latest data.
Summary When you call the QueryPerf method and specify a performance interval
(PerfQuerySpec.intervalId) that does not match one of the historical intervals
(PerformanceManager.historicalInterval[].samplingPeriod), the Server will attempt to
summarize the stored data for the specified interval. In this case, the Server may return values that
are different from the values that were stored for the historical intervals.
This example retrieves the following statistics:
disk.provisioned.LATEST – virtual machine storage capacity.
mem.granted.AVERAGE – amount of physical memory mapped for the virtual machine.
power.power.AVERAGE – current power usage.
The example creates a query specification (PerfQuerySpec) to identify the data to be retrieved, calls the
QueryPerf method, and prints out the retrieved performance data and corresponding performance counter
metadata. The following sections describe the basic steps involved in retrieving performance statistics.
Map the performance counters – “Mapping Performance Counters (Counter Ids and Metadata)” on
page 183.
Create a performance query specification and call the QueryPerf method – “Retrieving Statistics” on
page 186.
Process the returned data – “Handling Returned Performance Data” on page 189.
The example must specify counter IDs in the calls to QueryPerf, and it will use performance counter metadata
when it prints information about the returned data. To obtain performance counter IDs and the corresponding
performance counter metadata, the example creates two hash maps. This example maps the entire set of
performance counters to support retrieval of any counter.
HashMap Declarations
The following code fragment declares two hash maps.
countersIdMap – Uses full counter names to index performance counter IDs. A full counter name is the
combination of counter group, name, and rollup type. The example uses this map to obtain counter IDs
when it builds the performance query specification.
countersInfoMap – Uses performance counter IDs to index PerformanceCounterInfo data objects. The
example uses this map to obtain metadata when it prints the returned performance data.
/*
* Map of counter IDs indexed by counter name.
* The full counter name is the hash key - group.name.ROLLUP-TYPE.
*/
private static HashMap<String, Integer> countersIdMap = new HashMap<String, Integer>();
/*
* Map of performance counter data (PerfCounterInfo) indexed by counter ID
* (PerfCounterInfo.key property).
*/
private static HashMap<Integer, PerfCounterInfo> countersInfoMap =
new HashMap<Integer, PerfCounterInfo>();
The following figure shows a representation of the hash maps.
countersIdMap countersInfoMap
Key Value Key Value
performance
counter name counter ID counter ID PerfCounterInfo
performance
counter ID counter ID PerfCounterInfo
counter name
performance
counter ID counter ID PerfCounterInfo
counter name
performance PerfCounterInfo
counter ID counter ID
counter name
performance PerfCounterInfo
counter ID counter ID
counter name
The following code fragment performs these steps:
1 Create an ObjectSpec to define the property collector context. This example specifies the Performance
Manager.
2 Create a PropertySpec to identify the property to be retrieved. This example retrieves the perfCounter
property, which is an array of PerfCounterInfo objects.
3 Create a PropertyFilterSpec for the call to the PropertyCollector. The PropertyFilterSpec creates
the association between the ObjectSpec and PropertySpec for the operation.
4 Call the PropertyCollector.RetrievePropertiesEx method. This method blocks until the server
returns the requested property data.
5 Cast the returned xsd:anyType value into the array of PerfCounterInfo objects.
6 Cycle through the returned array and load the maps. The counter‐name to counter‐ID map uses a fully
qualified counter name. The qualified name is a path consisting of counter group, counter name, and
rollup type – group.counter.ROLLUP‐TYPE. The rollup type must be coded in uppercase letters. Examples
of qualified names are disk.provisioned.LATEST and mem.granted.AVERAGE.
/*
* Create an object spec to define the context to retrieve the PerformanceManager property.
*/
ObjectSpec oSpec = new ObjectSpec();
oSpec.setObj(performanceMgrRef);
/*
* Specify the property for retrieval
* (PerformanceManager.perfCounter is the list of counters of which the vCenter Server is aware.)
*/
PropertySpec pSpec = new PropertySpec();
pSpec.setType("PerformanceManager");
pSpec.getPathSet().add("perfCounter");
/*
* Create a PropertyFilterSpec and add the object and property specs to it.
*/
PropertyFilterSpec fSpec = new PropertyFilterSpec();
fSpec.getObjectSet().add(oSpec);
fSpec.getPropSet().add(pSpec);
/*
* Create a list for the filter and add the spec to it.
*/
List<PropertyFilterSpec> fSpecList = new ArrayList<PropertyFilterSpec>();
fSpecList.add(fSpec);
/*
* Get the performance counters from the server.
*/
RetrieveOptions ro = new RetrieveOptions();
RetrieveResult props = apiMethods.retrievePropertiesEx(pCollectorRef,fSpecList,ro);
/*
* Turn the retrieved results into an array of PerfCounterInfo.
*/
List<PerfCounterInfo> perfCounters = new ArrayList<PerfCounterInfo>();
if (props != null) {
for (ObjectContent oc : props.getObjects()) {
List<DynamicProperty> dps = oc.getPropSet();
if (dps != null) {
for (DynamicProperty dp : dps) {
/*
* DynamicProperty.val is an xsd:anyType value to be cast
* to an ArrayOfPerfCounterInfo and assigned to a List<PerfCounterInfo>.
*/
perfCounters = ((ArrayOfPerfCounterInfo)dp.getVal()).getPerfCounterInfo();
}
}
}
}
/*
* Cycle through the PerfCounterInfo objects and load the maps.
*/
for(PerfCounterInfo perfCounter : perfCounters) {
/*
* This map uses the counter ID to index performance counter metadata.
*/
countersInfoMap.put(counterId, perfCounter);
/*
* Obtain the name components and construct the full counter name,
* for example – power.power.AVERAGE.
* This map uses the full counter name to index counter IDs.
*/
String counterGroup = perfCounter.getGroupInfo().getKey();
String counterName = perfCounter.getNameInfo().getKey();
String counterRollupType = perfCounter.getRollupType().toString();
String fullCounterName = counterGroup + "." + counterName + "." + counterRollupType;
/*
* Store the counter ID in a map indexed by the full counter name.
*/
countersIdMap.put(fullCounterName, counterId);
Retrieving Statistics
The following code fragment calls the QueryPerf method to retrieve statistics. It performs these tasks:
1 Create a list of qualified performance counter names for retrieval. The name is a path consisting of
group‐name.counter‐name.ROLLUP‐TYPE, for example mem.granted.AVERAGE. The rollup type must be
coded in uppercase letters to match the character case of the rollup type in the performance counter
metadata (PerfCounterInfo.rollupType). See the vSphere API Reference for tables of available counters.
The vSphere API Reference page for the PerformanceManager managed object contains links to the tables.
2 Create a list of PerfMetricId objects, one for each counter to be retrieved. The metric ID is a combination
of the counter ID and the instance. To fill in the PerfMetricId properties, the example does the following:
Use the countersIdMap to translate a full counter name into a counter ID.
Specify an asterisk (*) for the PerfMetricId.instance property. The asterisk is the system‐defined
instance specification for combined instance and rollup retrieval.
3 Build a query specification for the method call. This query specifies the following:
Virtual machine for which performance data is being retrieved (entityMor);
Interval ID of 300 to collect 5‐minute rollup data.
Comma‐separated value (CSV) format for the retrieved data.
4 Call the QueryPerf method.
/*
* Use <group>.<name>.<ROLLUP-TYPE> path specification to identify counters.
*/
String[] counterNames = new String[] {"disk.provisioned.LATEST",
"mem.granted.AVERAGE",
"power.power.AVERAGE"};
/*
* Create the list of PerfMetricIds, one for each counter.
*/
List<PerfMetricId> perfMetricIds = new ArrayList<PerfMetricId>();
for(int i = 0; i < counterNames.length; i++) {
/*
* Create the PerfMetricId object for the counterName.
* Use an asterisk to select all metrics associated with counterId (instances and rollup).
*/
PerfMetricId metricId = new PerfMetricId();
/* Get the ID for this counter. */
metricId.setCounterId(countersIdMap.get(counterNames[i]));
metricId.setInstance("*");
perfMetricIds.add(metricId);
/*
* Create the query specification for queryPerf().
* Specify 5 minute rollup interval and CSV output format.
*/
int intervalId = 300;
PerfQuerySpec querySpecification = new PerfQuerySpec();
querySpecification.setEntity(entityMor);
querySpecification.setIntervalId(intervalId);
querySpecification.setFormat("csv");
querySpecification.getMetricId().addAll(perfMetricIds);
/*
* Call queryPerf()
*
* QueryPerf() returns the statistics specified by the provided
* PerfQuerySpec objects. When specified statistics are unavailable -
* for example, when the counter doesn't exist on the target
* ManagedEntity - QueryPerf() returns null for that counter.
*/
List<PerfEntityMetricBase> retrievedStats = apiMethods.queryPerf(performanceMgrRef, pqsList);
The query methods return PerfEntityMetricBase objects which you must cast into the appropriate type that
corresponds to the PerfQuerySpec.format value specified in the call to the method.
The QueryPerf method returns a list of PerfEntityMetricBase objects.
The QueryPerfComposite method returns a PerfCompositeMetric object, which contains
PerfEntityMetricBase objects.
entity – Reference to the performance provider.
sampleInfo – Array of sample information (PerfSampleInfo data objects), encoded as xsd:int and
xsd:dateTime values.
value – Array of data values (PerfMetricIntSeries data objects). Each object in the array contains the
following properties:
id – Performance metric ID that identifies the counter instance.
value – Array of integers that corresponds to the array of sample information
(PerfEntityMetric.sampleInfo).
The following figure shows a representation of the data object hierarchy returned by the query methods for
normal format.
PerfEntityMetric
entity : ManagedObjectReference
The PerfEntityMetricCSV object contains the following properties:
entity – Reference to the performance provider.
sampleInfoCSV – String containing a set of interval and date‐time values. The property contains string
representations of PerfSampleInfo xsd:int and xsd:dateTime values. The string values are encoded
in the following CSV format:
interval1, date1, interval2, date2
value – Array of data values (PerfMetricSeriesCSV data objects). Each object in the array contains the
following properties:
id – Performance metric ID that identifies the counter instance.
value – Set of sample values in CSV format, corresponding to the list of sample information
(PerfEntityMetricCSV.sampleInfoCSV).
The following figure shows a representation of the data object hierarchy returned by the query methods for
CSV format.
PerfEntityMetricCSV
entity : ManagedObjectReference
sampleInfoCSV : xsd:string
Loop through the list of PerfEntityMetricBase objects returned by the QueryPerf method
(retrievedStats).
Cast the PerfEntityMetricBase object to a PerfEntityMetricCSV object to handle the CSV output
specified in the PerfQuerySpec.
Retrieve the sampled values.
Retrieve the interval information (csvTimeInfoAboutStats). The sampleInfoCSV string
(PerfEntityMetricCSV.sampleInfoCSV) is PerfSampleInfo data formatted as interval,time pairs
separated by commas – interval-1,time-1,interval-2,time-2. The list of pairs embedded in
the string corresponds to the list of sampled values (PerfEntityMetricCSV.value[]).
Print the time and interval information.
Loop through the sampled values (metricsValues).
Use the countersInfoMap to translate the counter ID returned in the PerfMetricSeriesCSV
object into the corresponding PerfCounterInfo object.
Use the counter metadata to print out identifying information about the counter along with the
returned sampled value for the counter.
/*
* Cycle through the PerfEntityMetricBase objects. Each object contains
* a set of statistics for a single ManagedEntity.
*/
for(PerfEntityMetricBase singleEntityPerfStats : retrievedStats) {
/*
* Cast the base type (PerfEntityMetricBase) to the csv-specific sub-class.
*/
PerfEntityMetricCSV entityStatsCsv = (PerfEntityMetricCSV)singleEntityPerfStats;
if(metricsValues.isEmpty()) {
System.out.println("No stats retrieved. " +
"Check whether the virtual machine is powered on.");
throw new Exception();
}
/*
* Retrieve time interval information (PerfEntityMetricCSV.sampleInfoCSV).
*/
String csvTimeInfoAboutStats = entityStatsCsv.getSampleInfoCSV();
/*
* Cycle through the PerfMetricSeriesCSV objects. Each object contains
* statistics for a single counter on the ManagedEntity.
*/
for(PerfMetricSeriesCSV csv : metricsValues) {
/*
* Use the counterId to obtain the associated PerfCounterInfo object
*/
PerfCounterInfo pci = countersInfoMap.get(csv.getId().getCounterId());
}
}
Use CSV formatted output. CSV format provides a more compact representation of the output data which
can save on meta‐data overhead.
Create query specifications to reference a set of vSphere entities.
Using one QueryPerf method call per entity is not efficient.
Using a single call to QueryPerf to retrieve all of the performance data is not efficient.
As a general rule, specify between 10 and 50 entities in a single call to the QueryPerf method. This
is a general recommendation because your system configuration may impose different constraints.
Do not retrieve statistics more frequently than they are refreshed. For example, when you retrieve
20‐second interval data, the data will not change until the next 20‐second data collection event.
Use QueryAvailablePerfMetric only when you intend to send a query for a specific counter using a
specific performance interval. The method will return PerfMetricId objects that you can use for the
query.
In all other cases, create the PerfMetricId objects for the query.
For the counterId property, use the counter IDs from the PerformanceManager counter list
(PerformanceManager.perfCounter[].key).
For the instance property, specify an asterisk (“*”) to retrieve instance and aggregate data or a
zero‐length string (““) to retrieve aggregate data only.
You can use a raw data feed on VirtualCenter Server 2.5 and later.
Table 16-5. Raw Data Feed
Performance Interval Description
20‐second ESXi servers collect data for each performance counter every 20 seconds and maintain that data
for an hour. When you specify a 20‐second interval in the query specification for the QueryPerf
method (PerfQuerySpec.intervalId), the method operates as a raw data feed. The Server
ignores the historical interval collection levels and retrieves data for all of the requested
counters from the ESXi servers. When you send a query for 20‐second instance data, the server
returns the most recent data collected for the 20‐second interval. The server does not perform
additional, unscheduled data collection to satisfy the query.
5‐minute ESXi servers aggregate performance data according to the system‐defined performance
interval which specifies data collection every 300 seconds. To use a raw data feed for this data,
specify the following PerfQuerySpec properties in the call to the QueryPerf method.
intervalId – Specify 300 seconds to match the system‐defined performance interval.
startTime/endTime – Specify time values within the last 30 minutes of the current time.
The QueryPerf method checks the performance interval collection level on the vCenter
Server. The method returns aggregated statistics for performance counters that specify a
collection level (PerfCounterInfo.level) at or below the vCenter Server performance
interval for the 300 second sampling period (PerfInterval.level). For example, if the
vCenter Server performance interval is set to level one, and your query specification
requests only performance counters that specify level four, the QueryPerf method will not
return any data.
QueryPerf Specify an array of PerfQuerySpec objects.
An unset PerfQuerySpec.metricId property produces results for all counters defined
for PerfQuerySpec.entity.
PerfQuerySpec.maxSample is ignored for historical statistics.
You can use this method to retrieve historical statistics; you can also use it as a raw data feed.
For information about retrieving the raw data collected on ESXi servers, see “Using the
QueryPerf Method as a Raw Data Feed” on page 190.
QueryPerfComposite Method works only at the host level. You can use a single call to the QueryPerfComposite
method to retrieve performance data for a host and its virtual machines.
Specify a single PerfQuerySpec object.
You must specify a list of performance metrics to identify the data to be retrieved
(PerfQuerySpec.metricId).
You cannot specify PerfQuerySpec.maxSample.
This method is designed for efficient client‐server communications. QueryPerfComposite
usually generates less network traffic than QueryPerf because it returns a large‐grained
object, a PerfCompositeMetric data object, that contains all the data.
The PerformanceManager.perfCounter property is an array of PerfCounterInfo data objects. Each object
provides metadata for the collected data. A PerfCounterInfo object has a unique key, the counter ID. The
actual performance data collected at runtime are identified by this counter ID. The following table lists the
PerfCounterInfo properties.
groupInfo Name of the resource group to which this counter belongs, such as disk, cpu, or memory.
key Unique integer that identifies the counter. Also called the counter ID. The value is unique and
it is not static—it might, for example, change between system reboots. The counter key on an
ESXi system might not be the same as the counter key for the same counter on the vCenter
Server system managing the ESXi system. However, the system maps the keys from ESXi to
vCenter Server systems automatically.
level Number from 1 to 4 that identifies the level at which data values for this counter are
aggregated.
nameInfo Descriptive name for the counter. The name component of a fully qualified counter name, for
example “granted” is the nameInfo property for the mem.granted.AVERAGE counter.
rollupType Indicates how multiple samples of a counter are transformed into a single statistical value.
Examples of rollup types are average, summation, and minimum. No conversion of values
occurs for counters that specify absolute values, such as the total number of seconds that the
system has been running continuously since startup. The PerfSummaryType is an
enumeration containing valid constants for this property.
statsType Type of statistical data that the value represents over the course of the interval, such as an
average, a rate, the minimum value, and so on. The PerfStatsType is an enumeration
containing valid constants for this property.
unitInfo Unit of measure, such as megahertz, kilobytes, kilobytes per second, and so on. The
ElementDescription’s key property is populated using one of the constants available in the
PerformanceManagerUnit enumeration.
Performance Intervals
The PerformanceManager defines performance intervals which specify the period of time between collection
events, how much data will be collected, and how long the collected data will be saved.
An ESXi server has a built‐in performance interval that produces discrete data values from counter
instances sampled every 20 seconds. The server will maintain this instance data for one hour.
Additional data collection is specified by historical performance intervals which produce data aggregated
from counter instances according to the individual intervals.
The PerformanceManager.historicalInterval property is an array of PerfInterval objects. The
following table lists the PerfInterval properties.
Table 16-8. PerfInterval Properties
Property Description
samplingPeriod Number of seconds for the interval. You can modify this property on a vCenter Server only.
length Period of time for which the server will save the data that it collects. You can modify this property
on a vCenter Server only.
level Level at which the Server collects data. The interval level corresponds to the performance counter
level (PerfCounterInfo.level). The Server will collect data for all counters with levels that
match PerfInterval.level, and for all counters with levels lower than PerfInterval.level.
You can modify this property on a vCenter Server only.
enable Enable/disable performance data collection. You can modify this property on a vCenter Server
only.
key Unique identifier for the interval. You cannot modify this property.
name Label for the historical interval; one of the following strings:
“Past Day”
“Past Week”
“Past Month”
“Past Year”
The PerformanceManager uses the samplingPeriod, level, and length properties to
determine its collection behavior. It does not interpret the name string. You cannot modify this
property.
Table 16‐10 lists the default values for the performance intervals on a vCenter Server system.
Table 16-10. Values of PerfInterval Data Objects from a vCenter Server System
Key Name Sampling Period Length Enabled Level
By default, the collection level is set to 1 for each of the four intervals. Using the default level, a vCenter Server
will collect data for all performance counters that specify collection level 1. Using the default length value, a
vCenter Server will save collection data for the following time periods:
5‐minute samples for the past day
30‐minute samples for the past week
2‐hour samples for the past month
1‐day samples for the past year
Data older than a year is purged from the vCenter Server database.
“Modifying Historical Intervals” on page 194
“Modifying Performance Counter Collection Levels” on page 194
If you must modify a performance interval, use the PerformanceManager.UpdatePerfInterval method
and follow these guidelines.
Performance data retention time (PerfInterval.length) must be a multiple of the collection interval
(PerfInterval.samplingPeriod).
Performance data retention length must increase in each interval compared to its predecessor. The
PerfInterval.length value for each successive performance interval must be greater than the length
property for the previous interval in the historical interval array.
You cannot modify the value of the PerfInterval.samplingPeriod property on ESXi systems.
The amount of data collected for a performance counter depends on the performance interval and on the type
of entity for which the counter is defined. For example, a datastore counter such as datastoreIops (the
aggregate number of IO operations on the datastore) will generate a data set that corresponds to the number
of datastores on a host. If a vCenter Server manages a large number of hosts with a large number of datastores,
the Server will collect a large amount of data.
There are other counters for which the vCenter Server collects a relatively smaller amount of data. For
example, memory counters are collected as a single counter per virtual machine and a single counter per host.
By default, all the performance intervals specify collection level one. Using these defaults, the vCenter Server
stores performance counter data in the vCenter database for all counters that specify collection level one. It
does not store data for counters that specify collection levels two through four.
By default the system‐defined performance intervals use collection level one, storing data for all counters
that specify collection level one. If you use the UpdateCounterLevelMapping method to change the
collection level of performance counters to level one, you will increase the amount of stored performance
data.
If you use the UpdatePerfLevel method to increase the collection level for the system‐defined
performance intervals, you will increase the amount of stored performance data.
To restore counter levels to default settings use the ResetCounterLevelMapping method.
Basics.java Basics\Basics.cs
Basics\Basics.csproj
Basics\Basics2008.csproj
Basics\Basics2010.csproj
History.java History\History.cs
History\History.csproj
History\History2008.csproj
History\History2010.csproj
PrintCounters.java PrintCounters\PrintCounters.cs
PrintCounters\PrintCounters.csproj
PrintCounters\PrintCounters2008.csproj
PrintCounters\PrintCounters2010.csproj
QueryMemoryOverhead\QueryMemoryOverhead.
cs
QueryMemoryOverhead\QueryMemoryOverhead.
csproj
QueryMemoryOverhead\QueryMemoryOverhead2
008.csproj
QueryMemoryOverhead\QueryMemoryOverhead2
010.csproj
RealTime.java RealTime\RealTime.cs
RealTime\RealTime.csproj
RealTime\RealTime2008.csproj
RealTime\RealTime2010.csproj
VITop.java
VIUsage.java
This appendix includes the following topics:
“Troubleshooting Best Practices” on page 197
“Overview of Configuration Files and Log Files” on page 198
“Modifying the Log Level to Obtain Detailed Information” on page 200
“Using DiagnosticManager” on page 201
“Using the MOB to Explore the DiagnosticManager” on page 203
“Generating Diagnostic Bundles” on page 204
Do not change more than one thing at a time, and document each change and its result. Try to isolate the
problem: Does it seem to be local, to the client? An error message generated from the server? A network
problem between client and server?
Use the logging facilities for your programming language to capture runtime information for the client
application. See the Log.cs sample application as an example.
C# client logging example: \SDK\vsphere-ws\dotnet\cs\samples\AppUtil\Log.cs
Use the following VMware tools for analysis and to facilitate debugging.
vSphere Web Services API. The DiagnosticManager service interface allows you to obtain
information from the server log files, and to create a diagnostic bundle that contains all system log
files and all server configuration information. The vSphere Client and the MOB provide graphical
and Web based access to the DiagnosticManager. PerformanceManager supports exploration of
bottlenecks. See Chapter 16, “vSphere Performance,” on page 179.
Managed Object Browser (MOB). The MOB provides direct access to live runtime server‐side
objects. You can use the MOB to explore the object hierarchy, obtain property values, and invoke
methods. See Appendix B, “Managed Object Browser,” on page 205.
VMware vSphere Client GUI. The vSphere Client allows you to examine log files for ESX/ESXi,
vCenter Server, and virtual machines, and to change log level settings. Use vSphere Client menu
commands to create reports that summarize configuration information, performance, and other
details, and to export diagnostic bundles. The vSphere Client maintains its own local log files.
For developers, the following files are most relevant:
hostd.log – Host daemon log, see “ESX/ESXi Log File” on page 198. Can be used as a SOAP monitor
when set to trivia log level as in“Generating Logs” on page 201.
vpxa.log – Agent log file found on each managed ESX/ESXi system.
vmware.log – Virtual machine log. See “Virtual Machine Log Files” on page 199.
In addition to viewing log files in real time you can also generate reports and complete diagnostic bundles. See
“Generating Diagnostic Bundles” on page 204.
ESX/ESXi maintains six log files that rotate at each power‐cycle (the default) or at a configured file size.
ESX/ESXi can be configured to maintain a specific number of log files. When the limit is reached, the
oldest file is deleted.
VMware recommends a log file size of 500 KB.
Messages that are generated by VMware Tools are logged separately.
Availability: 99.949%
Total time: 69 days, 15 hours
Uptime: 69 days, 14 hours
Downtime: 51 minutes
Downtime Analysis:
0.1% (51 minutes) downtime caused by:
13.1% (6 minutes) scheduled downtime
86.9% (44 minutes) unscheduled downtime
Stats:
Current uptime: 8 days, 11 hours
Longest uptime: 61 days, 2 hours
Shortest uptime: 38 minutes
Average uptime: 23 days, 4 hours
Longest downtime: 44 minutes
Shortest downtime: 7 seconds
Average downtime: 8 minutes
Maximum VMs Sampled: 1
Average VMs Sampled: 0.94
IMPORTANT VMware recommends creating a user account especially for vCenter Server installation.
By default, the log files are hidden files. See the procedure for your Windows operating system to make the
files visible.
None Disables logging.
Error Logging limited to error messages.
Warning Error messages plus warning messages are logged.
Info Default setting on ESX/ESXi and vCenter Server systems. Errors, warnings, plus informational
messages about normal operations are logged. Acceptable for production environments.
Verbose Can facilitate troubleshooting and debugging. Not recommended for production environments.
Trivia Extended verbose logging. Provides complete detail, including content of all SOAP messages
between client and server. Use for debugging and to facilitate client application development only.
Not recommended for production environments.
For example, the hostd service running on ESX/ESXi systems has a default log level setting of info. The
vCenter Server logs are controlled by settings through the vSphere Client.
Example A-3. ESX/ESXi Config.xml File Excerpt Showing Default Log Level Setting
<config>
<vmacore>
<threadPool>
<MaxFdsPerThread>2048</MaxFdsPerThread>
</threadPool>
<ssl>
<doVersionCheck> false </doVersionCheck>
</ssl>
<vmdb>
<maxConnectionCount>8</maxConnectionCount>
</vmdb>
<loadPlugins> true </loadPlugins>
</vmacore>
<workingDir> /var/log/vmware/ </workingDir>
<log>
<directory>/var/log/vmware/</directory>
<name>hostd</name>
<outputToConsole>false</outputToConsole>
<level>info</level>
</log>
,,,
</config>
By default, the log level setting is info. If you run into issues during development, you can set the log level to
verbose, or to trivia to obtain SOAP message content to use in debugging.
The following procedure is meant for an ESX system. On ESXi, use vifs to move the config.xml file to a
server from which you can edit the file.
1 Connect to the ESX system using putty or an other secure shell.
2 Open the config.xml file located at /etc/vmware/hostd
3 Change <level>info</level> to <level>trivia</level>, and save and close the file.
4 Navigate to the init.d directory and restart the host agent.
cd /etc/init.d
./mgmt-vmware restart
After the service restarts, the new log level is in effect.
Generating Logs
If you are connected to ESX, you can use the tail command to explicitly create a log file that captures detail
about actions that follow. For example, you can use the vSphere Client to create a new virtual machine and
then use the content from the log as a model for how to create your own code.
1 Navigate to the location of the hostd.log file:
cd /var/log/vmware
2 Run the tail command, passing a filename in which to capture output:
tail -f hostd.log > yourfilenamehere
3 Use the vSphere Client to perform whatever action you are having difficulty modeling in your own code.
For example, create a new virtual machine and stop the tail process with Ctrl‐C when the operation
completes.
The file contains the SOAP message content and other log messages sent and received by hostd during the
execution.
To set logging level for vCenter Server using the VMware vSphere Client
1 Log in to the vSphere Client and connect to the vCenter Server instance.
2 Choose Administration and click Server Settings > Logging Options.
3 Choose Trivia from the pop‐up menu and click OK.
Using DiagnosticManager
The vSphere API provides access to the DiagnosticManager, the service interface for obtaining information
from the log files and for generating diagnostic bundles. The logs are populated based on configuration
settings, such as info, trivia, and so on. See Table A‐2, “Log Level Settings,” on page 200.
The DiagnosticManager is a managed object that works service‐wide, rather than on a per‐session basis. The
DiagnosticManager has no properties, but provides operations for these tasks:
Obtaining information about the logs and how they have been defined.
Generating a diagnostic bundle that can be sent to VMware support for analysis.
Figure A‐1 shows a UML class diagram for DiagnosticManager, which is available on ESX/ESXi and vCenter
Server systems.
As shown in Figure A‐1, DiagnosticManager supports these methods:
BrowseDiagnosticLog
GenerateLogBundleTask
QueryDescriptions
The DiagnosticManagerLogDescriptor.creator property contains the creator of the log, which is the
system or subsystem that controls a specific log.
The creator value is populated from the DiagnosticManagerLogCreator enumeration. Table A‐3 lists all
string values currently available from the DiagnosticManagerLogCreator enumeration that can populate
the creator property of the DiagnosticManagerLogDescriptor data object.
hostd Host daemon
install Installation
recordLog System record log
serverd Host server agent
vpxa vCenter agent
vpxClient vSphere Client
vpxd vCenter service
To explore DiagnosticManager
1 Start the mob by typing the MOB URL (https://hostname.yourcompany.com/mob) into a Web
browser.
2 In the ServiceContent data object, click the link (ha-diagnosticmanager or DiagMgr) in the Value
column for the diagnosticManager property, to navigate to the DiagnosticManager for the system.
For ESX/ESXi, ha-diagnosticsmanager is the managed object ID.
For vCenter Server, DiagMgr is typically the managed object ID.
3 Click the link to the reference to display the managed object reference to the DiagnosticManager in the
MOB.
DiagnosticManager provides three operations that allow you to obtain information about the
descriptions currently available in the log file and log file content.
Because DiagnosticManager can track multiple ESX/ESXi systems, you can use the
QueryDescriptions operation to return the names of keys used for all hosts. From this array, select the
key for the host from which you want to obtain the log file.
4 On QueryDescriptions, click the Invoke Method link.
The vCenter Server system returns the contents of the log file for the selected host as a string array for the
lineText property of DiagnosticManagerLogHeader.
The string array returned through the MOB in this way is the content of the log file. The content contained in
the log file is the same content that is available through the following other mechanisms:
Displayed in the vSphere Client
Included in a diagnostic bundle created through the DiagnosticManager.GenerateLogBundles_Task
method.
Available in the hostd.log file
Returned to a client application that you write
The generated compressed files are packaged in a file having the following pattern:
<fqdn-hostname>[email protected]
1 Start the vSphere Client and connect to the ESX/ESXi or vCenter Server system.
2 Select Administration > Export Diagnostic Data.
For vCenter Server systems, you can filter for specific hosts whose logs you want to export and the
location for storing the log files.
For ESX/ESXi host systems, you can specify the location for the bundle.
3 Click OK.
1 Use putty or an other SSH tool to connect to the service console. On ESXi systems, use the unsupported
shell if VMware Technical Support requests that you use it.
2 Navigate to the /usr/bin subdirectory.
3 Run the vm-support script:
/usr/bin/vm-support
This script collects all relevant ESX system log files, configuration files, and other server details into a
compressed file (the diagnostic bundle) whose name includes the date and time.
See “Managing Diagnostic Partitions” on page 100 for information about setting up your system for core
dumps.
This appendix explains how to use the MOB. The examples invoke PerformanceManager query methods to
demonstrate how to pass primitive data types, arrays, and complex data types (data objects, including
managed object references) using the MOB.
The appendix includes the following topics:
“Using the MOB to Explore the Object Model” on page 205
“Using the MOB to Invoke Methods” on page 206
CAUTION Despite the word “browser” in its name, the MOB is not a read‐only mechanism. The MOB allows
you to make changes on the server by clicking the InvokeMethod link associated with methods.
1 Start a Web browser.
2 Enter the fully‐qualified domain name (or the IP address) for the ESX/ESXi or vCenter Server system:
https://hostname.yourcompany.com/mob
3 Enter the user account and password for the system.
If warning messages regarding the SSL certificate appear, you can disregard them and continue to log in
to the MOB, if VMware is the certificate authority and you are not in a production environment.
The MOB reveals the underlying structures of the object model. Seeing the structure in conjunction with the
API Reference Guide, can help with understanding the model.
The page lists the properties and methods available through a ServiceInstance object. The ServiceInstance
methods and properties provide access to the entire set of services and inventory objects available on the
server. See Chapter 4, “Datacenter Inventory,” on page 39.
The MOB lets you examine the relationships among objects by looking at the properties and their values, and
then drilling down into the objects. To explore the objects on the server, click the links in the Value column to
navigate to the page that displays the object.
For example, to find out more about ServiceContent, click the content link to display the ServiceContent
data object instance.
1 In the display of the object in which the method lives, click the name of the method.
A browser window displays information about the parameter name and type and allows you to specify
parameter values.
2 Specify parameter values, using the method appropriate for the type, and click Invoke Method.
The rest of this section discusses how to pass different types of parameters to the MOB.
To obtain information about the available performance counters at level 4 on the server, enter a 4 in the level
field of the PerformanceManager.QueryPerfCounterByLevel method. (This method is available only on the
vCenter Server PerformanceManager API, not from an ESX/ESXi system.)
In response to the query, the array of PerfCounterInfo data objects and nested objects, with populated values
from the server, displays in the Web browser.
Even if you want to submit a single value for a single array element, you must wrap the parameter name
around the value in this way.
Simple Content
The data object type ManagedObjectReference is one of the most commonly required parameters to be
passed to the server. For example, the MOB for the PerformanceManager.QueryPerfProviderSummary
method shows that the method requires a single parameter, the managed object reference (an instance of
ManagedObjectReference) of the entity for which you want to obtain the PerfProviderSummary object.
Using the vSphere API Reference for ManagedObjectReference type, you can obtain the schema information
from the Show WSDL type definition link at the bottom of the documentation page for
ManagedObjectReference.
As another example, one of the parameters required by the VirtualMachine.CloneVM_Task method is a
folder. In this case, the parameter is defined as a managed object reference to a specific Folder object. Using
the same definition shown in Example B‐1, the result is as follows:
<folder type=”Folder”>folder-87</folder>
Although both examples submit a ManagedObjectReference to the MOB, each is specific to the parameter
name required by the method (entity type for PerformanceManager.QueryPerfProviderSummary
method, folder type for the VirtualMachine.CloneVM_Task method).
Complex Content
Many of the data objects required for method invocation consist of XML Schema elements defined as
<complexContent> that can encompass many other elements.
For example, the PropertyCollector.CreateFilter method has a spec parameter that must be defined
before method invocation. The spec parameter is defined as an instance of a PropertyFilterSpec.
Figure B‐3 shows the relationships among several data objects that PropertyFilterSpec consists of.
To submit complex data structures such as this to the MOB, start by navigating the vSphere API Reference. Find
the PropertyFilterSpec data object. Find the Show WSDL type definition link, and click it to display the
XML Schema definition (see Example B‐2).
Example B‐2 shows that the PropertyFilterSpec data object is a <complexContent> element that extends
the DynamicData class with a sequence of two additional properties propSet (of type PropertySpec) and
objectSet (of type ObjectSpec).
Because both elements are defined as a sequence, they must exist in the order listed. To obtain the definitions
of propSet and objectSet, you must navigate further into the vSphere API Reference. Example B‐3 shows only
the relevant parts of the XML Schema definition for PropertySpec. The minOccurs=”0” attribute means that
the element does not have to exist. The maxOccurs=”unbounded” attribute means that the element can be
populated as an array of any size. (When minOccurs is not set, but maxOccurs is set, the default for minOccurs
defaults to 1, meaning one instance is required.)
Navigate through the vSphere API Reference to the ObjectSpec definition. Example B‐4 shows the excerpt.
In this example, the <spec> element identifies the spec parameter of the CreateFilter method. The order
of the element tags is as defined in the XML Schema for the property (Example B‐2). The pathSet property
defines the full path to the nested data object of interest. In Example B‐5, the pathSet property defines the
path to the guestFullName property of the target virtual machine. Figure B‐4 shows the UML of these nested
data objects.
All of these details are available in the vSphere API Reference. By examining the WSDL definition, you can
construct the strings needed to submit parameters through the MOB. Table B‐1 provides a brief summary of
the steps involved when you use the MOB and the vSphere API Reference together.
Primitive Enter the value as plain text regardless of its data type (int, string, boolean). Do not use quotes or
other markup.
Array Use the name of the parameter as the name of the element, wrap the values in a series of opening and
closing tags for each array element.
Complex Obtain XML Schema format information from the vSphere API Reference for the type (from the Show
WSDL type definition link).
Use the schema definition to construct the sequence of tags around the value (or values) you want to pass
to the MOB.
The appendix includes the following topics:
“Introduction to HTTP Access” on page 211
“URL Syntax for HTTP Access” on page 212
Datastore access on ESX/ESXi and vCenter Server systems.
ESX/ESXi configuration and log file access on ESX/ESXi systems.
Update bundle access on ESX/ESXi systems.
You can use the HTTP methods GET, HEAD, PUT, and DELETE to access files. The URL of the HTTP/HTTPS
request must contain an embedded keyword that specifies the type of access. Table C‐1 shows the server access
types with the corresponding URL keyword and HTTP methods.
Use the PUT method to create new files or overwrite existing files. You can create a subdirectory by using a
URL that is consistent with the supported top‐level directories. You cannot create datastores or datacenters
because the URL must refer to a valid datacenter or datastore.
You can use a Web browser to browse and download files. You cannot use a Web browser to post or delete files.
“Datastore Access (/folder)” on page 212
“Host File Access (/host)” on page 213
“Update Package Access (/tmp)” on page 214
http-method One of the methods GET, HEAD, PUT, or DELETE.
http:// or https:// Access protocol (standard access or secure access).
server ESX/ESXi or vCenter Server target system. The server value can be an IP address
or a DNS name.
/folder Specifies datastore access on an ESX/ESXi or vCenter Server system. The
datastore URL can include the following optional elements:
path – Path to a file or directory in the datastore, relative to the root of the
datastore.
dcPath – Inventory path to a datacenter. Specify the datacenter path as a
name‐value pair in the request. For a datacenter named Datacenter located
in the root folder, the dcPath value is MyDatacenter. For a datacenter
named YourDatacenter located in the folder NorthAmerica which is
located in the root folder, the cdPath value is
NorthAmerica/YourDatacenter.
dsName – Datastore associated with the datacenter. Specify the datastore
name as a name‐value pair in the request.
The following examples illustrate the syntax. If the target server is an ESX/ESXi system, dcPath=DCPATH& is
optional and defaults to dcPath=ha-datacenter.
Example Description
/folder Directory listing of known datacenters on this server.
/folder?dcPath=path Directory listing of all datastores available at the
specified datacenter.
/folder?dcPath=path&dsName=name Top‐level directory listing of the datastore.
/folder/path?dcPath=path&dsName=name Directory listing of all files in a datastore directory.
/folder/path/disk-flat.vmdk?dcPath=path&dsName=name Access individual files.
http:// or Access protocol (standard access or secure access).
https://
esx-server IP address or a DNS name.
/host List of configuration files that you can access. (Use /host to retrieve the list.)
/host/file A specific ESX/ESXi configuration file.
Table C‐2 shows ESX host configuration files and the corresponding HTTP/HTTPS methods for access. The set
of files might change from version to version.
http:// or https:// Access protocol.
esx-server IP address or a DNS name.
/tmp/file-path Target file on an ESX/ESXi system.
Datastore.FileManagement
Datastore.FileManagement
/tmp/ Host.Config.SystemManagement
Privileges Reference D
VMware vSphere components are secured through a system of privileges, roles, and permissions (see
Chapter 6, “Authentication and Authorization,” on page 71 for more information). This appendix lists
privileges required to perform various operations, and privileges required to read properties.
The appendix includes the following topics:
“Privileges Required to Invoke Operations” on page 215
“Privileges Required to Read Properties” on page 223
“Privileges Defined for the Administrator Role” on page 224
All other users initially have no permissions on any objects, which means they cannot view these objects or
perform operations on them. A user with Administrator privileges must assign permissions to these users to
allow them to perform tasks.
Table D‐1 lists the privileges required to perform various operations. (For privileges identified as dynamic, see
the vSphere API Reference.) Operations can be supported by vCenter Server, ESX/ESXi, or both, as shown in
Table D‐1.
IMPORTANT The information does not include operations new in ESX/ESXi 4.1.
Table D-1. Privileges Required for vCenter Server and ESX/ESXi Operations
Operation Privilege VS ESX/ESXi
AcquireLocalTicket System.Anonymous X X
AcquireMksTicket VirtualMachine.Interact.ConsoleInteract X X
AddAuthorizationRole Authorization.ModifyRoles X X
AddCustomFieldDef Global.ManageCustomFields X
AddHost_Task Host.Inventory.AddHostToCluster X
AddInternetScsiSendTargets Host.Config.Storage X X
AddInternetScsiStaticTargets Host.Config.Storage X X
AddPortGroup Host.Config.Network X X
AddServiceConsoleVirtualNic Host.Config.Network X X
AddStandaloneHost_Task Host.Inventory.AddStandaloneHost X
Table D-1. Privileges Required for vCenter Server and ESX/ESXi Operations (Continued)
Operation Privilege VS ESX/ESXi
AddVirtualNic Host.Config.Network X X
AddVirtualSwitch Host.Config.Network X X
AnswerVM VirtualMachine.Interact.AnswerQuestion X X
ApplyRecommendation Resource.ApplyRecommendation X
AssignUserToGroup Host.Local.ManageUserGroups X X
AttachVmfsExtent Host.Config.Storage X X
AutoStartPowerOff Host.Config.AutoStart X X
AutoStartPowerOn Host.Config.AutoStart X X
BrowseDiagnosticLog Global.Diagnostics X X
CancelTask Global.CancelTask X
CancelWaitForUpdates System.View X X
CheckCustomizationResources System.View X
CheckCustomizationSpec VirtualMachine.Provisioning.Customize X
CheckForUpdates System.View X X
CheckIfMasterSnmpAgentRunning Host.Config.Snmp X X
CheckLicenseFeature Global.Licenses X X
CloneVM_Task NONE. X
Privileges are required on the virtual machine being
cloned and depend on whether the virtual machine is a
template. See CloneVM_Task in the vSphere API
Reference for specific privileges.
You need the VirtualMachine.Inventory.Create
privilege on the folder where the new virtual machine
is located.
ComputeDiskPartitionInfo Host.Config.Storage X X
ConfigureDatastorePrincipal Host.Config.Maintenance X X
ConfigureLicenseSource Global.Licenses X X
CreateAlarm NONE. X
Create privilege required on the entity associated with
the alarm.
CreateCluster Host.Inventory.CreateCluster X
CreateCollectorForEvents System.View X X
CreateCollectorForTasks System.View X
CreateCustomizationSpec VirtualMachine.Provisioning.ModifyCustSpecs X
CreateDatacenter Datacenter.Create X X
CreateDiagnosticPartition Host.Config.Storage X X
CreateFilter System.View X X
CreateFolder Folder.Create X X
CreateGroup Host.Local.ManageUserGroups X X
CreateNasDatastore Host.Config.Storage X X
CreatePerfInterval Performance.ModifyIntervals X X
CreateResourcePool Resource.CreatePool X X
Table D-1. Privileges Required for vCenter Server and ESX/ESXi Operations (Continued)
Operation Privilege VS ESX/ESXi
CreateScheduledTask NONE. X
ScheduledTask.Create required on the entity
associated with the scheduled task.
CreateSnapshot_Task VirtualMachine.State.CreateSnapshot X X
CreateUser Host.Local.ManageUserGroups X X
CreateVM_Task VirtualMachine.Inventory.Create X X
Also, Resource.AssignVMToPool privilege required
on the resource pool with which the virtual machine
will be associated.
CreateVmfsDatastore Host.Config.Storage X X
CurrentTime System.View X X
CustomizationSpecItemToXml System.View X
CustomizeVM_Task VirtualMachine.Provisioning.Customize X
DeleteCustomizationSpec VirtualMachine.Provisioning.ModifyCustSpecs X
DeleteFile Datastore.DeleteFile X X
DeselectVnic Host.Config.Network X X
Destroy_Task See Destroy_Task in the vSphere API Reference. X X
DestroyChildren See DestroyChildren in the vSphere API Reference. X X
DestroyCollector NONE X X
DestroyDatastore Datastore.Delete X X
DestroyNetwork Network.Delete X X
DestroyPropertyFilter NONE X X
DisableFeature Global.Licenses X X
DisableHyperThreading Host.Config.HyperThreading X X
DisableMultipathPath Host.Config.Storage X X
DisableRuleSet Host.Config.NetService X X
DisconnectHost_Task Host.Config.Connection X X
DoesCustomizationSpecExist VirtualMachine.Provisioning.ReadCustSpecs X
DuplicateCustomizationSpec VirtualMachine.Provisioning.ModifyCustSpecs X
EnableFeature Global.Licenses X X
EnableHyperThreading Host.Config.HyperThreading X X
EnableMultipathPath Host.Config.Storage X X
EnableRuleset Host.Config.NetService X X
EnterMaintenanceMode_Task Host.Config.Maintenance X X
ExitMaintenanceMode_Task Host.Config.Maintenance X X
ExtendVmfsDatastore Host.Config.Storage X X
FindByDatastorePath System.View X X
FindByDnsName System.View X X
FindByInventoryPath System.View X X
FindByIp System.View X X
FindByUuid System.View X X
FindChild System.View X X
Table D-1. Privileges Required for vCenter Server and ESX/ESXi Operations (Continued)
Operation Privilege VS ESX/ESXi
FormatVmfs Host.Config.Storage X X
GenerateLogBundles_Task Global.Diagnostics X X
GetAlarm System.View X
GetAlarmState NONE X
System.Read privilege is required on the entity
associated with the alarm.
GetCustomizationSpec VirtualMachine.Provisioning.ReadCustSpecs X
JoinDomainTask Host.Config.AuthenticationStore X
LeaveCurrentDomain_Task Host.Config.AuthenticationStore X
Login System.Anonymous X X
Logout System.View X X
LogUserEvent NONE X X
Global.LogEvent required on the entity associated
with the event.
MarkAsTemplate VirtualMachine.Provisioning.MarkAsTemplate X
MarkAsVirtualMachine VirtualMachine.Provisioning.MarkAsVM X
Resource.AssignVMToPool required on the resource
pool to associate with the virtual machine.
MergePermissions Authorization.ReassignRolePermissions X X
MigrateVM_Task See MigrateVM_Task in the vSphere API Reference. X
MountToolsInstaller VirtualMachine.Interact.ToolsInstall X X
MoveHostInto_Task Host.Inventory.EditCluster X
Host.Inventory.MoveHost required on the host
being moved.
MoveInto_Task Host.Inventory.EditCluster X X
Host.Inventory.MoveHost required on the host
being moved.
MoveIntoFolder_Task See MoveIntoFolder_Task in the vSphere API Reference. X X
MoveIntoResourcePool See MoveIntoFolder_Task in the vSphere API Reference. X X
OverwriteCustomizationSpec VirtualMachine.Provisioning.ModifyCustSpecs X
PowerOffVM_Task VirtualMachine.Interact.PowerOff X X
PowerOnVM_Task VirtualMachine.Interact.PowerOn X X
QueryAvailableDisksForVmfs Host.Config.Storage X X
QueryAvailablePartition Host.Config.Storage X X
QueryAvailablePerfMetric NONE X X
System.Read is required on the entity for which
available performance metrics are queried.
QueryConfigOption System.Read X X
QueryConfigOptionDescriptor System.Read X X
QueryConfigTarget System.Read X X
QueryConnectionInfo Host.Inventory.AddStandaloneHost X X
QueryDescriptions Global.Diagnostics X X
QueryEvents System.View X X
QueryHostConnectionInfo System.Read X X
Table D-1. Privileges Required for vCenter Server and ESX/ESXi Operations (Continued)
Operation Privilege VS ESX/ESXi
QueryLicenseSourceAvailability Global.Licenses X X
QueryLicenseUsage Global.Licenses X X
QueryMemoryOverhead System.Read X X
QueryNetworkHint Host.Config.Network X X
QueryOptions System.Read X X
QueryPartitionCreateDesc Host.Config.Storage X X
QueryPartitionCreateOptions Host.Config.Storage X X
QueryPerf NONE X X
System.Read privilege is required on the entity whose
performance statistics are being queried.
QueryPerfComposite NONE X X
System.Read privilege is required on the entity whose
performance statistics are being queried.
QueryPerfCounter System.View X X
QueryPerfProviderSummary NONE X X
System.Read privilege is required on the entity whose
performance statistics are being queried.
QueryVmfsDatastoreCreateOptions Host.Config.Storage X X
QueryVmfsDatastoreExtendOptions Host.Config.Storage X X
QueryVMotionCompatibility Resource.QueryVMotion X
ReadNextEvents NONE X X
ReadNextTasks NONE X
ReadPreviousEvents NONE X X
ReadPreviousTasks NONE X
RebootGuest VirtualMachine.Interact.Reset X X
RebootHost_Task Host.Config.Maintenance X X
RecommendHostsForVm System.Read X
ReconfigureAlarm Alarm.Edit X
ReconfigureAutostart Host.Config.AutoStart X X
ReconfigureCluster_Task Host.Inventory.EditCluster X
ReconfigureHostForDAS_Task Host.Config.Connection X
ReconfigureScheduledTask ScheduledTask.Edit X
ReconfigureServiceConsoleReservation Host.Config.Memory X X
ReconfigVM_Task dynamic X X
ReconnectHost_Task Host.Config.Connection X
RefreshDatastore System.Read X X
RefreshFirewall Host.Config.NetService X X
RefreshNetworkSystem Host.Config.Network X X
RefreshServices Host.Config.NetService X X
RefreshStorageSystem Host.Config.Storage X X
Table D-1. Privileges Required for vCenter Server and ESX/ESXi Operations (Continued)
Operation Privilege VS ESX/ESXi
RegisterVM_Task VirtualMachine.Inventory.Create X X
Resource.AssignVMToPool privilege is required on
the resource pool to which the virtual machine should
be attached.
ReleaseLease NONE. X X
Reload System.Read X X
RelocateVM_Task Resource.ColdMigrate X
RemoveAlarm Alarm.Delete X
RemoveAllSnapshots_Task VirtualMachine.State.RemoveSnapshot X X
RemoveAuthorizationRole Authorization.ModifyRoles X X
RemoveCustomFieldDef Global.ManageCustomFields X
RemoveDatastore Host.Config.Storage X X
RemoveEntityPermission NONE X X
Authorization.ModifyPermissions privilege is
required on the entity associated with the permission.
RemoveGroup Host.Local.ManageUserGroups X X
RemoveInternetScsiSendTargets Host.Config.Storage X X
RemoveInternetScsiStaticTargets Host.Config.Storage X X
RemovePerfInterval Performance.ModifyIntervals X X
RemovePortGroup Host.Config.Network X X
RemoveScheduledTask ScheduledTask.Delete X
RemoveServiceConsoleVirtualNic Host.Config.Network X X
RemoveSnapshot_Task VirtualMachine.State.RemoveSnapshot X X
RemoveUser Host.Local.ManageUserGroups X X
RemoveVirtualNic Host.Config.Network X X
RemoveVirtualSwitch Host.Config.Network X X
Rename_Task See Rename_Task in the vSphere API Reference. X X
RenameCustomFieldDef Global.ManageCustomFields X
RenameCustomizationSpec VirtualMachine.Provisioning.ModifyCustSpecs X
RenameDatastore Datacenter.RenameDatastore X X
RenewLease NONE X X
RescanAllHba Host.Config.Storage X X
RescanHba Host.Config.Storage X X
RescanVmfs Host.Config.Storage X X
ResetCollector NONE X X
ResetEntityPermissions NONE X X
Authorization.ModifyPermissions privilege is
required on the entity associated with the permission
and the entity’s parent.
ResetGuestInformation VirtualMachine.Config.ResetGuestInfo X X
ResetVM_Task VirtualMachine.Interact.Reset X X
RestartMasterSnmpAgent Host.Config.Snmp X X
Table D-1. Privileges Required for vCenter Server and ESX/ESXi Operations (Continued)
Operation Privilege VS ESX/ESXi
RestartService Host.Config.NetService X X
RestartServiceConsoleVirtualNic Host.Config.Network X X
RetrieveAllPermissions System.View X X
RetrieveDiskPartitionInfo Host.Config.Storage X X
RetrieveEntityPermissions NONE X X
System.Read privilege is required on the entity whose
performance statistics are being queried.
RetrieveEntityScheduledTask System.View X
RetrieveProperties System.View X X
RetrieveRolePermissions System.View X X
RetrieveServiceContent System.Anonymous X X
RetrieveUserGroups System.View X X
RewindCollector NONE X X
RunScheduledTask ScheduledTask.Run X
SearchDatastore_Task Datastore.Browse X X
SearchDatastoreSubFolders_Task Datastore.Browse X X
SelectActivePartition Host.Config.Storage X X
SelectVnic Host.Config.Network X X
SetCollectorPageSize NONE X X
SetEntityPermissions NONE X X
Authorization.ModifyPermissions required on
entity associated with the permissions and its parent.
SetField NONE X X
Global.SetCustomField required on the entity
associated with the custom field.
SetLicenseEdition Global.Licenses X X
SetLocale System.View X X
SetMultipathLunPolicy Host.Config.Storage X X
SetScreenResolution VirtualMachine.Interact.ConsoleInteract X X
ShutdownGuest VirtualMachine.Interact.PowerOff X X
ShutdownHost_Task Host.Config.Maintenance X X
StandbyGuest VirtualMachine.Interact.Suspend X X
StartService Host.Config.NetService X X
StopMasterSnmpAgent Host.Config.Snmp X X
StopServiceq Host.Config.NetService X X
SuspendVM_Task VirtualMachine.Interact.Suspend X X
TerminateSession Sessions.TerminateSession X X
UnassignUserFromGroup Host.Local.ManageUserGroups X X
UninstallService Host.Config.NetService X X
UnmountToolsInstaller VirtualMachine.Interact.ToolsInstall X X
Table D-1. Privileges Required for vCenter Server and ESX/ESXi Operations (Continued)
Operation Privilege VS ESX/ESXi
UnregisterAndDestroy_Task Folder.Delete X X
The privilege is also required on the parent managed
entity.
UnregisterVM VirtualMachine.Inventory.Delete X X
UpdateAuthorizationRole Authorization.ModifyRoles X X
UpdateChildResourceConfiguration See UpdateChildResourceConfiguration in the X X
vSphere API Reference.
UpdateConfig See UpdateConfig in the vSphere API Reference. X X
UpdateConsoleIpRouteConfig Host.Config.Network X X
UpdateDefaultPolicy Host.Config.Network X X
UpdateDiskPartitions Host.Config.Storage X X
UpdateDnsConfig Host.Config.Network X X
UpdateInternetScsiAlias Host.Config.Storage X X
UpdateInternetScsiAuthenticationProperties Host.Config.Storage X X
UpdateInternetScsiDiscoveryProperties Host.Config.Storage X X
UpdateInternetScsiIPProperties Host.Config.Storage X X
UpdateInternetScsiName Host.Config.Storage X X
UpdateIpConfig Host.Config.Network X X
UpdateIpRouteConfig Host.Config.Network X X
UpdateNetworkConfig Host.Config.Network X X
UpdateOptions See UpdateOptions in the vSphere API Reference. X
UpdatePerfInterval Performance.ModifyIntervals X X
UpdatePhysicalNicLinkSpeed Host.Config.Network X X
UpdatePortGroup Host.Config.Network X X
UpdateServiceConsoleVirtualNic Host.Config.Network X X
UpdateServiceMessage Sessions.GlobalMessage X X
UpdateServicePolicy Host.Config.NetService X X
UpdateSnmpConfig Host.Config.Snmp X X
UpdateSoftwareInternetScsiEnabled Host.Config.Storage X X
UpdateSystemResources Host.Config.Resources X X
UpdateUser Host.Local.ManageUserGroups X X
UpdateVirtualNic Host.Config.Network X X
UpdateVirtualSwitch Host.Config.Network X X
UpgradeTools_Task VirtualMachine.Interact.ToolsInstall X X
UpgradeVM_Task VirtualMachine.Config.UpgradeVirtualHardware X X
UpgradeVmfs Host.Config.Storage X X
UpgradeVmLayout Host.Config.Storage X X
ValidateMigration See ValidateMigration in the vSphere API Reference. X
Resource.AssignVMToPool required on the target
resource pool for the virtual machines.
WaitForUpdates System.View X X
XmlToCustomizationSpecItem System.View X
description System.View
roleList System.View
description System.View
host System.View
CustomFieldsManager field System.View
encryptionKey System.View
hostFolder System.View
latestEvent System.View
maxCollector System.View
childEntity System.View
networkConfig Host.Config.Network
networkInfo Host.Config.Network
offloadCapabilities Host.Config.Network
storageDeviceInfo Host.Config.Storage
sourceAvailable Global.Licenses
featureInfo Global.Licenses
effectiveRole System.View
name System.View
historicalInterval System.View
perfCounter System.View
description System.View
capability System.View
message System.View
messageLocaleList System.Anonymous
supportedLocaleList System.Anonymous
defaultLocale System.Anonymous
description System.View
maxCollector System.View
Alarm.Acknowledge Resource.AssignVAppToPool
Alarm.Create Resource.AssignVMToPool
Alarm.Delete Resource.ColdMigrate
Alarm.DisableActions Resource.CreatePool
Alarm.Edit Resource.DeletePool
Alarm.SetStatus Resource.EditPool
Authorization.ModifyPermissions Resource.HotMigrate
Authorization.ModifyRoles Resource.MovePool
Authorization.ReassignRolePermissions Resource.QueryVMotion
Datacenter.Create Resource.RenamePool
Datacenter.Delete ScheduledTask.Create
Datacenter.IpPoolConfig ScheduledTask.Delete
Datacenter.Move ScheduledTask.Edit
Datacenter.Rename ScheduledTask.Run
Datastore.AllocateSpace Sessions.GlobalMessage
Datastore.Browse Sessions.ImpersonateUser
Datastore.Delete Sessions.TerminateSession
Datastore.DeleteFile Sessions.ValidateSession
Datastore.FileManagement StorageViews.ConfigureService
Datastore.Move StorageViews.View
Datastore.Rename System.Anonymous
DVPortgroup.Create System.Read
DVPortgroup.Delete System.View
DVPortgroup.Modify Task.Create
DVPortgroup.PolicyOp VApp.ApplicationConfig
DVPortgroup.ScopeOp VApp.AssignResourcePool
DVSwitch.Create VApp.AssignVApp
DVSwitch.Delete VApp.AssignVM
DVSwitch.HostOp VApp.Clone
DVSwitch.Modify VApp.Create
DVSwitch.Move VApp.Delete
DVSwitch.PolicyOp VApp.Export
DVSwitch.PortConfig VApp.ExtractOvfEnvironment
DVSwitch.PortSetting VApp.Import
DVSwitch.Vspan VApp.InstanceConfig
Extension.Register VApp.Move
Extension.Unregister VApp.PowerOff
Extension.Update VApp.PowerOn
Folder.Create VApp.Rename
Folder.Delete VApp.ResourceConfig
Folder.Move VirtualMachine.Config.AddExistingDisk
Folder.Rename VirtualMachine.Config.AddNewDisk
Global.CancelTask VirtualMachine.Config.AddRemoveDevice
Global.CapacityPlanning VirtualMachine.Config.AdvancedConfig
Global.Diagnostics VirtualMachine.Config.ChangeTracking
Global.DisableMethods VirtualMachine.Config.CPUCount
Global.EnableMethods VirtualMachine.Config.DiskExtend
Global.GlobalTag VirtualMachine.Config.DiskLease
Global.Health VirtualMachine.Config.EditDevice
Global.Licenses VirtualMachine.Config.HostUSBDevice
Global.LogEvent VirtualMachine.Config.Memory
Global.ManageCustomFields VirtualMachine.Config.QueryUnownedFiles
Global.Proxy VirtualMachine.Config.RawDevice
Global.ScriptAction VirtualMachine.Config.RemoveDisk
Global.ServiceManagers VirtualMachine.Config.Rename
Global.SetCustomField VirtualMachine.Config.ResetGuestInfo
Global.Settings VirtualMachine.Config.Resource
Global.SystemTag VirtualMachine.Config.Settings
Global.VCServer VirtualMachine.Config.SwapPlacement
Host.Cim.CimInteraction VirtualMachine.Config.UpgradeVirtualHardware
Host.Config.AdvancedConfig VirtualMachine.Interact.AnswerQuestion
Host.Config.AutoStart VirtualMachine.Interact.Backup
Host.Config.Connection VirtualMachine.Interact.ConsoleInteract
Host.Config.DateTime VirtualMachine.Interact.CreateScreenshot
Host.Config.Firmware VirtualMachine.Interact.CreateSecondary
Host.Config.HyperThreading VirtualMachine.Interact.DefragmentAllDisks
Host.Config.Maintenance VirtualMachine.Interact.DeviceConnection
Host.Config.Memory VirtualMachine.Interact.DisableSecondary
Host.Config.NetService VirtualMachine.Interact.EnableSecondary
Host.Config.Network VirtualMachine.Interact.MakePrimary
Host.Config.Patch VirtualMachine.Interact.PowerOff
Host.Config.PciPassthru VirtualMachine.Interact.PowerOn
Host.Config.Resources VirtualMachine.Interact.Record
Host.Config.Settings VirtualMachine.Interact.Replay
Host.Config.Snmp VirtualMachine.Interact.Reset
Host.Config.Storage VirtualMachine.Interact.SetCDMedia
Host.Config.SystemManagement VirtualMachine.Interact.SetFloppyMedia
Host.Inventory.AddHostToCluster VirtualMachine.Interact.Suspend
Host.Inventory.AddStandaloneHost VirtualMachine.Interact.TerminateFaultTolerantVM
Host.Inventory.CreateCluster VirtualMachine.Interact.ToolsInstall
Host.Inventory.DeleteCluster VirtualMachine.Interact.TurnOffFaultTolerance
Host.Inventory.EditCluster VirtualMachine.Inventory.Create
Host.Inventory.MoveCluster VirtualMachine.Inventory.Delete
Host.Inventory.MoveHost VirtualMachine.Inventory.Move
Host.Inventory.RemoveHostFromCluster VirtualMachine.Provisioning.Clone
Host.Inventory.RenameCluster VirtualMachine.Provisioning.CloneTemplate
Host.Local.CreateVM VirtualMachine.Provisioning.CreateTemplateFromVM
Host.Local.DeleteVM VirtualMachine.Provisioning.Customize
Host.Local.InstallAgent VirtualMachine.Provisioning.DeployTemplate
Host.Local.ManageUserGroups VirtualMachine.Provisioning.DiskRandomAccess
Host.Local.ReconfigVM VirtualMachine.Provisioning.DiskRandomRead
Network.Assign VirtualMachine.Provisioning.GetVmFiles
Network.Config VirtualMachine.Provisioning.MarkAsTemplate
Network.Delete VirtualMachine.Provisioning.MarkAsVM
Network.Move VirtualMachine.Provisioning.ModifyCustSpecs
Performance.ModifyIntervals VirtualMachine.Provisioning.PromoteDisks
Profile.Clear VirtualMachine.Provisioning.PutVmFiles
Profile.Create VirtualMachine.Provisioning.ReadCustSpecs
Profile.Delete VirtualMachine.State.CreateSnapshot
Profile.Edit VirtualMachine.State.RemoveSnapshot
Profile.View VirtualMachine.State.RenameSnapshot
Resource.ApplyRecommendation VirtualMachine.State.RevertToSnapshot
The information is presented in the following topics:
“Java Sample Programs” on page 229
“C# Sample Programs” on page 232
JAX-WS
When you download the SDK, you can find the java sample programs and related files in the following
directories. The files with a ‘*’ by their names are new for the vSphere 5.0 release.
SDK\vsphere-ws\java\JAXWS\samples\com\vmware – Top‐level directory for Java samples. Details
listed in Table E‐1.
SDK\vsphere-ws\java\JAXWS\samples\com\vmware\security – Credential store utilities
SDK\vsphere-ws\java\JAXWS\samples\com\vmware\vim25 – Stub directories. The vim25 directory
contains stubs for VirtualCenter 2.5 and later, including vSphere 4.0 and later.
SDK\vsphere-ws\java\JAXWS\samples\com\vmware\vm – samples written for a single vm
EventHistoryCollectorMonitor Demonstrates how to create and monitor an
EventHistoryCollector. Uses the latestPage property of
EventHistoryCollector to filter the events.
VMEventHistoryCollectorMonitor Standalone client that demonstrates how to perform the
following tasks:
Logging into the web service.
Creating EventHistoryCollector filtered for a single
virtual machine.
Monitoring events using the latestPage property of the
EventHistoryCollector.
Connect Connects to an ESX/ESXi system or a vCenter Server
system.
Create Creates a managed entity such as a folder, datacenter, or
cluster.
Delete Deletes a managed entity from the inventory tree. The
managed entity can be a virtual machine, a
ClusterComputeResource, or a folder.
GetCurrentTime* Retrieves the current time from the vSphere Server.
GetHostName* Retrieves the hostname of the ESX Server.
GetUpdates Demonstrates how to use the PropertyCollector to
monitor one or more properties of one or more managed
objects. In particular this sample monitors one or all
virtual machines and all hosts or one host for changes to
some basic properties.
LicenseManager Demonstrates uses of the licensing API using License
managed object reference.
Move Moves a managed entity from its current location in the
inventory to a new location in a specified folder
PropertyCollector Illustrates the use of the PropertyCollector API.
RemoveManagedObject Destroys or unregisters a managed inventory object like a
Host, VirtualMachine, or Folder.
Rename Renames a managed entity object.
SearchIndex Illustrates the use of the SearchIndex API.
SimpleClient Connects to the server, logs in, lists the inventory contents
(managed entities) at the console, and logs out.
TaskList Displays a list of tasks performed on a specified managed
object.
DownloadGuestFile* Downloads a file from the guest to a specified path on the
host where the client is running.
UploadGuestFile* Uploads a file from the client machine to a specified
location inside the guest operating system.
AddVirtualNic Adds a virtual NIC to a port group on a virtual switch an
RemoveVirtualNic removes a virtual NIC from a port group.
AddVirtualSwitch Adds a virtual switch to a host and removes a virtual
RemoveVirtualSwitch switch from the host.
AddVirtualSwitchPortGroup Adds a port group to a virtual switch.
RemoveVirtualSwitchPortGroup
HostProfileManager* Demonstrates the use of HostProfileManager and
ProfileComplainceManager.
ColdMigration Puts virtual machine files into a specified datacenter and
datastore and registers and reconfigures the
corresponding virtual machine.
History Reads performance measurements from the current time,
or from a specified start time, for a specified duration.
PrintCounters Writes the available counters of a managed entity into the
specified file at the specified location. The managed entity
can be a host system, a virtual machine, or a resource pool.
Realtime Displays performance measurements from the current
time at the console.
VItop An ESXtop‐like sample application that lets
administrators specify the CPU and memory counters by
name to obtain metrics for a specified host.
VIUsage Creates a GUI for graphical representation of the
counters.
scheduling DeleteOneTimeScheduledTask Demonstrates deleting a ScheduledTask.
OneTimeScheduledTask Demonstrates creating a ScheduledTask using the
ScheduledTaskManager.
WeeklyRecurrenceScheduledTaks Demonstrates creating a weekly recurrent scheduled task.
CredentialStore* Creates an example credential store.
CredentialStoreAdmin* A command‐line tool that provides completenaccess to
the credential store backing file on the local machine.
CredentialStoreFactory* Factory class providing instances of a credential store.
CredentialStoreImpl* Implementation class for CredentialStoreAdmin.
CredentialStoreObfuscate* Converts the hostname string to lowercase, so that a
uniform representation of the hostname is used to
obfuscate and de‐obfuscate the password.
CredentialStoreStorage* This class provides the same functionality as
FileInputStream, except that the close() method is
overridden so that FileInputStream class’ close()
method does not get called.
CreateUsers Creates a user account and password and stores them in
the local credential store.
OVFManagerExportVMDK* Demonstrates how the OvfManager exports VMDKs from
a VM to the localSystem.
OVFManagerImportLocal* Use this class to import or deploy an OVF Appliance from
a local drive.
OVFManagerImportVAppFromUrl* Use this class to import or deploy an OVF Appliance from
a specified URL.
vim25 Thisdirectory containsthe .java filesforthe classesthatm ake up the vSphere W eb ServicesSD K.
vm VMClone Locates an existing virtual machine on the vCenter Server
system, makes a template from this virtual machine, and
deploys instances of the template onto a datacenter.
VMCreate Creates a virtual machine. Different command‐line input
creates the virtual machine in different ways.
VMDeltaDisk Creates a delta disk on top of an existing virtual disk in a
virtual machine, and simultaneously removes the original
disk using the reconfigure API.
Use delta disks in conjunction with linked virtual
machines.
VMLinkedClone Creates a linked virtual machine from an existing
snapshot.
VMotion Checks whether migration with VMotion is feasible
between two hosts. Performs the migration if the hosts are
compatible.
VMpowerOps Performs power operations on a virtual machine.
VMPromoteDisks Consolidates a linked virtual machine by using the
VirtualMachine.PromoteDisks method.
VMReconfig Reconfigures a virtual machine. Includes reconfiguring
the disk size and disk mode.
VMRelocate Relocate a linked virtual machine using disk move type.
VMSnapshot Performs virtual machine snapshot operations
C# Sample Programs
The C# (.NET) sample programs are located in the SDK\vsphere-ws\dotnet\cs\samples\ directory. Details
listed in Table E‐2. Each of the examples listed in the table is actually a directory that contains a .cs file, a .csproj
file, a filename2008.csproj file, and a filename2010.csproj file. The directories with a ‘*’ by their names are new
directories for the vSphere 5.0 release.
The samples include a GeneratingStubs.txt file and a readme_dotnet.html file at top level.
The readme file explains how to build the examples using Visual Studio 2005 or Visual C# 2005 Express.
AddVirtualNic Adds a virtual NIC to the ESX/ESXi system. First specifies a HostVirtualNicSpec, and
then adds the NIC to the host.
AddVirtualSwitch Adds a virtual switch to the ESX/ESXi system.
AddVirtualSwitchPortGroup Adds a virtual port group to the ESX/ESXi system.
AppUtil Contains the following utility applications:
AppUtil – Utility application that drives the user input mechanism for other
samples and includes some other utility functions.
ArgumentHandlingException – Handles command‐line exceptions. Used by
AppUtil.
CertPolicy – Handles certification problems by displaying informational
messages.
ClientUtil – Client utilities related to prompting the user and logging. Used by
AppUtil.
Log – Logger to file or console.
OptionSpec – Option parsing utility.
ServiceUtils, ServiceUtilsV25 – Utilities for connecting to the server.
VersionUtil – Utility that determines the name space and supported versions.
VMUtils – Utility that sets values for a basic virtual machine. Some of the setup,
such as adding a floppy disk drive, might not always be needed.
Basics Uses the PerformanceManager for basic monitoring.
Browser Retrieves the contents of the ServiceInstance starting at the root folder, and prints a
listing of ManagedEntity objects. Optionally, obtains properties for a specific type, or
by default, for ManagedEntity itself.
CIMInfo CIMInfo versioning sample that retrieves the details of CIM_Fan like Activecooling,
Caption, CommunicationStatus and so on.
Coldmigration Migrates a powered off virtual machine from one host to another.
Connect Simple example that logs in and logs out.
Create Creates a Folder, Cluster, Datacenter or standalone host. Prompts the user for the
item to create and where to put the item, for example, in a folder.
CreateUser Creates a user. Specifies permissions for the user using the AuthorizationManager.
CredentialStorePSCmdLets Multiple commandlets for managing the credential store.
Delete Deletes a managed entity.
DeleteOneTimeScheduledTask Extracts a task from scheduledTaskManager and deletes it. This sample is well
commented and illustrates using the PropertyCollector. You can create the task
using the OneTimeScheduledTask example.
DisplayNewProperties Retrieves the specified set of properties for the given managed object reference into an
array of result objects (returned in the same order as the property list)
DisplayNewPropertiesHost Displays properties of an ESX/ESXi host. The properties displayed depend on the
version of the host.
DisplayNewPropertiesVM Displays a set of properties for a virtual machine. The properties displayed depend on
the version of the software on the host.
EventFormat Retrieves and formats the last event on the ESX/ESXi or vCenter Server system.
Demonstrates event formatting.
EventHistoryCollectorMonitor Creates an EventHistoryCollector and monitors the corresponding events.
GetUpdates Retrieves updates for a virtual machine or an ESX/ESXi host.
GetVirtualDiskFiles Retrieves the virtual disk files from a host’s datastores.
GetVMFiles Downloads the files in the virtual machine configuration directory as well as the files in
the virtual machine snapshot, suspend, and log directories. Writes progress to the
console.
History Displays the performance measurements of a specified counter of a specified ESX/ESXi
for a specified duration, or 20 minutes (default) at the console.
HostPowerOps Performs reboot, shutdown, or suspend (power off to standby) operations on an
ESX/ESXi system.
LicenseManager Displays licensing information. The user can specify a license server,
MobStartPage Includes a program, image files, and HTML files for displaying a Managed Object
browser.
Move Moves a managed entity from one folder to another.
OneTimeScheduledTask Creates a ScheduledTask that powers off a virtual machine and schedules the task
using a OnceTaskScheduler. You can delete the task using the
DeleteOneTimeScheduledTask commandlet.
PrintCounters Defines a printEntityCounters function that prints counters for a virtual machine,
host, or resource pool.
PropertyCollector Illustrates use of the PropertyCollector.
QueryMemoryOverhead Illustrates use of the QueryMemoryOverhead method. The folder includes two
examples, QueryMemoryOverheadV25 uses the currently valid
QueryMemoryOverheadEx method, QueryMemoryOverhead uses the deprecated
QueryMemoryOverhead method.
RealTime Displays the current performance measurements of selected CPU counters of any
specified virtual machine at the console.
RecordSession Records a session and allows you to retrieve a specified set of properties for a specified
managed object reference into an array of result objects.
RemoveManagedObject Removes a host from a cluster or a virtual machine from a host. Handles errors, for
example, if the host is not in a cluster, by printing that information to the command line.
RemoveVirtualNic Removes a virtual NIC from the ESX/ESXi system.
RemoveVirtualSwitch Removes a virtual switch from the ESX/ESXi system.
RemoveVirtualSwitchPortGroup Removes a virtual port group from the ESX/ESXi system.
Rename Renames a managed entity.
SCSILunName Prints the virtual machine file system volumes on a specified SCSI LUN.
SearchIndex Illustrates the use of the SearchIndex API.
SimpleClient Demonstrates connecting to a service, logging on to service, obtaining service content,
and logging out from the service.
SSPI Illustrates how to use an SDK application with Microsoft SSPI.
SSPICIMClient Illustrates how to use an CIM client application with Microsoft SSPI.
TaskList Displays currently running tasks and their state.
VMClone Clones a virtual machine.
VMCreate Creates a virtual machine.
VMEventHistoryCollectorMonitor Returns all events on the latest page on the EventHistoryCollector.
VMotion Validates that migration with VMotion is feasible between two hosts, and performs the
migration if the hosts are compatible.
VMPowerOps Retrieves a reference to a virtual machine and invokes power operations specified on the
command line on that virtual machine.
VMPowerStateAlarm Creates an alarm that monitors virtual machine state and sends email if the virtual
machine power is off. Includes error handling, for example, when the command is
attempted with an ESX/ESXi host as a target.
VMReconfig Reconfigures a virtual machine by changing its memory, cpu, disk, nic, or cd.
VMSnapshot Performs snapshot operations such as create, revert to, remove, remove all, and so on.
VMware.Security.CredentialStore Illustrates use of the VMware credential store.
WatchVM Monitors updates on a virtual machine using the PropertyCollector.
WeeklyRecurrenceScheduledTask Creates a task that reboots a virtual machine once a week.
Axis 4.1
SDK\samples\Axis\java\com\vmware – Top‐level directory for Java samples
SDK\samples\Axis\java\com\vmware\apputils – Helper applications.
SDK\samples\Axis\java\com\vmware\samples – Samples. Details listed in Table E‐3.
SDK\samples\Axis\java\com\vmware\security – Credential store utility
SDK\samples\Axis\java\com\vmware\vim and SDK\samples\Axis\java\com\vmware\vim25 – Stub
directories. The vim directory contains stubs for servers that precede VirtualCenter 2.5, the vim25
directory contains stubs for VirtualCenter 2.5 and later, including vSphere 4.0 and later.
CIMUtil CIM utility functions, including a wrapper that provides an
enumerator over all the instances of the specified class and some
simpler wrappers.
EventHistoryCollectorMonitor Demonstrates how to create and monitor an
EventHistoryCollector. Uses the latestPage property of
EventHistoryCollector to filter the events.
VMEventHistoryCollectorMonitor Standalone client that demonstrates how to perform the following
tasks:
Logging into the web service.
Creating EventHistoryCollector filtered for a single virtual
machine.
Monitoring events using the latestPage property of the
EventHistoryCollector.
Connect Connects to an ESX/ESXi system or a vCenter Server system.
Create Creates a managed entity such as a folder, datacenter, or cluster.
Delete Deletes a managed entity from the inventory tree. The managed
entity can be a virtual machine, a ClusterComputeResource, or a
folder.
GetUpdates Demonstrates how to use the PropertyCollector to monitor one
or more properties of one or more managed objects. In particular
this sample monitors one or all virtual machines and all hosts or
one host for changes to some basic properties.
LicenseManager Demonstrates uses of the licensing API using License managed
object reference.
Move Moves a managed entity from its current location in the inventory
to a new location in a specified folder
PropertyCollector Illustrates the use of the PropertyCollector API.
RemoveManagedObject Destroys or unregisters a managed inventory object like a Host,
VirtualMachine, Folder, and so on.
Rename Renames a managed entity object.
SearchIndex Illustrates the use of the SearchIndex API.
SimpleClient Connects to the server, logs in, lists the inventory contents
(managed entities) at the console, and logs out.
TaskList Displays a list of tasks performed on a specified managed object.
AddVirtualSwitch Adds a virtual switch to a host and removes a virtual switch from
RemoveVirtualSwitch the host.
AddVirtualSwitchPortGroup Adds a port group to a virtual switch.
RemoveVirtualSwitchPortGroup
ColdMigration Puts virtual machine files into a specified datacenter and datastore
and registers and reconfigures the corresponding virtual machine.
PrintCounters Writes the available counters of a managed entity into the specified
file at the specified location. The managed entity can be a host
system, a virtual machine, or a resource pool.
Realtime Displays performance measurements from the current time at the
console.
VItop An esxtop‐like sample application that lets administrators specify
the CPU and memory counters by name to obtain metrics for a
specified host.
VIUsage Creates a GUI for graphical representation of the counters.
OneTimeScheduledTask Demonstrates creating a ScheduledTask using the
ScheduledTaskManager.
WeeklyRecurrenceScheduledTask Demonstrates creating a weekly recurrent scheduled task.
vm VMClone Locates an existing virtual machine on the vCenter Server system,
makes a template from this virtual machine, and deploys instances
of the template onto a datacenter.
VMCreate Creates a virtual machine. Different command‐line input creates
the virtual machine in different ways.
VMDeltaDisk Creates a delta disk on top of an existing virtual disk in a virtual
machine, and simultaneously removes the original disk using the
reconfigure API.
Use delta disks in conjunction with linked virtual machines.
VMLinkedClone Creates a linked virtual machine from an existing snapshot.
VMotion Checks whether migration with VMotion is feasible between two
hosts. Performs the migration if the hosts are compatible.
VMpowerOps Performs power operations on a virtual machine.
VMPromoteDisks Consolidates a linked virtual machine by using the
VirtualMachine.PromoteDisks method.
VMReconfig Reconfigures a virtual machine. Includes reconfiguring the disk
size, disk mode and so on.
VMRelocate Relocate a linked virtual machine using disk move type.
VMSnapshot Performs virtual machine snapshot operations
version Samples in the version directory illustrate running against hosts that have different versions of vSphere or
VMware Infrastructure installed.
The HostPowerOps sample includes running against Virtual Infrastructure 2.0. The other samples apply to
Virtual Infrastructure 2.5 and later versions including vSphere 4.0.
displaynewpropertieshost/ Displays properties of the host based on the API version supported
DisplayNewPropertiesHost by ESX/ESXi or vCenter Server.
DisplayNewPropertiesHostV25
displaynewpropertiesvm/ Displays properties of a virtual machine based on the API version
DisplayNewPropertiesVM supported by the host to which you connect.
DisplayNewPropertiesVMV25
getvirtualdiskfiles/ Searches the virtual disk files in all the datastores available in a
GetVirtualDiskFiles specified host using the properties ControllerType and
ThinProperty.
GetVirtualDiskFilesV25
hostpowerops/ Powers down a host.
HostPowerOps This samples illustrates how to run a sample against hosts of
HostPowerOpsV25 multiple versions, including Virtual Infrastructure 2.0.
installhostpatch/ Uses the HostPatchManager managed object to upgrade the
InstallHostPatch components in an ESXi system.
InstallHostPatchV25
querymemoryoverhead/ Determines the amount of memory overhead necessary to power
QueryMemoryOverhead on a virtual machine with the specified characteristics.
QueryMemoryOverheadV25
recordsession/ Demonstrates recording a session.
RecordSession
RecordSessionV25
A B
accessing property values 22 bond bridge 108
accessor (getter) method 19, 22 boot options 118
Action object 176
Active Directory 75 C
AddHost_Task 148 C#
administrator role 224 credential store library 81
admission control with expandable resource datatypes,map to XML 20
pools 145 helper classes 36
affinity sample programs 237
CPU 119 certificates 72
DRS 146 changing permissions 79
memory 119 CHAP 96
Alarm object 173, 174 childEntity property 41
AlarmAction object 176 chunked data 69
AlarmExpression object 175 CIM APIs 14
AlarmManager object 173 client applications
alarms deploying 205
creating 173 patterns 27, 71
deleting 177 client data synchronization 67
disabling 177 client-server architecture 17
email message 176 client-side proxy interface 18
introduction 169 ClusterComputeResource 141, 147
listing 173 clusters
red or yellow 175 adding hosts 148
running script 176 configuring 147
samples 177 creating 147
AlarmSpec object 174 overview 143
anti-affinity, DRS 146 reconfiguring 148
API versions 35, 36 VMware DRS 146
applying permissions 80 VMware HA 146
AppUtil (.NET connection object) 19 cold migration 128
apputils 36, 37 collecting properties 47
architecture, client-server 17 complex content 208
array properties 24 concurrent sessions 81
ArrayOf... types 23 config.xml file 200
authenticating users 81 configuration files 198
authentication 71 ContainerView 56
authorization 71 core dumps 100
AuthorizationManager 71, 77 CPU
automated login 81 affinity 119
Axis allocation 119
vSphere web service connection 19 expandable reservation 144
WSDL files 18 limit 144
number of CPUs 119
resource pools 142
permissions 80 introduction 45
guest OS, customizing 124 managed and standalone hosts 44
permissions 44
H privileges 42
HA Clusters, managing 149 root folders 42
hardware version 117 inventory management privileges 42
helper classes 36, 37 inventory traversal 56
C# 37 IP gateway 110
sample applications 36 IP route configuration 110
hierarchies 40, 41 IPv6 109
historical intervals 194 iSCSI
HistoryCollector overview 167, 173 ISO file mounting 105
host network isolation 149 storage 94
hostd.log 198 virtual machine datastore 105
HostDatastoreBrowser 89 VMkernel 95
HostDatastoreSystem 89
HostDiagnosticPartition 90, 101 J
HostDiskPartitionInfo 93 java
HostLocalAccountManager object 71, 76 credential store library 81
HostNetworkConfig 103 datatypes, map to XML 20
HostNetworkSecurityPolicy 108 sample programs 229
HostNetworkSystem 103 TaskList application 154
HostNetworkTrafficShapingPolicy 108
HostNicTeamingPolicy 108 K
hosts key-based arrays 24
adding to cluster 148
clusters, creating 147
L
configuring 86 language-specific classes and methods 19
disconnecting 87 LicenseAssignmentManager 72, 84
health status 85 LicenseManager 72, 84
lifecycle 87 licenses
management objects 85 adding 84
network policies 108 introduction 84
NUMA information 86 removing 84
reboot 87 limit 144
reconnecting 87 linked virtual machines
retrieve information 85 creating 130
time 88 disk backings 130
HostStorageSystem 99 from running point 131
HostStorageSystem object 89, 93, 99 from snapshot 131
HostSystem 85 relocating 132
HostVirtualSwitchBondBridge 108 Linux pluggable authentication module 73
HTTP access 211, 212, 213, 214 local user accounts 72
HTTPS server access 19 log descriptor values 202
hypervisor 13, 125 log files
overview 198
I vCenter Server 200
import client libraries 19 virtual machines 199
incremental property retrieval 48 log in 75
indexed arrays 24 log level
interface 18 default settings 200
inventory ESX system 200
folders 40 modifying 200