========================================== Despliegue Básico de OpenTofu Libvirt CS10 ========================================== Este proyecto proporciona una configuración básica de OpenTofu para desplegar máquinas virtuales utilizando el proveedor Libvirt. Prerrequisitos ============== Esto hay que hacerlo en tu estación de trabajo, como `root`. .. code-block:: bash # Añadir usuario a grupos libvirt, kvm, qemu (reemplaza ) usermod -a -G libvirt,kvm,qemu # Sal y vuelve a entrar en tu sesión o reinicia # Fedora ## Instalar libvirt-nss dnf install libvirt-nss ## Habilitar libvirt-nss authselect enable-feature with-libvirt-nss # Reinicia tu sistema. Adicionalmente, tienes que tener una imagen base de CentOS Stream 10 en: ``$HOME/VirtualMachines/cs10-base.qcow2``. Debe ser una instalación mínima y con la instalación sin LVM; con la partición de root como la del índice más alto. Por ejemplo, tus particiones deben lucir así: :: # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS vda 253:0 0 100G 0 disk ├─vda1 253:1 0 600M 0 part /boot/efi ├─vda2 253:2 0 1G 0 part /boot ├─vda3 253:3 0 512M 0 part [SWAP] └─vda4 253:4 0 2.9G 0 part / .. important:: No olvides instalar cloud-init y cloud-utils-growpart en tu imagen base de CentOS Stream 10. Actualiza tu imagen ------------------- Un pequeño truco para actualizar tu imagen base de CentOS Stream 10: .. code-block:: bash virt-customize -a $HOME/VirtualMachines/cs10.qcow2 --smp=4 --memsize=8192 --update Eso la actualiza ahí mismo, utilizando 4 CPUs y 8192 MiB de RAM para que sea más rápido. Es muy útil para mantener al día tu imagen base. Despliegue ========== Estos comandos se ejecutan en el directorio raíz del proyecto. .. code-block:: bash # Inicializar OpenTofu tofu init # Revisar el plan tofu plan # Aplicar configuración tofu apply # Aplicar configuración (sin confirmación) tofu apply -auto-approve # Destruir recursos tofu destroy # Destruir recursos (sin confirmación) tofu destroy -auto-approve Personalización de la inyección de llaves SSH ============================================= Para usar tu propia llave SSH en las VMs: Copia tu llave pública de SSH (ej. `id_rsa.pub`) a `ssh/millave.pub` y, luego, modifica `templates/cloudinit.cfg.tftpl`: .. code-block:: yaml ssh_authorized_keys: - ${file("ssh/millave.pub")} Aumento del Número de máquinas virtuales ======================================== Para crear múltiples "guests", ajusta la variable `guest_count`: Modifica `variables.tf`: .. code-block:: hcl variable "guest_count" { description = "Número de máquinas virtuales a crear" type = number default = 1 # Cambia este valor } O en `terraform.tfvars`: .. code-block:: hcl guest_count = 3 O por línea de comandos: .. code-block:: bash tofu apply -var="guest_count=3" Problemática ============ El CD-ROM tiene que usar SATA cuando usamos UEFI ------------------------------------------------ Por cuestiones de diseño del plugin, hay que aplicar un parche con XSLT al XML del CD-ROM en donde se adhiere el ISO de cloud-init. El problema es que no hay manera de definir ese CD-ROM para que use el bus SATA, así que usamos la táctica descrita en este reporte para hacerlo: https://github.com/dmacvicar/terraform-provider-libvirt/issues/1018#issuecomment-1886550277 Con este parche, es posible usar cloud-init para las operaciones que necesitamos. .. note:: Una alternativa a esto sería olvidarnos de cloud-init y usar scripts solamente.