Depuis Packer 1.7, les templates s’écrivent en HCL2 (.pkr.hcl) — même langage que Terraform. Le format JSON legacy est toujours supporté mais déconseillé pour un nouveau projet.
packer — plugins requis
packer {
required_plugins {
googlecompute = {
source = "github.com/hashicorp/googlecompute"
version = ">= 1.1.0"
}
}
}Équivalent du required_providers Terraform : déclare les plugins (builders/provisioners/post-processors non intégrés au binaire packer) et leur version minimale. Installés par packer init.
variable et locals
variable "project_id" {
type = string
description = "ID du projet GCP"
}
variable "image_name" {
type = string
}
locals {
build_date = formatdate("YYYY-MM-DD", timestamp())
}Mêmes mécaniques que Terraform : variable pour les entrées (passées via -var, -var-file, ou variables d’environnement PKR_VAR_*), locals pour des valeurs calculées réutilisées dans le template.
source — VM de build + métadonnées de l’image
source "googlecompute" "app" {
project_id = var.project_id
source_image_family = "debian-12"
image_name = var.image_name
image_family = "app-image"
machine_type = "e2-medium"
ssh_username = "packer"
}Un bloc source mélange deux responsabilités : la configuration de la VM temporaire qui sert au build (zone, réseau, machine_type, credentials SSH/WinRM) et les métadonnées de l’image finale publiée (nom, famille, labels, description). Un même source peut être référencé par plusieurs build.
build — enchaîne source, provisioners, post-processors
build {
name = "app"
sources = ["source.googlecompute.app"]
provisioner "shell" {
script = "scripts/install.sh"
}
post-processor "manifest" {
output = "manifest.json"
}
}sources peut lister plusieurs builders (ex. googlecompute et amazon-ebs) pour produire des images multi-cloud à partir des mêmes provisioners.
En relation avec
- Architecture — Vue d’ensemble — hub architecture
- Builders — détail des builders
- Provisioners — détail des provisioners
- Post-processors — détail des post-processors