diff --git a/docs/LINSTOR_TEMPLATE_SETUP.md b/docs/LINSTOR_TEMPLATE_SETUP.md new file mode 100644 index 0000000..0f8a1d0 --- /dev/null +++ b/docs/LINSTOR_TEMPLATE_SETUP.md @@ -0,0 +1,135 @@ +# Configuration des Templates LINSTOR pour Proxmox + +## Problème résolu + +Lorsqu'on clone un template vers un storage LINSTOR dans Proxmox, les ressources LINSTOR doivent être créées automatiquement. Pour que cela fonctionne correctement, **le template source doit également être sur LINSTOR**. + +## Solution : Templates sur LINSTOR + +Les templates ont été créés sur chaque nœud avec LINSTOR storage pour les nœuds avec HA, et local-lvm pour le témoin. + +### Templates créés + +| Nœud | VMID | Nom Template | Storage | +|--------------|------|------------------------|----------------| +| acemagician | 9000 | ubuntu-2404-cloudinit | linstor_storage| +| elitedesk | 9001 | ubuntu-2404-cloudinit | linstor_storage| +| thinkpad | 9002 | ubuntu-2404-cloudinit | local-lvm | + +## Commandes de création + +### Sur acemagician (LINSTOR) +```bash +qm create 9000 --name ubuntu-2404-cloudinit --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0 + +echo "Import du disque Linstor..." +IMPORT_OUTPUT=$(qm importdisk 9000 /var/lib/vz/template/iso/ubuntu-24.04-server-cloudimg-amd64.img linstor_storage 2>&1) +DISK_NAME=$(echo "$IMPORT_OUTPUT" | grep -oP "linstor_storage:\K[^']+") + +if [ -z "$DISK_NAME" ]; then + echo "ERREUR: Impossible de récupérer le nom du disque." + exit 1 +fi + +echo "Disque détecté : $DISK_NAME" + +qm set 9000 --scsihw virtio-scsi-pci --scsi0 linstor_storage:$DISK_NAME +qm set 9000 --ide2 linstor_storage:cloudinit +qm set 9000 --boot c --bootdisk scsi0 +qm set 9000 --serial0 socket --vga serial0 +qm set 9000 --agent enabled=1 + +qm template 9000 +echo "✓ Template 9000 créé avec succès sur acemagician" +``` + +### Sur elitedesk (LINSTOR) +```bash +qm create 9001 --name ubuntu-2404-cloudinit --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0 + +echo "Import du disque Linstor..." +IMPORT_OUTPUT=$(qm importdisk 9001 /var/lib/vz/template/iso/ubuntu-24.04-server-cloudimg-amd64.img linstor_storage 2>&1) +DISK_NAME=$(echo "$IMPORT_OUTPUT" | grep -oP "linstor_storage:\K[^']+") + +if [ -z "$DISK_NAME" ]; then + echo "ERREUR: Impossible de récupérer le nom du disque." + exit 1 +fi + +echo "Disque détecté : $DISK_NAME" + +qm set 9001 --scsihw virtio-scsi-pci --scsi0 linstor_storage:$DISK_NAME +qm set 9001 --ide2 linstor_storage:cloudinit +qm set 9001 --boot c --bootdisk scsi0 +qm set 9001 --serial0 socket --vga serial0 +qm set 9001 --agent enabled=1 + +qm template 9001 +echo "✓ Template 9001 créé avec succès sur elitedesk" +``` + +### Sur thinkpad (local-lvm) +```bash +qm create 9002 --name ubuntu-2404-cloudinit --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0 + +echo "Import du disque local-lvm..." +IMPORT_OUTPUT=$(qm importdisk 9002 /var/lib/vz/template/iso/ubuntu-24.04-server-cloudimg-amd64.img local-lvm 2>&1) +DISK_NAME=$(echo "$IMPORT_OUTPUT" | grep -oP "local-lvm:\K[^']+") + +if [ -z "$DISK_NAME" ]; then + echo "ERREUR: Impossible de récupérer le nom du disque." + exit 1 +fi + +echo "Disque détecté : $DISK_NAME" + +qm set 9002 --scsihw virtio-scsi-pci --scsi0 local-lvm:$DISK_NAME +qm set 9002 --ide2 local-lvm:cloudinit +qm set 9002 --boot c --bootdisk scsi0 +qm set 9002 --serial0 socket --vga serial0 +qm set 9002 --agent enabled=1 + +qm template 9002 +echo "✓ Template 9002 créé avec succès sur thinkpad" +``` + +## Pré-requis + +L'image cloud Ubuntu 24.04 doit être téléchargée sur chaque nœud : + +```bash +# Sur chaque nœud +cd /var/lib/vz/template/iso +wget https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img +``` + +## Configuration Terraform + +Les fichiers Terraform utilisent le template via la variable `ubuntu_template` : + +```hcl +resource "proxmox_vm_qemu" "k3s_server_1" { + clone = var.ubuntu_template # "ubuntu-2404-cloudinit" + full_clone = true + storage = var.k3s_server_1_storage_pool # "linstor_storage" + # ... +} +``` + +## Avantages de cette approche + +1. **Création automatique des ressources LINSTOR** : Proxmox gère automatiquement la création des ressources LINSTOR lors du clonage +2. **Pas de script Python nécessaire** : Plus simple et plus natif +3. **Compatible avec le workflow GitOps** : Terraform peut créer les VMs sans intervention manuelle +4. **Réutilisable** : Les templates peuvent être utilisés pour créer plusieurs VMs + +## Dépannage + +### Erreur "Resource definition not found" +Si vous obtenez cette erreur, cela signifie que le template n'est pas sur LINSTOR. Recréez-le avec les commandes ci-dessus. + +### Le disque n'est pas détecté +Vérifiez que la regex capture bien le nom du disque après `qm importdisk`. Le format attendu est : +``` +unused0: successfully imported disk 'linstor_storage:pm-XXXXX_VMID' +```