Aller au contenu
Infrastructure as Code medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Deboguer Terragrunt : cache, chemins relatifs, hooks et logs

8 min de lecture

logo terragrunt

Votre terragrunt apply echoue et le message d’erreur ne vous aide pas ? Avant de modifier votre code, il faut comprendre ou Terragrunt travaille reellement. Le probleme ne vient pas toujours du module Terraform ou OpenTofu : tres souvent, il vient du dossier de travail reel, du cache, d’un chemin relatif mal pense ou d’un manque de logs. Ce guide vous donne une methode reproductible pour diagnostiquer ces situations.

  • Comment fonctionne .terragrunt-cache et pourquoi Terragrunt n’execute pas depuis votre dossier source
  • Utiliser terragrunt info print pour voir le contexte reel d’execution
  • Activer les logs de debug avec --log-level debug pour comprendre ce que Terragrunt fait
  • Appliquer les bons reflexes pour les chemins relatifs et les hooks

On repart volontairement d’un seul unit, pour isoler les mecanismes de debug.

  • Répertoirelab-debug/
    • Répertoiremodules/
      • Répertoirewrite-file/
        • main.tf
    • Répertoirelive/
      • Répertoiredev/
        • Répertoireapp/

Fichier modules/write-file/main.tf :

terraform {
required_version = ">= 1.6.0"
required_providers {
local = {
source = "hashicorp/local"
version = "~> 2.5"
}
}
}
variable "filename" {
type = string
}
variable "content" {
type = string
}
resource "local_file" "this" {
filename = var.filename
content = var.content
}

Fichier live/dev/app/terragrunt.hcl :

terraform {
source = "../../../modules/write-file"
}
inputs = {
filename = "${get_terragrunt_dir()}/hello.txt"
content = "hello from lab a"
}

Placez-vous dans live/dev/app puis lancez :

Fenêtre de terminal
terragrunt --non-interactive apply -auto-approve

Le resultat attendu est double :

  • hello.txt apparait dans le dossier du unit ;
  • un dossier .terragrunt-cache apparait aussi.

Ce point est fondamental : Terragrunt n’execute pas directement depuis votre dossier source. Il prepare un repertoire de travail intermediaire.

Etape 2 : demander a Terragrunt ce qu’il utilise vraiment

Section intitulée « Etape 2 : demander a Terragrunt ce qu’il utilise vraiment »

La commande la plus utile pour commencer est :

Fenêtre de terminal
terragrunt info print

Elle renvoie notamment :

  • config_path : le terragrunt.hcl charge ;
  • download_dir : le chemin de .terragrunt-cache ;
  • working_dir : le dossier reel depuis lequel Terragrunt execute le module.

Autrement dit, cette commande vous dit ou Terragrunt travaille vraiment, au lieu de vous laisser raisonner uniquement depuis le dossier visible dans le repo.

Vous pouvez voir la structure du cache avec :

Fenêtre de terminal
find .terragrunt-cache -maxdepth 3 | sort

Vous y retrouvez typiquement :

  • le main.tf du module ;
  • le terragrunt.hcl recopie dans le repertoire de travail ;
  • le state local si vous travaillez sans backend distant ;
  • les dossiers .terraform et les manifestes Terragrunt.

Le cache n’est donc pas un bruit parasite. C’est le lieu concret de l’execution.

Pour enrichir le diagnostic sans modifier votre code, lancez :

Fenêtre de terminal
terragrunt --log-level debug info print

Sur Terragrunt 1.0.0, cette commande montre notamment :

  • la version de Terragrunt ;
  • le binaire Terraform ou OpenTofu detecte ;
  • la lecture du fichier terragrunt.hcl ;
  • le moment ou le working directory est defini dans le cache.

Le point le plus piegeux est simple : Terragrunt execute le module depuis le working directory du cache, pas depuis votre dossier visible.

Cela explique pourquoi cette ligne est importante :

filename = "${get_terragrunt_dir()}/hello.txt"

get_terragrunt_dir() ancre le chemin sur le dossier du unit. Sans cette precaution, un chemin ecrit en supposant un autre dossier courant peut viser le mauvais emplacement.

Sur un repo plus structure, le meme principe vaut aussi pour les sources de modules. Au lieu de raisonner “depuis la ou la commande est lancee”, ancrez les chemins depuis un repere stable comme :

  • get_terragrunt_dir() pour le dossier courant du unit ;
  • find_in_parent_folders("root.hcl") pour retrouver une racine connue.

Etape 6 : nettoyer le cache quand il brouille le diagnostic

Section intitulée « Etape 6 : nettoyer le cache quand il brouille le diagnostic »

Si vous voulez repartir proprement, utilisez une commande simple :

Fenêtre de terminal
find . -type d -name '.terragrunt-cache' -prune -exec rm -rf {} +

Cette commande ne corrige pas la cause racine, mais elle elimine un etat local qui peut masquer le vrai probleme pendant l’analyse.

Les hooks Terragrunt ne sont pas detailles dans cet exemple, mais les bons reflexes restent les memes quand un hook casse :

  • verifier d’abord le working_dir avec terragrunt info print ;
  • activer --log-level debug pour voir quand Terragrunt prepare l’execution ;
  • eviter les chemins ambigus dans les scripts de hook ;
  • faire en sorte qu’un hook affiche ses erreurs clairement et reste idempotent.
  1. Appliquer le unit

    Fenêtre de terminal
    terragrunt --non-interactive apply -auto-approve

    Verification : hello.txt et .terragrunt-cache existent.

  2. Afficher le contexte Terragrunt

    Fenêtre de terminal
    terragrunt info print

    Verification : la sortie contient config_path, download_dir et working_dir.

  3. Activer les logs de debug

    Fenêtre de terminal
    terragrunt --log-level debug info print

    Verification : vous voyez la lecture du terragrunt.hcl et la definition du working directory.

  4. Lister puis nettoyer le cache

    Fenêtre de terminal
    find .terragrunt-cache -maxdepth 3 | sort
    find . -type d -name '.terragrunt-cache' -prune -exec rm -rf {} +

    Verification : le cache est d’abord visible, puis supprime.

  5. Detruire proprement le unit

    Fenêtre de terminal
    terragrunt --non-interactive destroy -auto-approve

    Verification : hello.txt disparait.

SymptomeCause probableSolution
Le module semble s’executer dans un dossier incomprehensibleTerragrunt travaille dans .terragrunt-cacheUtiliser terragrunt info print
Un chemin relatif fonctionne malLe chemin suppose un mauvais dossier courantRepartir de get_terragrunt_dir() ou d’une racine stable
Les logs sont trop pauvresNiveau par defaut trop basRelancer avec --log-level debug
Le comportement reste bizarre apres plusieurs essaisEtat local parasite dans le cacheSupprimer .terragrunt-cache puis recommencer
  • .terragrunt-cache est le vrai lieu d’execution de Terragrunt.
  • terragrunt info print est le premier diagnostic a lancer.
  • --log-level debug permet de voir le contexte Terragrunt sans improviser.
  • Les chemins relatifs doivent etre ancres sur des reperes stables.
  • Pour les hooks aussi, le bon debug commence par le contexte et les chemins.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn