La syntaxe d'expression expose toutes les fonctionnalités disponibles des expressions dans les modèles Cloud Assembly.
La syntaxe suivante n'est que partiellement représentée dans les exemples fournis dans Expressions Cloud Assembly.
Littéraux
Les littéraux suivants sont pris en charge :
- Booléen (vrai ou faux)
- Entier
- Virgule flottante
- Chaîne
Une barre oblique place les guillemets, les guillemets simples et les barres obliques inverses dans une séquence d'échappement :
"
est placé dans une séquence d'échappement en tant que\"
'
est placé dans une séquence d'échappement en tant que\'
\
est placé dans une séquence d'échappement en tant que\\
Les guillemets ne doivent être précédés d'un caractère d'échappement que s'ils apparaissent dans une chaîne délimitée par des guillemets de même type, comme dans l'exemple ci-dessous.
"I am a \"double quoted\" string inside \"double quotes\"."
- Null
Variables d'environnement
Noms d'environnement :
- orgId
- projectId
- projectName
- deploymentId
- deploymentName
- blueprintId
- blueprintVersion
- blueprintName
- requestedBy (utilisateur)
- requestedAt (heure)
Syntaxe :
env.ENV_NAME
Exemple :
${env.blueprintId}
Variables de ressource
Les variables de ressource vous permettent de lier les propriétés de ressource à partir d'autres ressources.
Syntaxe :
resource.RESOURCE_NAME.PROPERTY_NAME
Les noms de ressources ne peuvent pas contenir de tirets ou de points. Les traits de soulignement sont autorisés.
Exemples :
${resource.db.id}
${resource.db.networks[0].address}
${resource.app.id}
(Renvoyer la chaîne pour les ressources hors cluster, où le nombre n'est pas spécifié. Renvoyer le tableau pour les ressources en cluster.)${resource.app[0].id}
(Renvoyer la première entrée pour les ressources en cluster.)
Variables self de ressource
Les variables self de ressource sont autorisées uniquement pour les ressources prenant en charge la phase d'allocation. Les variables self de ressource sont uniquement disponibles (ou ont uniquement une valeur définie) une fois la phase d'allocation terminée.
Syntaxe :
self.property_name
Exemple :
${self.address}
(Renvoyer l'adresse attribuée lors de la phase d'allocation.)
Notez que pour une ressource nommée resource_x
, self.property_name
et resource.resource_x.property_name
sont les mêmes et sont considérés comme des autoréférences.
Conditions
Syntaxe :
- Les opérateurs d'égalité sont
==
et!=
. - Les opérateurs relationnels sont
<
>
<=
et>=
. - Les opérateurs logiques sont
&&
||
et!
. - Les conditions utilisent le modèle :
expression de condition
?
expression vraie :expression fausse
Exemples :
${input.count < 5 && input.size == 'small'}
${input.count < 2 ? "small":"large"}
Index du nombre de clusters
Syntaxe :
count.index
Exemples :
- Renvoyer le type de nœud pour les ressources en cluster :
${count.index == 0 ? "primary":"secondary"}
- Définissez la taille de chaque disque lors de l'allocation :
inputs: disks: type: array minItems: 0 maxItems: 12 items: type: object properties: size: type: integer title: Size (GB) minSize: 1 maxSize: 2048 resources: Cloud_vSphere_Disk_1: type: Cloud.vSphere.Disk allocatePerInstance: true properties: capacityGb: '${input.disks[count.index].size}' count: '${length(input.disks)}'
- Pour obtenir plus d'exemples, consultez Clusters de machines et de disques dans Cloud Assembly.
Opérateurs arithmétiques
Syntaxe :
Les opérateurs sont +
–
/
*
et %
.
Exemple :
${(input.count + 5) * 2}
Concaténation de chaînes
Syntaxe :
${'ABC' + 'DEF'}
correspond à ABCDEF
.
Opérateurs [ ] et .
L'expression suit ECMAScript lors de l'unification du traitement des opérateurs [ ] et . .
Par conséquent, expr.identifier
équivaut à expr["identifier"]
. L'identifiant est utilisé pour construire un littéral dont la valeur est l'identifiant, puis l'opérateur [ ] est utilisé avec cette valeur.
Exemple :
${resource.app.networks[0].address}
En outre, lorsqu'une propriété inclut un espace, délimitez-la avec des crochets et des guillemets au lieu d'utiliser la notation par points.
Incorrect :
input.operating system
Correct :
input["operating system"]
Construction de la carte
Syntaxe :
${{'key1':'value1', 'key2':input.key2}}
Construction d'un groupe
Syntaxe :
${['key1','key2']}
Exemple :
${[1,2,3]}
Fonctions
Syntaxe :
${fonction(arguments...)}
Exemple :
${to_lower(resource.app.name)}
Fonction | Description |
---|---|
abs(nombre) | Valeur absolue de nombre |
avg(tableau) | Renvoyer la moyenne de toutes les valeurs d'un tableau de nombres |
base64_decode(chaîne) | Renvoyer la valeur base 64 décodée |
base64_encode(chaîne) | Renvoyer la valeur codée en base 64 |
ceil(nombre) | Renvoie la plus petite valeur (la plus proche de l'infini négatif) qui est supérieure ou égale à l'argument, et est égale à un entier mathématique. |
contains(tableau, valeur) | Vérifier si le tableau contient une valeur |
contains(chaîne, valeur) | Vérifier si la chaîne contient une valeur |
digest(valeur, type) | Renvoyer le résumé d'une valeur en utilisant le type pris en charge (md5, sha1, sha256, sha384, sha512) |
ends_with(objet, suffixe) | Vérifier si la chaîne de l'objet se termine par une chaîne de suffixe |
filter_by(tableau, filtre) | Renvoyer uniquement les entrées de tableau qui passent l'opération de filtre
renvoie
renvoie |
floor(nombre) | Renvoie la valeur la plus grande (la plus proche de l'infini positif) qui est inférieure ou égale à l'argument, et est égale à un entier mathématique |
format(format, valeurs...) | Renvoyer une chaîne formatée en n'utilisant le format et les valeurs du formateur de classe Java. |
from_json(chaîne) | Analyser la chaîne JSON |
join(tableau, délimiteur) | Joindre un tableau de chaînes avec un délimiteur et renvoyer une chaîne |
json_path(valeur, chemin) | Évaluer le chemin par rapport à la valeur à l'aide de XPath for JSON. |
keys(mappage) | Renvoyer les clés du mappage |
length(tableau) | Renvoyer la longueur d'un tableau |
length(chaîne) | Renvoyer la longueur d'une chaîne |
map_by(tableau, opération) | Renvoyer chaque entrée de tableau avec une opération lui étant appliquée
renvoie
renvoie
renvoie |
map_to_object(tableau, nom de clé) | Renvoyer un tableau de paires clé:valeur du nom de clé spécifié couplé avec des valeurs d'un autre tableau
renvoie un tableau de paires clé:valeur qui a un champ de clé appelé source couplée avec des chaînes d'ID de disque Notez que
renvoie le même résultat |
matches(chaîne, regex) | Vérifier si la chaîne correspond à une expression regex |
max(tableau) | Renvoyer la valeur maximale d'un tableau de nombres |
merge(mappage, mappage) | Renvoyer un mappage fusionné |
min(tableau) | Renvoyer la valeur minimale d'un tableau de nombres |
not_null(tableau) | Renvoyer la première entrée non null |
now() | Renvoyer l'heure actuelle au format ISO-8601 |
range(début, arrêt) | Renvoyer une série de nombres par incréments de 1 qui commence par le numéro de début et se termine juste avant le numéro d'arrêt |
replace(chaîne, cible, remplacement) | Remplacer la chaîne contenant une chaîne cible par une chaîne cible |
reverse(tableau) | Inverser les entrées du tableau |
slice(tableau, début, fin) | Renvoyer la tranche d'un tableau de l'index de début à l'index de fin |
split(chaîne, délimiteur) | Fractionner la chaîne avec un délimiteur et renvoyer un tableau de chaînes |
starts_with(objet, préfixe) | Vérifier si la chaîne de l'objet commence par une chaîne de préfixe |
substring(chaîne, début, fin) | Renvoyer la sous-chaîne de la chaîne de l'index de début à l'index de fin |
sum(tableau) | Renvoyer la somme de toutes les valeurs d'un tableau de nombres |
to_json(valeur) | Sérialiser la valeur en tant que chaîne JSON |
to_lower(chaîne) | Convertir la chaîne en minuscules |
to_number(chaîne) | Analyser la chaîne en tant que nombre |
to_string(valeur) | Renvoyer la représentation en chaîne de la valeur |
to_upper(chaîne) | Convertir la chaîne en majuscules |
trim(chaîne) | Supprimer les espaces de début et de fin |
url_encode(chaîne) | Coder une chaîne à l'aide d'une spécification de codage URL |
uuid() | Renvoyer un UUID généré de manière aléatoire |
values(mappage) | Renvoyer les valeurs du mappage |
Dépannage
Le langage YAML utilise le signe deux-points et un espace (« : ») comme séparateur des paires clé-valeur. La syntaxe d'expression dépend de YAML. Par conséquent, un espace après deux-points peut parfois entraîner l'échec d'une expression.
Par exemple, l'espace entre "win" :
et "lin"
dans l'expression suivante provoque un échec.
${contains(input.image,"(Windows") == true ? "win" : "lin"}
L'expression de travail omet l'espace.
${contains(input.image,"(Windows") == true ? "win" :"lin"}
Si une expression continue d'échouer, essayez de mettre l'expression entière entre des marques, comme indiqué.
ezOS: '${contains(input.image,"(Windows") == true ? "win" :"lin"}'