130 lines
3.7 KiB
ReStructuredText
130 lines
3.7 KiB
ReStructuredText
==========================================
|
|
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 <tu_nombre_de_usuario>)
|
|
usermod -a -G libvirt,kvm,qemu <tu_nombre_de_usuario>
|
|
|
|
# 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.
|