# Terraform Configuration - Production Environment Ce dossier contient la configuration Terraform pour déployer l'infrastructure du homelab sur Proxmox. ## Structure des fichiers ### Fichiers principaux - **`virtual-machines.tf`** - Configuration et déploiement des machines virtuelles - **`lxc-containers.tf`** - Configuration des conteneurs LXC (préparatoire) - **`providers.tf`** - Configuration des providers Terraform - **`variables.tf`** - Définition des variables - **`terraform.tfvars`** - Valeurs des variables (à personnaliser) - **`inventory.tf`** - Génération de l'inventaire Ansible ### Dossier templates - **`cloud-init.yaml.tpl`** - Template de configuration Cloud-Init pour les VMs - **`inventory.tpl`** - Template pour générer l'inventaire Ansible ## Déploiement des VMs ### Configuration de base Les VMs sont configurées dans le fichier `terraform.tfvars` sous la variable `virtual_machines` : ```hcl virtual_machines = { "nom-vm" = { os = "debian" # OS du template à utiliser cores = 2 # Nombre de CPU cores memory = 4096 # RAM en MB disk_gb = 30 # Taille du disque en GB ip = "192.168.1.100" # Adresse IP statique gateway = "192.168.1.254" # Passerelle réseau tags = ["monitoring"] # Tags pour l'organisation packages = ["curl", "vim"] # Packages à installer } } ``` ### Options avancées Chaque VM peut avoir des configurations optionnelles : ```hcl "nom-vm-avancee" = { # Configuration de base os = "ubuntu" cores = 4 memory = 8192 disk_gb = 50 ip = "192.168.1.101" gateway = "192.168.1.254" # Options avancées cpu_type = "host" # Type de CPU (défaut: host) datastore = "local-lvm" # Datastore Proxmox network_bridge = "vmbr0" # Bridge réseau username = "admin" # Utilisateur (défaut: damien) post_install_commands = ["apt update"] # Commandes post-installation # Disques supplémentaires additional_disks = [ { interface = "scsi1" datastore = "local-lvm" size = 100 } ] } ``` ## Templates supportés Les templates doivent être présents sur Proxmox avec les tags appropriés : - **ubuntu** - Ubuntu Server (tag: `ubuntu`, `template`) - **debian** - Debian (tag: `debian`, `template`) - **alpine** - Alpine Linux (tag: `alpine`, `template`) - **rocky** - Rocky Linux (tag: `rocky`, `template`) - **centos** - CentOS (tag: `centos`, `template`) ## Utilisation ### 1. Prérequis - Terraform installé - Accès à l'API Proxmox - Templates VM configurés sur Proxmox - Clés SSH configurées ### 2. Configuration 1. Copier `terraform.tfvars.example` vers `terraform.tfvars` 2. Personnaliser les valeurs dans `terraform.tfvars` 3. Vérifier les chemins des clés SSH ### 3. Déploiement ```bash # Initialisation terraform init # Planification terraform plan # Application terraform apply ``` ### 4. Vérification ```bash # Liste des ressources terraform state list # Informations des VMs terraform output vm_info ``` ## Intégration Ansible L'inventaire Ansible est généré automatiquement dans `../../ansible/inventory/hosts.ini`. ### Groupes générés automatiquement - **Par OS** : `ubuntu`, `debian`, `alpine`, etc. - **Par tags** : groupes basés sur les tags des VMs - **Par pattern de nom** : `monitoring`, `web`, `database`, `kubernetes` ### Utilisation avec Ansible ```bash # Test de connectivité ansible all -i inventory/hosts.ini -m ping # Playbook sur un groupe ansible-playbook -i inventory/hosts.ini playbooks/common.yml --limit monitoring ``` ## Conteneurs LXC (Futur) Le fichier `lxc-containers.tf` est préparé pour le déploiement de conteneurs LXC. Il n'est pas encore fonctionnel mais servira de base pour le développement futur. ### Avantages des LXC - Consommation réduite de ressources - Démarrage plus rapide - Idéal pour les services légers ### Cas d'usage recommandés **LXC pour :** - Reverse proxy (nginx) - Monitoring léger - Services web simples - Environnements de développement **VM pour :** - Kubernetes nodes - Bases de données critiques - Services nécessitant une isolation forte - Applications avec besoins kernel spécifiques ## Maintenance ### Mise à jour des VMs ```bash # Modifier terraform.tfvars # Puis appliquer les changements terraform plan terraform apply ``` ### Suppression d'une VM ```bash # Retirer la VM de terraform.tfvars # Puis appliquer terraform apply ``` ### Sauvegarde de l'état ```bash # Sauvegarde manuelle cp terraform.tfstate terraform.tfstate.backup.$(date +%Y%m%d) ``` ## Dépannage ### Problèmes courants 1. **Template non trouvé** : Vérifier que le template existe sur Proxmox avec les bons tags 2. **IP déjà utilisée** : Vérifier les conflits d'adresses IP 3. **Clé SSH** : Vérifier le chemin vers la clé publique SSH ### Logs utiles ```bash # Logs Terraform détaillés TF_LOG=DEBUG terraform apply # État des ressources terraform show ``` ## Sécurité - Les clés SSH privées ne sont jamais stockées dans le code - Les tokens API sont dans des variables d'environnement - Les VMs sont configurées avec des utilisateurs non-root - SSH par mot de passe est désactivé ## Support Pour toute question ou problème, consulter : - Documentation Terraform Proxmox Provider - Logs Proxmox (`/var/log/pveproxy/`) - État Terraform (`terraform show`)