various improvements
This commit is contained in:
		
							
								
								
									
										1
									
								
								docs/source/_static/custom.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								docs/source/_static/custom.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
div.code-block-caption {background: #d0d0d0;}
 | 
			
		||||
							
								
								
									
										8
									
								
								docs/source/cli/index.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								docs/source/cli/index.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
CLI
 | 
			
		||||
===
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
    :maxdepth: 1
 | 
			
		||||
 | 
			
		||||
    usage
 | 
			
		||||
    reference
 | 
			
		||||
							
								
								
									
										7
									
								
								docs/source/cli/reference.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								docs/source/cli/reference.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
CLI Reference
 | 
			
		||||
=============
 | 
			
		||||
 | 
			
		||||
.. argparse::
 | 
			
		||||
   :module: compute.cli.control
 | 
			
		||||
   :func: get_parser
 | 
			
		||||
   :prog: compute
 | 
			
		||||
							
								
								
									
										102
									
								
								docs/source/cli/usage.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								docs/source/cli/usage.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
			
		||||
Usage
 | 
			
		||||
=====
 | 
			
		||||
 | 
			
		||||
Creating compute instances
 | 
			
		||||
--------------------------
 | 
			
		||||
 | 
			
		||||
First place your image into images pool path.
 | 
			
		||||
 | 
			
		||||
Create :file:`inatance.yaml` config file with following content. Replace `debian_12.qcow2` with your actual image filename.
 | 
			
		||||
 | 
			
		||||
.. code-block:: yaml
 | 
			
		||||
   :caption: Using prebuilt QCOW2 disk image
 | 
			
		||||
   :emphasize-lines: 4
 | 
			
		||||
   :linenos:
 | 
			
		||||
 | 
			
		||||
   name: myinstance
 | 
			
		||||
   memory: 2048
 | 
			
		||||
   vcpus: 2
 | 
			
		||||
   image: debian_12.qcow2
 | 
			
		||||
   volumes:
 | 
			
		||||
     - type: file
 | 
			
		||||
       is_system: true
 | 
			
		||||
       target: vda
 | 
			
		||||
       capacity:
 | 
			
		||||
         value: 10
 | 
			
		||||
         unit: GiB
 | 
			
		||||
 | 
			
		||||
Check out what configuration will be applied when ``init``::
 | 
			
		||||
 | 
			
		||||
   compute init -t
 | 
			
		||||
 | 
			
		||||
Initialise instance with command::
 | 
			
		||||
 | 
			
		||||
   compute init
 | 
			
		||||
 | 
			
		||||
Also you can use following syntax::
 | 
			
		||||
 | 
			
		||||
  compute init yourfile.yaml
 | 
			
		||||
 | 
			
		||||
Start instance::
 | 
			
		||||
 | 
			
		||||
   compute start myinstance
 | 
			
		||||
 | 
			
		||||
Using ISO installation medium
 | 
			
		||||
`````````````````````````````
 | 
			
		||||
 | 
			
		||||
Download ISO image and set it as source for ``cdrom`` device.
 | 
			
		||||
 | 
			
		||||
Note that the ``image`` parameter is not used here.
 | 
			
		||||
 | 
			
		||||
.. code-block:: yaml
 | 
			
		||||
   :caption: Using ISO image
 | 
			
		||||
   :emphasize-lines: 11-13
 | 
			
		||||
   :linenos:
 | 
			
		||||
 | 
			
		||||
   name: myinstance
 | 
			
		||||
   memory: 2048
 | 
			
		||||
   vcpus: 2
 | 
			
		||||
   volumes:
 | 
			
		||||
     - type: file
 | 
			
		||||
       is_system: true
 | 
			
		||||
       target: vda
 | 
			
		||||
       capacity:
 | 
			
		||||
         value: 10
 | 
			
		||||
         unit: GiB
 | 
			
		||||
     - type: file
 | 
			
		||||
       device: cdrom
 | 
			
		||||
       source: /images/debian-12.2.0-amd64-netinst.iso
 | 
			
		||||
 | 
			
		||||
::
 | 
			
		||||
 | 
			
		||||
   compute init
 | 
			
		||||
 | 
			
		||||
Now edit instance XML configuration to add VNC-server listen address::
 | 
			
		||||
 | 
			
		||||
   virsh edit myinstance
 | 
			
		||||
 | 
			
		||||
Add ``address`` attribute to start listen on all host network interfaces.
 | 
			
		||||
 | 
			
		||||
.. code-block:: xml
 | 
			
		||||
   :caption: libvirt XML config fragment
 | 
			
		||||
   :emphasize-lines: 2
 | 
			
		||||
   :linenos:
 | 
			
		||||
 | 
			
		||||
   <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
 | 
			
		||||
     <listen type='address' address='0.0.0.0'/>
 | 
			
		||||
   </graphics>
 | 
			
		||||
 | 
			
		||||
Also you can specify VNC server port. This is **5900** by default.
 | 
			
		||||
 | 
			
		||||
Start instance and connect to VNC via any VNC client such as `Remmina <https://remmina.org/>`_ or something else.
 | 
			
		||||
 | 
			
		||||
::
 | 
			
		||||
 | 
			
		||||
   compute start myinstance
 | 
			
		||||
 | 
			
		||||
Finish the OS installation over VNC and then do::
 | 
			
		||||
 | 
			
		||||
   compute setcdrom myinstance /images/debian-12.2.0-amd64-netinst.iso --detach
 | 
			
		||||
   compute powrst myinstance
 | 
			
		||||
 | 
			
		||||
CDROM will be detached. ``powrst`` command will perform instance shutdown and start. Instance will booted from `vda` disk.
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
# Add ../.. to path for autodoc Sphinx extension
 | 
			
		||||
import os
 | 
			
		||||
import sys
 | 
			
		||||
sys.path.insert(0, os.path.abspath('../..'))
 | 
			
		||||
@@ -7,16 +6,18 @@ sys.path.insert(0, os.path.abspath('../..'))
 | 
			
		||||
project = 'Compute'
 | 
			
		||||
copyright = '2023, Compute Authors'
 | 
			
		||||
author = 'Compute Authors'
 | 
			
		||||
release = '0.1.0'
 | 
			
		||||
release = '0.1.0-dev2'
 | 
			
		||||
 | 
			
		||||
# Sphinx general settings
 | 
			
		||||
extensions = [
 | 
			
		||||
    'sphinx.ext.autodoc',
 | 
			
		||||
    'sphinx_multiversion',
 | 
			
		||||
    'sphinxarg.ext',
 | 
			
		||||
]
 | 
			
		||||
templates_path = ['_templates']
 | 
			
		||||
exclude_patterns = []
 | 
			
		||||
language = 'en'
 | 
			
		||||
#pygments_style = 'monokai'
 | 
			
		||||
 | 
			
		||||
# HTML output settings
 | 
			
		||||
html_theme = 'alabaster'
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,14 @@ Compute
 | 
			
		||||
 | 
			
		||||
Compute instances management library.
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
    :maxdepth: 1
 | 
			
		||||
Contents
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
    :maxdepth: 2
 | 
			
		||||
 | 
			
		||||
    installation
 | 
			
		||||
    cli/index
 | 
			
		||||
    pyapi/index
 | 
			
		||||
 | 
			
		||||
Indices and tables
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										47
									
								
								docs/source/installation.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								docs/source/installation.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
Installation
 | 
			
		||||
============
 | 
			
		||||
 | 
			
		||||
Install Debian 12 on your host system. If you want use virtual machine as host make sure that nested virtualization is enabled.
 | 
			
		||||
 | 
			
		||||
1. Download or build ``compute`` DEB packages.
 | 
			
		||||
2. Install packages::
 | 
			
		||||
 | 
			
		||||
      apt-get install ./compute*
 | 
			
		||||
 | 
			
		||||
3. Make sure that ``libvirtd`` and ``dnsmasq`` are enabled and running::
 | 
			
		||||
 | 
			
		||||
      systemctl enable --now libvirtd.service
 | 
			
		||||
      systemctl enable --now dnsmasq.service
 | 
			
		||||
 | 
			
		||||
4. Prepare storage pools. You need storage pool for images and for instance volumes.
 | 
			
		||||
 | 
			
		||||
   ::
 | 
			
		||||
 | 
			
		||||
      for pool in images volumes; do
 | 
			
		||||
          virsh pool-define-as $pool dir - - - - "/$pool"
 | 
			
		||||
          virsh pool-build $pool
 | 
			
		||||
          virsh pool-start $pool
 | 
			
		||||
          virsh pool-autostart $pool
 | 
			
		||||
      done
 | 
			
		||||
 | 
			
		||||
5. Prepare env. Set environment variables in your `~/.profile`, `~/.bashrc` or global in `/etc/profile.d/compute` or `/etc/bash.bashrc`:
 | 
			
		||||
 | 
			
		||||
   .. code-block:: sh
 | 
			
		||||
 | 
			
		||||
      export CMP_IMAGES_POOL=images
 | 
			
		||||
      export CMP_VOLUMES_POOL=volumes
 | 
			
		||||
 | 
			
		||||
   Configuration file is yet not supported.
 | 
			
		||||
 | 
			
		||||
   Make sure the variables are exported to the environment::
 | 
			
		||||
 | 
			
		||||
      printenv | grep CMP_
 | 
			
		||||
 | 
			
		||||
   If the command didn't show anything source your rc files or relogin.
 | 
			
		||||
 | 
			
		||||
6. Prepare network::
 | 
			
		||||
 | 
			
		||||
      virsh net-start default
 | 
			
		||||
      virsh net-autostart default
 | 
			
		||||
 | 
			
		||||
7. Done. Now you can follow `CLI instructions <cli/index.html>`_
 | 
			
		||||
@@ -1,38 +1,8 @@
 | 
			
		||||
Python API
 | 
			
		||||
==========
 | 
			
		||||
 | 
			
		||||
The API allows you to perform actions on instances programmatically.
 | 
			
		||||
 | 
			
		||||
.. code-block:: python
 | 
			
		||||
 | 
			
		||||
    import compute
 | 
			
		||||
 | 
			
		||||
    with compute.Session() as session:
 | 
			
		||||
        instance = session.get_instance('myinstance')
 | 
			
		||||
        info = instance.get_info()
 | 
			
		||||
 | 
			
		||||
    print(info)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
:class:`Session` context manager provides an abstraction over :class:`libvirt.virConnect`
 | 
			
		||||
and returns objects of other classes of the present library.
 | 
			
		||||
 | 
			
		||||
Entity representation
 | 
			
		||||
---------------------
 | 
			
		||||
 | 
			
		||||
Entities such as a compute-instance are represented as classes. These classes directly
 | 
			
		||||
call libvirt methods to perform operations on the hypervisor. An example class is
 | 
			
		||||
:class:`Volume`.
 | 
			
		||||
 | 
			
		||||
The configuration files of various libvirt objects in `compute` are described by special
 | 
			
		||||
dataclasses. The dataclass stores object parameters in its properties and can return an
 | 
			
		||||
XML config for libvirt using the ``to_xml()`` method. For example :class:`VolumeConfig`.
 | 
			
		||||
 | 
			
		||||
`Pydantic <https://docs.pydantic.dev/>`_ models are used to validate input data.
 | 
			
		||||
For example :class:`VolumeSchema`.
 | 
			
		||||
 | 
			
		||||
Modules documentation
 | 
			
		||||
---------------------
 | 
			
		||||
API Reference
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
    :maxdepth: 4
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								docs/source/pyapi/instance/devices.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								docs/source/pyapi/instance/devices.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
``devices``
 | 
			
		||||
===========
 | 
			
		||||
 | 
			
		||||
.. automodule:: compute.instance.devices
 | 
			
		||||
   :members:
 | 
			
		||||
@@ -7,4 +7,5 @@
 | 
			
		||||
 | 
			
		||||
    instance
 | 
			
		||||
    guest_agent
 | 
			
		||||
    devices
 | 
			
		||||
    schemas
 | 
			
		||||
 
 | 
			
		||||
@@ -12,3 +12,10 @@
 | 
			
		||||
 | 
			
		||||
.. automodule:: compute.utils.ids
 | 
			
		||||
   :members:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
``utils.dictutil``
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
.. automodule:: compute.utils.dictutil
 | 
			
		||||
   :members:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user