libvirt/src/esx
Matthias Bolte 77408cc0e1 esx: Add nwfilter driver stub
This stops libvirt trying to connect to a non-existing libvirtd on the
ESX server in order to find a nwfilter driver.
2010-04-15 19:52:38 +02:00
..
.gitignore esx: Generate most SOAP mapping and improve inheritance handling 2010-03-31 13:36:54 +02:00
esx_device_monitor.c esx: Mark error messages for translation 2010-04-06 19:24:24 +02:00
esx_device_monitor.h build: consistently indent preprocessor directives 2010-03-09 19:22:28 +01:00
esx_driver.c esx: Add nwfilter driver stub 2010-04-15 19:52:38 +02:00
esx_driver.h esx: Cleanup file header comments 2010-03-23 01:28:08 +01:00
esx_interface_driver.c esx: Mark error messages for translation 2010-04-06 19:24:24 +02:00
esx_interface_driver.h esx: Cleanup file header comments 2010-03-23 01:28:08 +01:00
esx_network_driver.c esx: Mark error messages for translation 2010-04-06 19:24:24 +02:00
esx_network_driver.h esx: Cleanup file header comments 2010-03-23 01:28:08 +01:00
esx_nwfilter_driver.c esx: Add nwfilter driver stub 2010-04-15 19:52:38 +02:00
esx_nwfilter_driver.h esx: Add nwfilter driver stub 2010-04-15 19:52:38 +02:00
esx_private.h esx: Mark error messages for translation 2010-04-06 19:24:24 +02:00
esx_secret_driver.c esx: Mark error messages for translation 2010-04-06 19:24:24 +02:00
esx_secret_driver.h esx: Cleanup file header comments 2010-03-23 01:28:08 +01:00
esx_storage_driver.c esx: Mark error messages for translation 2010-04-06 19:24:24 +02:00
esx_storage_driver.h build: consistently indent preprocessor directives 2010-03-09 19:22:28 +01:00
esx_util.c esx: Mark error messages for translation 2010-04-06 19:24:24 +02:00
esx_util.h esx: Cleanup file header comments 2010-03-23 01:28:08 +01:00
esx_vi_generator.input esx: Extend esx_vi_generator.py to cover methods too 2010-04-14 12:01:33 +02:00
esx_vi_generator.py esx: Extend esx_vi_generator.py to cover methods too 2010-04-14 12:01:33 +02:00
esx_vi_methods.c esx: Extend esx_vi_generator.py to cover methods too 2010-04-14 12:01:33 +02:00
esx_vi_methods.h build: fix recent 'make syntax-check' failure 2010-04-14 11:23:09 -06:00
esx_vi_types.c esx: Add domain snapshot support 2010-04-08 21:54:43 +02:00
esx_vi_types.h esx: Add domain snapshot support 2010-04-08 21:54:43 +02:00
esx_vi.c esx: Extend esx_vi_generator.py to cover methods too 2010-04-14 12:01:33 +02:00
esx_vi.h esx: Add domain snapshot support 2010-04-08 21:54:43 +02:00
esx_vmx.c esxVMX_GatherSCSIControllers: avoid NULL dereference 2010-04-14 11:59:18 +02:00
esx_vmx.h esx: Cleanup file header comments 2010-03-23 01:28:08 +01:00
README esx: Add more links to external documentation 2009-12-18 19:29:39 +01:00

Some links to relevant documentation
====================================


VI/vSphere API:   http://www.vmware.com/support/developer/vc-sdk/visdk25pubs/ReferenceGuide/
                  http://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/
VMX config:       http://www.sanbarrow.com/vmx.html
CPUID:            http://www.sandpile.org/ia32/cpuid.htm
Memory model:     http://www.vmware.com/pdf/esx3_memory.pdf
                  http://www.vmware.com/pdf/usenix_resource_mgmt.pdf




Automatic question handling
===========================


What is a question in the ESX context?
--------------------------------------

The VI API contains methods that start tasks, for example PowerOnVM_Task(). Such
tasks may be blocked by questions if the ESX host detects an issue with the
virtual machine that requires user interaction.

An example: If a virtual machine has a serial port that is realized via a file,
the ESX host will ask a question on power-on of this virtual machine whether
new content should be appended to this file or the file should be replaced.
Until this question is answered the power-on task is blocked and the virtual
machine won't get powered on.

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 such questions. A question comes together with a list
of possible answers. One of this answers is marked as the default one. For all
questions I've seen so far the default answer is always a non-destructive one.

There are two options how to handle a question that is blocking a task: either
answer it automatically or report it as error and try to cancel the blocked
task.

The auto_answer query parameter defines how the driver should handle questions.
Possible values are 0 for the report-error-and-try-to-cancel option and 1 for
the automatic-answer option.


How is automatic question handling implemented?
-----------------------------------------------

Before any new task is started the driver checks if there is a pending task
blocked by a question. If automatic question handling is disabled the driver
reports an error that includes the question and returns from the driver
function. If automatic question handling is enabled the driver answers the
question with the default answer and returns from the driver function.

In both cases the actual desired task is not started. If the question was not
answered the blocked task is still blocked and because task can't be executed
in parallel in general it's of no use to start yet another task. If the
question was answered the blocked task may already perform the desired action
and one must wait for its completion, so it's of no use to start yet another
task.

If there is no question blocking a task or another pending task that had not
finished yet the driver starts the desired task and waits for its completion.
While polling for status updates of the task it also checks for question that
may have been triggered by the current task and handles them according to the
value of the auto_answer query parameter. If automatic question handling is
enabled the driver answers the question with the default answer and continues
polling for status updates. If automatic question handling is disabled the
driver reports an error that includes the question, tries to cancel the blocked
task and returns from the driver function.

It tries to cancel the blocked task, but this may not be possible, because
there are task like the power-on task that is marked as non-cancelable. So the
driver may leave blocked tasks behind if automatic question handling is
disabled.