Aller au contenu

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 :

mkdir -p packer-gcp/ansible/roles/docker/{tasks,handlers,defaults}

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 :

cd packer-gcp
packer init .

Attendu :

Installed plugin github.com/hashicorp/googlecompute v1.x.x ...
Installed plugin github.com/hashicorp/ansible v1.x.x ...

Validation

Verifiez la syntaxe :

packer validate .

Attendu :

The configuration is valid.

Si vous obtenez une erreur, verifiez :

  • Les noms de variables correspondent entre variables.pkr.hcl et docker-server.pkr.hcl
  • Le fichier .auto.pkrvars.hcl contient votre project_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 plugin googlecompute sans erreur
  • packer validate . retourné The configuration is valid
  • Les variables sensibles ne sont pas commitees (fichier .gitignore à jour)