Nous déployons des ressources avec Terraform depuis Azure Devops.
Dans un fichier Terraform main.tf, il est recommandé d’utiliser des variables. Les avantages sont multiples: réutilisabilité, centralisation de la configuration, simplification de la maintenance, plus de flexibilité, amélioration de la sécurité en séparant les données sensibles du code…
Une manière de le faire est de lister directement ces variables en paramètres de la ligne de commande « terraform plan ». Par exemple :
terraform plan -var myVar="var_value" -out main.tfplan
Cependant, il y a un nombre limite de variables que l’on peut lister en ligne de commande. Heureusement, afin de ne pas être limité et en plus de faciliter la gestion de ces variables, on peut les stocker dans un fichier dédié puis référencer ce fichier en ligne de commande :
terraform plan -var-file terraform.tfvars -out main.tfplan
On peut assigner des valeurs à ces variables directement dans ce fichier. Cependant, une modification de leur valeur nécessitera un changement dans le code de notre repository, ce que nous voulons éviter. La solution pour éviter cela est la suivante : relier ces variables Terraform à des variables Devops, dans un pipeline ou dans un variable group. Pour cela, voici la marche à suivre.
D’abord il nous faut stocker ce fichier de variables que nous appellerons « terraform.tfvars » dans le repository avec les autres fichiers Terraform, dans un folder dédié :
Dans ce fichier, nous devons ensuite lier les variables Terraform à des variables Devops. Pour faciliter la compréhension et la maintenance, nous assignons le même nom aux variables Devops :
Dans notre pipeline de Build, nous avons besoin de deux tasks afin de générer en sortie l’artefact qui servira d’input au pipeline de Release :
- task: CopyFiles@2 displayName: "Copy Files to: terraform" inputs: SourceFolder: HR/Terraform TargetFolder: "$(build.artifactstagingdirectory)/terraform" - task: PublishPipelineArtifact@1 displayName: "Publish Pipeline Artifact : terraform" inputs: targetPath: "$(build.artifactstagingdirectory)/terraform" artifact: terraform
Nous pouvons ainsi visualiser notre fichier de variables dans les artefacts générés :
Dans le pipeline de Release, une task doit être exécutée au préalable avant les instructions Terraform.
En effet il faut indiquer au processus qu’il faut interpréter les variables Devops comme telles dans le fichier. La task permettant de faire cela est la task « Replace tokens », configurée avec le bon Token pattern utilisé dans le fichier. Dans notre cas, « $( … ) » :
Ensuite, ne pas oublier deux choses :
Toute votre gestion de variables Terraform est maintenant gérée dans Devops.