La sintaxis de expresión expone todas las capacidades disponibles de las expresiones en las plantillas de Automation Assembler.

Nota: Las expresiones de Automation Assembler no son iguales a las expresiones regulares.

La siguiente sintaxis solo se representa de manera parcial en los ejemplos que se muestran en Expresiones de Automation Assembler.

Literales

Se admiten los siguientes literales:

  • Booleano (True o False)
  • Entero
  • Punto flotante
  • String

    La barra diagonal inversa sirve de carácter de escape de las comillas dobles, las comillas simples y la propia barra diagonal inversa:

    " con carácter de escape: \"

    ' con carácter de escape: \'

    \ con carácter de escape: \\

    Las comillas solo deben contar con caracteres de escape dentro de una cadena rodeada del mismo tipo de comillas, como se muestra en el siguiente ejemplo.

    "I am a \"double quoted\" string inside \"double quotes\"."

  • Nulo

Variables de entorno

Nombres de entorno:

  • orgId
  • projectId
  • projectName
  • deploymentId
  • deploymentName
  • blueprintId
  • blueprintVersion
  • blueprintName
  • requestedBy (usuario)
  • requestedAt (hora)

Sintaxis:

env.ENV_NAME

Ejemplo:

${env.blueprintId}

Variables de recursos

Las variables de recursos permiten enlazar con propiedades de recursos desde otros recursos.

Sintaxis:

resource.RESOURCE_NAME.PROPERTY_NAME

Los nombres de recursos no pueden contener guiones ni puntos. Se permiten los guiones bajos.

Ejemplos:

  • ${resource.db.id}
  • ${resource.db.networks[0].address}
  • ${resource.app.id} (devuelve la cadena de recursos que no están agrupados en clúster donde no se especifica el recuento; asimismo, devuelve la matriz de los recursos agrupados en clúster).
  • ${resource.app[0].id} (devuelve la primera entrada de los recursos agrupados en clúster).

Variables self de recursos

Las variables self de recursos solo se pueden usar con recursos que admiten la fase de asignación. Las variables self de recursos solo están disponibles (o solo tienen un valor establecido) después de que se complete la fase de asignación.

Sintaxis:

self.property_name

Ejemplo:

${self.address} (devuelve la dirección asignada durante la fase de asignación).

Tenga en cuenta que para un recurso con el nombre resource_x, self.property_name y resource.resource_x.property_name son lo mismo y se consideran referencias propias.

Condiciones

Sintaxis:

  • Los operadores de igualdad son "==" y "!=".
  • Los operadores relacionales son "<", ">", "<=" y ">=".
  • Los operadores lógicos son "&&", "||" y "!".
  • Los condicionales utilizan el siguiente patrón:

    expresión-de-condición ? expresión-verdadera :expresión-falsa

Ejemplos:

${input.count < 5 && input.size == 'small'}

${input.count < 2 ? "small":"large"}

Índice de recuento de clústeres

Sintaxis:

count.index

Ejemplos:

  • Devuelva el tipo de nodo de los recursos agrupados en clúster:

    ${count.index == 0 ? "primary":"secondary"}

  • Establezca el tamaño de cada disco durante la asignación:
    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)}'
    
  • Para ver más ejemplos, consulte Clústeres de máquinas y discos en Automation Assembler.

Operadores aritméticos

Sintaxis:

Los operadores son "+", "", "/", "*" y "%".

Ejemplo:

${(input.count + 5) * 2}

Concatenación de cadenas

Sintaxis:

${'ABC' + 'DEF'} se evalúa como ABCDEF.

Operadores "[ ]" y "."

La expresión cumple con ECMAScript al unificar el tratamiento de los operadores "[ ]" y ".".

Por tanto, expr.identifier equivale a expr["identifier"]. El identificador se utiliza para construir un literal cuyo valor sea el identificador y, a continuación, el operador "[ ]" se utiliza con ese valor.

Ejemplo:

${resource.app.networks[0].address}

Además, cuando una propiedad incluye un espacio, delimite con corchetes y comillas dobles en lugar de utilizar notación de punto.

Incorrecto:

input.operating system

Correcto:

input["operating system"]

Construcción de mapa

Sintaxis:

${{'key1':'value1', 'key2':input.key2}}

Construcción de matriz

Sintaxis:

${['key1','key2']}

Ejemplo:

${[1,2,3]}

Funciones

Sintaxis:

${función(argumentos...)}

Ejemplo:

${to_lower(resource.app.name)}

Tabla 1. Funciones
Función Descripción
abs(número) El valor numérico absoluto.
avg(matriz) Devuelve el promedio de todos los valores de una matriz de números.
base64_decode(cadena) Devuelve el valor Base64 descodificado.
base64_encode(cadena) Devuelve el valor Base64 codificado.
ceil(número) Devuelve el valor más pequeño (el más cercano al infinito negativo) que sea superior o igual al argumento, y que sea igual a un entero matemático.
contains(matriz, valor) Comprueba si la matriz contiene un valor.
contains(cadena, valor) Comprueba si la cadena contiene un valor.
digest(valor, tipo) Devuelve un resumen del valor con un tipo admitido (MD5, SHA1, SHA256, SHA384 o SHA512).
ends_with(asunto, sufijo) Comprueba si una cadena de asunto termina con una cadena de sufijo.
filter_by(matriz, filtro)

Devuelve solo las entradas de matriz que pasan la operación de filtro.

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

Devuelve [2, 3]

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

Devuelve [{"key2": 2}]

floor(número) Devuelve el valor más grande (el más cercano al infinito positivo) que sea inferior o igual al argumento, y que sea igual a un entero matemático.
format(formato, valores...) Devuelve una cadena con formato mediante el formato y los valores de Class Formatter de Java.
from_json(cadena) Analiza la cadena JSON.
join(matriz, delimitador) Une una matriz de cadenas con un delimitador y devuelve una cadena.
json_path(valor, ruta de acceso) Evalúa la ruta de acceso en relación con el valor mediante XPath for JSON.
keys(asignación) Devuelve claves de asignación.
length(matriz) Devuelve la longitud de una matriz.
length(cadena) Devuelve la longitud de una cadena.
map_by(matriz, operación)

Devuelve cada entrada de matriz con una operación aplicada.

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

Devuelve [10, 20]

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

Devuelve ["1", "2"]

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

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

map_to_object(matriz, nombre de clave)

Devuelve una matriz de pares clave-valor del nombre de clave especificado que está emparejado con valores de otra matriz.

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

Devuelve una matriz de pares clave-valor que tiene un campo de clave denominado origen que está emparejado con cadenas de ID de disco.

Tenga en cuenta que map_by(resource.Disk[*].id, id => {'source':id}) devuelve el mismo resultado.

Si se pasan varios argumentos a la función map_to_object, esta devuelve una matriz de objetos anidados, donde las claves forman parte del objeto anidado y los valores se establecen en la clave más interna.

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

devuelve una matriz de objetos con el siguiente formato:

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

El valor de la clave más interna está emparejado con la dirección de una máquina en el clúster Cloud_vSphere_Machine_1.

Hay un objeto por máquina en el clúster. Si hay tres máquinas en el clúster, hay tres entradas en el objeto:

{

    "ip":

{              "addr": <value>      }
,

    "ip":

{              "addr": <value>      }
,

    "ip":

{              "addr": <value>      }
}
matches(cadena, expresión regular) Comprueba si una cadena coincide con una expresión regular.
max(matriz) Devuelve el valor máximo de una matriz de números.
merge(asignación, asignación) Devuelve una asignación combinada.
min(matriz) Devuelve el valor mínimo de una matriz de números.
not_null(matriz) Devuelve la primera entrada que no sea nula.
now() Devuelve la hora actual en formato ISO-8601.
range(inicio, detención) Devuelve una serie de números en incrementos de 1 que comienza con el número de inicio y finaliza justo antes del número de detención.
replace(cadena, destino, reemplazo) Reemplaza la cadena que contiene la cadena de destino por la cadena de destino.
reverse(matriz) Invierte las entradas de una matriz.
slice(matriz, inicio, finalización) Devuelve un segmento de matriz desde el índice de inicio hasta el de finalización.
split(cadena, delimitador) Divide una cadena con un delimitador y devuelve una matriz de cadenas.
starts_with(asunto, prefijo) Comprueba si una cadena de asunto empieza con una cadena de prefijo.
substring(cadena, inicio, finalización) Devuelve una subcadena de una cadena desde el índice de inicio hasta el de finalización.
sum(matriz) Devuelve la suma de todos los valores de una matriz de números.
to_json(valor) Serializa el valor como una cadena JSON.
to_lower(cadena) Convierte una cadena en minúsculas.
to_number(cadena) Analiza una cadena como un número.
to_string(valor) Devuelve la representación de cadena del valor.
to_upper(cadena) Convierte una cadena en mayúsculas.
trim(cadena) Elimina espacios iniciales y finales.
url_encode(cadena) Codifica una cadena mediante la especificación de codificación de URL.
uuid() Devuelve un UUID generado de forma aleatoria.
values(asignación) Devuelve valores de asignación.

Solución de problemas

El lenguaje YAML utiliza dos puntos y un espacio (": ") como separador entre la clave y el valor en los pares de clave-valor. La sintaxis de la expresión depende de YAML, por lo que un espacio después de dos puntos a veces puede provocar un error en una expresión.

Por ejemplo, el espacio entre "win" : y "lin" en la siguiente expresión provoca un error.

${contains(input.image,"Windows") == true ? "win" : "lin"}

La expresión de trabajo omite el espacio.

${contains(input.image,"Windows") == true ? "win" :"lin"}

Si una expresión sigue fallando, intente escribir la expresión completa entre marcas de verificación, como se muestra.

ezOS: '${contains(input.image,"Windows") == true ? "win" :"lin"}'