Dix salles de TP, une seule description
L’infrastructure as code consiste à décrire dans des fichiers ce qui doit exister, puis à laisser un outil le construire. OpenTofu est l’un de ces outils : il montre un plan avant de rien changer, puis il applique.
Une université veut les mêmes dix salles de TP à chaque rentrée. Les refaire à la main donne dix salles un peu différentes. Un fichier relu, versionné et rejoué donne dix fois la même salle.
À la fin de cette leçon
Remarque
Je peux lancer un plan puis un apply avec OpenTofu et dire ce que contient le fichier d’état.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Infrastructure as code | décrire ce qui doit exister dans des fichiers | |
| Ressource | une chose que le fichier décrit | terraform_data |
| Plan | la liste des changements que l’outil ferait, montrée avant de les faire | tofu plan |
| Apply | faire les changements que le plan a listés | tofu apply |
| État | le fichier où l’outil note ce qu’il a déjà construit | terraform.tfstate |
| Fournisseur | un module qui parle à un vrai cloud | provider |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un fichier décrit l’état souhaité
Avec OpenTofu, vous n’écrivez pas « crée ce serveur ». Vous écrivez « il doit y avoir ce serveur ». C’est l’état souhaité : ce que vous voulez voir exister à la fin.
Le fichier main.tf est écrit en HCL, un langage fait pour cela. Un bloc resource décrit une ressource. Un bloc output affiche une valeur à la fin.
Ce que le labo fait vraiment
Important
Ce labo ne peut télécharger aucun fournisseur, donc il ne crée aucun vrai serveur. Il utilise une seule ressource, terraform_data, qui mémorise une valeur et la rend. Le plan, l’apply et l’état sont les vrais : seule la dernière étape diffère d’un vrai cloud.
Le plus petit projet possible
resource "terraform_data" "salle" {
input = "salle de sport"
}
output "nom" {
value = terraform_data.salle.output
}
Créer un dossier pour le projet
mkdir -p ~/atelier-iac/clubAffiché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/clubAffiché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 'resource "terraform_data" "salle" {\n input = "salle de sport"\n}\n\noutput "nom" {\n value = terraform_data.salle.output\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.
Le plan compare le souhait à l’état
tofu init prépare le dossier. Un vrai projet y télécharge ses fournisseurs. Ici il n’y en a aucun, donc l’étape est instantanée.
tofu plan compare ensuite le fichier à l’état. Il liste les changements, avec + pour créer, et finit par une ligne de total. Un plan ne change rien : il informe.
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.
Lire la dernière ligne du plan
tofu plan -no-color | 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.
Apply fait le travail, et l’état s’en souvient
tofu apply fait les changements du plan. Sans -auto-approve, il demande de taper yes avant. Le bouton Run envoie l’option pour vous.
Ensuite, OpenTofu note ce qu’il a construit dans terraform.tfstate, un fichier JSON. C’est l’état. Au plan suivant, il compare votre fichier à cet état, pas au monde.
Appliquer le plan
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.
Lister ce que l’état contient
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.
Lire la valeur dans le fichier d’état
jq -r '.resources[0].instances[0].attributes.input.value' 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.
Replanifier tout de suite
tofu plan -no-color | grep "No changes"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.
Erreur fréquente
Attention
Beaucoup de gens pensent que tofu plan crée déjà la ressource. Il ne fait que comparer et afficher : le fichier d’état n’existe qu’après un apply. Retenez : le plan montre ce qui se passerait, l’apply le fait.
Pour aller plus loin
Ajoutez une seconde ressource terraform_data à main.tf, puis lancez tofu plan. Quel total lisez-vous, et pourquoi la première ressource n’y figure-t-elle pas ?
Changez ensuite la valeur de input dans la première, relancez le plan et lisez le symbole devant la ressource. Dites si l’état a changé avant l’apply.