Skip to main content

Comandos

Sobre el lenguaje

Es posible utilizar tanto JSON como el lenguaje HCL2 de HashiCorp.

Se recomienda fuertemente utilizar HCL2 en lugar de usar JSON. HCL2 es muy parecido a Terraform.

La documentación mostrará ejemplos en la mayoría de los casos en ambos lenguajes, pero la propia HashiCorp recomienda que quien esté utilizando JSON migre a HCL2.

Algunos comandos no funcionan con archivos JSON:

  • init
  • fmt
  • uso de funciones

Una mejor explicación sobre el modelo HCL estará disponible en Modelo.

Comandos de la CLI

Para facilitar, instala el autocompletado de Packer para que el tab funcione y autocomplete comandos.

packer -autocomplete-install

Haz un recorrido con la CLI de Packer y verás lo simple que es

packer -h
Usage: packer [--version] [--help] <command> [<args>]

Available commands are:
build build image(s) from template
console creates a console for testing variable interpolation
fix fixes templates from old versions of packer
fmt Rewrites HCL2 config files to canonical format
hcl2_upgrade transform a JSON template into an HCL2 configuration
init Install missing plugins or upgrade plugins
inspect see components of a template
plugins Interact with Packer plugins and catalog
validate check that a template is valid
version Prints the Packer version

Init

El comando packer init se utiliza para descargar los binarios de plugins de Packer. Este es el primer comando que debe ejecutarse al trabajar con una plantilla nueva o existente. Este comando siempre es seguro de ejecutar múltiples veces. Aunque las ejecuciones subsecuentes puedan presentar errores, este comando nunca eliminará nada.

packer init solo busca binarios de proyectos públicos de GitHub.

packer init -upgrade actualizará los plugins

Hablaremos sobre plugins más adelante

Format

El comando packer fmt se utiliza para formatear archivos de configuración HCL2 a un formato y estilo canónico. Los archivos JSON no se modifican.

Bueno para ser usado en pipelines.

# Solo muestra archivos que sufrirán diferencias para los archivos del directorio corriente
packer fmt -check .
aws.pkr.hcl

# Hace un diff y muestra lo que va a pasar en los archivos del directorio corriente
packer fmt -diff .
aws.pkr.hcl
--- old/aws.pkr.hcl
+++ new/aws.pkr.hcl
@@ -25,7 +25,7 @@

build {
sources = ["source.amazon-ebs.teste"]
-
+
provisioner "file" {
destination = "/tmp"
source = "./teste"

Validate

El comando packer validate se utiliza para validar la sintaxis y la configuración de una plantilla. El comando retornará un estado de salida cero en caso de éxito y un estado de salida diferente de cero en caso de fallo.

Si todas las variables tienen su valor por defecto o están estáticamente definidas, solamente el comando packer validate será suficiente.

Sin embargo, si alguna variable no tiene el valor por defecto definido, es necesario pasar o el valor de la variable o el archivo de configuración de las variables (que es lo más recomendado)

# Comando ejecutado dentro del directorio que contiene los modelos
packer validate .
The configuration is valid.

# Pasando un archivo de configuraciones de los valores de las variables
packer validate -var-file="./vars/miproyecto.auto.pkrvars.hcl" .
The configuration is valid.

# O solamente la sintaxis
packer validate -syntax-only .
Syntax-only check passed. Everything looks okay.

Build

El comando packer build toma una plantilla y ejecuta todas las compilaciones dentro de ella para generar un conjunto de artefactos. Las diversas compilaciones especificadas en una plantilla se ejecutan en paralelo, a menos que se especifique lo contrario. Y los artefactos creados se generarán al final de la compilación.

Para cualquier comando a continuación puede usarse el parámetro -debug para ayudar a resolver problemas.

Como se mencionó, es posible la ejecución en paralelo si, por ejemplo, se está creando una imagen para AWS y Azure al mismo tiempo, y esto está habilitado por defecto, pero puede desactivarse si es necesario.

Me gusta mucho redirigir la salida a un archivo de log usando un | tee > build.log al final del comando. El terminal termina perdiendo algunas líneas importantes y termina siendo bueno tener toda la salida disponible para análisis.

packer build -var-file="./vars/teste.auto.pkrvars.hcl" . | tee log
amazon-ebs.teste: output will be in this color.

==> amazon-ebs.teste: Prevalidating any provided VPC information
==> amazon-ebs.teste: Prevalidating AMI Name: teste-20230304194337
amazon-ebs.teste: Found Image ID: ami-09a187f07b7a0769e
==> amazon-ebs.teste: Creating temporary keypair: packer_64039f69-6288-44c4-8806-cf8929a15f90
==> amazon-ebs.teste: Creating temporary security group for this instance: packer_64039f6e-afba-1c56-8ddb-d7adfcc6da30
...

Packer build toma un argumento. Cuando se pasa un directorio, todos los archivos en la carpeta con un nombre que termina con .pkr.hcl o .pkr.json serán analizados. Cuando se pasa un archivo, solo este será analizado.