
Un workspace Terraform est une copie isolée du state au sein d’un même projet. Un seul jeu de fichiers .tf, mais plusieurs états logiques. Avec un backend local, chaque workspace finit par avoir son propre fichier de state. Avec un backend distant, les workspaces restent dans le même backend et partagent les mêmes credentials. Le workspace par défaut s’appelle default et existe dès le premier terraform init. Les workspaces supplémentaires se créent avec terraform workspace new.
Prérequis : avoir suivi les premières infrastructures et comprendre le state Terraform.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Créer un workspace avec
terraform workspace new - Basculer entre workspaces avec
terraform workspace select - Adapter les ressources au workspace actif avec
terraform.workspace - Comprendre l’isolation des states entre workspaces
- Supprimer un workspace avec
terraform workspace delete
Qu’est-ce qu’un workspace ?
Section intitulée « Qu’est-ce qu’un workspace ? »Par défaut, Terraform utilise un seul state stocké dans terraform.tfstate. Quand vous créez un workspace supplémentaire, Terraform crée un répertoire terraform.tfstate.d/ avec un sous-dossier par workspace, chacun contenant son propre state :
mon-projet/├── main.tf├── terraform.tfstate # state du workspace "default"└── terraform.tfstate.d/ └── prod/ └── terraform.tfstate # state du workspace "prod"Chaque workspace gère ses propres ressources. Déployer dans le workspace prod ne touche pas les ressources du workspace default, et inversement.
Commandes de base
Section intitulée « Commandes de base »| Commande | Rôle |
|---|---|
terraform workspace list | Lister les workspaces (* = actif) |
terraform workspace show | Afficher le nom du workspace actif |
terraform workspace new NOM | Créer un workspace et basculer dessus |
terraform workspace select NOM | Basculer sur un workspace existant |
terraform workspace delete NOM | Supprimer un workspace (doit être vide) |
Créer et utiliser un workspace
Section intitulée « Créer et utiliser un workspace »-
Vérifier le workspace actif
Par défaut, vous êtes dans le workspace
default:Fenêtre de terminal terraform workspace showdefault -
Créer un nouveau workspace
Fenêtre de terminal terraform workspace new prodCreated and switched to workspace "prod"!You're now on a new, empty workspace. Workspaces isolate their state,so if you run "terraform plan" Terraform will not see any existing statefor this configuration.Terraform crée le workspace et bascule automatiquement dessus. Le nouveau workspace a un state vide — même si des ressources existent dans
default. -
Lister les workspaces
Fenêtre de terminal terraform workspace listdefault* prodL’étoile (
*) indique le workspace actif. -
Basculer entre workspaces
Fenêtre de terminal terraform workspace select defaultSwitched to workspace "default".
Adapter les ressources au workspace
Section intitulée « Adapter les ressources au workspace »La variable spéciale terraform.workspace contient le nom du workspace actif. Utilisez-la dans vos configurations pour créer des ressources différentes selon l’environnement :
resource "libvirt_network" "net" { name = "ws-${terraform.workspace}-net" # ↑ le nom inclut le workspace : "ws-default-net" ou "ws-prod-net" autostart = true
forward = { mode = "nat" }
ips = [{ address = terraform.workspace == "prod" ? "10.10.50.1" : "10.10.51.1" # ↑ condition : prod → réseau .50, sinon → réseau .51 netmask = "255.255.255.0" dhcp = { ranges = [{ start = terraform.workspace == "prod" ? "10.10.50.100" : "10.10.51.100" end = terraform.workspace == "prod" ? "10.10.50.200" : "10.10.51.200" }] } }]}
resource "libvirt_volume" "disk" { name = "ws-${terraform.workspace}-disk.qcow2" pool = "default" capacity = terraform.workspace == "prod" ? 8 * 1024 * 1024 * 1024 : 4 * 1024 * 1024 * 1024 # ↑ prod → 8 Go, sinon → 4 Go
backing_store = { path = "/chemin/vers/ubuntu-24.04-cloudimg.img" format = { type = "qcow2" } }
target = { format = { type = "qcow2" } }}Résultat dans le workspace default
Section intitulée « Résultat dans le workspace default »terraform workspace select defaultterraform apply -auto-approveApply complete! Resources: 2 added, 0 changed, 0 destroyed.
Outputs:
disk_capacity_gb = 4disk_name = "ws-default-disk.qcow2"network_name = "ws-default-net"workspace_name = "default"Résultat dans le workspace prod
Section intitulée « Résultat dans le workspace prod »terraform workspace select prodterraform apply -auto-approveApply complete! Resources: 2 added, 0 changed, 0 destroyed.
Outputs:
disk_capacity_gb = 8disk_name = "ws-prod-disk.qcow2"network_name = "ws-prod-net"workspace_name = "prod"Le même code produit des ressources avec des noms, des adresses réseau et des capacités différentes selon le workspace.
Vérification : les ressources coexistent
Section intitulée « Vérification : les ressources coexistent »Les deux ensembles de ressources existent simultanément dans l’infrastructure :
virsh net-list --all | grep ws- ws-default-net active yes yes ws-prod-net active yes yesvirsh vol-list default | grep ws- ws-default-disk.qcow2 /var/lib/libvirt/images/ws-default-disk.qcow2 ws-prod-disk.qcow2 /var/lib/libvirt/images/ws-prod-disk.qcow2Chaque workspace possède ses propres ressources gérées indépendamment.
Supprimer un workspace
Section intitulée « Supprimer un workspace »Avant de supprimer un workspace, il faut détruire ses ressources et basculer sur un autre workspace :
-
Basculer sur le workspace à supprimer
Fenêtre de terminal terraform workspace select prod -
Détruire les ressources
Fenêtre de terminal terraform destroy -auto-approve -
Basculer sur un autre workspace
Fenêtre de terminal terraform workspace select default -
Supprimer le workspace vide
Fenêtre de terminal terraform workspace delete prodDeleted workspace "prod"!
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
Workspace "default" is your active workspace | Tentative de supprimer le workspace actif | Basculer sur un autre workspace d’abord |
Workspace is not empty | Le workspace contient encore des ressources | terraform destroy avant de supprimer, ou -force pour passer outre (dangereux) |
| Ressources dupliquées dans l’infra | Oubli de basculer de workspace avant apply | Vérifier avec terraform workspace show avant chaque opération |
terraform.workspace retourne default | Vous êtes dans le workspace par défaut | Créer un workspace avec workspace new ou basculer avec select |
À retenir
Section intitulée « À retenir »- Un workspace est une copie isolée du state — pratique pour des variantes de ressources avec le même code
- Le workspace
defaultexiste toujours et ne peut pas être supprimé terraform.workspaceretourne le nom du workspace actif — utilisez-le pour adapter les noms et les paramètres- En backend local, les states sont stockés dans
terraform.tfstate.d/<nom>/terraform.tfstate(saufdefaultqui reste à la racine) - En backend distant, les workspaces partagent toujours le même backend et les mêmes credentials
- Détruire les ressources avant de supprimer un workspace — sinon elles deviennent orphelines
- Les workspaces sont adaptés aux tests et aux variations légères, pas à l’isolation forte d’environnements critiques