La sintassi dell'espressione espone tutte le funzionalità disponibili delle espressioni nei modelli Cloud Assembly.
La seguente sintassi è rappresentata solo in parte negli esempi illustrati in Espressioni di Cloud Assembly.
Valori letterali
Sono supportati i valori letterali seguenti:
- Booleano (true o false)
- Intero
- Virgola mobile
- Stringa
La barra rovesciata esegue l'escape delle virgolette doppie, delle virgolette singole e della barra rovesciata stessa:
"
con escape diventa\"
'
con escape diventa\'
\
con escape diventa\\
Le virgolette devono essere sottoposte a escape solo all'interno di una stringa racchiusa dallo stesso tipo di virgolette, come illustrato nel seguente esempio.
"I am a \"double quoted\" string inside \"double quotes\"."
- Null
Variabili di ambiente
Nomi di ambiente:
- orgId
- projectId
- projectName
- deploymentId
- deploymentName
- blueprintId
- blueprintVersion
- blueprintName
- requestedBy (utente)
- requestedAt (ora)
Sintassi:
env.ENV_NAME
Esempio:
${env.blueprintId}
Variabili di risorsa
Le variabili di risorsa consentono di eseguire il binding alle proprietà delle risorse da altre risorse.
Sintassi:
resource.RESOURCE_NAME.PROPERTY_NAME
I nomi delle risorse non possono contenere trattini né punti. I caratteri di sottolineatura sono consentiti.
Esempi:
${resource.db.id}
${resource.db.networks[0].address}
${resource.app.id}
(restituisce la stringa per le risorse non in cluster, dove il conteggio non è specificato. Restituisce la matrice per le risorse in cluster.)${resource.app[0].id}
(restituisce la prima voce per le risorse in cluster.)
Variabili autonome delle risorse
Le variabili autonome delle risorse sono consentite solo per le risorse che supportano la fase di allocazione. Le variabili autonome delle risorse sono disponibili (o hanno un valore impostato) solo dopo il completamento della fase di allocazione.
Sintassi:
self.property_name
Esempio:
${self.address}
(restituisce l'indirizzo assegnato durante la fase di allocazione.)
Si noti che per una risorsa denominata resource_x
, self.property_name
e resource.resource_x.property_name
sono uguali e sono entrambi considerati come autoriferimenti.
Condizioni
Sintassi:
- Gli operatori di uguaglianza sono
==
e!=
. - Gli operatori relazionali sono
<
>
<=
e>=
. - Gli operatori logici sono
&&
||
e!
. - Le istruzioni condizionali utilizzano il modello:
condition-expression
?
true-expression :false-expression
Esempi:
${input.count < 5 && input.size == 'small'}
${input.count < 2 ? "small":"large"}
Indice di conteggio cluster
Sintassi:
count.index
Esempi:
- Restituisce il tipo di nodo per le risorse in cluster:
${count.index == 0 ? "primary":"secondary"}
- Impostare la dimensione di ciascun disco durante l'allocazione:
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)}'
- Per ulteriori esempi, vedere Cluster di macchine e dischi in Cloud Assembly.
Operatori aritmetici
Sintassi:
Gli operatori sono +
–
/
*
e %
.
Esempio:
${(input.count + 5) * 2}
Concatenazione di stringhe
Sintassi:
${'ABC' + 'DEF'}
restituisce ABCDEF
.
Operatori [] e.
L'espressione segue ECMAScript nell'unificazione del trattamento degli operatori [ ] e .
Quindi, expr.identifier
è equivalente a expr["identifier"]
. L'identificatore viene utilizzato per costruire un valore letterale il cui valore è l'identificatore. L'operatore [ ] viene quindi utilizzato con tale valore.
Esempio:
${resource.app.networks[0].address}
Inoltre, quando una proprietà include uno spazio, delimitarlo con parentesi quadre e virgolette doppie anziché utilizzare la notazione dei punti.
Non corretto:
input.operating system
Corretto:
input["operating system"]
Costruzione della mappa
Sintassi:
${{'key1':'value1', 'key2':input.key2}}
Costruzione della matrice
Sintassi:
${['key1','key2']}
Esempio:
${[1,2,3]}
Funzioni
Sintassi:
${function(arguments...)}
Esempio:
${to_lower(resource.app.name)}
Funzione | Descrizione |
---|---|
abs(number) | Valore numerico assoluto |
avg(array) | Restituisce la media di tutti i valori della matrice di numeri |
base64_decode(string) | Restituisce il valore base64 decodificato |
base64_encode(string) | Restituisce il valore base64 codificato |
ceil(number) | Restituisce il valore più piccolo (più vicino a infinito negativo) maggiore o uguale all'argomento e uguale a un numero intero matematico |
contains(array, value) | Controlla se la matrice contiene un valore |
contains(string, value) | Controlla se la stringa contiene un valore |
digest(value, type) | Restituisce il digest del valore utilizzando il tipo supportato (md5, sha1, sha256, sha384, sha512) |
ends_with(subject, suffix) | Controlla se la stringa dell'oggetto finisce con la stringa di un prefisso |
filter_by(array, filter) | Restituisce solo le voci di array che superano l'operazione di filtro
restituisce
restituisce |
floor(number) | Restituisce il valore più grande (più vicino a infinito positivo) minore o uguale all'argomento e uguale a un numero intero matematico |
format(format, values...) | Restituisce una stringa formattata utilizzando il formato e i valori di Class Formatter di Java. |
from_json(string) | Analizza la stringa JSON |
join(array, delim) | Unisce la matrice di stringhe con un delimitatore e restituisce una stringa |
json_path(value, path) | Valuta il percorso rispetto al valore utilizzando XPath for JSON. |
keys(map) | Restituisce le chiavi della mappa |
length(array) | Restituisce la lunghezza della matrice |
length(string) | Restituisce la lunghezza della stringa |
map_by(array, operation) | Restituisce ogni voce di array con un'operazione applicata
restituisce
restituisce
restituisce |
map_to_object(array, keyname) | Restituisce un array di coppie key:value del nome della chiave specificato associato ai valori di un altro array
restituisce un array di coppie key:value con un campo di chiave denominato source associato a stringhe di ID disco Si noti che
restituisce lo stesso risultato |
matches(string, regex) | Verifica se la stringa corrisponde a un'espressione regex |
max(array) | Restituisce il valore massimo della matrice di numeri |
merge(map, map) | Restituisce una mappa unita |
min(array) | Restituisce il valore minimo della matrice di numeri |
not_null(array) | Restituisce la prima voce che non è null |
now() | Restituisce l'ora corrente in formato ISO-8601 |
range(start, stop) | Restituisce una serie di numeri in incrementi di 1 che inizia con il numero iniziale e termina subito prima del numero finale |
replace(string, target, replacement) | Sostituisce la stringa contenente la stringa di destinazione con la stringa di destinazione |
reverse(array) | Inverte le voci della matrice |
slice(array, begin, end) | Restituisce una sezione della matrice dall'indice iniziale all'indice finale |
split(string, delim) | Divide la stringa con un delimitatore e restituisce una matrice di stringhe |
starts_with(subject, prefix) | Controlla se la stringa dell'oggetto inizia con la stringa di un prefisso |
substring(string, begin, end) | Restituisce la sottostringa della stringa dall'indice iniziale all'indice finale |
sum(array) | Restituisce la somma di tutti i valori della matrice di numeri |
to_json(value) | Serializza il valore come stringa JSON |
to_lower(str) | Converte la stringa in lettere minuscole |
to_number(string) | Analizza la stringa come numero |
to_string(value) | Restituisce la rappresentazione stringa del valore |
to_upper(str) | Converte la stringa in lettere maiuscole |
trim(string) | Rimuove gli spazi iniziali e finali |
url_encode(string) | Codifica la stringa utilizzando la specifica di codifica URL |
uuid() | Restituisce l'UUID generato in modo casuale |
values(map) | Restituisce i valori della mappa |
Risoluzione dei problemi
Il linguaggio YAML utilizza i due punti e lo spazio (": ") come separatore tra chiave e valore nelle coppie chiave-valore. La sintassi dell'espressione dipende dal codice YAML. A volte, uno spazio dopo i due punti può causare un errore nell'espressione.
Ad esempio, lo spazio tra "win" :
e "lin"
nell'espressione seguente causa un errore.
${contains(input.image,"(Windows") == true ? "win" : "lin"}
L'espressione in funzione omette lo spazio.
${contains(input.image,"(Windows") == true ? "win" :"lin"}
Se un'espressione continua a non riuscire, provare a racchiudere l'intera espressione in un segno di graduazione come mostrato.
ezOS: '${contains(input.image,"(Windows") == true ? "win" :"lin"}'