Files
iac-homelab/terraform/prod/README.md
darnodo 7cd93ba978 Add Cloud-Init automation with Tailscale
The commit rephrases the README to focus on Cloud-Init setup and removes
unused Ansible code, making Tailscale configuration automatic.

Subject line: Replace Ansible with automated Cloud-Init configuration

Body: Refactors infrastructure bootstrapping to leverage Cloud-Init
instead of Ansible for initial VM setup, particularly with respect to
Tailscale installation and authentication.

This simplifies the architecture by: - Removing manual post-provisioning
Ansible steps - Automating Tailscale setup via Cloud-Init - Updating
documentation to reflect new workflow
2025-07-03 09:28:09 +02:00

5.4 KiB

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 :

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 :

"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

# Initialisation
terraform init

# Planification
terraform plan

# Application
terraform apply

4. Vérification

# 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

# 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

# Modifier terraform.tfvars
# Puis appliquer les changements
terraform plan
terraform apply

Suppression d'une VM

# Retirer la VM de terraform.tfvars
# Puis appliquer
terraform apply

Sauvegarde de l'état

# 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

# 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)