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
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Symbole du plan | le signe devant une ressource : +, ~, - ou -/+ | |
| Changement sur place | la ressource reste, une de ses valeurs change | ~ update in-place |
| Remplacement | la ressource est détruite, puis recréée | -/+ replace |
| Déclencheur | une valeur dont le changement force un remplacement | triggers_replace |
| Fichier de plan | un plan enregistré, que l’apply suit à la lettre | -out=plan.bin |
| Dérive | l’é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
| Symbole | Sens | Ajouts | Changements | Destructions |
|---|---|---|---|---|
| + | créer | 1 | 0 | 0 |
| ~ | changer sur place | 0 | 1 | 0 |
| - | détruire | 0 | 0 | 1 |
| -/+ | remplacer | 1 | 0 | 1 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un projet à deux ressources et deux variables
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
mkdir -p ~/atelier-iac/lectureAffiché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
cd ~/atelier-iac/lectureAffiché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
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.tfAffiché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
printf 'resource "terraform_data" "ancien" {\n input = "ancien registre"\n}\n' > ancien.tfAffiché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
tofu init -no-color | grep successfullyAffiché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
tofu apply -auto-approve -no-color | grep ^ApplyAffiché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
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
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
rm ancien.tfAffiché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
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 plan | Symbole | Pourquoi |
|---|---|---|
| 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 destroy | total | le 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
tofu plan -no-color -var horaire=8h-17h -var modele=2 -out=plan.bin | grep ^PlanAffiché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
tofu apply -auto-approve -no-color plan.bin | grep ^ApplyAffiché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.