:pve-toplevel:
endif::wiki[]
-http://cloudinit.readthedocs.io[Cloud-Init] is the defacto
+https://cloudinit.readthedocs.io[Cloud-Init] is the de facto
multi-distribution package that handles early initialization of a
virtual machine instance. Using Cloud-Init, configuration of network
devices and ssh keys on the hypervisor side is possible. When the VM
Cloud-Init data.
{pve} generates an ISO image to pass the Cloud-Init data to the VM. For
-that purpose all Cloud-Init VMs need to have an assigned CDROM drive.
-Also many Cloud-Init images assume to have a serial console, so it is
-recommended to add a serial console and use it as display for those VMs.
+that purpose, all Cloud-Init VMs need to have an assigned CD-ROM drive.
+Usually, a serial console should be added and used as a display. Many Cloud-Init
+images rely on this, it is a requirement for OpenStack. However, other images
+might have problems with this configuration. Switch back to the default display
+configuration if using a serial console doesn't work.
Preparing Cloud-Init Templates
apt-get install cloud-init
----
+WARNING: This command is *not* intended to be executed on the {pve} host, but
+only inside the VM.
+
Already many distributions provide ready-to-use Cloud-Init images (provided
as `.qcow2` files), so alternatively you can simply download and
import such images. For the following example, we will use the cloud
# download the image
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img
-# create a new VM
-qm create 9000 --memory 2048 --net0 virtio,bridge=vmbr0
-
-# import the downloaded disk to local-lvm storage
-qm importdisk 9000 bionic-server-cloudimg-amd64.img local-lvm
+# create a new VM with VirtIO SCSI controller
+qm create 9000 --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
-# finally attach the new disk to the VM as scsi drive
-qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-1
+# import the downloaded disk to the local-lvm storage, attaching it as a SCSI drive
+qm set 9000 --scsi0 local-lvm:0,import-from=/path/to/bionic-server-cloudimg-amd64.img
----
NOTE: Ubuntu Cloud-Init images require the `virtio-scsi-pci`
controller type for SCSI drives.
-.Add Cloud-Init CDROM drive
+.Add Cloud-Init CD-ROM drive
[thumbnail="screenshot/gui-cloudinit-hardware.png"]
-The next step is to configure a CDROM drive which will be used to pass
+The next step is to configure a CD-ROM drive, which will be used to pass
the Cloud-Init data to the VM.
----
qm set 9000 --ide2 local-lvm:cloudinit
----
-To be able to boot directly from the Cloud-Init image, set the
-`bootdisk` parameter to `scsi0`, and restrict BIOS to boot from disk
-only. This will speed up booting, because VM BIOS skips the testing for
-a bootable CDROM.
+To be able to boot directly from the Cloud-Init image, set the `boot` parameter
+to `order=scsi0` to restrict BIOS to boot from this disk only. This will speed
+up booting, because VM BIOS skips the testing for a bootable CD-ROM.
----
-qm set 9000 --boot c --bootdisk scsi0
+qm set 9000 --boot order=scsi0
----
-Also configure a serial console and use it as a display. Many Cloud-Init
-images rely on this, as it is an requirement for OpenStack images.
+For many Cloud-Init images, it is required to configure a serial console and use
+it as a display. If the configuration doesn't work for a given image however,
+switch back to the default display instead.
----
qm set 9000 --serial0 socket --vga serial0
----
You can also configure all the Cloud-Init options using a single command
-only. We have simply splitted the above example to separate the
+only. We have simply split the above example to separate the
commands for reducing the line length. Also make sure to adopt the IP
setup for your specific environment.