Évaluation des expressions dans Bake
Les fichiers Bake au format HCL prennent en charge l'évaluation d'expressions, ce qui vous permet d'effectuer des opérations arithmétiques, de définir des valeurs de manière conditionnelle, et plus encore.
Opérations arithmétiques
Vous pouvez effectuer des opérations arithmétiques dans les expressions. L'exemple suivant montre comment multiplier deux nombres.
sum = 7*6
target "default" {
args = {
answer = sum
}
}L'impression du fichier Bake avec l'indicateur --print affiche la valeur évaluée pour
l'argument de build answer.
$ docker buildx bake --print
{
"target": {
"default": {
"context": ".",
"dockerfile": "Dockerfile",
"args": {
"answer": "42"
}
}
}
}Opérateurs ternaires
Vous pouvez utiliser des opérateurs ternaires pour enregistrer une valeur de manière conditionnelle.
L'exemple suivant ajoute un tag uniquement lorsqu'une variable n'est pas vide, en utilisant la
fonction intégrée notequal fonction.
variable "TAG" {}
target "default" {
context="."
dockerfile="Dockerfile"
tags = [
"my-image:latest",
notequal("",TAG) ? "my-image:${TAG}": ""
]
}Dans ce cas, TAG est une chaîne vide, donc la configuration de build résultante
ne contient que le tag my-image:latest codé en dur.
$ docker buildx bake --print
{
"target": {
"default": {
"context": ".",
"dockerfile": "Dockerfile",
"tags": ["my-image:latest"]
}
}
}Expressions avec des variables
Vous pouvez utiliser des expressions avec des variables pour définir des valeurs de manière conditionnelle, ou pour effectuer des opérations arithmétiques.
L'exemple suivant utilise des expressions pour définir des valeurs en fonction de la valeur des
variables. L'argument de build v1 est défini sur "higher" si la variable FOO est
supérieure à 5, sinon il est défini sur "lower". L'argument de build v2 est défini
sur "yes" si la variable IS_FOO est vraie, sinon il est défini sur "no".
variable "FOO" {
default = 3
}
variable "IS_FOO" {
default = true
}
target "app" {
args = {
v1 = FOO > 5 ? "higher" : "lower"
v2 = IS_FOO ? "yes" : "no"
}
}L'impression du fichier Bake avec l'indicateur --print affiche les valeurs évaluées pour
les arguments de build v1 et v2.
$ docker buildx bake --print app
{
"group": {
"default": {
"targets": ["app"]
}
},
"target": {
"app": {
"context": ".",
"dockerfile": "Dockerfile",
"args": {
"v1": "lower",
"v2": "yes"
}
}
}
}