Module 6 — Les modules
Durée indicative du cours : 1 h 30
Durée indicative de l’atelier : atelier du jour 3, partagé avec le module 5
Durée totale (cours + atelier) : le jour 3 réunit les modules 5 et 6 et l’atelier du jour
Ce module couvre les objectifs 5a à 5d. Un module est un dossier de fichiers .tf que l’on appelle. Le collègue réutilise la fiche sans copier ses blocs.
D’où vient un module
Le bloc module a un nom local et une source.
- Un chemin relatif,
./modules/fiche, est un module local. C’est le premier pas du fil. - Une adresse du registre,
namespace/nom/provider, est un module publié. - Une URL git peut aussi être une source. Le registre reste le cas de l’examen pour une source distante.
terraform init installe les modules et les enregistre. Vous relancez init quand la source ou la version change. terraform get met à jour les modules déjà connus.
Le dossier appelant est la racine. Le dossier appelé est le module enfant. La racine est elle-même un module, le module racine.
Ce qui entre, ce qui sort
Les variables du module enfant ne sont pas celles de la racine. Rien ne passe tout seul. Vous affectez chaque entrée dans le bloc module. Vous lisez chaque sortie avec module.NOM.output.
# modules/fiche/variables.tf
variable "nom" {
type = string
}
# modules/fiche/outputs.tf
output "chemin" {
value = local_file.fiche_environnement.filename
}
# racine
output "chemin_fiche" {
value = module.fiche.chemin
}
Une variable sans default est obligatoire. L’appelant doit la fournir. Une variable du parent qui porte le même nom n’est pas visible dans l’enfant. C’est le périmètre que l’examen demande : la portée s’arrête à la frontière du module.
Les ressources de l’enfant n’ont pas à être citées depuis la racine. Si la racine a besoin d’un attribut, l’enfant le publie dans un output. C’est le contrat.
Composer
Un module peut en appeler un autre. Vous le faites quand une responsabilité tient dans un dossier : ici, produire le suffixe et écrire la fiche. La racine garde les variables d’équipe et les outputs que le collègue consulte.
Vous évitez un module qui ne contient qu’une ressource sans entrée ni sortie utiles. Vous évitez aussi une racine qui recopie le même bloc pour chaque environnement. L’environnement change par les variables, pas par une copie des fichiers .tf.
Versionner
Un module local n’a pas d’argument version. Il suit le dépôt. Un module du registre, ou une source qui le permet, se fige avec version.
La contrainte ~> accepte les correctifs de la même mineure et refuse la mineure suivante, selon le nombre de composantes que vous avez écrites. Sans version, un init ultérieur peut prendre une version plus récente et changer le comportement. Dans un dépôt partagé, vous écrivez la contrainte.
Le lockfile des providers ne remplace pas cette contrainte de module. Chacun fige son propre objet.
Ce que vous faites sur le fil
- Créer le dossier
modules/fiche. - Y déplacer la ressource
local_fileet lerandom_idsi le suffixe fait partie du contrat. - Exposer
nomen variable etcheminen output. - Appeler le module depuis la racine.
- Lancer
terraform init, puis un plan. Le plan peut proposer un déplacement. Le blocmoveddu module 4 évite alors une destruction suivie d’une création. - Changer la contrainte de version seulement quand la source est distante, puis relancer
init.
Ce que l’examen veut pour ce module
| Objectif | Vous devez pouvoir l’expliquer |
|---|---|
| 5a | La source peut être un dossier local, le registre, ou une autre adresse acceptée par Terraform |
| 5b | Les variables de l’enfant ne voient pas celles du parent. On les passe dans le bloc module |
| 5c | On appelle un module par son bloc. On lit ses sorties par module.nom.output |
| 5d | version fige un module distant. Un module local suit le dépôt |
Points à retenir
initaprès un changement de source ou de version.- Le contrat d’un module, ce sont ses variables et ses outputs.
- On ne duplique pas les
.tfpour changer d’environnement. On change les valeurs. movedaccompagne un renommage quand le state connaît déjà l’objet sous l’ancienne adresse.
Suite
Poursuivre avec le module 7 — Les données sensibles.