É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"
}
}
}
}