A sintaxe da expressão expõe todos os recursos disponíveis de expressões em modelos do Cloud Assembly.
A sintaxe a seguir só é parcialmente representada nos exemplos mostrados em Expressões do Cloud Assembly.
Literais
Há suporte para os seguintes literais:
- Boolean (verdadeiro ou falso)
- Inteiro
- Ponto flutuante
- Cadeia de caracteres
Barra invertida com aspas duplas, aspas simples e barra invertida em si:
"
é deixada como\"
'
é deixada como\'
\
é deixada como\\
As aspas só precisam ser deixadas dentro de uma cadeia de caracteres fechada com o mesmo tipo de aspas, como mostra o exemplo a seguir.
"I am a \"double quoted\" string inside \"double quotes\"."
- Nulo
Variáveis de ambiente
Nomes de ambiente:
- orgId
- projectId
- projectName
- deploymentId
- deploymentName
- blueprintId
- blueprintVersion
- blueprintName
- requestedBy (usuário)
- requestedAt (hora)
Sintaxe:
env.ENV_NAME
Exemplo:
${env.blueprintId}
Variáveis de recurso
As variáveis de recurso permitem vincular a propriedades de recursos de outros recursos.
Sintaxe:
resource.RESOURCE_NAME.PROPERTY_NAME
Os nomes de recursos não podem conter traços ou pontos. Sublinhados são permitidos.
Exemplos:
${resource.db.id}
${resource.db.networks[0].address}
${resource.app.id}
(retornar a cadeia de caracteres para recursos não agrupados em cluster, onde a contagem não é especificada. Retorne a matriz para recursos agrupados em cluster.)${resource.app[0].id}
(retornar a primeira entrada para recursos agrupados em cluster.)
Autovariáveis de recurso
Autovariáveis de recursos são permitidas apenas para recursos que oferecem suporte à fase de alocação. Autovariáveis de recursos apenas estão disponíveis (ou apenas têm um conjunto de valores) após a conclusão da fase de alocação.
Sintaxe:
self.property_name
Exemplo:
${self.address}
(retornar o endereço atribuído durante a fase de alocação.)
Observe que, para um recurso denominado resource_x
, self.property_name
e resource.resource_x.property_name
são idênticas e ambas são consideradas autoreferências.
Condições
Sintaxe:
- Os operadores de igualdade são
==
e!=
. - Os operadores relacionais são
<
>
<=
e>=
. - Os operadores lógicos são
&&
||
e!
. - Os condicionais usam o padrão:
condition-expression
?
true-expression :false-expression
Exemplos:
${input.count < 5 && input.size == 'small'}
${input.count < 2 ? "small":"large"}
Índice de contagem do cluster
Sintaxe:
count.index
Exemplos:
- Retorne o tipo de nó para recursos agrupados em cluster:
${count.index == 0 ? "primary":"secondary"}
- Defina o tamanho de cada disco durante a alocação:
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 mais exemplos, consulte Clusters de máquina e disco no Cloud Assembly.
Operadores aritméticos
Sintaxe:
Os operadores são +
–
/
*
e %
.
Exemplo:
${(input.count + 5) * 2}
Concatenação de cadeia de caracteres
Sintaxe:
${'ABC' + 'DEF'}
avalia como ABCDEF
.
Operadores [ ] e .
A expressão segue o ECMAScript ao unificar o tratamento de [ ] e . operadores.
Portanto, expr.identifier
é equivalente a expr["identifier"]
. O identificador é usado para construir um literal cujo valor é o identificador e, em seguida, o operador [ ] é usado com esse valor.
Exemplo:
${resource.app.networks[0].address}
Além disso, quando uma propriedade inclui um espaço, delimite-a com colchetes e aspas duplas em vez de usar a notação de pontos.
Incorreto:
input.operating system
Correto:
input["operating system"]
Construção do mapa
Sintaxe:
${{'key1':'value1', 'key2':input.key2}}
Construção da matriz
Sintaxe:
${['key1','key2']}
Exemplo:
${[1,2,3]}
Funções
Sintaxe:
${função(argumentos...)}
Exemplo:
${to_lower(resource.app.name)}
Função | Descrição |
---|---|
abs(número) | Valor de número absoluto |
avg(matriz) | Retorna a média de todos os valores da matriz de números |
base64_decode(cadeia de caracteres) | Retorna o valor de base64 decodificado |
base64_encode(cadeia de caracteres) | Retorna o valor codificado de base64 |
ceil(número) | Retorna o valor menor (mais próximo ao infinito negativo) que é maior ou igual ao argumento e é igual a um inteiro matemático |
contains(matriz, valor) | Verifica se a matriz contém um valor |
contains(cadeia de caracteres, valor) | Verifica se a cadeia de caracteres contém um valor |
digest(valor, tipo) | Retorna resumo do valor usando o tipo suportado (md5, sha1, sha256, sha384, sha512) |
ends_with(assunto, sufixo) | Verifica se a cadeia de caracteres do assunto termina com cadeia de caracteres de sufixo |
filter_by(matriz, filtro) | Retornar apenas as entradas de matriz que passam a operação de filtro
retorna
retorna |
floor(número) | Retorna o valor maior (mais próximo ao infinito positivo) que é menor ou igual ao argumento e é igual a um inteiro matemático |
format(formato, valores...) | Retorna uma cadeia de caracteres formatada usando o formato e os valores do Formatador de Classe Java. |
from_json(cadeia de caracteres) | Analisa a cadeia de caracteres json |
join(matriz, delim.) | Associa a matriz de cadeias de caracteres a um delimitador e retornar uma cadeia de caracteres |
json_path(valor, caminho) | Avalia o caminho contra o valor usando XPath para JSON. |
keys(mapa) | Retorna chaves do mapa |
length(matriz) | Retorna comprimento da matriz |
length(cadeia de caracteres) | Retorna comprimento da cadeia de caracteres |
map_by(matriz, operação) | Retornar cada entrada de matriz com uma operação aplicada a ela
retorna
retorna
retorna |
map_to_object(matriz, keyname) | Retornar uma matriz de pares key:value do nome de chave especificado emparelhado com valores de outra matriz
retorna uma matriz de pares key:value que tem um campo de chave chamado origem emparelhada com cadeias de caracteres de ID de disco Observe que
retorna o mesmo resultado |
matches(cadeia de caracteres, regex) | Verifica se a cadeia de caracteres corresponde a uma expressão Regex |
max(matriz) | Retorna o valor máximo da matriz de números |
merge(mapa, mapa) | Retorna um mapa mesclado |
min(matriz) | Retorna o valor mínimo da matriz de números |
not_null(matriz) | Retorna a primeira entrada que não é nula |
now() | Retorna a hora atual no formato ISO-8601 |
intervalo(início, parada) | Retornar uma série de números em incrementos de 1 que começa com o número de início e termina antes do número de parada |
replace(cadeia de caracteres, destino, substituição) | Substitui a cadeia de caracteres contendo cadeia de destino com cadeia de destino |
reverse(matriz) | Reverte entradas da matriz |
slice(matriz, início, fim) | Retorna a fatia da matriz do índice inicial para o índice final |
split(cadeia de caracteres, delim.) | Divide a cadeia de caracteres com um delimitador e retornar matriz de cadeias de caracteres |
starts_with(assunto, prefixo) | Verifica se a cadeia de caracteres do assunto começa com a cadeia de prefixo |
substring(cadeia de caracteres, início, fim) | Retorna a subcadeia de caracteres do índice inicial até o índice final |
sum(matriz) | Retorna a soma de todos os valores da matriz de números |
to_json(valor) | Coloca em série o valor como cadeia de caracteres json |
to_lower(cad.) | Converte a cadeia de caracteres em minúsculas |
to_number(cadeia de caracteres) | Analisa a cadeia de caracteres como número |
to_string(valor) | Retorna representação de cadeia de caracteres do valor |
to_upper(cad.) | Converte a cadeia de caracteres em maiúsculas |
trim(cadeia de caracteres) | Remove espaços à esquerda e à direita |
url_encode(cadeia de caracteres) | Codifica a cadeia de caracteres usando a especificação de codificação da URL |
uuid() | Retorna UUID gerado aleatoriamente |
values(mapa) | Retorna valores do mapa |
Solução de problemas
A linguagem YAML usa dois pontos e espaço (": ") como o separador entre chave e valor em pares de chave-valor. A sintaxe da expressão depende do YAML. Portanto, um espaço depois de dois pontos às vezes pode fazer com que uma expressão falhe.
Por exemplo, o espaço entre "win" :
e "lin"
na expressão a seguir causa uma falha.
${contains(input.image,"(Windows") == true ? "win" : "lin"}
A expressão de trabalho omite o espaço.
${contains(input.image,"(Windows") == true ? "win" :"lin"}
Se uma expressão continuar a falhar, tente colocar toda a expressão em marcas de verificação, conforme mostrado.
ezOS: '${contains(input.image,"(Windows") == true ? "win" :"lin"}'