A restructurer
Ce contenu a été déplacé depuis le tutoriel GCP. Il sera restructure dans une version ultérieure.
Configuration Packer¶
Écriture du template Packer HCL pour construire une image GCP Compute Engine.
Structure du projet¶
Créez un répertoire pour votre projet Packer :
Structure cible :
packer-gcp/
├── docker-server.pkr.hcl # Template principal
├── variables.pkr.hcl # Variables
├── docker-server.auto.pkrvars.hcl # Valeurs des variables
└── ansible/
├── playbook.yml
└── roles/
└── docker/
├── tasks/main.yml
├── handlers/main.yml
└── defaults/main.yml
Plugin requis¶
Packer a besoin du plugin googlecompute. Declarez-le dans votre template.
Template principal¶
Créez packer-gcp/docker-server.pkr.hcl :
packer {
required_plugins {
googlecompute = {
version = ">= 1.1.0"
source = "github.com/hashicorp/googlecompute"
}
ansible = {
version = ">= 1.1.0"
source = "github.com/hashicorp/ansible"
}
}
}
source "googlecompute" "docker-server" {
project_id = var.project_id
zone = var.zone
source_image_family = var.source_image_family
machine_type = var.machine_type
ssh_username = "packer"
image_name = "docker-server-{{timestamp}}"
image_family = "docker-server"
image_description = "Image serveur avec Docker et Docker Compose"
# --- Universe Domain (environnement souverain) ---
universe_domain = var.universe_domain
# --- Endpoints custom (si necessaire) ---
# Decommentez et adaptez si vos APIs utilisent des URLs specifiques :
# custom_endpoints = {
# compute = "https://compute.my-universe.gcp.example.com/"
# storage = "https://storage.my-universe.gcp.example.com/"
# }
disk_size = 20
disk_type = "pd-ssd"
tags = ["packer-build"]
}
build {
sources = ["source.googlecompute.docker-server"]
provisioner "ansible" {
playbook_file = "./ansible/playbook.yml"
user = "packer"
extra_arguments = [
"--scp-extra-args", "'-O'"
]
}
}
Variables¶
Créez packer-gcp/variables.pkr.hcl :
variable "project_id" {
type = string
description = "ID du projet GCP"
}
variable "zone" {
type = string
default = "europe-west1-b"
description = "Zone GCE pour le build"
}
variable "source_image_family" {
type = string
default = "debian-12"
description = "Famille d'image source"
}
variable "machine_type" {
type = string
default = "e2-medium"
description = "Type de machine pour le build"
}
variable "universe_domain" {
type = string
default = "googleapis.com"
description = "Universe domain GCP (souverain ou standard)"
}
Valeurs des variables¶
Créez packer-gcp/docker-server.auto.pkrvars.hcl :
project_id = "MON-PROJET-ID"
zone = "europe-west1-b"
universe_domain = "my-universe.gcp.example.com"
auto.pkrvars.hcl
Les fichiers *.auto.pkrvars.hcl sont charges automatiquement par Packer. Pas besoin de les passer en argument.
Ne pas commiter vos valeurs
Ajoutez *.auto.pkrvars.hcl a votre .gitignore si le fichier contient des informations sensibles. Commitez plutôt un fichier docker-server.auto.pkrvars.hcl.example avec des placeholders.
Initialisation¶
Telechargez les plugins :
Attendu :
Installed plugin github.com/hashicorp/googlecompute v1.x.x ...
Installed plugin github.com/hashicorp/ansible v1.x.x ...
Validation¶
Verifiez la syntaxe :
Attendu :
Si vous obtenez une erreur, verifiez :
- Les noms de variables correspondent entre
variables.pkr.hcletdocker-server.pkr.hcl - Le fichier
.auto.pkrvars.hclcontient votreproject_id - Les plugins sont installes (
packer init .)
Livrable¶
Checklist
Avant de passer à la suite, verifiez que :
- La structure du projet est créée (
docker-server.pkr.hcl,variables.pkr.hcl,variables.auto.pkrvars.hcl) -
packer init .téléchargé le plugingooglecomputesans erreur -
packer validate .retourné The configuration is valid - Les variables sensibles ne sont pas commitees (fichier
.gitignoreà jour)