Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Lire un plan OpenTofu avant de l’appliquer

Après cette leçon: Je peux lire un plan après un changement et dire ce qui sera créé, modifié ou détruit.

Leçon de 60 min12 commandesLab OpenTofu : l’infrastructure en code, avec plan, apply et état, dans une VM

Une ligne de plan peut effacer des données

Un plan OpenTofu est la liste, écrite avant tout changement, de ce qui sera créé, modifié ou détruit. Le lire avec soin est le geste qui protège une infrastructure réelle.

Une seule ligne de remplacement suffit à détruire une base de données puis à en recréer une vide. Pour la repérer, il faut connaître les quatre symboles et le total que le plan annonce.

À la fin de cette leçon

Remarque

Je peux lire un plan après un changement et dire ce qui sera créé, modifié ou détruit.

Mots-clés

MotCe que ça veut direExemple
Symbole du planle signe devant une ressource : +, ~, - ou -/+
Changement sur placela ressource reste, une de ses valeurs change~ update in-place
Remplacementla ressource est détruite, puis recréée-/+ replace
Déclencheurune valeur dont le changement force un remplacementtriggers_replace
Fichier de planun plan enregistré, que l’apply suit à la lettre-out=plan.bin
Dérivel’écart entre l’état souhaité et ce qui existe

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Quatre symboles disent ce qui se passera

Chaque ressource du plan porte un symbole. + crée, - détruit, ~ change la ressource sur place, et -/+ la détruit puis la recrée.

La dernière ligne totalise : « Plan: 1 to add, 1 to change, 2 to destroy. » Un remplacement compte pour un ajout et pour une destruction.

Exemple travaillé : un symbole, un total

SymboleSensAjoutsChangementsDestructions
+créer100
~changer sur place010
-détruire001
-/+remplacer101

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un projet à deux ressources et deux variables

Code: bash
variable "horaire" {
  type    = string
  default = "9h-18h"
}

variable "modele" {
  type    = number
  default = 1
}

resource "terraform_data" "accueil" {
  input = var.horaire
}

resource "terraform_data" "badge" {
  input            = "badge visiteur"
  triggers_replace = var.modele
}

Créer le dossier du projet

Commande
mkdir -p ~/atelier-iac/lecture

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Aller dans ce dossier

Commande
cd ~/atelier-iac/lecture

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire main.tf

Commande
printf 'variable "horaire" {\n  type    = string\n  default = "9h-18h"\n}\n\nvariable "modele" {\n  type    = number\n  default = 1\n}\n\nresource "terraform_data" "accueil" {\n  input = var.horaire\n}\n\nresource "terraform_data" "badge" {\n  input            = "badge visiteur"\n  triggers_replace = var.modele\n}\n' > main.tf

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire une troisième ressource à part

Commande
printf 'resource "terraform_data" "ancien" {\n  input = "ancien registre"\n}\n' > ancien.tf

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Préparer le dossier

Commande
tofu init -no-color | grep successfully

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Créer les trois ressources

Commande
tofu apply -auto-approve -no-color | grep ^Apply

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Changer une valeur ou remplacer la ressource

Si on change horaire, la ressource accueil garde son identité et prend la nouvelle valeur : c’est ~. Si on change modele, qui sert de triggers_replace à badge, la ressource est refaite : c’est -/+.

Les deux plans ci-dessous changent une seule variable à la fois, pour voir chaque symbole seul.

Planifier un autre horaire

Commande
tofu plan -no-color -var horaire=8h-17h | grep -E "^Plan|will be|must be"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Planifier un autre modèle

Commande
tofu plan -no-color -var modele=2 | grep -E "^Plan|will be|must be"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Retirer un bloc détruit ce qu’il décrivait

Supprimons le fichier ancien.tf. Il n’y a plus de bloc ancien, mais l’état se souvient encore de cette ressource. Le plan propose donc de la détruire.

Le plan suivant mêle les trois cas : un changement, un remplacement et une destruction. Le total les additionne.

Retirer la troisième ressource du projet

Commande
rm ancien.tf

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Planifier les trois cas ensemble

Commande
tofu plan -no-color -var horaire=8h-17h -var modele=2 | grep -E "^Plan|will be|must be"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple travaillé : lire ce plan ligne à ligne

Ligne du planSymbolePourquoi
accueil will be updated in-place~horaire a changé
ancien will be destroyed-son bloc n’existe plus
badge must be replaced-/+modele, le déclencheur, a changé
Plan: 1 to add, 1 to change, 2 to destroytotalle remplacement compte deux fois

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Erreur fréquente

Attention

Beaucoup de gens lisent un plan en ne regardant que le total. Or « 1 to change » et « 1 to add, 1 to destroy » ne disent pas la même chose. Le second peut être un remplacement : la ressource disparaît, puis revient avec un nouvel identifiant. Cherchez toujours le symbole -/+.

Enregistrer le plan dans un fichier

Commande
tofu plan -no-color -var horaire=8h-17h -var modele=2 -out=plan.bin | grep ^Plan

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Appliquer exactement ce plan

Commande
tofu apply -auto-approve -no-color plan.bin | grep ^Apply

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin

Lancez tofu plan -detailed-exitcode après l’apply. Le plan dit qu’il n’y a rien à changer : quel code de sortie attendez-vous ?

Changez ensuite une variable et relancez. Dites pourquoi une chaîne de déploiement automatique s’appuie sur ce code pour décider de s’arrêter.

À propos de ce labo et de sa source: Lab OpenTofu : l’infrastructure en code, avec plan, apply et état, dans une VM

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.