VM images
==================================

Overview
---------

ucloud tries to be least invasise towards VMs and only require
strictly necessary changes for running in a virtualised
environment. This includes configurations for:

* Configuring the network
* Managing access via ssh keys
* Resizing the attached disk(s)

Upstream images
---------------

The 'official' uncloud images are defined in the `uncloud/images
<https://code.ungleich.ch/uncloud/images>`_ repository.

How to make you own Uncloud images
----------------------------------

.. note::
  It is fairly easy to create your own images for uncloud, as the common
  operations (which are detailed below) can be automatically handled by the
  `uncloud/uncloud-init <https://code.ungleich.ch/uncloud/uncloud-init>`_ tool.

Network configuration
~~~~~~~~~~~~~~~~~~~~~
All VMs in ucloud are required to support IPv6. The primary network
configuration is always done using SLAAC. A VM thus needs only to be
configured to

* accept router advertisements on all network interfaces
* use the router advertisements to configure the network interfaces
* accept the DNS entries from the router advertisements


Configuring SSH keys
~~~~~~~~~~~~~~~~~~~~

To be able to access the VM, ucloud support provisioning SSH keys.

To accept ssh keys in your VM, request the URL
*http://metadata/ssh_keys*. Add the content to the appropriate user's
**authorized_keys** file. Below you find sample code to accomplish
this task:

.. code-block:: sh

    tmp=$(mktemp)
    curl -s http://metadata/ssk_keys > "$tmp"
    touch ~/.ssh/authorized_keys # ensure it exists
    cat ~/.ssh/authorized_keys >> "$tmp"
    sort "$tmp" | uniq > ~/.ssh/authorized_keys


Disk resize
~~~~~~~~~~~
In virtualised environments, the disk sizes might grow. The operating
system should detect disks that are bigger than the existing partition
table and resize accordingly. This task is os specific.

ucloud does not support shrinking disks due to the complexity and
intra OS dependencies.
