« Terraform, c’est un outil pour Proxmox / pour AWS / pour le cloud. »
Terraform ne connaît aucune plateforme en particulier. C’est un moteur générique qui parle à des plateformes via des providers — des plugins « traducteurs ». Le même Terraform gère Proxmox, AWS, Azure, GitHub, Cloudflare… Comprendre ça, c’est comprendre pourquoi ce que tu apprends ici te servira partout.
On travaille depuis la VM mgmt (là où vivent déjà ton code et Git). Terraform y sera installé, et pilotera Proxmox à distance via son API.
À la fin de ce module, tu sauras…
- Installer Terraform et vérifier son fonctionnement
- Expliquer ce qu’est un provider et pourquoi il rend Terraform universel
- Écrire un bloc
terraform,provideretresourceen HCL - Préparer l’accès à l’API Proxmox (token) et lancer
terraform init
01Installer Terraform
Le binaire, sur mgmt
Manipulewget -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.list
sudo apt update && sudo apt install -y terraform
terraform versionObserveTerraform v1.x.x
on linux_amd64Comprends un outil client, pas un serveur
Terraform n’est pas un service qui tourne en permanence : c’est un outil en ligne de commande que tu lances quand tu veux appliquer des changements. Il lit tes fichiers, parle aux APIs, puis se termine. Pas de démon, pas d’agent sur les machines cibles — contrairement à ce qu’on pourrait croire.
02Le concept central : le provider
Comprends le provider, un traducteur d’API
Le cœur de Terraform ne connaît que des concepts génériques : ressources, état, dépendances, plan. Un provider est un plugin qui traduit ces concepts vers l’API d’une plateforme précise. bpg/proxmox traduit vers l’API Proxmox ; hashicorp/aws vers AWS ; hashicorp/azurerm vers Azure. Change le provider, et le même Terraform pilote une autre plateforme — la logique (plan, state, apply) ne change pas. C’est exactement ce qui rend Terraform universel : tu apprends un moteur, pas un outil mono-plateforme.
03Préparer l’accès à Proxmox (API token)
Une identité pour Terraform sur Proxmox
Terraform doit s’authentifier auprès de l’API Proxmox. Dans l’interface Proxmox : Datacenter → Permissions → API Tokens, crée un token pour un utilisateur dédié (ex. terraform@pve), avec les droits de gérer des VMs. Note l’ID du token et son secret.
Comprends le pattern récurrent d’identité machine
Tu retrouves partout le même schéma : chaque outil automatisé a sa propre identité machine, à droits restreints, avec un secret stocké hors du code. Harbor robot, Jenkins ServiceAccount, et maintenant Terraform token Proxmox : c’est un principe de sécurité universel, pas une spécificité d’un outil.
04Tes premiers fichiers HCL
terraform, provider, resource
Crée un dossier de travail et un fichier main.tf :
mkdir -p ~/iac-soria && cd ~/iac-soriaDans main.tf — le bloc qui déclare le provider Proxmox :
terraform {
required_providers {
proxmox = {
source = "bpg/proxmox"
version = "~> 0.66"
}
}
}
provider "proxmox" {
endpoint = "https://192.168.10.2:8006/"
api_token = var.proxmox_api_token
insecure = true
}terraform{} déclare quel provider utiliser (et sa version) ; provider “proxmox”{} le configure (où est l’API, comment s’authentifier).Comprends l’anatomie, bloc par bloc
required_providers : Terraform ira télécharger bpg/proxmox depuis le registre. version = “~> 0.66” : accepte les versions 0.66.x compatibles (on épingle pour éviter les surprises — prends la dernière version stable compatible avec ton Proxmox). source désigne le provider ; endpoint/api_token le configurent. Sur AWS, ce bloc deviendrait source = “hashicorp/aws” avec region et des clés — même structure, autre traducteur.
05La variable pour le secret
Ne jamais coder un secret en dur
Crée variables.tf :
variable "proxmox_api_token" {
type = string
sensitive = true
}Et un fichier terraform.tfvars (à ne jamais committer — ajoute-le au .gitignore) :
proxmox_api_token = "terraform@pve!mon-token=xxxxxxxx-xxxx-xxxx"Comprends variables & sensitive
Une variable paramètre ta configuration sans coder les valeurs en dur. sensitive = true empêche Terraform d’afficher la valeur dans ses sorties. Le secret vit dans terraform.tfvars, exclu de Git — même principe que les credentials Jenkins ou les Secrets Kubernetes : le secret n’entre jamais dans le dépôt.
06terraform init
Initialiser le projet
Manipuleterraform initObserveInitializing provider plugins...
- Installing bpg/proxmox v0.66.x...
- Installed bpg/proxmox (signed by a HashiCorp partner)
Terraform has been successfully initialized!.terraform/ est apparu). Le projet est prêt à décrire des ressources.Comprends ce que fait init, précisément
terraform init lit required_providers, télécharge les plugins depuis le registre, et les verrouille dans un fichier .terraform.lock.hcl (pour que toute l’équipe utilise les mêmes versions). C’est toujours la première commande d’un projet Terraform, quel que soit le provider. Rien n’est encore créé sur Proxmox : on a juste préparé l’outillage.
✓Ce que tu retiens
Terraform est un moteur générique ; ce sont les providers (plugins traducteurs d’API) qui lui permettent de parler à Proxmox, AWS, Azure… La configuration s’écrit en HCL : terraform{} (quels providers), provider{} (comment s’y connecter), variables pour les secrets. terraform init télécharge les providers — première commande de tout projet. Change le provider, la logique reste.
Un projet Terraform initialisé
À faire
- Installe Terraform sur
mgmtet vérifie sa version. - Crée un token API Proxmox dédié à Terraform (droits limités).
- Écris
main.tf(provider Proxmox) etvariables.tf, avec le secret dansterraform.tfvars(gitignoré). - Lance
terraform initet prouve l’installation du provider. - Documente dans BookStack : le rôle d’un provider, et ce que fait
init.
apply, il faut comprendre comment Terraform pense : au module suivant, on décortique plan et state — le cœur du raisonnement de Terraform, identique sur toutes les plateformes.?Auto-évaluation
1. Qu’est-ce qu’un provider Terraform ?
Un plugin qui traduit les concepts génériques de Terraform vers l’API d’une plateforme précise (Proxmox, AWS…). C’est ce qui rend Terraform universel.
2. À quoi sert terraform init ?
À télécharger les providers déclarés et préparer le dossier de travail. C’est toujours la première commande d’un projet.
3. Pourquoi mettre le token dans une variable sensible et un tfvars gitignoré ?
Pour ne jamais coder de secret en dur ni le committer : le secret reste hors du dépôt, comme pour tous les outils du projet.