Синтаксис выражений — это совокупность всех возможностей работы с выражениями в шаблонах vRealize Automation Cloud Assembly.

Данный синтаксис частично представлен в примерах, приведенных в разделе Использование выражений для расширения возможностей кода облачных шаблонов в vRealize Automation Cloud Assembly.

Литералы

Поддерживаются следующие литералы.

  • Логическое значение: истина или ложь
  • Целое число
  • Число с плавающей запятой
  • Строка

    Обратная косая черта используется в качестве escape-символа для одинарных и двойных кавычек, а также для самой себя.

    Escape-последовательность для " выглядит как \"

    Escape-последовательность для ' выглядит как \'

    Escape-последовательность для \ выглядит как \\

    Escape-последовательность для кавычек нужна только в строках, заключенных в кавычки того же типа, как показано в следующем примере.

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

  • NULL

Переменные сред

Имена сред:

  • orgId
  • projectId
  • projectName
  • deploymentId
  • deploymentName
  • blueprintId
  • blueprintVersion
  • blueprintName
  • requestedBy (user)
  • requestedAt (time)

Синтаксис

env.ENV_NAME

Пример:

${env.blueprintId}

Переменные ресурсов

Переменные ресурсов позволяют выполнять привязку к свойствам ресурсов из других ресурсов.

Синтаксис

resource.RESOURCE_NAME.PROPERTY_NAME

Примеры:

  • ${resource.db.id}
  • ${resource.db.networks[0].address}
  • ${resource.app.id} (Возвращает строковое значение для некластерных ресурсов, если значение количества не указано; возвращает массив для кластерных ресурсов.)
  • ${resource.app[0].id} (возвращает первую запись для кластерных ресурсов)

Переменные ресурсов self

Переменные ресурсов self разрешены только для ресурсов, которые поддерживают стадию выделения. Переменные ресурсов self доступны только (или имеют только заданное значение) по окончании стадии выделения.

Синтаксис

self.property_name

Пример:

${self.address} (возвращает адрес, назначенный на стадии выделения)

Следует отметить, что для ресурса с именем resource_x self.property_name и resource.resource_x.property_name являются одинаковыми и считаются рекурсивными ссылками.

Индекс счетчика кластеров

Синтаксис

count.index

Пример:

${count.index == 0 ? "primary" : "secondary"} (возвращает тип узла для кластерных ресурсов)

Ограничения

Использование count.index для выделения ресурсов не поддерживается. Например, не удается выполнить следующее выражение емкости, если оно ссылается на позицию в массиве дисков, созданных во время ввода данных.

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
    properties:
      capacityGb: '${input.disks[count.index].size}'
      count: '${length(input.disks)}'

Условия

Синтаксис

  • В качестве операторов равенства используются == и !=.
  • В качестве реляционных операторов используются <, >, <= и >=.
  • В качестве логических операторов используются &&, || и !.
  • В условиях используется следующий шаблон:

    выражение условия ? выражение истины : выражение лжи

Примеры:

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

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

Арифметические операторы

Синтаксис

В качестве операторов используются +, , /, * и %.

Пример:

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

Объединение строк

Синтаксис

${'ABC' + 'DEF'} эквивалентно ABCDEF.

Операторы «[ ]» и «.»

Обработка операторов «[ ]» и «.» в выражениях унифицирована в соответствии с ECMAScript.

Таким образом, expr.identifier будет эквивалентно expr["identifier"]. Идентификатор используется для создания литерала, значение которого равняется идентификатору, а затем оператор «[ ]» используется с этим значением.

Пример:

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

Кроме того, если свойство содержит пробелы, в качестве разделителей используйте квадратные скобки и двойные кавычки вместо нотации с точкой.

Неправильно:

input.operating system

Правильно:

input["operating system"]

Создание карты

Синтаксис

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

Создание массива

Синтаксис

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

Пример:

${[1,2,3]}

Функции

Синтаксис

${function(arguments...)}

Пример:

${to_lower(resource.app.name)}

Табл. 1. Функции
Функция Описание
abs(number) Абсолютное значение числа
floor(number) Возвращает наибольшее значение (ближайшее к положительной бесконечности), которое меньше аргумента или равно ему и равно математическому целому значению
ceil(number) Возвращает наименьшее значение (ближайшее к отрицательной бесконечности), которое больше или равно аргументу и равно математическому целому значению
to_lower(str) Переводит все символы в строке в нижний регистр
to_upper(str) Переводит все символы в строке в верхний регистр
contains(array, value) Проверяет массив на наличие значение
contains(string, value) Проверяет строку на наличие значения
join(array, delim) Присоединяет массив строк с разделителем и возвращает строку
split(string, delim) Разбивает строку с помощью разделителя и возвращает массив строк
slice(array, begin, end) Возвращает фрагмент массива с начального (begin) до конечного (end) индекса
reverse(array) Обращает записи в массиве
starts_with(subject, prefix) Проверяет, начинается ли строка темы (subject) со строки префикса (prefix)
ends_with(subject, suffix) Проверяет, заканчивается ли строка темы (subject) строкой суффикса (suffix)
replace(string, target, replacement) Заменяет строку, содержащую целевой элемент string, строкой target
substring(string, begin, end) Возвращает подстроку строки с начального (begin) до конечного (end) индекса
format(format, values...) Возвращает отформатированную строку с использованием формата и значений форматировщика класса Java.
keys(map) Возвращает ключи сопоставления
values(map) Возвращает значения сопоставления
merge(map, map) Возвращает объединенной сопоставление
length(string) Возвращает длину строки
length(array) Возвращает длину массива
max(array) Возвращает максимальное значение из массива чисел
min(array) Возвращает минимальное значение из массива чисел
sum(array) Возвращает сумму всех значений из массива чисел
avg(array) Возвращает среднее от всех значений из массива чисел
digest(value, type) Возвращает выборку по значению с использованием поддерживаемого типа (md5, sha1, sha256, sha384, sha512)
to_string(value) Возвращает строковое представление значения
to_number(string) Разбирает строку как число
not_null(array) Возвращает первую запись, которая не является пустой (null)
base64_encode(string) Возвращает значение в кодировке base64
base64_decode(string) Возвращает декодированное значение base64
now() Возвращает текущее время в формате ISO-8601
uuid() Возвращает случайно сгенерированный универсальный уникальный идентификатор
from_json(string) Разбирает строку json
to_json(value) Сериализирует значение как строку json
json_path(value, path) Сравнивает путь со значением с использованием XPath for JSON.
matches(string, regex) Проверяет, совпадает ли строка с регулярным выражением
url_encode(string) Выполняет кодировку строки с использовании спецификации кодировки url
trim(string) Удаляет начальные и конечные пробелы