Le dire une fois, le construire à chaque fois
Un établissement veut les mêmes dix ordinateurs dans chaque salle, installés de la même façon. À la main, dix fois, on obtient dix salles un peu différentes. L’infrastructure as code (l’infrastructure décrite par du code) écrit plutôt les salles dans un fichier : un outil construit ce que le fichier décrit, autant de fois qu’on veut, et montre ce qu’il va changer avant de le changer.
À la fin de cette leçon
Remarque
Je peux dire ce qu’est un plan, à quoi sert l’état, et pourquoi un outil planifie avant de changer quoi que ce soit.
Mots-clés
- OpenTofu : un outil libre et gratuit qui lit des fichiers et construit ce qu’ils décrivent.
- Ressource : une chose décrite par un fichier. Ici elle garde une valeur ; avec un provider, ce pourrait être un serveur.
- Plan : la liste des changements qu’OpenTofu ferait, montrée avant qu’il les fasse.
- Apply (appliquer) : faire les changements que le plan a listés.
- État (state) : le fichier où OpenTofu note ce qu’il a déjà construit.
- Provider : un module qui parle à un vrai cloud. Cette machine ne peut pas en télécharger.
Pour commencer : ce que tu sais déjà
Remarque
Réponds dans ta tête. 1. Qu’est-ce qu’une variable dans un programme ? 2. Si tu demandes deux fois une tasse de thé, en as-tu une ou deux ? 3. À quoi sert une liste de choses à faire le lendemain ? Tu vas retrouver les trois dans un instant.
Avant de commencer
Remarque
Appuie sur Démarrer le lab dans la barre en haut de cette leçon. Ce lab est une machine Ubuntu entière, rien que pour toi : elle met un peu plus de temps à démarrer qu’un conteneur, et elle télécharge OpenTofu la première fois, il te faut donc un compte gratuit. Chaque bouton Exécuter tape sa commande dans le terminal de la machine, l’une après l’autre, dans la même session. Si l’un d’eux dit que la machine démarre encore, attends quelques secondes et appuie de nouveau. Pour les regarder, ou pour taper les tiens, appuie sur Ouvrir le terminal dans la barre.
Un projet est un dossier de fichiers
Le lab te donne un tout petit projet dans ~/tofu-lab/hello. cd t’y emmène. Le fichier main.tf contient une ressource nommée hello du type intégré terraform_data. Elle garde la valeur "hello" comme input (entrée) et la rend comme output (sortie). Un second bloc affiche cette sortie. Rien n’est créé en dehors d’OpenTofu : le lab n’a aucun cloud où créer quoi que ce soit.
cd ~/tofu-lab/helloAffiché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.
cat 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.
Plan : regarder avant de changer quoi que ce soit
tofu init prépare le dossier. Un vrai projet y télécharge ses providers ; celui-ci n’en a aucun à chercher, c’est donc immédiat. tofu plan compare ensuite le fichier avec l’état et affiche ce qu’il ferait. Un + veut dire créer, et la dernière ligne fait le total : Plan: 1 to add, 0 to change, 0 to destroy. Un plan ne change rien.
tofu initAffiché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.
tofu 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.
Apply : le faire, et le mémoriser
tofu apply fait ce que le plan a listé. Sans -auto-approve, il te demande de taper yes d’abord ; le lab l’ajoute pour que le bouton le fasse à ta place. Il se termine par Apply complete! Resources: 1 added, 0 changed, 0 destroyed. La ressource est maintenant notée dans l’état. tofu state list montre ce que l’état contient.
tofu apply -auto-approveAffiché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.
tofu state listAffiché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.
Vérifie
Astuce
Quelle commande change quelque chose, et laquelle dit seulement ce qu’elle changerait ? Réponse : tofu apply change, tofu plan informe seulement. Que dit le plan si tu le relances tout de suite ? Réponse : No changes. Your infrastructure matches the configuration., parce que l’état contient déjà ce que décrit le fichier. Essaie.
Une erreur fréquente
Attention
Beaucoup pensent qu’OpenTofu regarde le monde réel à chaque fois pour savoir ce qui existe. Ce n’est pas le cas : il compare tes fichiers avec son état, sa propre mémoire. Ce que l’état dit exister est ce qu’il croit exister : l’état vaut donc autant que l’infrastructure qu’il décrit.
Changer une valeur et lire le plan
La commande suivante remplace "hello" par "goodbye" dans le fichier avec sed, un chercher-remplacer. Puis tofu plan doit faire la différence entre une chose nouvelle et une chose modifiée. Un ~ veut dire modifier sur place, l’ancienne et la nouvelle valeur sont montrées côte à côte, et la dernière ligne dit Plan: 0 to add, 1 to change, 0 to destroy. Tu lis le plan avant d’appliquer : c’est l’habitude pour laquelle cet outil existe.
sed -i 's/input = "hello"/input = "goodbye"/' 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.
tofu 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.
L’état est un fichier, et sans lui OpenTofu oublie
Dans ce dossier, l’état est un simple fichier, terraform.tfstate. Supprime-le et OpenTofu a perdu sa mémoire. Le plan dit alors 1 to add, pour une ressource qu’il a déjà créée, parce que, pour lui, rien n’existe. Avec un vrai cloud, cela créerait une deuxième copie de tout. C’est pourquoi les vraies équipes gardent l’état en lieu sûr et ne le modifient jamais à la main. Ensuite, sudo tofulab reset hello remet ce dossier comme il était fourni.
rm terraform.tfstateAffiché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.
tofu 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.
Vérification finale
Astuce
Réponds sans regarder en arrière. 1. Que change tofu plan ? 2. Que note l’état ? 3. Que dit le plan si tu le lances une deuxième fois après un apply ? 4. Pourquoi cette machine ne peut-elle pas créer un vrai serveur ? Réponses : rien ; ce qu’OpenTofu a déjà construit ; rien à faire ; elle n’a pas de provider, et un provider est ce qui parle à un cloud. Quand tu es prêt, lis ton lab : lance cat ~/README.md dans le terminal.
Pour les enseignants
Astuce
Cette leçon est un petit exemple de leçon donnée dans un lab : les étapes et les boutons Exécuter sont la leçon, et le lab est la copie de chaque élève. Elle se déroule dans un lab VM : chaque élève a sa propre machine Ubuntu avec OpenTofu installé, et un bouton Exécuter tape dans son terminal et montre ce qui s’est affiché. Il faut un compte gratuit (la machine télécharge OpenTofu depuis GitHub). Points clés : 1. Un plan montre les changements avant qu’ils soient faits. 2. L’état est la mémoire d’OpenTofu de ce qu’il a construit. 3. Le même fichier peut être appliqué de nouveau sans rien changer. Erreur fréquente : croire qu’OpenTofu regarde le monde réel au lieu de son état. Le lab n’utilise que la ressource intégrée terraform_data, donc rien de réel n’est créé ; les vrais providers demandent un réseau que le lab n’a pas. Après la leçon, sudo tofulab reset hello remet le dossier en état. Le lab lui-même a une vérification qui planifie et applique le projet de l’élève avec ses propres valeurs. Copiez la leçon dans votre propre module pour la modifier, ou construisez-en une de zéro avec le menu Lab du générateur de leçons.