La sintaxis de expresión expone todas las capacidades disponibles de las expresiones en las plantillas de Cloud Assembly.
La siguiente sintaxis solo se representa de manera parcial en los ejemplos que se muestran en Expresiones de Cloud Assembly.
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 Cloud Assembly.
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)}
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.
Devuelve
Devuelve |
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.
Devuelve
Devuelve
Devuelve |
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.
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
devuelve el mismo resultado. |
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"}'