This is a cloud-init OS definition for Ganeti. It injects the meta-data and user-data directly into file system of the target host, to be picked up by the NoCloud data source.
This currently does not work with Rocky 9 cloud images. We have a solution/workaround to be committed soon which will require attaching an generated ISO image on first boot via command line options.
There are plans from the Ganeti project to develop two new providers:
- instance-simpleimage will deploy a fixed image.
- instance-cloudimage will deploy a cloud-init image using metad.
The latter should provide an attractive alternative to the current provider when available.
Obtain cloud-init images for your guest Operating
System. The image is expected to be in qcow2 format by default, but other
formats supported by qemu-img can be selected by the OS variant
definition.
Place the needed cloud-init images to /var/cache/ganeti-cloudimg and
distribute them to all nodes. The expected file name of an image is
specified in the corresponding configuration file found under
/etc/ganeti/nocloud/variants/. To add a missing OS variant, create the
configuration file and add the name to /etc/ganeti/nocloud/variants.list.
The variant configuration supports the following variables:
IMAGE_FILEis the filename of the image. This option is required.IMAGE_FORMATis passed to the-foption ofqemu-img, by defaultqcow2.IMAGE_DIRis the directory where to look for images, by default/var/cache/ganeti-cloudimg.IMAGE_ROOTFS_PARTNOis the partition number of the root filesystem in the image. Used when adding cloud config.
Next, put your cloud config data under
/etc/ganeti/nocloud/user-data/. The OS creation script will look for
${OS_VARIANT}.yml then default.yml. You may find these cloud-config
examples handy. Alternatively provide user data by
setting the cloud_userdata OS parameter to a list of sources, see the
documentation of this parameter below.
Once the needed image is in place, the VM can be created by specifying
nocloud+variant as the OS, where variant is one of
/etc/ganeti/nocloud/variants.list:
gnt-instance add -s 7G -o nocloud+ubuntu-18.04 vm1.example.org
For static IP configuration, specify the network and ip parameters for
the interface with e.g. --net 0:network=local,ip=172.16.0.20. Also, if
you pass -O static_host_interface=0 then all IPs from the DNS A and AAAA
records for the host will be added to the first interface, in which case the
ip network parameter may be omitted. This allows creating IPv6-only VMs
or VMs with multiple IP numbers.
If you also provide the name parameter, the generated network
configuration will instruct cloud-init to rename the interface accordingly.
DNS configuration can be passed though the OS parameters dns_nameservers
and dns_search which are comma-separated lists of IPs and domains,
respectively.
A comma-separate list of user-data sources. The sources will be merged
using the cloud-init merging algorithm which can be
configured with a merge_how key as documented on that page. The following
kinds are supported:
file:<path>includes the file at<path>on the Ganeti node, which can be absolute or relative to/etc/ganeti/nocloud/user-data.script:<path>includes the standard output of running<path>on the Ganeti node. The path is relative to/etc/ganeti/nocloud/user-dataif not absolute. To run the script on the VM, usefile:<path>instead.base64:<data>includes the base 64 decoding of<data>.<url>will be delivered to cloud-init as is, where schemes recognized as belonging to URLs includehttp,https,ftp,sftp,tftp, andscp.
An example user-data/default.yml for Ubuntu can be found in
examples/ubuntu.
Comma-separated lists of name servers and domains to search. These are added to all configured networks.
If set to a Ganeti network interface number, this interface will be set up to handle the IPv4 and IPv6 addresses associated with the instance name according to DNS.