Commandes pour inspecter, gérer et verrouiller les providers Terraform.


terraform providers — lister les providers

# Afficher les providers utilisés et leurs sources
terraform providers
 
# Exemple de sortie :
# Providers required by configuration:
# .
# ├── provider[registry.terraform.io/hashicorp/aws] ~> 5.0
# ├── provider[registry.terraform.io/hashicorp/random] ~> 3.0
# └── module.vpc
#     └── provider[registry.terraform.io/hashicorp/aws] >= 4.0
 
# Afficher le schéma JSON de tous les providers
terraform providers schema -json
 
# Schéma d'un provider spécifique
terraform providers schema -json | jq '.provider_schemas["registry.terraform.io/hashicorp/aws"]'

terraform providers lock — verrouiller les versions

Met à jour le fichier .terraform.lock.hcl avec les checksums des providers pour toutes les plateformes cibles.

# Mettre à jour le lock file pour la plateforme courante
terraform providers lock
 
# Verrouiller pour plusieurs plateformes (CI multi-OS)
terraform providers lock \
    -platform=linux_amd64 \
    -platform=darwin_amd64 \
    -platform=windows_amd64
 
# Depuis un miroir local
terraform providers lock -fs-mirror=/usr/share/terraform/plugins
 
# Depuis un miroir réseau
terraform providers lock -net-mirror=https://mirrors.exemple.com/terraform

Pourquoi verrouiller pour plusieurs plateformes ?

Problème : un développeur macOS génère un lock file avec les checksums macOS.
           La CI (Linux) rejette le lock file → checksums incompatibles.

Solution : terraform providers lock -platform=linux_amd64 -platform=darwin_amd64
           → le lock file contient les checksums pour les deux plateformes

Déclarer les providers dans .tf

# versions.tf
terraform {
  required_version = ">= 1.5"
 
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"      # >= 5.0, < 6.0
    }
    kubernetes = {
      source  = "hashicorp/kubernetes"
      version = ">= 2.20"
    }
    random = {
      source  = "hashicorp/random"
      version = "~> 3.0"
    }
  }
}
 
# Configurer un provider
provider "aws" {
  region = var.region
 
  default_tags {
    tags = {
      Environment = var.env
      ManagedBy   = "Terraform"
    }
  }
}
 
# Provider aliasé (multi-région)
provider "aws" {
  alias  = "us-east"
  region = "us-east-1"
}

En relation avec