Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
docs/drvesx.html.in | 838 --------------------------------------------
docs/drvesx.rst | 681 +++++++++++++++++++++++++++++++++++
docs/meson.build | 2 +-
3 files changed, 682 insertions(+), 839 deletions(-)
delete mode 100644 docs/drvesx.html.in
create mode 100644 docs/drvesx.rst
diff --git a/docs/drvesx.html.in b/docs/drvesx.html.in
deleted file mode 100644
index c56da16f57..0000000000
--- a/docs/drvesx.html.in
+++ /dev/null
@@ -1,838 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html>
-<html
xmlns="http://www.w3.org/1999/xhtml">
- <body>
- <h1>VMware ESX hypervisor driver</h1>
- <ul id="toc"></ul>
- <p>
- The libvirt VMware ESX driver can manage VMware ESX/ESXi 3.5/4.x/5.x and
- VMware GSX 2.0, also called VMware Server 2.0, and possibly later
- versions. <span class="since">Since 0.8.3</span> the driver
can also
- connect to a VMware vCenter 2.5/4.x/5.x (VPX).
- </p>
-
- <h2><a id="project">Project Links</a></h2>
-
- <ul>
- <li>
- The <a
href="https://www.vmware.com/">VMware ESX and
GSX</a>
- hypervisors
- </li>
- </ul>
-
- <h2><a id="prereq">Deployment
pre-requisites</a></h2>
- <p>
- None. Any out-of-the-box installation of VPX/ESX(i)/GSX should work. No
- preparations are required on the server side, no libvirtd must be
- installed on the ESX server. The driver uses version 2.5 of the remote,
- SOAP based
- <a
href="https://www.vmware.com/support/developer/vc-sdk/visdk25pubs/Re...
- VMware Virtual Infrastructure API</a> (VI API) to communicate with the
- ESX server, like the VMware Virtual Infrastructure Client (VI client)
- does. Since version 4.0 this API is called
- <a
href="https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/R...
- VMware vSphere API</a>.
- </p>
-
- <h2><a id="uri">Connections to the VMware ESX
driver</a></h2>
- <p>
- Some example remote connection URIs for the driver are:
- </p>
-<pre>
-vpx://example-vcenter.com/dc1/srv1 (VPX over HTTPS, select ESX server 'srv1'
in datacenter 'dc1')
-esx://example-esx.com (ESX over HTTPS)
-gsx://example-gsx.com (GSX over HTTPS)
-esx://example-esx.com/?transport=http (ESX over HTTP)
-esx://example-esx.com/?no_verify=1 (ESX over HTTPS, but doesn't verify the
server's SSL certificate)
-</pre>
- <p>
- <strong>Note</strong>: In contrast to other drivers, the ESX driver
is
- a client-side-only driver. It connects to the ESX server using HTTP(S).
- Therefore, the <a href="remote.html">remote transport
mechanism</a>
- provided by the remote driver and libvirtd will not work, and you
- cannot use URIs like <code>esx+ssh://example.com</code>.
- </p>
-
-
- <h3><a id="uriformat">URI Format</a></h3>
- <p>
- URIs have this general form (<code>[...]</code> marks an optional
part).
- </p>
-<pre>
-type://[username@]hostname[:port]/[[folder/...]datacenter/[folder/...][cluster/]server][?extraparameters]
-</pre>
- <p>
- The <code>type://</code> is either <code>esx://</code>
or
- <code>gsx://</code> or <code>vpx://</code> <span
class="since">since 0.8.3</span>.
- The driver selects the default port depending on the
<code>type://</code>.
- For <code>esx://</code> and <code>vpx://</code> the
default HTTPS port
- is 443, for <code>gsx://</code> it is 8333.
- If the port parameter is given, it overrides the default port.
- </p>
- <p>
- A <code>vpx://</code> connection is currently restricted to a single
- ESX server. This might be relaxed in the future. The path part of the
- URI is used to specify the datacenter and the ESX server in it. If the
- ESX server is part of a cluster then the cluster has to be specified too.
- </p>
- <p>
- An example: ESX server <code>example-esx.com</code> is managed by
- vCenter <code>example-vcenter.com</code> and part of cluster
- <code>cluster1</code>. This cluster is part of datacenter
<code>dc1</code>.
- </p>
-<pre>
-vpx://example-vcenter.com/dc1/cluster1/example-esx.com
-</pre>
- <p>
- Datacenters and clusters can be organized in folders, those have to be
- specified as well. The driver can handle folders
- <span class="since">since 0.9.7</span>.
- </p>
-<pre>
-vpx://example-vcenter.com/folder1/dc1/folder2/example-esx.com
-</pre>
-
-
- <h4><a id="extraparams">Extra parameters</a></h4>
- <p>
- Extra parameters can be added to a URI as part of the query string
- (the part following <code>?</code>). A single parameter is formed by
a
- <code>name=value</code> pair. Multiple parameters are separated by
- <code>&</code>.
- </p>
-<pre>
-?<span style="color: #E50000">no_verify=1</span>&<span
style="color: #00B200">auto_answer=1</span>&<span
style="color: #0000E5">proxy=socks://example-proxy.com:23456</span>
-</pre>
- <p>
- The driver understands the extra parameters shown below.
- </p>
- <table class="top_table">
- <tr>
- <th>Name</th>
- <th>Values</th>
- <th>Meaning</th>
- </tr>
- <tr>
- <td>
- <code>transport</code>
- </td>
- <td>
- <code>http</code> or <code>https</code>
- </td>
- <td>
- Overrides the default HTTPS transport. For
<code>esx://</code>
- and <code>vpx://</code> the default HTTP port is 80, for
- <code>gsx://</code> it is 8222.
- </td>
- </tr>
- <tr>
- <td>
- <code>vcenter</code>
- </td>
- <td>
- Hostname of a VMware vCenter or <code>*</code>
- </td>
- <td>
- In order to perform a migration the driver needs to know the
- VMware vCenter for the ESX server. If set to <code>*</code>,
- the driver connects to the vCenter known to the ESX server.
- This parameter in useful when connecting to an ESX server only.
- </td>
- </tr>
- <tr>
- <td>
- <code>no_verify</code>
- </td>
- <td>
- <code>0</code> or <code>1</code>
- </td>
- <td>
- If set to 1, this disables libcurl client checks of the server's
- SSL certificate. The default value is 0. See the
- <a href="#certificates">Certificates for HTTPS</a>
section for
- details.
- </td>
- </tr>
- <tr>
- <td>
- <code>auto_answer</code>
- </td>
- <td>
- <code>0</code> or <code>1</code>
- </td>
- <td>
- If set to 1, the driver answers all
- <a href="#questions">questions</a> with the default
answer.
- If set to 0, questions are reported as errors. The default
- value is 0. <span class="since">Since
0.7.5</span>.
- </td>
- </tr>
- <tr>
- <td>
- <code>proxy</code>
- </td>
- <td>
- <code>[type://]hostname[:port]</code>
- </td>
- <td>
- Allows to specify a proxy for HTTP and HTTPS communication.
- <span class="since">Since 0.8.2</span>.
- The optional <code>type</code> part may be one of:
- <code>http</code>, <code>socks</code>,
<code>socks4</code>,
- <code>socks4a</code> or <code>socks5</code>. The
default is
- <code>http</code> and <code>socks</code> is
synonymous for
- <code>socks5</code>. The optional
<code>port</code> allows to
- override the default port 1080.
- </td>
- </tr>
- </table>
-
-
- <h3><a id="auth">Authentication</a></h3>
- <p>
- In order to perform any useful operation the driver needs to log into
- the ESX server. Therefore, only <code>virConnectOpenAuth</code> can
be
- used to connect to an ESX server, <code>virConnectOpen</code> and
- <code>virConnectOpenReadOnly</code> don't work.
- To log into an ESX server or vCenter the driver will request
- credentials using the callback passed to the
- <code>virConnectOpenAuth</code> function. The driver passes the
- hostname as challenge parameter to the callback. This enables the
- callback to distinguish between requests for ESX server and vCenter.
- </p>
- <p>
- <strong>Note</strong>: During the ongoing driver development,
testing
- is done using an unrestricted <code>root</code> account. Problems
may
- occur if you use a restricted account. Detailed testing with restricted
- accounts has not been done yet.
- </p>
-
-
- <h3><a id="certificates">Certificates for
HTTPS</a></h3>
- <p>
- By default the ESX driver uses HTTPS to communicate with an ESX server.
- Proper HTTPS communication requires correctly configured SSL
- certificates. This certificates are different from the ones libvirt
- uses for <a href="remote.html">secure communication over
TLS</a> to a
- libvirtd one a remote server.
- </p>
- <p>
- By default the driver tries to verify the server's SSL certificate
- using the CA certificate pool installed on your client computer. With
- an out-of-the-box installed ESX server this won't work, because a newly
- installed ESX server uses auto-generated self-signed certificates.
- Those are signed by a CA certificate that is typically not known to your
- client computer and libvirt will report an error like this one:
- </p>
-<pre>
-error: internal error curl_easy_perform() returned an error: Peer certificate cannot be
authenticated with known CA certificates (60)
-</pre>
- <p>
- Where are two ways to solve this problem:
- </p>
- <ul>
- <li>
- Use the <code>no_verify=1</code> <a
href="#extraparams">extra parameter</a>
- to disable server certificate verification.
- </li>
- <li>
- Generate new SSL certificates signed by a CA known to your client
- computer and replace the original ones on your ESX server. See the
- section <i>Replace a Default Certificate with a CA-Signed
Certificate</i>
- in the <a
href="https://www.vmware.com/pdf/vsphere4/r40/vsp_40_esx_server_conf...
Configuration Guide</a>
- </li>
- </ul>
-
-
- <h3><a id="connproblems">Connection
problems</a></h3>
- <p>
- There are also other causes for connection problems than the
- <a href="#certificates">HTTPS certificate</a> related
ones.
- </p>
- <ul>
- <li>
- As stated before the ESX driver doesn't need the
- <a href="remote.html">remote transport mechanism</a>
- provided by the remote driver and libvirtd, nor does the ESX driver
- support it. Therefore, using an URI including a transport in the
- scheme won't work. Only <a href="#uriformat">URIs as
described</a>
- are supported by the ESX driver. Here's a collection of possible
- error messages:
-<pre>
-$ virsh -c
esx+tcp://example.com/
-error: unable to connect to libvirtd at 'example.com': Connection refused
-</pre>
-<pre>
-$ virsh -c
esx+tls://example.com/
-error: Cannot access CA certificate '/etc/pki/CA/cacert.pem': No such file or
directory
-</pre>
-<pre>
-$ virsh -c
esx+ssh://example.com/
-error: cannot recv data: ssh: connect to host
example.com port 22: Connection refused
-</pre>
-<pre>
-$ virsh -c
esx+ssh://example.com/
-error: cannot recv data: Resource temporarily unavailable
-</pre>
- </li>
- <li>
- <span class="since">Since 0.7.0</span> libvirt contains
the ESX
- driver. Earlier versions of libvirt will report a misleading error
- about missing certificates when you try to connect to an ESX server.
-<pre>
-$ virsh -c
esx://example.com/
-error: Cannot access CA certificate '/etc/pki/CA/cacert.pem': No such file or
directory
-</pre>
- <p>
- Don't let this error message confuse you. Setting up certificates
- as described on the <a
href="remote.html#Remote_certificates">remote transport mechanism</a>
page
- does not help, as this is not a certificate related problem.
- </p>
- <p>
- To fix this problem you need to update your libvirt to 0.7.0 or newer.
- You may also see this error when you use a libvirt version that
- contains the ESX driver but you or your distro disabled the ESX
- driver during compilation. <span class="since">Since
0.8.3</span>
- the error message has been improved in this case:
- </p>
-<pre>
-$ virsh -c
esx://example.com/
-error: invalid argument in libvirt was built without the 'esx' driver
-</pre>
- </li>
- </ul>
-
-
- <h2><a id="questions">Questions blocking
tasks</a></h2>
- <p>
- Some methods of the VI API start tasks, for example
- <code>PowerOnVM_Task()</code>. Such tasks may be blocked by
questions
- if the ESX server detects an issue with the domain that requires user
- interaction. The ESX driver cannot prompt the user to answer a
- question, libvirt doesn't have an API for something like this.
- </p>
- <p>
- The VI API provides the <code>AnswerVM()</code> method to
- programmatically answer a questions. So the driver has two options
- how to handle such a situation: either answer the questions with the
- default answer or report the question as an error and cancel the
- blocked task if possible. The
- <a
href="#uriformat"><code>auto_answer</code></a> query
parameter
- controls the answering behavior.
- </p>
-
-
- <h2><a id="xmlspecial">Specialities in the domain XML
config</a></h2>
- <p>
- There are several specialities in the domain XML config for ESX domains.
- </p>
-
- <h3><a id="restrictions">Restrictions</a></h3>
- <p>
- There are some restrictions for some values of the domain XML config.
- The driver will complain if this restrictions are violated.
- </p>
- <ul>
- <li>
- Memory size has to be a multiple of 4096
- </li>
- <li>
- Number of virtual CPU has to be 1 or a multiple of 2.
- <span class="since">Since 4.10.0</span> any number of
vCPUs is
- supported.
- </li>
- <li>
- Valid MAC address prefixes are <code>00:0c:29</code> and
- <code>00:50:56</code>. <span class="since">Since
0.7.6</span>
- arbitrary <a href="#macaddresses">MAC addresses</a> are
supported.
- </li>
- </ul>
-
-
- <h3><a id="datastore">Datastore
references</a></h3>
- <p>
- Storage is managed in datastores. VMware uses a special path format to
- reference files in a datastore. Basically, the datastore name is put
- into squared braces in front of the path.
- </p>
-<pre>
-[datastore] directory/filename
-</pre>
- <p>
- To define a new domain the driver converts the domain XML into a
- VMware VMX file and uploads it to a datastore known to the ESX server.
- Because multiple datastores may be known to an ESX server the driver
- needs to decide to which datastore the VMX file should be uploaded.
- The driver deduces this information from the path of the source of the
- first file-based harddisk listed in the domain XML.
- </p>
-
-
- <h3><a id="macaddresses">MAC addresses</a></h3>
- <p>
- VMware has registered two MAC address prefixes for domains:
- <code>00:0c:29</code> and <code>00:50:56</code>. These
prefixes are
- split into ranges for different purposes.
- </p>
- <table class="top_table">
- <tr>
- <th>Range</th>
- <th>Purpose</th>
- </tr>
- <tr>
- <td>
- <code>00:0c:29:00:00:00</code> -
<code>00:0c:29:ff:ff:ff</code>
- </td>
- <td>
- An ESX server autogenerates MAC addresses from this range if
- the VMX file doesn't contain a MAC address when trying to start
- a domain.
- </td>
- </tr>
- <tr>
- <td>
- <code>00:50:56:00:00:00</code> -
<code>00:50:56:3f:ff:ff</code>
- </td>
- <td>
- MAC addresses from this range can by manually assigned by the
- user in the VI client.
- </td>
- </tr>
- <tr>
- <td>
- <code>00:50:56:80:00:00</code> -
<code>00:50:56:bf:ff:ff</code>
- </td>
- <td>
- A VI client autogenerates MAC addresses from this range for
- newly defined domains.
- </td>
- </tr>
- </table>
- <p>
- The VMX files generated by the ESX driver always contain a MAC address,
- because libvirt generates a random one if an interface element in the
- domain XML file lacks a MAC address.
- <span class="since">Since 0.7.6</span> the ESX driver sets
the prefix
- for generated MAC addresses to <code>00:0c:29</code>. Before 0.7.6
- the <code>00:50:56</code> prefix was used. Sometimes this resulted
in
- the generation of out-of-range MAC address that were rejected by the
- ESX server.
- </p>
- <p>
- Also <span class="since">since 0.7.6</span> every MAC
address outside
- this ranges can be used. For such MAC addresses the ESX server-side
- check is disabled in the VMX file to stop the ESX server from rejecting
- out-of-predefined-range MAC addresses.
- </p>
-<pre>
-ethernet0.checkMACAddress = "false"
-</pre>
- <p>
- <span class="since">Since 6.6.0</span>, one can force
libvirt to keep the
- provided MAC address when it's in the reserved VMware range by adding a
- <code>type="static"</code> attribute to the
<code><mac/></code> element.
- Note that this attribute is useless if the provided MAC address is outside of
- the reserved VMWare ranges.
- </p>
-
-
- <h3><a id="hardware">Available hardware</a></h3>
- <p>
- VMware ESX supports different models of SCSI controllers and network
- cards.
- </p>
-
- <h4>SCSI controller models</h4>
- <dl>
- <dt><code>auto</code></dt>
- <dd>
- This isn't an actual controller model. If specified the ESX driver
- tries to detect the SCSI controller model referenced in the
- <code>.vmdk</code> file and use it. Autodetection fails when a
- SCSI controller has multiple disks attached and the SCSI controller
- models referenced in the <code>.vmdk</code> files are
inconsistent.
- <span class="since">Since 0.8.3</span>
- </dd>
- <dt><code>buslogic</code></dt>
- <dd>
- BusLogic SCSI controller for older guests.
- </dd>
- <dt><code>lsilogic</code></dt>
- <dd>
- LSI Logic SCSI controller for recent guests.
- </dd>
- <dt><code>lsisas1068</code></dt>
- <dd>
- LSI Logic SAS 1068 controller. <span class="since">Since
0.8.0</span>
- </dd>
- <dt><code>vmpvscsi</code></dt>
- <dd>
- Special VMware Paravirtual SCSI controller, requires VMware tools inside
- the guest. See <a
href="https://kb.vmware.com/kb/1010398">VMware KB1010398</a>
- for details. <span class="since">Since 0.8.3</span>
- </dd>
- </dl>
- <p>
- Here a domain XML snippet:
- </p>
-<pre>
-...
-<disk type='file' device='disk'>
- <source file='[local-storage] Fedora11/Fedora11.vmdk'/>
- <target dev='sda' bus='scsi'/>
- <address type='drive' controller='0' bus='0'
unit='0'/>
-</disk>
-<controller type='scsi' index='0'
model='<strong>lsilogic</strong>'/>
-...
-</pre>
- <p>
- The controller element is supported <span class="since">since
0.8.2</span>.
- Prior to this <code><driver
name='lsilogic'/></code> was abused to
- specify the SCSI controller model. This attribute usage is deprecated now.
- </p>
-<pre>
-...
-<disk type='file' device='disk'>
- <driver name='<strong>lsilogic</strong>'/>
- <source file='[local-storage] Fedora11/Fedora11.vmdk'/>
- <target dev='sda' bus='scsi'/>
-</disk>
-...
-</pre>
-
-
- <h4>Network card models</h4>
- <dl>
- <dt><code>vlance</code></dt>
- <dd>
- AMD PCnet32 network card for older guests.
- </dd>
- <dt><code>vmxnet</code>, <code>vmxnet2</code>,
<code>vmxnet3</code></dt>
- <dd>
- Special VMware VMXnet network card, requires VMware tools inside
- the guest. See <a
href="https://kb.vmware.com/kb/1001805">VMware KB1001805</a>
- for details.
- </dd>
- <dt><code>e1000</code></dt>
- <dd>
- Intel E1000 network card for recent guests.
- </dd>
- </dl>
- <p>
- Here a domain XML snippet:
- </p>
-<pre>
-...
-<interface type='bridge'>
- <mac address='00:50:56:25:48:c7'/>
- <source bridge='VM Network'/>
- <model type='<strong>e1000</strong>'/>
-</interface>
-...
-</pre>
-
-
- <h2><a id="importexport">Import and export of domain XML
configs</a></h2>
- <p>
- The ESX driver currently supports a native config format known as
- <code>vmware-vmx</code> to handle VMware VMX configs.
- </p>
-
-
- <h3><a id="xmlimport">Converting from VMware VMX config to
domain XML config</a></h3>
- <p>
- The <code>virsh domxml-from-native</code> provides a way to convert
an
- existing VMware VMX config into a domain XML config that can then be
- used by libvirt.
- </p>
-<pre>
-$ cat > demo.vmx << EOF
-#!/usr/bin/vmware
-config.version = "8"
-virtualHW.version = "4"
-floppy0.present = "false"
-nvram = "Fedora11.nvram"
-deploymentPlatform = "windows"
-virtualHW.productCompatibility = "hosted"
-tools.upgrade.policy = "useGlobal"
-powerType.powerOff = "default"
-powerType.powerOn = "default"
-powerType.suspend = "default"
-powerType.reset = "default"
-displayName = "Fedora11"
-extendedConfigFile = "Fedora11.vmxf"
-scsi0.present = "true"
-scsi0.sharedBus = "none"
-scsi0.virtualDev = "lsilogic"
-memsize = "1024"
-scsi0:0.present = "true"
-scsi0:0.fileName =
"/vmfs/volumes/498076b2-02796c1a-ef5b-000ae484a6a3/Fedora11/Fedora11.vmdk"
-scsi0:0.deviceType = "scsi-hardDisk"
-ide0:0.present = "true"
-ide0:0.clientDevice = "true"
-ide0:0.deviceType = "cdrom-raw"
-ide0:0.startConnected = "false"
-ethernet0.present = "true"
-ethernet0.networkName = "VM Network"
-ethernet0.addressType = "vpx"
-ethernet0.generatedAddress = "00:50:56:91:48:c7"
-chipset.onlineStandby = "false"
-guestOSAltName = "Red Hat Enterprise Linux 5 (32-Bit)"
-guestOS = "rhel5"
-uuid.bios = "50 11 5e 16 9b dc 49 d7-f1 71 53 c4 d7 f9 17 10"
-snapshot.action = "keep"
-sched.cpu.min = "0"
-sched.cpu.units = "mhz"
-sched.cpu.shares = "normal"
-sched.mem.minsize = "0"
-sched.mem.shares = "normal"
-toolScripts.afterPowerOn = "true"
-toolScripts.afterResume = "true"
-toolScripts.beforeSuspend = "true"
-toolScripts.beforePowerOff = "true"
-scsi0:0.redo = ""
-tools.syncTime = "false"
-uuid.location = "56 4d b5 06 a2 bd fb eb-ae 86 f7 d8 49 27 d0 c4"
-sched.cpu.max = "unlimited"
-sched.swap.derivedName =
"/vmfs/volumes/498076b2-02796c1a-ef5b-000ae484a6a3/Fedora11/Fedora11-7de040d8.vswp"
-tools.remindInstall = "TRUE"
-EOF
-
-$ virsh -c
esx://example.com domxml-from-native vmware-vmx demo.vmx
-Enter username for
example.com [root]:
-Enter root password for
example.com:
-<domain type='vmware'>
- <name>Fedora11</name>
- <uuid>50115e16-9bdc-49d7-f171-53c4d7f91710</uuid>
- <memory>1048576</memory>
- <currentMemory>1048576</currentMemory>
- <vcpu>1</vcpu>
- <os>
- <type arch='i686'>hvm</type>
- </os>
- <clock offset='utc'/>
- <on_poweroff>destroy</on_poweroff>
- <on_reboot>restart</on_reboot>
- <on_crash>destroy</on_crash>
- <devices>
- <disk type='file' device='disk'>
- <source file='[local-storage] Fedora11/Fedora11.vmdk'/>
- <target dev='sda' bus='scsi'/>
- <address type='drive' controller='0' bus='0'
unit='0'/>
- </disk>
- <controller type='scsi' index='0'
model='lsilogic'/>
- <interface type='bridge'>
- <mac address='00:50:56:91:48:c7'/>
- <source bridge='VM Network'/>
- </interface>
- </devices>
-</domain>
-</pre>
-
-
- <h3><a id="xmlexport">Converting from domain XML config to
VMware VMX config</a></h3>
- <p>
- The <code>virsh domxml-to-native</code> provides a way to convert a
- domain XML config into a VMware VMX config.
- </p>
-<pre>
-$ cat > demo.xml << EOF
-<domain type='vmware'>
- <name>Fedora11</name>
- <uuid>50115e16-9bdc-49d7-f171-53c4d7f91710</uuid>
- <memory>1048576</memory>
- <currentMemory>1048576</currentMemory>
- <vcpu>1</vcpu>
- <os>
- <type arch='x86_64'>hvm</type>
- </os>
- <devices>
- <disk type='file' device='disk'>
- <source file='[local-storage] Fedora11/Fedora11.vmdk'/>
- <target dev='sda' bus='scsi'/>
- <address type='drive' controller='0' bus='0'
unit='0'/>
- </disk>
- <controller type='scsi' index='0'
model='lsilogic'/>
- <interface type='bridge'>
- <mac address='00:50:56:25:48:c7'/>
- <source bridge='VM Network'/>
- </interface>
- </devices>
-</domain>
-EOF
-
-$ virsh -c
esx://example.com domxml-to-native vmware-vmx demo.xml
-Enter username for
example.com [root]:
-Enter root password for
example.com:
-config.version = "8"
-virtualHW.version = "4"
-guestOS = "other-64"
-uuid.bios = "50 11 5e 16 9b dc 49 d7-f1 71 53 c4 d7 f9 17 10"
-displayName = "Fedora11"
-memsize = "1024"
-numvcpus = "1"
-scsi0.present = "true"
-scsi0.virtualDev = "lsilogic"
-scsi0:0.present = "true"
-scsi0:0.deviceType = "scsi-hardDisk"
-scsi0:0.fileName = "/vmfs/volumes/local-storage/Fedora11/Fedora11.vmdk"
-ethernet0.present = "true"
-ethernet0.networkName = "VM Network"
-ethernet0.connectionType = "bridged"
-ethernet0.addressType = "static"
-ethernet0.address = "00:50:56:25:48:C7"
-</pre>
-
-
- <h2><a id="xmlconfig">Example domain XML
configs</a></h2>
-
- <h3>Fedora11 on x86_64</h3>
-<pre>
-<domain type='vmware'>
- <name>Fedora11</name>
- <uuid>50115e16-9bdc-49d7-f171-53c4d7f91710</uuid>
- <memory>1048576</memory>
- <currentMemory>1048576</currentMemory>
- <vcpu>1</vcpu>
- <os>
- <type arch='x86_64'>hvm</type>
- </os>
- <devices>
- <disk type='file' device='disk'>
- <source file='[local-storage] Fedora11/Fedora11.vmdk'/>
- <target dev='sda' bus='scsi'/>
- <address type='drive' controller='0' bus='0'
unit='0'/>
- </disk>
- <controller type='scsi' index='0'/>
- <interface type='bridge'>
- <mac address='00:50:56:25:48:c7'/>
- <source bridge='VM Network'/>
- </interface>
- </devices>
-</domain>
-</pre>
-
-
- <h2><a id="migration">Migration</a></h2>
- <p>
- A migration cannot be initiated on an ESX server directly, a VMware
- vCenter is necessary for this. The <code>vcenter</code> query
- parameter must be set either to the hostname or IP address of the
- vCenter managing the ESX server or to <code>*</code>. Setting it
- to <code>*</code> causes the driver to connect to the vCenter known
to
- the ESX server. If the ESX server is not managed by a vCenter an error
- is reported.
- </p>
-<pre>
-esx://example.com/?vcenter=example-vcenter.com
-</pre>
- <p>
- Here's an example how to migrate the domain <code>Fedora11</code>
from
- ESX server <code>example-src.com</code> to ESX server
- <code>example-dst.com</code> implicitly involving vCenter
- <code>example-vcenter.com</code> using
<code>virsh</code>.
- </p>
-<pre>
-$ virsh -c
esx://example-src.com/?vcenter=* migrate Fedora11
esx://example-dst.com/?vcenter=*
-Enter username for
example-src.com [root]:
-Enter root password for
example-src.com:
-Enter username for
example-vcenter.com [administrator]:
-Enter administrator password for
example-vcenter.com:
-Enter username for
example-dst.com [root]:
-Enter root password for
example-dst.com:
-Enter username for
example-vcenter.com [administrator]:
-Enter administrator password for
example-vcenter.com:
-</pre>
- <p>
- <span class="since">Since 0.8.3</span> you can directly
connect to a vCenter.
- This simplifies migration a bit. Here's the same migration as above but
- using <code>vpx://</code> connections and assuming both ESX server
are in
- datacenter <code>dc1</code> and aren't part of a cluster.
- </p>
-<pre>
-$ virsh -c
vpx://example-vcenter.com/dc1/example-src.com migrate Fedora11
vpx://example-vcenter.com/dc1/example-dst.com
-Enter username for
example-vcenter.com [administrator]:
-Enter administrator password for
example-vcenter.com:
-Enter username for
example-vcenter.com [administrator]:
-Enter administrator password for
example-vcenter.com:
-</pre>
-
-
- <h2><a id="scheduler">Scheduler
configuration</a></h2>
- <p>
- The driver exposes the ESX CPU scheduler. The parameters listed below
- are available to control the scheduler.
- </p>
- <dl>
- <dt><code>reservation</code></dt>
- <dd>
- The amount of CPU resource in MHz that is guaranteed to be
- available to the domain. Valid values are 0 and greater.
- </dd>
- <dt><code>limit</code></dt>
- <dd>
- The CPU utilization of the domain will be
- limited to this value in MHz, even if more CPU resources are
- available. If the limit is set to -1, the CPU utilization of the
- domain is unlimited. If the limit is not set to -1, it must be
- greater than or equal to the reservation.
- </dd>
- <dt><code>shares</code></dt>
- <dd>
- Shares are used to determine relative CPU
- allocation between domains. In general, a domain with more shares
- gets proportionally more of the CPU resource. Valid values are 0
- and greater. The special values -1, -2 and -3 represent the
- predefined shares level <code>low</code>,
<code>normal</code> and
- <code>high</code>.
- </dd>
- </dl>
-
-
- <h2><a id="tools">VMware tools</a></h2>
- <p>
- Some actions require installed VMware tools. If the VMware tools are
- not installed in the guest and one of the actions below is to be
- performed the ESX server raises an error and the driver reports it.
- </p>
- <ul>
- <li>
- <code>virDomainGetHostname</code>
- </li>
- <li>
- <code>virDomainInterfaceAddresses</code> (only for the
- <code>VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT</code> source)
- </li>
- <li>
- <code>virDomainReboot</code>
- </li>
- <li>
- <code>virDomainShutdown</code>
- </li>
- </ul>
-
-
- <h2><a id="links">Links</a></h2>
- <ul>
- <li>
- <a
href="https://www.vmware.com/support/developer/vc-sdk/">
- VMware vSphere Web Services SDK Documentation
- </a>
- </li>
- <li>
- <a
href="https://www.vmware.com/pdf/esx3_memory.pdf">
- The Role of Memory in VMware ESX Server 3
- </a>
- </li>
- <li>
- <a
href="https://www.sanbarrow.com/vmx.html">
- VMware VMX config parameters
- </a>
- </li>
- <li>
- <a
href="https://www.vmware.com/pdf/vsp_4_pvscsi_perf.pdf">
- VMware ESX 4.0 PVSCSI Storage Performance
- </a>
- </li>
- </ul>
-</body></html>
diff --git a/docs/drvesx.rst b/docs/drvesx.rst
new file mode 100644
index 0000000000..7b35492d21
--- /dev/null
+++ b/docs/drvesx.rst
@@ -0,0 +1,681 @@
+.. role:: since
+
+============================
+VMware ESX hypervisor driver
+============================
+
+.. contents::
+
+The libvirt VMware ESX driver can manage VMware ESX/ESXi 3.5/4.x/5.x and VMware
+GSX 2.0, also called VMware Server 2.0, and possibly later versions.
+:since:`Since 0.8.3` the driver can also connect to a VMware vCenter 2.5/4.x/5.x
+(VPX).
+
+Project Links
+-------------
+
+- The `VMware ESX and GSX <
https://www.vmware.com/>`__ hypervisors
+
+Deployment pre-requisites
+-------------------------
+
+None. Any out-of-the-box installation of VPX/ESX(i)/GSX should work. No
+preparations are required on the server side, no libvirtd must be installed on
+the ESX server. The driver uses version 2.5 of the remote, SOAP based `VMware
+Virtual Infrastructure
+API
<
https://www.vmware.com/support/developer/vc-sdk/visdk25pubs/ReferenceGuid...
+(VI API) to communicate with the ESX server, like the VMware Virtual
+Infrastructure Client (VI client) does. Since version 4.0 this API is called
+`VMware vSphere
+API
<
https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGui....
+
+Connections to the VMware ESX driver
+------------------------------------
+
+Some example remote connection URIs for the driver are:
+
+::
+
+
vpx://example-vcenter.com/dc1/srv1 (VPX over HTTPS, select ESX server
'srv1' in datacenter 'dc1')
+
esx://example-esx.com (ESX over HTTPS)
+
gsx://example-gsx.com (GSX over HTTPS)
+
esx://example-esx.com/?transport=http (ESX over HTTP)
+
esx://example-esx.com/?no_verify=1 (ESX over HTTPS, but doesn't verify the
server's SSL certificate)
+
+**Note**: In contrast to other drivers, the ESX driver is a client-side-only
+driver. It connects to the ESX server using HTTP(S). Therefore, the `remote
+transport mechanism <remote.html>`__ provided by the remote driver and libvirtd
+will not work, and you cannot use URIs like ``esx+ssh://example.com``.
+
+URI Format
+~~~~~~~~~~
+
+URIs have this general form (``[...]`` marks an optional part).
+
+::
+
+
type://[username@]hostname[:port]/[[folder/...]datacenter/[folder/...][cluster/]server][?extraparameters]
+
+The ``type://`` is either ``esx://`` or ``gsx://`` or ``vpx://`` :since:`since
+0.8.3` . The driver selects the default port depending on the ``type://``. For
+``esx://`` and ``vpx://`` the default HTTPS port is 443, for ``gsx://`` it is
+8333. If the port parameter is given, it overrides the default port.
+
+A ``vpx://`` connection is currently restricted to a single ESX server. This
+might be relaxed in the future. The path part of the URI is used to specify the
+datacenter and the ESX server in it. If the ESX server is part of a cluster then
+the cluster has to be specified too.
+
+An example: ESX server ``example-esx.com`` is managed by vCenter
+``example-vcenter.com`` and part of cluster ``cluster1``. This cluster is part
+of datacenter ``dc1``.
+
+::
+
+
vpx://example-vcenter.com/dc1/cluster1/example-esx.com
+
+Datacenters and clusters can be organized in folders, those have to be specified
+as well. The driver can handle folders :since:`since 0.9.7` .
+
+::
+
+
vpx://example-vcenter.com/folder1/dc1/folder2/example-esx.com
+
+Extra parameters
+^^^^^^^^^^^^^^^^
+
+Extra parameters can be added to a URI as part of the query string (the part
+following ``?``). A single parameter is formed by a ``name=value`` pair.
+Multiple parameters are separated by ``&``.
+
+::
+
+ ?no_verify=1&auto_answer=1&proxy=socks://example-proxy.com:23456
+
+The driver understands the extra parameters shown below.
+
++-----------------+-----------------------------+-----------------------------+
+| Name | Values | Meaning |
++=================+=============================+=============================+
+| ``transport`` | ``http`` or ``https`` | Overrides the default HTTPS |
+| | | transport. For ``esx://`` |
+| | | and ``vpx://`` the default |
+| | | HTTP port is 80, for |
+| | | ``gsx://`` it is 8222. |
++-----------------+-----------------------------+-----------------------------+
+| ``vcenter`` | Hostname of a VMware | In order to perform a |
+| | vCenter or ``*`` | migration the driver needs |
+| | | to know the VMware vCenter |
+| | | for the ESX server. If set |
+| | | to ``*``, the driver |
+| | | connects to the vCenter |
+| | | known to the ESX server. |
+| | | This parameter in useful |
+| | | when connecting to an ESX |
+| | | server only. |
++-----------------+-----------------------------+-----------------------------+
+| ``no_verify`` | ``0`` or ``1`` | If set to 1, this disables |
+| | | libcurl client checks of |
+| | | the server's SSL |
+| | | certificate. The default |
+| | | value is 0. See the |
+| | | `Certificates for |
+| | | HTTPS <#certificates>`__ |
+| | | section for details. |
++-----------------+-----------------------------+-----------------------------+
+| ``auto_answer`` | ``0`` or ``1`` | If set to 1, the driver |
+| | | answers all |
+| | | `questions <#questions>`__ |
+| | | with the default answer. If |
+| | | set to 0, questions are |
+| | | reported as errors. The |
+| | | default value is 0. |
+| | | :since:`Since 0.7.5` . |
++-----------------+-----------------------------+-----------------------------+
+| ``proxy`` | [type://]hostname[:port] | Allows to specify a proxy |
+| | | for HTTP and HTTPS |
+| | | communication. |
+| | | :since:`Since 0.8.2` . The |
+| | | optional ``type`` part may |
+| | | be one of: ``http``, |
+| | | ``socks``, ``socks4``, |
+| | | ``socks4a`` or ``socks5``. |
+| | | The default is ``http`` and |
+| | | ``socks`` is synonymous for |
+| | | ``socks5``. The optional |
+| | | ``port`` allows to override |
+| | | the default port 1080. |
++-----------------+-----------------------------+-----------------------------+
+
+Authentication
+~~~~~~~~~~~~~~
+
+In order to perform any useful operation the driver needs to log into the ESX
+server. Therefore, only ``virConnectOpenAuth`` can be used to connect to an ESX
+server, ``virConnectOpen`` and ``virConnectOpenReadOnly`` don't work. To log
+into an ESX server or vCenter the driver will request credentials using the
+callback passed to the ``virConnectOpenAuth`` function. The driver passes the
+hostname as challenge parameter to the callback. This enables the callback to
+distinguish between requests for ESX server and vCenter.
+
+**Note**: During the ongoing driver development, testing is done using an
+unrestricted ``root`` account. Problems may occur if you use a restricted
+account. Detailed testing with restricted accounts has not been done yet.
+
+Certificates for HTTPS
+~~~~~~~~~~~~~~~~~~~~~~
+
+By default the ESX driver uses HTTPS to communicate with an ESX server. Proper
+HTTPS communication requires correctly configured SSL certificates. This
+certificates are different from the ones libvirt uses for `secure communication
+over TLS <remote.html>`__ to a libvirtd one a remote server.
+
+By default the driver tries to verify the server's SSL certificate using the CA
+certificate pool installed on your client computer. With an out-of-the-box
+installed ESX server this won't work, because a newly installed ESX server uses
+auto-generated self-signed certificates. Those are signed by a CA certificate
+that is typically not known to your client computer and libvirt will report an
+error like this one:
+
+::
+
+ error: internal error curl_easy_perform() returned an error: Peer certificate cannot
be authenticated with known CA certificates (60)
+
+Where are two ways to solve this problem:
+
+- Use the ``no_verify=1`` `extra parameter <#extraparams>`__ to disable server
+ certificate verification.
+- Generate new SSL certificates signed by a CA known to your client computer
+ and replace the original ones on your ESX server. See the section *Replace a
+ Default Certificate with a CA-Signed Certificate* in the `ESX Configuration
+ Guide <
https://www.vmware.com/pdf/vsphere4/r40/vsp_40_esx_server_config.pdf>`__
+
+Connection problems
+~~~~~~~~~~~~~~~~~~~
+
+There are also other causes for connection problems than the `HTTPS
+certificate <#certificates>`__ related ones.
+
+- As stated before the ESX driver doesn't need the `remote transport
+ mechanism <remote.html>`__ provided by the remote driver and libvirtd, nor
+ does the ESX driver support it. Therefore, using an URI including a transport
+ in the scheme won't work. Only `URIs as described <#uriformat>`__ are
+ supported by the ESX driver. Here's a collection of possible error messages:
+
+ ::
+
+ $ virsh -c
esx+tcp://example.com/
+ error: unable to connect to libvirtd at 'example.com': Connection refused
+
+ ::
+
+ $ virsh -c
esx+tls://example.com/
+ error: Cannot access CA certificate '/etc/pki/CA/cacert.pem': No such file
or directory
+
+ ::
+
+ $ virsh -c
esx+ssh://example.com/
+ error: cannot recv data: ssh: connect to host
example.com port 22: Connection
refused
+
+ ::
+
+ $ virsh -c
esx+ssh://example.com/
+ error: cannot recv data: Resource temporarily unavailable
+
+- :since:`Since 0.7.0` libvirt contains the ESX driver. Earlier versions of
+ libvirt will report a misleading error about missing certificates when you
+ try to connect to an ESX server.
+
+ ::
+
+ $ virsh -c
esx://example.com/
+ error: Cannot access CA certificate '/etc/pki/CA/cacert.pem': No such file
or directory
+
+ Don't let this error message confuse you. Setting up certificates as
+ described on the `remote transport
+ mechanism <remote.html#Remote_certificates>`__ page does not help, as this is
+ not a certificate related problem.
+
+ To fix this problem you need to update your libvirt to 0.7.0 or newer. You
+ may also see this error when you use a libvirt version that contains the ESX
+ driver but you or your distro disabled the ESX driver during compilation.
+ :since:`Since 0.8.3` the error message has been improved in this case:
+
+ ::
+
+ $ virsh -c
esx://example.com/
+ error: invalid argument in libvirt was built without the 'esx' driver
+
+Questions blocking tasks
+------------------------
+
+Some methods of the VI API start tasks, for example ``PowerOnVM_Task()``. Such
+tasks may be blocked by questions if the ESX server detects an issue with the
+domain that requires user interaction. The ESX driver cannot prompt the user to
+answer a question, libvirt doesn't have an API for something like this.
+
+The VI API provides the ``AnswerVM()`` method to programmatically answer a
+questions. So the driver has two options how to handle such a situation: either
+answer the questions with the default answer or report the question as an error
+and cancel the blocked task if possible. The `auto_answer <#uriformat>`__ query
+parameter controls the answering behavior.
+
+Specialities in the domain XML config
+-------------------------------------
+
+There are several specialities in the domain XML config for ESX domains.
+
+Restrictions
+~~~~~~~~~~~~
+
+There are some restrictions for some values of the domain XML config. The driver
+will complain if this restrictions are violated.
+
+- Memory size has to be a multiple of 4096
+- Number of virtual CPU has to be 1 or a multiple of 2. :since:`Since 4.10.0`
+ any number of vCPUs is supported.
+- Valid MAC address prefixes are ``00:0c:29`` and ``00:50:56``. :since:`Since
+ 0.7.6` arbitrary `MAC addresses <#macaddresses>`__ are supported.
+
+Datastore references
+~~~~~~~~~~~~~~~~~~~~
+
+Storage is managed in datastores. VMware uses a special path format to reference
+files in a datastore. Basically, the datastore name is put into squared braces
+in front of the path.
+
+::
+
+ [datastore] directory/filename
+
+To define a new domain the driver converts the domain XML into a VMware VMX file
+and uploads it to a datastore known to the ESX server. Because multiple
+datastores may be known to an ESX server the driver needs to decide to which
+datastore the VMX file should be uploaded. The driver deduces this information
+from the path of the source of the first file-based harddisk listed in the
+domain XML.
+
+MAC addresses
+~~~~~~~~~~~~~
+
+VMware has registered two MAC address prefixes for domains: ``00:0c:29`` and
+``00:50:56``. These prefixes are split into ranges for different purposes.
+
++--------------------------------------+--------------------------------------+
+| Range | Purpose |
++======================================+======================================+
+| ``00:0c:29:00:00:00`` - | An ESX server autogenerates MAC |
+| ``00:0c:29:ff:ff:ff`` | addresses from this range if the VMX |
+| | file doesn't contain a MAC address |
+| | when trying to start a domain. |
++--------------------------------------+--------------------------------------+
+| ``00:50:56:00:00:00`` - | MAC addresses from this range can by |
+| ``00:50:56:3f:ff:ff`` | manually assigned by the user in the |
+| | VI client. |
++--------------------------------------+--------------------------------------+
+| ``00:50:56:80:00:00`` - | A VI client autogenerates MAC |
+| ``00:50:56:bf:ff:ff`` | addresses from this range for newly |
+| | defined domains. |
++--------------------------------------+--------------------------------------+
+
+The VMX files generated by the ESX driver always contain a MAC address, because
+libvirt generates a random one if an interface element in the domain XML file
+lacks a MAC address. :since:`Since 0.7.6` the ESX driver sets the prefix for
+generated MAC addresses to ``00:0c:29``. Before 0.7.6 the ``00:50:56`` prefix
+was used. Sometimes this resulted in the generation of out-of-range MAC address
+that were rejected by the ESX server.
+
+Also :since:`since 0.7.6` every MAC address outside this ranges can be used. For
+such MAC addresses the ESX server-side check is disabled in the VMX file to stop
+the ESX server from rejecting out-of-predefined-range MAC addresses.
+
+::
+
+ ethernet0.checkMACAddress = "false"
+
+:since:`Since 6.6.0` , one can force libvirt to keep the provided MAC address
+when it's in the reserved VMware range by adding a ``type="static"``
attribute
+to the ``<mac/>`` element. Note that this attribute is useless if the provided
+MAC address is outside of the reserved VMWare ranges.
+
+Available hardware
+~~~~~~~~~~~~~~~~~~
+
+VMware ESX supports different models of SCSI controllers and network cards.
+
+SCSI controller models
+^^^^^^^^^^^^^^^^^^^^^^
+
+``auto``
+ This isn't an actual controller model. If specified the ESX driver tries to
+ detect the SCSI controller model referenced in the ``.vmdk`` file and use it.
+ Autodetection fails when a SCSI controller has multiple disks attached and
+ the SCSI controller models referenced in the ``.vmdk`` files are
+ inconsistent. :since:`Since 0.8.3`
+``buslogic``
+ BusLogic SCSI controller for older guests.
+``lsilogic``
+ LSI Logic SCSI controller for recent guests.
+``lsisas1068``
+ LSI Logic SAS 1068 controller. :since:`Since 0.8.0`
+``vmpvscsi``
+ Special VMware Paravirtual SCSI controller, requires VMware tools inside the
+ guest. See `VMware KB1010398 <
https://kb.vmware.com/kb/1010398>`__ for
+ details. :since:`Since 0.8.3`
+
+Here a domain XML snippet:
+
+::
+
+ ...
+ <disk type='file' device='disk'>
+ <source file='[local-storage] Fedora11/Fedora11.vmdk'/>
+ <target dev='sda' bus='scsi'/>
+ <address type='drive' controller='0' bus='0'
unit='0'/>
+ </disk>
+ <controller type='scsi' index='0' model='lsilogic'/>
+ ...
+
+The controller element is supported :since:`since 0.8.2` . Prior to this
+``<driver name='lsilogic'/>`` was abused to specify the SCSI controller
model.
+This attribute usage is deprecated now.
+
+::
+
+ ...
+ <disk type='file' device='disk'>
+ <driver name='lsilogic'/>
+ <source file='[local-storage] Fedora11/Fedora11.vmdk'/>
+ <target dev='sda' bus='scsi'/>
+ </disk>
+ ...
+
+Network card models
+^^^^^^^^^^^^^^^^^^^
+
+``vlance``
+ AMD PCnet32 network card for older guests.
+``vmxnet``, ``vmxnet2``, ``vmxnet3``
+ Special VMware VMXnet network card, requires VMware tools inside the guest.
+ See `VMware KB1001805 <
https://kb.vmware.com/kb/1001805>`__ for details.
+``e1000``
+ Intel E1000 network card for recent guests.
+
+Here a domain XML snippet:
+
+::
+
+ ...
+ <interface type='bridge'>
+ <mac address='00:50:56:25:48:c7'/>
+ <source bridge='VM Network'/>
+ <model type='e1000'/>
+ </interface>
+ ...
+
+Import and export of domain XML configs
+---------------------------------------
+
+The ESX driver currently supports a native config format known as ``vmware-vmx``
+to handle VMware VMX configs.
+
+Converting from VMware VMX config to domain XML config
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``virsh domxml-from-native`` provides a way to convert an existing VMware
+VMX config into a domain XML config that can then be used by libvirt.
+
+::
+
+ $ cat > demo.vmx << EOF
+ #!/usr/bin/vmware
+ config.version = "8"
+ virtualHW.version = "4"
+ floppy0.present = "false"
+ nvram = "Fedora11.nvram"
+ deploymentPlatform = "windows"
+ virtualHW.productCompatibility = "hosted"
+ tools.upgrade.policy = "useGlobal"
+ powerType.powerOff = "default"
+ powerType.powerOn = "default"
+ powerType.suspend = "default"
+ powerType.reset = "default"
+ displayName = "Fedora11"
+ extendedConfigFile = "Fedora11.vmxf"
+ scsi0.present = "true"
+ scsi0.sharedBus = "none"
+ scsi0.virtualDev = "lsilogic"
+ memsize = "1024"
+ scsi0:0.present = "true"
+ scsi0:0.fileName =
"/vmfs/volumes/498076b2-02796c1a-ef5b-000ae484a6a3/Fedora11/Fedora11.vmdk"
+ scsi0:0.deviceType = "scsi-hardDisk"
+ ide0:0.present = "true"
+ ide0:0.clientDevice = "true"
+ ide0:0.deviceType = "cdrom-raw"
+ ide0:0.startConnected = "false"
+ ethernet0.present = "true"
+ ethernet0.networkName = "VM Network"
+ ethernet0.addressType = "vpx"
+ ethernet0.generatedAddress = "00:50:56:91:48:c7"
+ chipset.onlineStandby = "false"
+ guestOSAltName = "Red Hat Enterprise Linux 5 (32-Bit)"
+ guestOS = "rhel5"
+ uuid.bios = "50 11 5e 16 9b dc 49 d7-f1 71 53 c4 d7 f9 17 10"
+ snapshot.action = "keep"
+ sched.cpu.min = "0"
+ sched.cpu.units = "mhz"
+ sched.cpu.shares = "normal"
+ sched.mem.minsize = "0"
+ sched.mem.shares = "normal"
+ toolScripts.afterPowerOn = "true"
+ toolScripts.afterResume = "true"
+ toolScripts.beforeSuspend = "true"
+ toolScripts.beforePowerOff = "true"
+ scsi0:0.redo = ""
+ tools.syncTime = "false"
+ uuid.location = "56 4d b5 06 a2 bd fb eb-ae 86 f7 d8 49 27 d0 c4"
+ sched.cpu.max = "unlimited"
+ sched.swap.derivedName =
"/vmfs/volumes/498076b2-02796c1a-ef5b-000ae484a6a3/Fedora11/Fedora11-7de040d8.vswp"
+ tools.remindInstall = "TRUE"
+ EOF
+
+ $ virsh -c
esx://example.com domxml-from-native vmware-vmx demo.vmx
+ Enter username for
example.com [root]:
+ Enter root password for
example.com:
+ <domain type='vmware'>
+ <name>Fedora11</name>
+ <uuid>50115e16-9bdc-49d7-f171-53c4d7f91710</uuid>
+ <memory>1048576</memory>
+ <currentMemory>1048576</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch='i686'>hvm</type>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <disk type='file' device='disk'>
+ <source file='[local-storage] Fedora11/Fedora11.vmdk'/>
+ <target dev='sda' bus='scsi'/>
+ <address type='drive' controller='0' bus='0'
unit='0'/>
+ </disk>
+ <controller type='scsi' index='0'
model='lsilogic'/>
+ <interface type='bridge'>
+ <mac address='00:50:56:91:48:c7'/>
+ <source bridge='VM Network'/>
+ </interface>
+ </devices>
+ </domain>
+
+Converting from domain XML config to VMware VMX config
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``virsh domxml-to-native`` provides a way to convert a domain XML config
+into a VMware VMX config.
+
+::
+
+ $ cat > demo.xml << EOF
+ <domain type='vmware'>
+ <name>Fedora11</name>
+ <uuid>50115e16-9bdc-49d7-f171-53c4d7f91710</uuid>
+ <memory>1048576</memory>
+ <currentMemory>1048576</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch='x86_64'>hvm</type>
+ </os>
+ <devices>
+ <disk type='file' device='disk'>
+ <source file='[local-storage] Fedora11/Fedora11.vmdk'/>
+ <target dev='sda' bus='scsi'/>
+ <address type='drive' controller='0' bus='0'
unit='0'/>
+ </disk>
+ <controller type='scsi' index='0'
model='lsilogic'/>
+ <interface type='bridge'>
+ <mac address='00:50:56:25:48:c7'/>
+ <source bridge='VM Network'/>
+ </interface>
+ </devices>
+ </domain>
+ EOF
+
+ $ virsh -c
esx://example.com domxml-to-native vmware-vmx demo.xml
+ Enter username for
example.com [root]:
+ Enter root password for
example.com:
+ config.version = "8"
+ virtualHW.version = "4"
+ guestOS = "other-64"
+ uuid.bios = "50 11 5e 16 9b dc 49 d7-f1 71 53 c4 d7 f9 17 10"
+ displayName = "Fedora11"
+ memsize = "1024"
+ numvcpus = "1"
+ scsi0.present = "true"
+ scsi0.virtualDev = "lsilogic"
+ scsi0:0.present = "true"
+ scsi0:0.deviceType = "scsi-hardDisk"
+ scsi0:0.fileName = "/vmfs/volumes/local-storage/Fedora11/Fedora11.vmdk"
+ ethernet0.present = "true"
+ ethernet0.networkName = "VM Network"
+ ethernet0.connectionType = "bridged"
+ ethernet0.addressType = "static"
+ ethernet0.address = "00:50:56:25:48:C7"
+
+Example domain XML configs
+--------------------------
+
+Fedora11 on x86_64
+~~~~~~~~~~~~~~~~~~
+
+::
+
+ <domain type='vmware'>
+ <name>Fedora11</name>
+ <uuid>50115e16-9bdc-49d7-f171-53c4d7f91710</uuid>
+ <memory>1048576</memory>
+ <currentMemory>1048576</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch='x86_64'>hvm</type>
+ </os>
+ <devices>
+ <disk type='file' device='disk'>
+ <source file='[local-storage] Fedora11/Fedora11.vmdk'/>
+ <target dev='sda' bus='scsi'/>
+ <address type='drive' controller='0' bus='0'
unit='0'/>
+ </disk>
+ <controller type='scsi' index='0'/>
+ <interface type='bridge'>
+ <mac address='00:50:56:25:48:c7'/>
+ <source bridge='VM Network'/>
+ </interface>
+ </devices>
+ </domain>
+
+Migration
+---------
+
+A migration cannot be initiated on an ESX server directly, a VMware vCenter is
+necessary for this. The ``vcenter`` query parameter must be set either to the
+hostname or IP address of the vCenter managing the ESX server or to ``*``.
+Setting it to ``*`` causes the driver to connect to the vCenter known to the ESX
+server. If the ESX server is not managed by a vCenter an error is reported.
+
+::
+
+
esx://example.com/?vcenter=example-vcenter.com
+
+Here's an example how to migrate the domain ``Fedora11`` from ESX server
+``example-src.com`` to ESX server ``example-dst.com`` implicitly involving
+vCenter ``example-vcenter.com`` using ``virsh``.
+
+::
+
+ $ virsh -c
esx://example-src.com/?vcenter=* migrate Fedora11
esx://example-dst.com/?vcenter=*
+ Enter username for
example-src.com [root]:
+ Enter root password for
example-src.com:
+ Enter username for
example-vcenter.com [administrator]:
+ Enter administrator password for
example-vcenter.com:
+ Enter username for
example-dst.com [root]:
+ Enter root password for
example-dst.com:
+ Enter username for
example-vcenter.com [administrator]:
+ Enter administrator password for
example-vcenter.com:
+
+:since:`Since 0.8.3` you can directly connect to a vCenter. This simplifies
+migration a bit. Here's the same migration as above but using ``vpx://``
+connections and assuming both ESX server are in datacenter ``dc1`` and aren't
+part of a cluster.
+
+::
+
+ $ virsh -c
vpx://example-vcenter.com/dc1/example-src.com migrate Fedora11
vpx://example-vcenter.com/dc1/example-dst.com
+ Enter username for
example-vcenter.com [administrator]:
+ Enter administrator password for
example-vcenter.com:
+ Enter username for
example-vcenter.com [administrator]:
+ Enter administrator password for
example-vcenter.com:
+
+Scheduler configuration
+-----------------------
+
+The driver exposes the ESX CPU scheduler. The parameters listed below are
+available to control the scheduler.
+
+``reservation``
+ The amount of CPU resource in MHz that is guaranteed to be available to the
+ domain. Valid values are 0 and greater.
+``limit``
+ The CPU utilization of the domain will be limited to this value in MHz, even
+ if more CPU resources are available. If the limit is set to -1, the CPU
+ utilization of the domain is unlimited. If the limit is not set to -1, it
+ must be greater than or equal to the reservation.
+``shares``
+ Shares are used to determine relative CPU allocation between domains. In
+ general, a domain with more shares gets proportionally more of the CPU
+ resource. Valid values are 0 and greater. The special values -1, -2 and -3
+ represent the predefined shares level ``low``, ``normal`` and ``high``.
+
+VMware tools
+------------
+
+Some actions require installed VMware tools. If the VMware tools are not
+installed in the guest and one of the actions below is to be performed the ESX
+server raises an error and the driver reports it.
+
+- ``virDomainGetHostname``
+- ``virDomainInterfaceAddresses`` (only for the
+ ``VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT`` source)
+- ``virDomainReboot``
+- ``virDomainShutdown``
+
+Links
+-----
+
+- `VMware vSphere Web Services SDK
+ Documentation <
https://www.vmware.com/support/developer/vc-sdk/>`__
+- `The Role of Memory in VMware ESX Server
+ 3 <
https://www.vmware.com/pdf/esx3_memory.pdf>`__
+- `VMware VMX config parameters <
https://www.sanbarrow.com/vmx.html>`__
+- `VMware ESX 4.0 PVSCSI Storage
+ Performance <
https://www.vmware.com/pdf/vsp_4_pvscsi_perf.pdf>`__
diff --git a/docs/meson.build b/docs/meson.build
index a6c3077f25..0465c22274 100644
--- a/docs/meson.build
+++ b/docs/meson.build
@@ -22,7 +22,6 @@ docs_html_in_files = [
'csharp',
'dbus',
'docs',
- 'drvesx',
'drvhyperv',
'drvlxc',
'drvnodedev',
@@ -80,6 +79,7 @@ docs_rst_files = [
'drivers',
'drvbhyve',
'drvch',
+ 'drvesx',
'drvqemu',
'errors',
'formatbackup',
--
2.35.1