Skip to main content

Variables

https://developer.hashicorp.com/packer/docs/templates/hcl_templates/variables

Las variables en Packer son prácticamente iguales a Terraform.

Un bloque de variables puede tener los siguientes argumentos

  • default: Valor por defecto si no se define, es opcional.

  • type: toda variable debe ser del tipo string, number o bool

    • string
    • number
    • bool
    • Pero puede ser también un conjunto de ellas
    list(<TYPE>)
    set(<TYPE>)
    map(<TYPE>)
    object({<ATTR NAME> = <TYPE>, ... })
    tuple([<TYPE>, ...])
  • description: Documentación de la variable, es buena práctica utilizarla, pero no es obligatorio.

  • validation: Bloque que valida si el valor de la variable puede o no ser utilizado. No es obligatorio.

  • sensitive: Si el valor de la variable no debe ser mostrado en la consola, definir como true. El valor por defecto es false y no es obligatorio.

Veamos este ejemplo. El nombre de la variable va entre comillas, en minúscula y debe usarse _ en lugar de - si el nombre es compuesto.

variable "environment" {
type = string
description = "Nombre del ambiente"
}
variable "instance_type" {
type = string
description = "Instancia que será utilizada para procesamiento de las configuraciones"
default = "t3.medium"
}

Ahora imaginemos que environment puede ser solamente develop, staging o production, ¿qué hacer? En ese caso estamos colocando una condicional con un error si no se establece el valor develop, staging o production.

variable "environment" {
type = string
description = "Ambiente en que la imagen será usada"
validation {
condition = contains(["develop", "staging", "production"], var.environment)
error_message = "Entrada inválida, opciones: \"development\", \"staging\" o \"production\"."
}
}

En este podemos observar que contains es una función que tiene como entrada una lista de posibles palabras y retornará true si alguna de ellas está en la variable var.environment que se pase.

Las funciones son muy útiles y pueden encontrarse en la documentación oficial. Haré una lista de las funciones más usadas más adelante.

Revisa ahora lo que tenemos en project/variables.pkr.hcl

En complemento tenemos lo que usaremos de entrada en estas variables en project/vars

Observa que puedo redefinir un valor de variable que ya tiene un valor por defecto.

La ventaja de trabajar con un archivo para inyectar valores en las variables es que si quiero tener 10 archivos diferentes de estos puedo solamente llamar la función build pasando el que yo quiera.

Puedo tener una entrada para producción, una para develop y otra para staging.

Extra

Variables de Path

  • path.cwd: el directorio desde donde Packer fue iniciado.
  • path.root: el directorio del archivo HCL de entrada o la carpeta de entrada.

Algunas variables son especiales y existentes que pueden ser referenciadas en el build en relación al source. Esto será explicado en build.