Terraform

Qu’est-ce que Terraform ?

Terraform est une solution d”Hasicorp qui permet de déployer un grand nombre de machines identiques. Il a été pensé comme un orchestrateur pour l’Infrastructure As Code. C’est ce dernier qui va déployer l’ensemble des images dont on pourra avoir besoin. Pour fonctionner, Terraform repose sur un système de providers : des plugins indépendants qui permettent d’effectuer des actions sur l’hyperviseur, le cloud ou encore la machine local. /!\ Petit rappel, bien que Terraform soit surpuissant pour créer des infrastructures, il l’est également pour les détruire. Un changement dans un fichier ou un truc pas net, et vous n’avez plus rien.

Installation

Terraform est maintenu par HashiCorp. Le plus simple pour le télécharger, c’est de passer par apt.

wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.lists
sudo apt update && sudo apt install terraform

Configuration

Sécurisation

Utilisation

Terraform & Git

Dans la logique, Terraform est fait pour être utilisé conjointement avec git. Si vous êtes chaud, vous poussez une modification sur votre git, et votre CI/CD vient la récupérer pour déployer les nouvelles machines. Bon, ça c’est quand on a un bon level et une infra déjà ops. Mais certains fichiers sur Terraforms contiennent des informations plus ou moins sensible, il est recommandé de ne pas les envoyer (logique). Pour ça, le plus simple reste de configurer son gitignore.

.terraform*
terraform.tfstate*

La première ligne enlève les providers (qui sont lourd pour pas grand chose), et le terraform.lock.
La seconde enlève les différents états de l’architecture mise en place.

Les providers

VirtualBox

Le provider pour VirtualBox n’est plus maintenu. J’ai eu un problème avec alors je suis passé à QEMU, qui s’en sors pas si mal pour l’instant.

QEMU (ou libvirt)

En cherchant sur internet, tout le monde parle de QEMU pour la virtualisation et l’émulation. Mais en vérité, il c’est la librairie libvirt qui fait la plupart du travail.
A des fins de dev, je me suis servi de QEMU pour ma virtualisation. La configuration est plutôt simple par défaut, dès qu’on a compris les différentes types de ressources :

Nom de la ressource

Explication

libvirt_pool

L’emplacement des images disques. Attention avec Apparmor.

libvirt_volume

L’image disque qui va être créé, copie de la précédente.

libvirt_domain

La VMs qui va être créée.

Pour pouvoir utiliser QEMU, il faut avoir déjà télécharger le provider et l’avoir configuré. Ça nous donne :

terraform {
  required_version = ">= 1.6.6"
  required_providers {
    libvirt = {
      source = "dmacvicar/libvirt"
      version = "0.7.6"
    }
  }
}

provider "libvirt" {
  # Configuration du fournisseur libvirt
  uri = "qemu:///system"
}

Il est important de noter que QEMU peut se connecter à un hyperviseur distant. Ça me tente bien de faire joujou avec tout ça un jour …

TroubleShooting

QEMU

Vous trouverez plus d’informations sur QEMU en général dans la documentation idoine (oui, j’aime ce mot, parce qu’il ne sert jamais dans la vraie vie).

QEMU et le NAT

J’ai eu un petit soucis de NAT lors de la première initialisation de la machine, je ne sais pas pourquoi.
L’interface présente était la ens3, et celle du fichier networking la ens4. Je vérifierai ça la prochaine fois, mais il suffit de renommer celle du networking en ens3 et ça fonctionne.