Cloud-init y oVirt
Cloud-init inicializa autenticación, red y otros al arranque de una máquina. Se suele emplear en la nube. Sin embargo, aquí lo utilizaré en un entorno de virtualización, oVirt, que recientemente se integró con esta herramienta.
Configuraremos los parámetros de cloud-init en las propiedades de la máquina -> initial run -> casilla «Use cloud init/sysprep«. Si es la primera vez que la arrancamos, oVirt creará un datasource a partir de esta información como dispositivo óptico (label «config-2«) y cloud-init (cloud-init-local) aplicará la configuración que contenga. Por supuesto, si no hemos instalado cloud-init junto con el S.O., no pasará nada. Podemos arrancar la máquina mediante el menú «Run Once» y activar la casilla de cloud-init, que recordará los datos que hayamos establecido anteriormente, si es que los hay. Se pueden dejar igual o cambiar.
Sin embargo, la gracia no es configurar cloud-init al crear manualmente una máquina, sino en un template. El template tiene ese mismo menú «Use cloud init/sysprep«. Al crear una máquina virtual desde el template, aparecerá la información que hayamos establecido en éste. Veamos:

He señalado en rojo dos datos importantes:
El primero es el del nombre de la interfaz de red que será configurada. Es importante escribirlo correctamente, o de lo contrario cloud-init fallará al hacer ifup. Al principio pensaba que era un simple campo descriptivo para el usuario, pero no es así. El segundo es un script de usuario que podemos añadir para que cloud-init lo ejecute. Lo utilizo para «enmascarar» el servicio cloud-init-local. En versiones recientes (0.7.9.9), se establece DHCP en la interfaz «principal» como fallback si no encuentra datasource. Por tanto, si había alguna configuración distinta a DHCP, como IP estática, o añadida sobre DHCP, la perderemos. En versiones anteriores simplemente daba un error «route info failed» al no haber IP, sin modificar la configuración de red. El comportamiento de las versiones actuales puede tener sentido en entornos de la nube/openstack donde los datasource estén siempre disponisbles, pero en oVirt sólo es así durante el primer arranque, como se ha comentado. En caso de que tengamos un servidor DHCP también podría ser deseable este funcionamiento, sobre todo si DHCP actualiza las entradas DNS.
Referencias:
- Desactivación de cloud-init después del primer arranque:
Once the instance is up you should disable cloud-init . If you
do not do this, cloud-init will run again on reboot. At best it will repeat the process unnecessarily, at worst, if you have detached the configuration vdisk, it will wipe out the configuration and fallback to the None DataSource.Starting with CentOS 7.4, the behavior of the cloud-init package is changed such that after a reboot, some customers may lose their configured network interface, especially if the interface is configured with a static IP address. Customers using a static IP are recommend to fully disable cloud-init using the command:
# systemctl disable cloud-init cloud-init-local cloud-final cloud-config
# systemctl mask cloud-init cloud-init-local cloud-final cloud-config
- https://bugzilla.redhat.com/show_bug.cgi?id=1299200 (esto hace referencia a la instalación de ovirt-engine)
I believe we need to disable cloud-init service after we finish deployment via appliance, because it take additional 2 minutes on boot of OS(cloud-init trying to find configuration and failed after timeout)