Evaluación de expresiones en Bake
Los archivos de Bake en formato HCL admiten la evaluación de expresiones, lo que te permite realizar operaciones aritméticas, establecer valores de forma condicional y más.
Operaciones aritméticas
Puedes realizar operaciones aritméticas en las expresiones. El siguiente ejemplo muestra cómo multiplicar dos números.
sum = 7*6
target "default" {
args = {
answer = sum
}
}Imprimir el archivo de Bake con la bandera --print muestra el valor evaluado para el argumento de compilación answer.
$ docker buildx bake --print
{
"target": {
"default": {
"context": ".",
"dockerfile": "Dockerfile",
"args": {
"answer": "42"
}
}
}
}Operadores ternarios
Puedes utilizar operadores ternarios para registrar un valor de forma condicional.
El siguiente ejemplo añade una etiqueta (tag) solo cuando una variable no está vacía, utilizando la función integrada notequal.
variable "TAG" {}
target "default" {
context="."
dockerfile="Dockerfile"
tags = [
"my-image:latest",
notequal("",TAG) ? "my-image:${TAG}": ""
]
}En este caso, TAG es una cadena vacía, por lo que la configuración de compilación resultante solo contiene la etiqueta fija my-image:latest.
$ docker buildx bake --print
{
"target": {
"default": {
"context": ".",
"dockerfile": "Dockerfile",
"tags": ["my-image:latest"]
}
}
}Expresiones con variables
Puedes usar expresiones con variables para establecer valores de forma condicional o para realizar operaciones aritméticas.
El siguiente ejemplo utiliza expresiones para establecer valores basándose en el valor de las variables. El argumento de compilación v1 se establece en "higher" si la variable FOO es mayor que 5, de lo contrario se establece en "lower". El argumento de compilación v2 se establece en "yes" si la variable IS_FOO es verdadera (true), de lo contrario se establece en "no".
variable "FOO" {
default = 3
}
variable "IS_FOO" {
default = true
}
target "app" {
args = {
v1 = FOO > 5 ? "higher" : "lower"
v2 = IS_FOO ? "yes" : "no"
}
}Imprimir el archivo de Bake con la bandera --print muestra los valores evaluados para los argumentos de compilación v1 y v2.
$ docker buildx bake --print app
{
"group": {
"default": {
"targets": ["app"]
}
},
"target": {
"app": {
"context": ".",
"dockerfile": "Dockerfile",
"args": {
"v1": "lower",
"v2": "yes"
}
}
}
}