core-admin/doc/qubes-vm/index.rst
Wojtek Porczyk 01319e391f qubes: port netvm
From now, there are no separate NetVM and ProxyVM class, but property
"provides_network".
2016-03-03 00:46:05 +01:00

98 lines
2.8 KiB
ReStructuredText

:py:mod:`qubes.vm` -- Different Virtual Machine types
=====================================================
Qubes is composed of several virtual machines that are interconnected in
several ways. From now on they will be called „domains”, as they may not
actually be true virtual machines -- we plan to support LXC containers for
example. Because of Xen-only legacy of Qubes code, it is custom to refer to them
in long/plural as ``domains`` and in short/singular as ``vm``.
Domain object
-------------
There are couple of programming objects that refer to domain. The main is the
instance of :py:class:`qubes.vm.QubesVM`. This is the main „porcelain” object,
which carries other objects and supplies convenience methods like
:py:meth:`qubes.vm.qubesvm.QubesVM.start`. This class is actually divided in
two, the :py:class:`qubes.vm.qubesvm.QubesVM` cares about Qubes-specific
actions, that are more or less directly related to security model. It is
intended to be easily auditable by non-expert programmers (ie. we don't use
Python's magic there). The second class is its parent,
:py:class:`qubes.vm.BaseVM`, which is concerned about technicalities like XML
serialising/deserialising. It is of less concern to threat model auditors, but
still relevant to overall security of the Qubes OS. It is written for
programmers by programmers.
The second object is the XML node that refers to the domain. It can be accessed
as :py:attr:`Qubes.vm.BaseVM.xml` attribute of the domain object. The third one
is :py:attr:`Qubes.vm.qubesvm.QubesVM.libvirt_domain` object for directly
interacting with libvirt. Those objects are intended to be used from core and/or
plugins, but not directly by user or from qvm-tools. They are however public, so
there are no restrictions.
Domain classes
--------------
There are several different types of VM, because not every Qubes domain is equal
-- some of them perform specific functions, like NetVM; others have different
life cycle, like DisposableVM. For that, different domains have different Python
classes. They are all defined in this package, generally one class per module,
but some modules contain private globals that serve this particular class.
Package contents
----------------
Main public classes
^^^^^^^^^^^^^^^^^^^
.. autoclass:: qubes.vm.BaseVM
:members:
:show-inheritance:
Helper classes and functions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. autoclass:: qubes.vm.BaseVMMeta
:members:
:show-inheritance:
.. autoclass:: qubes.vm.DeviceCollection
:members:
:show-inheritance:
.. autoclass:: qubes.vm.DeviceManager
:members:
:show-inheritance:
Particular VM classes
^^^^^^^^^^^^^^^^^^^^^
Main types:
.. toctree::
:maxdepth: 1
qubesvm
appvm
templatevm
Special VM types:
.. toctree::
:maxdepth: 1
dispvm
adminvm
HVMs:
.. toctree::
:maxdepth: 1
hvm
.. vim: ts=3 sw=3 et