vSphere SDK for Perl Programming Guide ESXi 6.0 vCenter Server 6.0 This document supports the version of each product listed and supports all subsequent versions until the document is replaced by a new edition. To check for more recent editions of this document, see http://www.vmware.com/support/pubs.
vSphere SDK for Perl 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: docfeedback@vmware.com Copyright © 2007–2015 VMware, Inc. All rights reserved. This product is protected by U.S. and international copyright and intellectual property laws.
Contents About This Book 7 Revision History 7 Intended Audience 7 1 Getting Started with vSphere SDK for Perl 9 vSphere SDK for Perl Architecture 9 Using vSphere SDK for Perl 10 Getting Started 10 Common vSphere SDK for Perl Tasks 11 vSphere SDK for Perl Programming Conventions 11 vSphere SDK for Perl Common Options 12 Specifying Options 12 Authenticating Through vCenter Server and vCenter Single Sign‐On 13 Example 13 Using a Session File 13 Passing Parameters at the Command Line 14 Setting Environment
vSphere SDK for Perl Programming Guide Omitting Optional Arguments in Method Calls 31 Updating View Objects 32 3 Refining vSphere SDK for Perl Scripts 33 Creating and Using Filters 33 Using Filters with Vim::find_entity_view() or Vim::find_entity_views() Filtering Views Selectively Using Properties 34 Using View Subroutines with a Properties Argument 35 Using Filters on the Utility Application Command Line 35 Retrieving the ServiceInstance Object on a vSphere Host 36 Saving and Using Sessions 36 Saving Se
Contents Identify 55 Enumerate 55 PullRelease 56 Get 56 WSMan::WSBasic Examples 56 Generic CIM Operations with WSMan::GenericOps WSMan::GenericOps‐>new 58 register_xml_ns 58 register_class_ns 58 Identify 59 EnumerateInstances 59 EnumerateInstanceNames 59 EnumerateAssociatedInstances 59 EnumerateAssociatedInstanceNames 60 EnumerateAssociationInstances 60 EnumerateAssociationInstanceNames 60 GetInstance 60 57 B Credential Store Perl Library 61 Credential Store Overview 61 Credential Store Components 62 Man
vSphere SDK for Perl Programming Guide 6 VMware, Inc.
About This Book This book, the vSphere SDK for Perl Programming Guide, provides information about writing and running VMware® vSphere SDK for Perl scripts on ESX/ESXi or vCenter Server systems. IMPORTANT This book discusses the SDK for Perl that allows you to access vSphere by using the vSphere Web Services SDK, which is available for all supported versions of vSphere. This book does not discuss Perl bindings to vAPI, which is being released with vSphere 6.0 for the first time.
vSphere SDK for Perl Programming Guide All administrators can use the utility applications and sample scripts included with the vSphere SDK for Perl to manage and monitor the hosts in the vSphere environment. Experienced Perl programmers can examine the source code for the available scripts. They can then modify those scripts or write new scripts using the vSphere SDK for Perl subroutines to access the objects on the vSphere host and manipulate those objects using Perl.
1 Getting Started with vSphere SDK for Perl 1 The vSphere SDK for Perl lets you automate a wide variety of administrative, provisioning, and monitoring tasks in the vSphere environment. This chapter introduces the SDK architecture, explains the basic use model, and gets you started running a simple script.
vSphere SDK for Perl Programming Guide Sample Scripts – Scripts that you can customize for your needs and that illustrate the vSphere SDK for Perl’s functionality. You must know Perl to customize the scripts. Unlike the utility applications, sample scripts are not supported by VMware.
Chapter 1 Getting Started with vSphere SDK for Perl 3 Source Description “Writing vSphere SDK for Perl Scripts” on page 19. In‐depth discussion of scripts that includes an example. Chapter 4, “vSphere SDK for Perl Subroutine Reference,” on page 41. Reference to vSphere SDK for Perl subroutines. “Web Services for Management Perl Library” on page 51.
vSphere SDK for Perl Programming Guide false: Use 0, ʹ0ʹ, or ʹfalseʹ (capitalization ignored) true: Use 1, ʹ1ʹ, or ʹtrueʹ (capitalization ignored) Output (receiving from the server): false: Return value is 0 true: Return value is 1 To match Boolean values in a filter, use the strings true and false. See “Creating and Using Filters” on page 33. Date/Time – The server returns a SOAP dateTime value. You can use the Date::Parse Perl module to process these objects.
Chapter 1 Getting Started with vSphere SDK for Perl Table 1-2. vSphere CLI Authentication Precedence (Continued) Authentication Description See Environment variable Password specified in an environment variable. “Setting Environment Variables” on page 14 Credential store Password retrieved from the credential store. “Credential Store Perl Library” on page 61 Current account (Active Directory) Current account information used to establish an SSPI connection. Windows only. .
vSphere SDK for Perl Programming Guide 2 Run save_session.pl. You must supply connection parameters and the name of a session file in which the script can save an authentication cookie. perl save_session.pl --savesessionfile --server For example: perl save_session.pl --savesessionfile C:\Temp\my_session --server my_server If you specify a server but no user name or password, the script prompts you. 3 You can now run scripts in the \apps or \samples directory or your own scripts a
Chapter 1 Getting Started with vSphere SDK for Perl VI_PROTOCOL = https VI_PORTNUMBER = 443 Do not escape special characters in the file that specifies environment variables. If you have set up your system to run this file, you can run scripts on the specified server afterwards. Using a Configuration File A configuration file is a text file that contains variable names and settings.
vSphere SDK for Perl Programming Guide Common Options Reference The following table lists options that are available for all vSphere SDK for Perl scripts. Use the parameter on the command line and the variable or the parameter in configuration files. Table 1-3. Options Available for All SDK for Perl Commands Option and Environment Variable Description --cacertsfile ESXCLI commands only.
Chapter 1 Getting Started with vSphere SDK for Perl Table 1-3. Options Available for All SDK for Perl Commands Option and Environment Variable Description --protocol Uses the specified protocol to connect to the system specified by --server. Default is HTTPS. VI_PROTOCOL= --psc VI_PSC= Host name or IP address of the Platform Services Controller instance that is associated with the vCenter Server system that manages the host.
vSphere SDK for Perl Programming Guide /usr/lib/vmware-vcli/apps 2 Run connect.pl as follows: connect.pl --url https://:/sdk/vimService --username myuser --password mypassword The script returns an information message and the host time. You are now ready to run other scripts, or create new scripts. NOTE You can run any utility application with --help to display information about its parameters. 18 VMware, Inc.
2 Writing vSphere SDK for Perl Scripts 2 This chapter uses a simple example script to illustrate how to write a vSphere SDK for Perl script. The chapter also explores the basics of the vSphere API object model. NOTE This chapter does not discuss Perl basics. You are expected to know Perl and to understand its programming conventions. When you develop a vSphere SDK for Perl script, follow Perl standards for filenames, imports, and general processing flow.
vSphere SDK for Perl Programming Guide Table 2-1. Basic vSphere SDK for Perl Script (simpleclient.pl) (Continued) Code element Discussed in my %opts = ( entity => { type => "=s", variable => "VI_ENTITY", help => "ManagedEntity type: HostSystem, etc", required => 1, }, ); “Step 2: (Optional) Define Script‐Specific Command‐Line Options” on page 20. Opts::add_options(%opts); Opts::parse(); Opts::validate(); Util::connect(); “Step 3: Connect to the Server” on page 22.
Chapter 2 Writing vSphere SDK for Perl Scripts The vSphere SDK for Perl has defined all common options using attributes and subroutines specified in the VILib::Opts package. You can similarly use the VILib::Opts package to create custom options for your own applications and scripts, to simplify use of your script, or to allow users to specify other information. Example 2‐1 defines an entity option that must be made available to the script at runtime.
vSphere SDK for Perl Programming Guide The Vim::find_entity_views() subroutine uses the value the user passes in later in the script. The value must be one of the managed‐entity types listed as view_type parameter supported by Vim::find_entity_views(). NOTE Your script must call Opts::parse() and Opts::validate() to process the options available for all scripts, even if you do not define script‐specific command‐line options.
Chapter 2 Writing vSphere SDK for Perl Scripts See “Understanding Server‐Side Objects” on page 24. Step 6: Close the Server Connection To log out and exit, use the Util::disconnect() subroutine. Example 2‐1 shows the complete listing for simpleclient.pl. Example 2-1. Sample Script (Commented Version) #!/usr/bin/perl # # # # # The simpleclient.
vSphere SDK for Perl Programming Guide Found HostSystem: abcd-42.shellfish.vmware.com Understanding Server-Side Objects When you run a vSphere SDK for Perl script, your goal is to access and potentially analyze or modify server‐side objects. You need the name of the vSphere API objects and often their properties and method names. For example, if you want to power off a virtual machine, you must know how to find the corresponding object, what the name of the power off method is, and how to run that method.
Chapter 2 Writing vSphere SDK for Perl Scripts Figure 2-1. Managed Object Browser Types of Managed Objects and the Managed Object Hierarchy A managed object is the primary type of object in the vSphere object model. A managed object is a data type available on the server that consists of properties and operations. Each managed object has properties and provides various services (operations or methods). Figure 2‐2 shows the ExtensibleManagedObject hierarchy as an example.
vSphere SDK for Perl Programming Guide Managed Object Hierarchy The ServiceContent server‐side object provides access to all other server‐side objects. Each property of the ServiceContent object is a reference to a specific managed object. You must know those property names to access the other objects. You can use the MOB (see “Use the Managed Object Browser to Explore Server‐Side Objects” on page 24) or use the API Reference documentation.
Chapter 2 Writing vSphere SDK for Perl Scripts Managed entities offer specific operations that vary depending on the entity type. For example, a VirtualMachine managed entity provides operations for creating, monitoring, and controlling virtual machines. You can power a virtual machine on or off (PowerOnVM, PowerOffVM) and you can capture state (Snapshot).
vSphere SDK for Perl Programming Guide # Disconnect on receipt of an interrupt signal while in the infinite loop below. $SIG{INT} = sub { Util::disconnect(); exit; }; while (1) { $log = $diagMgr->BrowseDiagnosticLog( key => "hostd", start => $start); if ($log->lineStart != 0) { foreach my $line (@{$log->lineText}) { # next if ($line =~ /verbose\]/); print "$line\n"; } } $start = $log->lineEnd + 1; sleep 2; } Understanding Perl View Objects A view is a client‐side Perl object populated with the state of on
Chapter 2 Writing vSphere SDK for Perl Scripts Table 2-3. Property Overview Property Example Simple data type, such as a string, Boolean, numeric, or dateTime. The ManagedEntity managed object has a name property of type string. Array of simple data types or data objects. A HostSystem managed object contains an array of virtual machines that are hosted by the corresponding physical machine. Enumeration (enum) of predefined values. The values can be a collection of simple data types or data objects.
vSphere SDK for Perl Programming Guide ); Creating Data Objects with Properties You create data objects with constructors that have names corresponding to the classes of the data objects in the vSphere API. The constructor syntax follows common Perl conventions. The arguments supplied to the constructor are key‐value pairs, where each key is the name of an object property, and the corresponding value is the value with which the property is initialized.
Chapter 2 Writing vSphere SDK for Perl Scripts Examples of Operations The following table lists some of the operations available for a VirtualMachine managed object. Table 2-4.
vSphere SDK for Perl Programming Guide view_type => 'HostSystem', filter => { name => 'preferredHost' } ); $vm->PowerOnVM(host => $host); You cannot use the empty string or the value 0 to represent undef or an unset parameter. Updating View Objects In any view, the values of the view properties represent the state of the server‐side objects at the time the view was created. These property values are not updated automatically.
3 Refining vSphere SDK for Perl Scripts 3 This chapter discusses some programming techniques for your vSphere SDK for Perl scripts.
vSphere SDK for Perl Programming Guide You can also match using a regular expression object, generally known as a qr// (quoted regular expression) object. In this case, the value of the property must match the regular expression.
Chapter 3 Refining vSphere SDK for Perl Scripts For each simple property (string, Boolean, numeric data type), including inherited simple properties, the SDK creates an accessor method. The accessor method name is the same as the property name. Arrays of properties become arrays of properties of the same name. Because many of the server‐side managed objects have a large number of properties, accessing only a small number of objects can potentially result in noticeable performance degradation.
vSphere SDK for Perl Programming Guide For example, to search for the virtual machine San Jose, run this command: perl vminfo.pl --username Administrator --password 'secret' --server myserver --vmname 'San Jose' To search for the virtual machine San-Jose/5, run this command: perl vminfo.
Chapter 3 Refining vSphere SDK for Perl Scripts Vim::load_session(session_file => '.visession'); Alternatively, you can load a session using the object‐oriented syntax as follows: my $service_url = "https://$server/sdk/vimService"; my $vim = Vim->new(service_url => $service_url); $vim = $vim->load_session(session_file => '.visession'); Using Multiple Sessions In some cases, you might want to create sessions on several vSphere servers at once, or create more than one session on the same server.
vSphere SDK for Perl Programming Guide } # logout foreach my $vim_obj (@vim_objs) { $vim_obj->logout(); } Learning About Object Structure Using Data::Dumper The vSphere SDK for Perl transparently uses the Data::Dumper Perl module (a standard library) to create the client‐side view objects. Example 3‐4 illustrates how you can use Data::Dumper to explore view objects and corresponding vSphere objects.
Chapter 3 Refining vSphere SDK for Perl Scripts 'localeVersion' => 'INTL', 'name' => 'VMware ESX Server', 'osType' => 'vmnix-x86', 'productLineId' => 'esx', 'vendor' => 'VMware, Inc.', 'version' => '3.0.1' }, 'AboutInfo' ); The output above shows the content of the summary.config.product property of a HostSystem managed object. The type (or more properly class) of summary.config.product property is AboutInfo.
vSphere SDK for Perl Programming Guide my $memory = MethodActionArgument->new( value => PrimType->new(0, 'boolean') ); my $quiesce = MethodActionArgument->new( value => PrimType->new(0, 'boolean') ); You use the MethodActionArgument objects in the order defined in the positional API, not with the usual name => $value syntax. You can then supply the four values defined above as arguments to CreateSnapshot().
4 vSphere SDK for Perl Subroutine Reference 4 The vSphere SDK for Perl are available in three packages: The Opts package includes subroutines for handling built‐in options and creating custom options. See “Subroutines in the Opts Package” on page 42. The Util package includes subroutines for facilitating routine tasks such as setting up and closing connections to the server. See “Subroutines in the Util Package” on page 43.
vSphere SDK for Perl Programming Guide Table 4-2. Subroutines in the Vim Package (Continued) Subroutine Description logout Disconnects the client from the server and closes the connection to the Web service. save_session Saves a session cookie, which is a text file. update_view_data Refreshes the property values of a view object. Table 4-3.
Chapter 4 vSphere SDK for Perl Subroutine Reference Value of the option, as passed to the script Undef if none of the above are specified option_is_set Checks whether an option has been explicitly set by a script or from the command line or whether the option has a default value or computed value (return value of a func). Parameters Parameter Description option_name String value of the built‐in or custom option. Returns Boolean. Returns 1 (true) if the option value has been explicitly set.
vSphere SDK for Perl Programming Guide “connect” on page 44 “disconnect” on page 44 “get_inventory_path” on page 44 “trace” on page 44 connect Establishes a session with the vCenter Server or ESX/ESXi Web service by using the token provided in a previously saved session file, or by using the user name and password provided using the command line, environment variables, or a configuration file.
Chapter 4 vSphere SDK for Perl Subroutine Reference Parameters Parameter Description loglevel Numeric value that specifies the log level. Default is 0. message String that specifies the associated loglevel value. Returns Returns nothing.
vSphere SDK for Perl Programming Guide Parameters Parameter view_type Description Managed entity type specified as one of these strings: “ClusterComputeResource” “ComputeResource” “Datacenter” “Datastore” “DistributedVirtualSwitch” “Folder” “HostSystem” “Network” “ResourcePool” “VirtualApp” “VirtualMachine” begin_entity (optional) Managed object reference that specifies the starting point for the search in the inventory.
Chapter 4 vSphere SDK for Perl Subroutine Reference Parameter Description filter (optional) Hash of one or more name‐value pairs. The name represents the property value to test and the value represents a pattern that the property must match. If more than one pair is specified, all the patterns must match. properties Properties to retrieve. Default is all properties. Use a filter or properties to avoid performance problems. See “Filtering Views Selectively Using Properties” on page 34.
vSphere SDK for Perl Programming Guide get_session_id Retrieves the session ID corresponding to the current session. Parameters No parameters. Returns Session ID cookie for use by load_session(). get_view Retrieves the properties of a single managed object. Parameters Parameter Description mo_ref Managed object reference obtained from a property of another managed object or a view. view_type (optional) Type of view to construct from the managed object.
Chapter 4 vSphere SDK for Perl Subroutine Reference Parameters Parameter Description service_url URL of the server to which the client connects (optional if using session_file). session_file Full path and filename for a session file returned by save_session(). You must specify either session_file or session_id. You must pass in the filename as a hash. session_id Session ID returned by get_session_id(). You must specify either session_file or session_id. Returns Returns the vSphere object instance.
vSphere SDK for Perl Programming Guide Parameter Parameter Description session_file Full path and filename where the token should be saved. The session times out after 30 minutes. You pass in the filename as a hash. Returns Returns nothing. Example save_session (session_file => $filename); update_view_data Refreshes the property values of a view object. Parameters No parameters. Returns Returns nothing. 50 VMware, Inc.
A Web Services for Management Perl Library A Web Services for Management (WS‐Management) provides a common way for systems to access and exchange management information across the IT infrastructure. ESX/ESX version 3.5 and later supports WS‐Management by implementing over a dozen CIM (Common Information Model) profiles. CIM profiles are a set of object‐oriented schemas defined by the DTMF (Distributed Management Task Force).
vSphere SDK for Perl Programming Guide Required Perl Modules The WS‐Management Perl library requires these Perl modules: SOAP::Lite – Version 0.67 ‐ version 0.69 are supported. Versions before 0.67 or 0.7 or later are not supported. UUID – Version 0.02 and later. Data::Dump – Version 1.07 and later.
Chapter A Web Services for Management Perl Library After you have installed vSphere SDK for Perl, the following artifacts and samples are in the vSphere SDK for Perl installation directory: Table A-1. Components and Locations Path Description Perl/samples/WSMan Sample Perl scripts that use the WS‐Management library to obtain information through the CIMOM of an ESX/ESXi or vCenter Server system.
vSphere SDK for Perl Programming Guide UUID – Generates UUIDs for the SOAP messages. Table A‐3 lists the methods the WSBasic class provides, which are discussed in more detail below. Table A-3. Methods in WSMan::WSBasic Method Description WSMan::WSBasic‐>new Constructor. register_xml_ns Registers extra XML namespaces that might be required for proprietary tags in the SOAP message register_class_ns Registers extra CIM namespaces that the WS‐Management server might require.
Chapter A Web Services for Management Perl Library Example $client->register_xml_ns((wsen => 'http://www.dmtf.org/wsen')); Declares a prefix wsen with the URL http://www.dmtf.org/wsen in the global XML namespace. register_class_ns Registers extra ResourceURIs that the WS‐Management server might require. By default, the constructor provides a set of ResourceURIs only for classes in the CIM schema.
vSphere SDK for Perl Programming Guide Returns Returns a SOAP::SOM object that can be used to either check for errors ($result->fault) or to parse the results ($result->result). The SOAP object includes a header and data in XML format. PullRelease An overloaded method that performs a Pull operation or a Release operation. Arguments Accepts the following arguments: Argument Description enumid Enumeration ID that the Pull or Release operation should use. This argument is passed as a string.
Chapter A Web Services for Management Perl Library #Construct the client. $client = WSMan::WSBasic->new( path => 'wsman', username => 'wsman', password => 'secret', port => '8889', address => 'http://something.somewhere.com' ); #Execute the Enumerate method. $result = $client->Enumerate(class_name => 'CIM_Processor', #namespace => 'root/cimv2' ); if($result->fault){ #If a fault occurred, then print the faultstring die $result->faultstring; } else{ #If no fault occurred then get the enumid.
vSphere SDK for Perl Programming Guide Table A-4. Methods in WSMan::GenericOps (Continued) Method Description EnumerateAssociationInstanceNames Returns objects containing key values of the association instances of which the class is a part. GetInstance Retrieves a particular instance of a class. WSMan::GenericOps->new Constructor that takes a hash argument containing key‐value pairs in the following form: $client = WSMan::GenericOps->new(( address => 'http://www.abc.
Chapter A Web Services for Management Perl Library Arguments A hash. Keys are the prefixes, values are the relative URLs as values. Example $client->register_class_ns((OMC => 'http://schema.omc-project.org/wbem/wscim/1/cim-schema/2', VMware => 'http://schemas.vmware.com/wbem/wscim/1/cim-schema/2')); Registers the ResourceURIs needed to enumerate classes in the OMC and VMware schemas. Identify Performs the wsmid:Identify operation, which causes the WS‐Management server to identify itself.
vSphere SDK for Perl Programming Guide Argument Description role (optional) Role that the object plays in the association class. The method filters the results according to the role. resultclassname (optional) Result class name, which must be present in the association. The method returns only those instances. resultrole (optional) Role that the result class plays in this instance. The method returns the results based on resultrole.
B Credential Store Perl Library B The vSphere SDK for Perl credential store library can be used to automate the logon process for non‐interactive client applications by storing the password in a secured local credential cache that the application can access at runtime. You can manage the vSphere credential store using the credential store library included in the vSphere SDK for Perl and discussed in this appendix.
vSphere SDK for Perl Programming Guide A persistence file used to store authentication credentials. Currently, only passwords are supported. The persistence file maps a remote user account from an ESX/ESXi host to that user’s password on the host. IMPORTANT The passwords in the file are obfuscated but not encrypted. You must protect the file by other means and carefully control who can access it.
Chapter B Credential Store Perl Library vSphere Credential Store Subroutine Reference The ViCredStore package includes the following subroutines: “init” on page 63 “get_password” on page 63 “add_password” on page 64 “remove_password” on page 64 “clear_passwords” on page 64 “get_hosts” on page 64 “get_usernames” on page 64 “close” on page 65 init Initializes the credential store. Call this subroutine once, before any of the other credential store subroutines.
vSphere SDK for Perl Programming Guide add_password Creates a credential store file if none exists and stores the password for a given server and user name. If a password already exists for that server and user name, add_password overwrites that password. Parameters Parameter Description server Server for the new entry. Can be an ESX/ESXi or vCenter Server system. username User name for the new entry.
Chapter B Credential Store Perl Library Parameters server – Server for which all user names are listed. Returns Returns a list of all users belonging to the specified server. close Closes the credential store, and frees all resources associated with it. If you want to run additional credential store subroutines, you must run init again to reinitialize the credential store. Call close only once for each credential store initialized by a call to init. Parameters No parameters. Returns Returns nothing.
vSphere SDK for Perl Programming Guide 66 VMware, Inc.
Glossary A appliance See virtual appliance. C CIM (Common Information Model) A set of object‐oriented schemas defined by the DMTF (Distributed Management Task Force), that is not bound to any particular implementation. CIM defines how managed elements in a networked environment are represented as a common set of objects and relationships that multiple users can view, share, and control.
vSphere SDK for Perl Programming Guide MOB (Managed Object Browser) A Web‐based application hosted on all VMware ESX/ESXi and vCenter Server systems. The MOB lets you explore the objects on the system and obtain information about each object’s properties and methods. V vSphere API A set of Web services, hosted on ESX/ESXi and vCenter Server systems, that provides interfaces to vSphere components such as hosts, virtual machines, and datacenters and operations on these components.
Index A E AlarmManager managed object 25 architecture 9 authentication 61 encoding cp936 16 Shift_JIS 16 enumeration property values, accessing 29 environment variables 14 error messages 12 examples credential store 62 session file 14 simple script 19 executing subroutines 11 B blocking methods 28, 30 Boolean data types 11 Boolean values, filter 33 C CIM 51 CIM profiles 51 CIMOM 51 CIMON 51 ClusterComputeResource managed entity 26 command-line connection parameters 14 defining options 20 filters 35 pa
vSphere SDK for Perl Programming Guide importing 20 required 52 VMware Perl modules 9 WS-Management Perl modules 53 multiple sessions 37 N new options attribute list 21 type attribute 21 non-blocking methods 28, 30 non-blocking operations 30 O operations 30 optional method arguments 31 options parsing 21 validating 21 Opts package 20 Opts::get_option() 22 Opts::parse() 21 Opts::validate() 21 P parsing options 21 Passing 14 passwords 63, 64 PerformanceManager managed object 25 programming conventions 11
Index ws-management 51 VMware, Inc.
vSphere SDK for Perl Programming Guide 72 VMware, Inc.