La sintassi dell'espressione espone tutte le funzionalità disponibili delle espressioni nei modelli Automation Assembler.

Nota: Le espressioni Automation Assembler non sono uguali alle espressioni regolari (regex).

La seguente sintassi è rappresentata solo in parte negli esempi illustrati in Espressioni di Automation Assembler.

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 Automation Assembler.

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)}

Tabella 1. Funzioni
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

filter_by([1,2,3,4], x => x >= 2 && x <= 3)

restituisce [2, 3]

filter_by({'key1':1, 'key2':2}, (k,v) => v != 1)

restituisce [{"key2": 2}]

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
from_yaml(yamlText, decode_binary=true/false) Convertire YAML nel formato 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

map_by([1,2], x => x * 10)

restituisce [10, 20]

map_by([1,2], x => to_string(x))

restituisce ["1", "2"]

map_by({'key1':1, 'key2':2}, (k,v) => {k:v*10})

restituisce [{"key1":10},{"key2":20}]

map_to_object(array, keyname)

Restituisce un array di coppie key:value del nome della chiave specificato associato ai valori di un altro array

map_to_object(resource.Disk[*].id, "source")

restituisce un array di coppie key:value con un campo di chiave denominato source associato a stringhe di ID disco.

Si noti che map_by(resource.Disk[*].id, id => {'source':id}) restituisce lo stesso risultato.

Se vengono passati più argomenti alla funzione map_to_object, viene restituito un array di oggetti nidificati in cui le chiavi fanno parte dell'oggetto nidificato e i valori vengono impostati sulla chiave più interna.

map_to_object(resource.Cloud_vSphere_Machine_1[*].address, "ip", "addr")

restituisce un array di oggetti nel formato seguente:

 { 
          "ip" : {
               "addr" : <value>
          }
      }

Il valore della chiave più interna viene associato all'indirizzo di una macchina nel cluster Cloud_vSphere_Machine_1.

Nel cluster è presente un oggetto per macchina. Se nel cluster sono presenti tre macchine, nell'oggetto saranno presenti tre voci:

{

    "ip":

{              "addr": <value>      }
,

    "ip":

{              "addr": <value>      }
,

    "ip":

{              "addr": <value>      }
}
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
to_yaml(jsonText): Riconvertire JSON nel formato YAML.
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"}'